mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #101984 from ravisantoshgudimetla/fix-ds-units
[daemonSet]: Fix unit tests
This commit is contained in:
commit
9558d0c5c2
@ -440,6 +440,9 @@ func clearExpectations(t *testing.T, manager *daemonSetsController, ds *apps.Dae
|
||||
}
|
||||
|
||||
func TestDeleteFinalStateUnknown(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -455,6 +458,7 @@ func TestDeleteFinalStateUnknown(t *testing.T) {
|
||||
t.Errorf("expected delete of DeletedFinalStateUnknown to enqueue the daemonset but found: %#v", enqueuedKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpectationsOnRecreate(t *testing.T) {
|
||||
@ -662,6 +666,9 @@ func markPodReady(pod *v1.Pod) {
|
||||
|
||||
// DaemonSets without node selectors should launch pods on every node.
|
||||
func TestSimpleDaemonSetLaunchesPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -677,11 +684,15 @@ func TestSimpleDaemonSetLaunchesPods(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 5, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets without node selectors should launch pods on every node by NodeAffinity.
|
||||
func TestSimpleDaemonSetScheduleDaemonSetPodsLaunchesPods(t *testing.T) {
|
||||
nodeNum := 5
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -753,12 +764,15 @@ func TestSimpleDaemonSetScheduleDaemonSetPodsLaunchesPods(t *testing.T) {
|
||||
t.Fatalf("did not find pods on nodes %+v", nodeMap)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Simulate a cluster with 100 nodes, but simulate a limit (like a quota limit)
|
||||
// of 10 pods, and verify that the ds doesn't make 100 create calls per sync pass
|
||||
func TestSimpleDaemonSetPodCreateErrors(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -783,9 +797,13 @@ func TestSimpleDaemonSetPodCreateErrors(t *testing.T) {
|
||||
t.Errorf("Unexpected number of create calls. Expected <= %d, saw %d\n", podControl.FakePodControl.CreateLimit*2, podControl.FakePodControl.CreateCallCount)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDaemonSetPodCreateExpectationsError(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
strategies := updateStrategies()
|
||||
for _, strategy := range strategies {
|
||||
ds := newDaemonSet("foo")
|
||||
@ -813,6 +831,7 @@ func TestDaemonSetPodCreateExpectationsError(t *testing.T) {
|
||||
t.Errorf("Unsatisfied pod creation expectations. Expected %d", creationExpectations)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSimpleDaemonSetUpdatesStatusAfterLaunchingPods(t *testing.T) {
|
||||
@ -853,6 +872,9 @@ func TestSimpleDaemonSetUpdatesStatusAfterLaunchingPods(t *testing.T) {
|
||||
|
||||
// DaemonSets should do nothing if there aren't any nodes
|
||||
func TestNoNodesDoesNothing(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, podControl, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -867,11 +889,15 @@ func TestNoNodesDoesNothing(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets without node selectors should launch on a single node in a
|
||||
// single node cluster.
|
||||
func TestOneNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -890,10 +916,14 @@ func TestOneNodeDaemonLaunchesPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets should place onto NotReady nodes
|
||||
func TestNotReadyNodeDaemonDoesLaunchPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -917,6 +947,7 @@ func TestNotReadyNodeDaemonDoesLaunchPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func resourcePodSpec(nodeName, memory, cpu string) v1.PodSpec {
|
||||
@ -956,6 +987,9 @@ func allocatableResources(memory, cpu string) v1.ResourceList {
|
||||
|
||||
// DaemonSets should not unschedule a daemonset pod from a node with insufficient free resource
|
||||
func TestInsufficientCapacityNodeDaemonDoesNotUnscheduleRunningPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
podSpec := resourcePodSpec("too-much-mem", "75M", "75m")
|
||||
podSpec.NodeName = "too-much-mem"
|
||||
@ -991,6 +1025,7 @@ func TestInsufficientCapacityNodeDaemonDoesNotUnscheduleRunningPod(t *testing.T)
|
||||
t.Fatalf("unexpected UpdateStrategy %+v", strategy)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets should only place onto nodes with sufficient free resource and matched node selector
|
||||
@ -1028,6 +1063,9 @@ func TestInsufficientCapacityNodeSufficientCapacityWithNodeLabelDaemonLaunchPod(
|
||||
|
||||
// DaemonSet should launch a pod on a node with taint NetworkUnavailable condition.
|
||||
func TestNetworkUnavailableNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("simple")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1051,10 +1089,14 @@ func TestNetworkUnavailableNodeDaemonLaunchesPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets not take any actions when being deleted
|
||||
func TestDontDoAnythingIfBeingDeleted(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
podSpec := resourcePodSpec("not-too-much-mem", "75M", "75m")
|
||||
ds := newDaemonSet("foo")
|
||||
@ -1084,9 +1126,13 @@ func TestDontDoAnythingIfBeingDeleted(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDontDoAnythingIfBeingDeletedRace(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
// Bare client says it IS deleted.
|
||||
ds := newDaemonSet("foo")
|
||||
@ -1116,6 +1162,7 @@ func TestDontDoAnythingIfBeingDeletedRace(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test that if the node is already scheduled with a pod using a host port
|
||||
@ -1123,6 +1170,9 @@ func TestDontDoAnythingIfBeingDeletedRace(t *testing.T) {
|
||||
//
|
||||
// Issue: https://github.com/kubernetes/kubernetes/issues/22309
|
||||
func TestPortConflictWithSameDaemonPodDoesNotDeletePod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
podSpec := v1.PodSpec{
|
||||
NodeName: "port-conflict",
|
||||
@ -1155,10 +1205,14 @@ func TestPortConflictWithSameDaemonPodDoesNotDeletePod(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets should place onto nodes that would not cause port conflicts
|
||||
func TestNoPortConflictNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
podSpec1 := v1.PodSpec{
|
||||
NodeName: "no-port-conflict",
|
||||
@ -1200,6 +1254,7 @@ func TestNoPortConflictNodeDaemonLaunchesPod(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSetController should not sync DaemonSets with empty pod selectors.
|
||||
@ -1215,6 +1270,9 @@ func TestPodIsNotDeletedByDaemonsetWithEmptyLabelSelector(t *testing.T) {
|
||||
// this case even though it's empty pod selector matches all pods. The DaemonSetController
|
||||
// should detect this misconfiguration and choose not to sync the DaemonSet. We should
|
||||
// not observe a deletion of the pod on node1.
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1250,10 +1308,14 @@ func TestPodIsNotDeletedByDaemonsetWithEmptyLabelSelector(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Controller should not create pods on nodes which have daemon pods, and should remove excess pods from nodes that have extra pods.
|
||||
func TestDealsWithExistingPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1272,10 +1334,14 @@ func TestDealsWithExistingPods(t *testing.T) {
|
||||
addPods(manager.podStore, "node-4", simpleDaemonSetLabel2, ds, 2)
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 2, 5, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Daemon with node selector should launch pods on nodes matching selector.
|
||||
func TestSelectorDaemonLaunchesPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
daemon := newDaemonSet("foo")
|
||||
daemon.Spec.UpdateStrategy = *strategy
|
||||
@ -1292,10 +1358,14 @@ func TestSelectorDaemonLaunchesPods(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, daemon, podControl, 3, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Daemon with node selector should delete pods from nodes that do not satisfy selector.
|
||||
func TestSelectorDaemonDeletesUnselectedPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1316,10 +1386,14 @@ func TestSelectorDaemonDeletesUnselectedPods(t *testing.T) {
|
||||
addPods(manager.podStore, "node-4", simpleDaemonSetLabel, ds, 1)
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 5, 4, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node selector should launch pods on nodes matching selector, but also deal with existing pods on nodes.
|
||||
func TestSelectorDaemonDealsWithExistingPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1344,10 +1418,14 @@ func TestSelectorDaemonDealsWithExistingPods(t *testing.T) {
|
||||
addPods(manager.podStore, "node-9", simpleDaemonSetLabel2, ds, 1)
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 3, 20, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node selector which does not match any node labels should not launch pods.
|
||||
func TestBadSelectorDaemonDoesNothing(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, podControl, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -1364,10 +1442,14 @@ func TestBadSelectorDaemonDoesNothing(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node name should launch pod on node with corresponding name.
|
||||
func TestNameDaemonSetLaunchesPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1383,10 +1465,14 @@ func TestNameDaemonSetLaunchesPods(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node name that does not exist should not launch pods.
|
||||
func TestBadNameDaemonSetDoesNothing(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1402,10 +1488,14 @@ func TestBadNameDaemonSetDoesNothing(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node selector, and node name, matching a node, should launch a pod on the node.
|
||||
func TestNameAndSelectorDaemonSetLaunchesPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1423,10 +1513,14 @@ func TestNameAndSelectorDaemonSetLaunchesPods(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node selector that matches some nodes, and node name that matches a different node, should do nothing.
|
||||
func TestInconsistentNameSelectorDaemonSetDoesNothing(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1444,6 +1538,7 @@ func TestInconsistentNameSelectorDaemonSetDoesNothing(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet with node selector, matching some nodes, should launch pods on all the nodes.
|
||||
@ -1465,6 +1560,9 @@ func TestSelectorDaemonSetLaunchesPods(t *testing.T) {
|
||||
|
||||
// Daemon with node affinity should launch pods on nodes matching affinity.
|
||||
func TestNodeAffinityDaemonLaunchesPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
daemon := newDaemonSet("foo")
|
||||
daemon.Spec.UpdateStrategy = *strategy
|
||||
@ -1498,9 +1596,13 @@ func TestNodeAffinityDaemonLaunchesPods(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, daemon, podControl, 3, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNumberReadyStatus(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1543,9 +1645,13 @@ func TestNumberReadyStatus(t *testing.T) {
|
||||
t.Errorf("Wrong daemon %s status: %v", updated.Name, updated.Status)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestObservedGeneration(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1577,6 +1683,7 @@ func TestObservedGeneration(t *testing.T) {
|
||||
t.Errorf("Wrong ObservedGeneration for daemon %s in status. Expected %d, got %d", updated.Name, ds.Generation, updated.Status.ObservedGeneration)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet controller should kill all failed pods and create at most 1 pod on every node.
|
||||
@ -1615,6 +1722,9 @@ func TestDaemonKillFailedPods(t *testing.T) {
|
||||
|
||||
// DaemonSet controller needs to backoff when killing failed pods to avoid hot looping and fighting with kubelet.
|
||||
func TestDaemonKillFailedPodsBackoff(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
t.Run(string(strategy.Type), func(t *testing.T) {
|
||||
ds := newDaemonSet("foo")
|
||||
@ -1680,11 +1790,15 @@ func TestDaemonKillFailedPodsBackoff(t *testing.T) {
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 1, 1)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Daemonset should not remove a running pod from a node if the pod doesn't
|
||||
// tolerate the nodes NoSchedule taint
|
||||
func TestNoScheduleTaintedDoesntEvicitRunningIntolerantPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("intolerant")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1710,11 +1824,15 @@ func TestNoScheduleTaintedDoesntEvicitRunningIntolerantPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Daemonset should remove a running pod from a node if the pod doesn't
|
||||
// tolerate the nodes NoExecute taint
|
||||
func TestNoExecuteTaintedDoesEvicitRunningIntolerantPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("intolerant")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1740,10 +1858,14 @@ func TestNoExecuteTaintedDoesEvicitRunningIntolerantPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 1, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should not launch a pod on a tainted node when the pod doesn't tolerate that taint.
|
||||
func TestTaintedNodeDaemonDoesNotLaunchIntolerantPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("intolerant")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1765,10 +1887,14 @@ func TestTaintedNodeDaemonDoesNotLaunchIntolerantPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should launch a pod on a tainted node when the pod can tolerate that taint.
|
||||
func TestTaintedNodeDaemonLaunchesToleratePod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("tolerate")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1791,10 +1917,14 @@ func TestTaintedNodeDaemonLaunchesToleratePod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should launch a pod on a not ready node with taint notReady:NoExecute.
|
||||
func TestNotReadyNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("simple")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1819,10 +1949,14 @@ func TestNotReadyNodeDaemonLaunchesPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should launch a pod on an unreachable node with taint unreachable:NoExecute.
|
||||
func TestUnreachableNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("simple")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1847,10 +1981,14 @@ func TestUnreachableNodeDaemonLaunchesPod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should launch a pod on an untainted node when the pod has tolerations.
|
||||
func TestNodeDaemonLaunchesToleratePod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("tolerate")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1867,10 +2005,14 @@ func TestNodeDaemonLaunchesToleratePod(t *testing.T) {
|
||||
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSet should launch a pod on a not ready node with taint notReady:NoExecute.
|
||||
func TestDaemonSetRespectsTermination(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1893,6 +2035,7 @@ func TestDaemonSetRespectsTermination(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setNodeTaint(node *v1.Node, taints []v1.Taint) {
|
||||
@ -1905,6 +2048,9 @@ func setDaemonSetToleration(ds *apps.DaemonSet, tolerations []v1.Toleration) {
|
||||
|
||||
// DaemonSet should launch a pod even when the node with MemoryPressure/DiskPressure/PIDPressure taints.
|
||||
func TestTaintPressureNodeDaemonLaunchesPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("critical")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -1935,6 +2081,7 @@ func TestTaintPressureNodeDaemonLaunchesPod(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 1, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setDaemonSetCritical(ds *apps.DaemonSet) {
|
||||
@ -2218,6 +2365,9 @@ func TestNodeShouldRunDaemonPod(t *testing.T) {
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
node := newNode("test-node", simpleDaemonSetLabel)
|
||||
node.Status.Conditions = append(node.Status.Conditions, c.nodeCondition...)
|
||||
@ -2244,6 +2394,7 @@ func TestNodeShouldRunDaemonPod(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets should be resynced when node labels or taints changed
|
||||
@ -2325,6 +2476,9 @@ func TestUpdateNode(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, c := range cases {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, podControl, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2363,6 +2517,7 @@ func TestUpdateNode(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DaemonSets should be resynced when non-daemon pods was deleted.
|
||||
@ -2506,6 +2661,9 @@ func TestDeleteNoDaemonPod(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, podControl, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2540,9 +2698,13 @@ func TestDeleteNoDaemonPod(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteUnscheduledPodForNotExistingNode(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -2582,9 +2744,13 @@ func TestDeleteUnscheduledPodForNotExistingNode(t *testing.T) {
|
||||
}
|
||||
expectSyncDaemonSets(t, manager, ds, podControl, 0, 1, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetNodesToDaemonPods(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -2654,6 +2820,7 @@ func TestGetNodesToDaemonPods(t *testing.T) {
|
||||
t.Errorf("unexpected pod %v was returned", podName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddNode(t *testing.T) {
|
||||
@ -2686,6 +2853,9 @@ func TestAddNode(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAddPod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2732,9 +2902,13 @@ func TestAddPod(t *testing.T) {
|
||||
t.Errorf("queue.Get() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddPodOrphan(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2770,9 +2944,13 @@ func TestAddPodOrphan(t *testing.T) {
|
||||
t.Errorf("getQueuedKeys() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2823,9 +3001,13 @@ func TestUpdatePod(t *testing.T) {
|
||||
t.Errorf("queue.Get() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePodOrphanSameLabels(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2852,9 +3034,13 @@ func TestUpdatePodOrphanSameLabels(t *testing.T) {
|
||||
t.Fatalf("queue.Len() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePodOrphanWithNewLabels(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2885,9 +3071,13 @@ func TestUpdatePodOrphanWithNewLabels(t *testing.T) {
|
||||
t.Errorf("getQueuedKeys() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePodChangeControllerRef(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
ds := newDaemonSet("foo")
|
||||
ds.Spec.UpdateStrategy = *strategy
|
||||
@ -2915,9 +3105,13 @@ func TestUpdatePodChangeControllerRef(t *testing.T) {
|
||||
t.Fatalf("queue.Len() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePodControllerRefRemoved(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2945,9 +3139,13 @@ func TestUpdatePodControllerRefRemoved(t *testing.T) {
|
||||
t.Fatalf("queue.Len() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeletePod(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -2994,9 +3192,13 @@ func TestDeletePod(t *testing.T) {
|
||||
t.Errorf("queue.Get() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeletePodOrphan(t *testing.T) {
|
||||
dsMaxSurgeFeatureFlags := []bool{false, true}
|
||||
for _, isEnabled := range dsMaxSurgeFeatureFlags {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DaemonSetUpdateSurge, isEnabled)()
|
||||
for _, strategy := range updateStrategies() {
|
||||
manager, _, _, err := newTestController()
|
||||
if err != nil {
|
||||
@ -3028,6 +3230,7 @@ func TestDeletePodOrphan(t *testing.T) {
|
||||
t.Fatalf("queue.Len() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func bumpResourceVersion(obj metav1.Object) {
|
||||
|
Loading…
Reference in New Issue
Block a user