Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
31cb2663
Commit
31cb2663
authored
Feb 23, 2017
by
Chao Xu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tests
parent
c3baf402
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
208 additions
and
36 deletions
+208
-36
metrics_util.go
test/e2e/framework/metrics_util.go
+3
-3
garbage_collector.go
test/e2e/garbage_collector.go
+0
-0
garbage_collector_test.go
test/integration/garbagecollector/garbage_collector_test.go
+189
-17
replicaset_test.go
test/integration/replicaset/replicaset_test.go
+8
-8
replicationcontroller_test.go
...ation/replicationcontroller/replicationcontroller_test.go
+8
-8
No files found.
test/e2e/framework/metrics_util.go
View file @
31cb2663
...
...
@@ -117,9 +117,9 @@ var InterestingApiServerMetrics = []string{
}
var
InterestingControllerManagerMetrics
=
[]
string
{
"garbage_collector_event_
processing_latency_microseconds
"
,
"garbage_collector_dirty_
processing_latency_microseconds
"
,
"garbage_collector_or
phan_processing_latency_microseconds
"
,
"garbage_collector_event_
queue_latency
"
,
"garbage_collector_dirty_
queue_latency
"
,
"garbage_collector_or
han_queue_latency
"
,
}
var
InterestingKubeletMetrics
=
[]
string
{
...
...
test/e2e/garbage_collector.go
View file @
31cb2663
This diff is collapsed.
Click to expand it.
test/integration/garbagecollector/garbage_collector_test.go
View file @
31cb2663
...
...
@@ -28,8 +28,8 @@ import (
"time"
"github.com/golang/glog"
dto
"github.com/prometheus/client_model/go"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/types"
...
...
@@ -46,6 +46,11 @@ import (
"k8s.io/kubernetes/test/integration/framework"
)
func
getForegroundOptions
()
*
metav1
.
DeleteOptions
{
policy
:=
metav1
.
DeletePropagationForeground
return
&
metav1
.
DeleteOptions
{
PropagationPolicy
:
&
policy
}
}
func
getOrphanOptions
()
*
metav1
.
DeleteOptions
{
var
trueVar
=
true
return
&
metav1
.
DeleteOptions
{
OrphanDependents
:
&
trueVar
}
...
...
@@ -296,7 +301,7 @@ func setupRCsPods(t *testing.T, gc *garbagecollector.GarbageCollector, clientSet
}
podUIDs
=
append
(
podUIDs
,
pod
.
ObjectMeta
.
UID
)
}
orphan
:=
(
options
!=
nil
&&
options
.
OrphanDependents
!=
nil
&&
*
options
.
OrphanDependents
)
||
(
options
==
nil
&&
len
(
initialFinalizers
)
!=
0
&&
initialFinalizers
[
0
]
==
metav1
.
FinalizerOrphan
)
orphan
:=
(
options
!=
nil
&&
options
.
OrphanDependents
!=
nil
&&
*
options
.
OrphanDependents
)
||
(
options
==
nil
&&
len
(
initialFinalizers
)
!=
0
&&
initialFinalizers
[
0
]
==
metav1
.
FinalizerOrphan
Dependents
)
// if we intend to orphan the pods, we need wait for the gc to observe the
// creation of the pods, otherwise if the deletion of RC is observed before
// the creation of the pods, the pods will not be orphaned.
...
...
@@ -355,9 +360,9 @@ func TestStressingCascadingDeletion(t *testing.T) {
// rc is created with empty finalizers, deleted with nil delete options, pods will remain.
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection1-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{},
nil
,
&
wg
,
rcUIDs
)
// rc is created with the orphan finalizer, deleted with nil options, pods will remain.
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection2-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{
metav1
.
FinalizerOrphan
},
nil
,
&
wg
,
rcUIDs
)
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection2-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{
metav1
.
FinalizerOrphan
Dependents
},
nil
,
&
wg
,
rcUIDs
)
// rc is created with the orphan finalizer, deleted with DeleteOptions.OrphanDependents=false, pods will be deleted.
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection3-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{
metav1
.
FinalizerOrphan
},
getNonOrphanOptions
(),
&
wg
,
rcUIDs
)
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection3-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{
metav1
.
FinalizerOrphan
Dependents
},
getNonOrphanOptions
(),
&
wg
,
rcUIDs
)
// rc is created with empty finalizers, deleted with DeleteOptions.OrphanDependents=true, pods will remain.
go
setupRCsPods
(
t
,
gc
,
clientSet
,
"collection4-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
[]
string
{},
getOrphanOptions
(),
&
wg
,
rcUIDs
)
}
...
...
@@ -395,19 +400,6 @@ func TestStressingCascadingDeletion(t *testing.T) {
if
gc
.
GraphHasUID
(
uids
)
{
t
.
Errorf
(
"Expect all nodes representing replication controllers are removed from the Propagator's graph"
)
}
metric
:=
&
dto
.
Metric
{}
garbagecollector
.
EventProcessingLatency
.
Write
(
metric
)
count
:=
float64
(
metric
.
Summary
.
GetSampleCount
())
sum
:=
metric
.
Summary
.
GetSampleSum
()
t
.
Logf
(
"Average time spent in GC's eventQueue is %.1f microseconds"
,
sum
/
count
)
garbagecollector
.
DirtyProcessingLatency
.
Write
(
metric
)
count
=
float64
(
metric
.
Summary
.
GetSampleCount
())
sum
=
metric
.
Summary
.
GetSampleSum
()
t
.
Logf
(
"Average time spent in GC's dirtyQueue is %.1f microseconds"
,
sum
/
count
)
garbagecollector
.
OrphanProcessingLatency
.
Write
(
metric
)
count
=
float64
(
metric
.
Summary
.
GetSampleCount
())
sum
=
metric
.
Summary
.
GetSampleSum
()
t
.
Logf
(
"Average time spent in GC's orphanQueue is %.1f microseconds"
,
sum
/
count
)
}
func
TestOrphaning
(
t
*
testing
.
T
)
{
...
...
@@ -480,3 +472,183 @@ func TestOrphaning(t *testing.T) {
}
}
}
func
TestSolidOwnerDoesNotBlockWaitingOwner
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground1"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
podClient
:=
clientSet
.
Core
()
.
Pods
(
ns
.
Name
)
rcClient
:=
clientSet
.
Core
()
.
ReplicationControllers
(
ns
.
Name
)
// create the RC with the orphan finalizer set
toBeDeletedRC
,
err
:=
rcClient
.
Create
(
newOwnerRC
(
toBeDeletedRCName
,
ns
.
Name
))
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create replication controller: %v"
,
err
)
}
remainingRC
,
err
:=
rcClient
.
Create
(
newOwnerRC
(
remainingRCName
,
ns
.
Name
))
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create replication controller: %v"
,
err
)
}
trueVar
:=
true
pod
:=
newPod
(
"pod"
,
ns
.
Name
,
[]
metav1
.
OwnerReference
{
{
UID
:
toBeDeletedRC
.
ObjectMeta
.
UID
,
Name
:
toBeDeletedRC
.
Name
,
BlockOwnerDeletion
:
&
trueVar
},
{
UID
:
remainingRC
.
ObjectMeta
.
UID
,
Name
:
remainingRC
.
Name
},
})
_
,
err
=
podClient
.
Create
(
pod
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create Pod: %v"
,
err
)
}
stopCh
:=
make
(
chan
struct
{})
go
gc
.
Run
(
5
,
stopCh
)
defer
close
(
stopCh
)
err
=
rcClient
.
Delete
(
toBeDeletedRCName
,
getForegroundOptions
())
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to delete the rc: %v"
,
err
)
}
// verify the toBeDeleteRC is deleted
if
err
:=
wait
.
PollImmediate
(
5
*
time
.
Second
,
30
*
time
.
Second
,
func
()
(
bool
,
error
)
{
_
,
err
:=
rcClient
.
Get
(
toBeDeletedRC
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
if
errors
.
IsNotFound
(
err
)
{
return
true
,
nil
}
return
false
,
err
}
return
false
,
nil
});
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
// verify pods don't have the toBeDeleteRC as an owner anymore
pod
,
err
=
podClient
.
Get
(
"pod"
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to list pods: %v"
,
err
)
}
if
len
(
pod
.
ObjectMeta
.
OwnerReferences
)
!=
1
{
t
.
Errorf
(
"expect pod to have only one ownerReference: got %#v"
,
pod
.
ObjectMeta
.
OwnerReferences
)
}
else
if
pod
.
ObjectMeta
.
OwnerReferences
[
0
]
.
Name
!=
remainingRC
.
Name
{
t
.
Errorf
(
"expect pod to have an ownerReference pointing to %s, got %#v"
,
remainingRC
.
Name
,
pod
.
ObjectMeta
.
OwnerReferences
)
}
}
func
TestNonBlockingOwnerRefDoesNotBlock
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground2"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
podClient
:=
clientSet
.
Core
()
.
Pods
(
ns
.
Name
)
rcClient
:=
clientSet
.
Core
()
.
ReplicationControllers
(
ns
.
Name
)
// create the RC with the orphan finalizer set
toBeDeletedRC
,
err
:=
rcClient
.
Create
(
newOwnerRC
(
toBeDeletedRCName
,
ns
.
Name
))
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create replication controller: %v"
,
err
)
}
// BlockingOwnerDeletion is not set
pod1
:=
newPod
(
"pod1"
,
ns
.
Name
,
[]
metav1
.
OwnerReference
{
{
UID
:
toBeDeletedRC
.
ObjectMeta
.
UID
,
Name
:
toBeDeletedRC
.
Name
},
})
// adding finalizer that no controller handles, so that the pod won't be deleted
pod1
.
ObjectMeta
.
Finalizers
=
[]
string
{
"x/y"
}
// BlockingOwnerDeletion is false
falseVar
:=
false
pod2
:=
newPod
(
"pod2"
,
ns
.
Name
,
[]
metav1
.
OwnerReference
{
{
UID
:
toBeDeletedRC
.
ObjectMeta
.
UID
,
Name
:
toBeDeletedRC
.
Name
,
BlockOwnerDeletion
:
&
falseVar
},
})
// adding finalizer that no controller handles, so that the pod won't be deleted
pod2
.
ObjectMeta
.
Finalizers
=
[]
string
{
"x/y"
}
_
,
err
=
podClient
.
Create
(
pod1
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create Pod: %v"
,
err
)
}
_
,
err
=
podClient
.
Create
(
pod2
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create Pod: %v"
,
err
)
}
stopCh
:=
make
(
chan
struct
{})
go
gc
.
Run
(
5
,
stopCh
)
defer
close
(
stopCh
)
err
=
rcClient
.
Delete
(
toBeDeletedRCName
,
getForegroundOptions
())
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to delete the rc: %v"
,
err
)
}
// verify the toBeDeleteRC is deleted
if
err
:=
wait
.
PollImmediate
(
5
*
time
.
Second
,
30
*
time
.
Second
,
func
()
(
bool
,
error
)
{
_
,
err
:=
rcClient
.
Get
(
toBeDeletedRC
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
if
errors
.
IsNotFound
(
err
)
{
return
true
,
nil
}
return
false
,
err
}
return
false
,
nil
});
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
// verify pods are still there
pods
,
err
:=
podClient
.
List
(
metav1
.
ListOptions
{})
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to list pods: %v"
,
err
)
}
if
len
(
pods
.
Items
)
!=
2
{
t
.
Errorf
(
"expect there to be 2 pods, got %#v"
,
pods
.
Items
)
}
}
func
TestBlockingOwnerRefDoesBlock
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground2"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
podClient
:=
clientSet
.
Core
()
.
Pods
(
ns
.
Name
)
rcClient
:=
clientSet
.
Core
()
.
ReplicationControllers
(
ns
.
Name
)
// create the RC with the orphan finalizer set
toBeDeletedRC
,
err
:=
rcClient
.
Create
(
newOwnerRC
(
toBeDeletedRCName
,
ns
.
Name
))
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create replication controller: %v"
,
err
)
}
trueVar
:=
true
pod
:=
newPod
(
"pod"
,
ns
.
Name
,
[]
metav1
.
OwnerReference
{
{
UID
:
toBeDeletedRC
.
ObjectMeta
.
UID
,
Name
:
toBeDeletedRC
.
Name
,
BlockOwnerDeletion
:
&
trueVar
},
})
// adding finalizer that no controller handles, so that the pod won't be deleted
pod
.
ObjectMeta
.
Finalizers
=
[]
string
{
"x/y"
}
_
,
err
=
podClient
.
Create
(
pod
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create Pod: %v"
,
err
)
}
stopCh
:=
make
(
chan
struct
{})
go
gc
.
Run
(
5
,
stopCh
)
defer
close
(
stopCh
)
err
=
rcClient
.
Delete
(
toBeDeletedRCName
,
getForegroundOptions
())
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to delete the rc: %v"
,
err
)
}
time
.
Sleep
(
30
*
time
.
Second
)
// verify the toBeDeleteRC is NOT deleted
_
,
err
=
rcClient
.
Get
(
toBeDeletedRC
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
// verify pods are still there
pods
,
err
:=
podClient
.
List
(
metav1
.
ListOptions
{})
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to list pods: %v"
,
err
)
}
if
len
(
pods
.
Items
)
!=
1
{
t
.
Errorf
(
"expect there to be 1 pods, got %#v"
,
pods
.
Items
)
}
}
test/integration/replicaset/replicaset_test.go
View file @
31cb2663
...
...
@@ -169,7 +169,7 @@ func waitToObservePods(t *testing.T, podInformer cache.SharedIndexInformer, podN
}
func
TestAdoption
(
t
*
testing
.
T
)
{
var
trueVar
=
true
boolPtr
:=
func
(
b
bool
)
*
bool
{
return
&
b
}
testCases
:=
[]
struct
{
name
string
existingOwnerReferences
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
...
...
@@ -181,7 +181,7 @@ func TestAdoption(t *testing.T) {
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
}}
},
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
),
BlockOwnerDeletion
:
boolPtr
(
true
)
}}
},
},
{
...
...
@@ -190,29 +190,29 @@ func TestAdoption(t *testing.T) {
return
[]
metav1
.
OwnerReference
{}
},
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
),
BlockOwnerDeletion
:
boolPtr
(
true
)
}}
},
},
{
"pod refers rs as a controller"
,
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
)
}}
},
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
)
}}
},
},
{
"pod refers other rs as the controller, refers the rs as an owner"
,
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{
{
UID
:
"1"
,
Name
:
"anotherRS"
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
},
{
UID
:
"1"
,
Name
:
"anotherRS"
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
)
},
{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
},
}
},
func
(
rs
*
v1beta1
.
ReplicaSet
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{
{
UID
:
"1"
,
Name
:
"anotherRS"
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
&
trueVar
},
{
UID
:
"1"
,
Name
:
"anotherRS"
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
,
Controller
:
boolPtr
(
true
)
},
{
UID
:
rs
.
UID
,
Name
:
rs
.
Name
,
APIVersion
:
"extensions/v1beta1"
,
Kind
:
"ReplicaSet"
},
}
},
...
...
@@ -255,7 +255,7 @@ func TestAdoption(t *testing.T) {
return
false
,
nil
}
});
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
f
(
"test %q failed: %v"
,
tc
.
name
,
err
)
}
close
(
stopCh
)
}
...
...
test/integration/replicationcontroller/replicationcontroller_test.go
View file @
31cb2663
...
...
@@ -158,7 +158,7 @@ func waitToObservePods(t *testing.T, podInformer cache.SharedIndexInformer, podN
}
func
TestAdoption
(
t
*
testing
.
T
)
{
var
trueVar
=
true
boolPtr
:=
func
(
b
bool
)
*
bool
{
return
&
b
}
testCases
:=
[]
struct
{
name
string
existingOwnerReferences
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
...
...
@@ -170,7 +170,7 @@ func TestAdoption(t *testing.T) {
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
}}
},
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
),
BlockOwnerDeletion
:
boolPtr
(
true
)
}}
},
},
{
...
...
@@ -179,29 +179,29 @@ func TestAdoption(t *testing.T) {
return
[]
metav1
.
OwnerReference
{}
},
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
),
BlockOwnerDeletion
:
boolPtr
(
true
)
}}
},
},
{
"pod refers rc as a controller"
,
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
)
}}
},
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
}}
return
[]
metav1
.
OwnerReference
{{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
)
}}
},
},
{
"pod refers other rc as the controller, refers the rc as an owner"
,
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{
{
UID
:
"1"
,
Name
:
"anotherRC"
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
},
{
UID
:
"1"
,
Name
:
"anotherRC"
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
)
},
{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
},
}
},
func
(
rc
*
v1
.
ReplicationController
)
[]
metav1
.
OwnerReference
{
return
[]
metav1
.
OwnerReference
{
{
UID
:
"1"
,
Name
:
"anotherRC"
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
&
trueVar
},
{
UID
:
"1"
,
Name
:
"anotherRC"
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
,
Controller
:
boolPtr
(
true
)
},
{
UID
:
rc
.
UID
,
Name
:
rc
.
Name
,
APIVersion
:
"v1"
,
Kind
:
"ReplicationController"
},
}
},
...
...
@@ -243,7 +243,7 @@ func TestAdoption(t *testing.T) {
return
false
,
nil
}
});
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
f
(
"test %q failed: %v"
,
tc
.
name
,
err
)
}
close
(
stopCh
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment