@@ -643,7 +643,7 @@ func TestDeleteNode(t *testing.T) {
643
643
sd := NewScaleDown (& context , clusterStateRegistry )
644
644
645
645
// attempt delete
646
- result := sd .deleteNode (n1 , pods , provider .GetNodeGroup ("ng1" ))
646
+ result := sd .deleteNode (n1 , pods , [] * apiv1. Pod {}, provider .GetNodeGroup ("ng1" ))
647
647
648
648
// verify
649
649
if scenario .expectedDeletion {
@@ -672,7 +672,9 @@ func TestDrainNode(t *testing.T) {
672
672
673
673
p1 := BuildTestPod ("p1" , 100 , 0 )
674
674
p2 := BuildTestPod ("p2" , 300 , 0 )
675
+ d1 := BuildTestPod ("d1" , 150 , 0 )
675
676
n1 := BuildTestNode ("n1" , 1000 , 1000 )
677
+
676
678
SetNodeReadyState (n1 , true , time.Time {})
677
679
678
680
fakeClient .Fake .AddReactor ("get" , "pods" , func (action core.Action ) (bool , runtime.Object , error ) {
@@ -690,14 +692,17 @@ func TestDrainNode(t *testing.T) {
690
692
deletedPods <- eviction .Name
691
693
return true , nil , nil
692
694
})
693
- _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
695
+ _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 }, [] * apiv1. Pod { d1 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
694
696
assert .NoError (t , err )
695
697
deleted := make ([]string , 0 )
696
698
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
697
699
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
700
+ deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
701
+
698
702
sort .Strings (deleted )
699
- assert .Equal (t , p1 .Name , deleted [0 ])
700
- assert .Equal (t , p2 .Name , deleted [1 ])
703
+ assert .Equal (t , d1 .Name , deleted [0 ])
704
+ assert .Equal (t , p1 .Name , deleted [1 ])
705
+ assert .Equal (t , p2 .Name , deleted [2 ])
701
706
}
702
707
703
708
func TestDrainNodeWithRescheduled (t * testing.T ) {
@@ -733,7 +738,7 @@ func TestDrainNodeWithRescheduled(t *testing.T) {
733
738
deletedPods <- eviction .Name
734
739
return true , nil , nil
735
740
})
736
- _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
741
+ _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 }, [] * apiv1. Pod {}, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
737
742
assert .NoError (t , err )
738
743
deleted := make ([]string , 0 )
739
744
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
@@ -755,6 +760,7 @@ func TestDrainNodeWithRetries(t *testing.T) {
755
760
p1 := BuildTestPod ("p1" , 100 , 0 )
756
761
p2 := BuildTestPod ("p2" , 300 , 0 )
757
762
p3 := BuildTestPod ("p3" , 300 , 0 )
763
+ d1 := BuildTestPod ("d1" , 150 , 0 )
758
764
n1 := BuildTestNode ("n1" , 1000 , 1000 )
759
765
SetNodeReadyState (n1 , true , time.Time {})
760
766
@@ -782,16 +788,62 @@ func TestDrainNodeWithRetries(t *testing.T) {
782
788
return true , nil , fmt .Errorf ("too many concurrent evictions" )
783
789
}
784
790
})
785
- _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
791
+ _ , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 }, [] * apiv1. Pod { d1 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 5 * time .Second , 0 * time .Second , PodEvictionHeadroom )
786
792
assert .NoError (t , err )
787
793
deleted := make ([]string , 0 )
788
794
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
789
795
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
790
796
deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
797
+ deleted = append (deleted , utils .GetStringFromChan (deletedPods ))
791
798
sort .Strings (deleted )
792
- assert .Equal (t , p1 .Name , deleted [0 ])
793
- assert .Equal (t , p2 .Name , deleted [1 ])
794
- assert .Equal (t , p3 .Name , deleted [2 ])
799
+ assert .Equal (t , d1 .Name , deleted [0 ])
800
+ assert .Equal (t , p1 .Name , deleted [1 ])
801
+ assert .Equal (t , p2 .Name , deleted [2 ])
802
+ assert .Equal (t , p3 .Name , deleted [3 ])
803
+ }
804
+
805
+ func TestDrainNodeDaemonSetEvictionFailure (t * testing.T ) {
806
+ fakeClient := & fake.Clientset {}
807
+
808
+ p1 := BuildTestPod ("p1" , 100 , 0 )
809
+ p2 := BuildTestPod ("p2" , 300 , 0 )
810
+ d1 := BuildTestPod ("d1" , 150 , 0 )
811
+ d2 := BuildTestPod ("d2" , 250 , 0 )
812
+ n1 := BuildTestNode ("n1" , 1000 , 1000 )
813
+ e1 := fmt .Errorf ("eviction_error: d1" )
814
+ e2 := fmt .Errorf ("eviction_error: d2" )
815
+
816
+ fakeClient .Fake .AddReactor ("get" , "pods" , func (action core.Action ) (bool , runtime.Object , error ) {
817
+ return true , nil , errors .NewNotFound (apiv1 .Resource ("pod" ), "whatever" )
818
+ })
819
+ fakeClient .Fake .AddReactor ("create" , "pods" , func (action core.Action ) (bool , runtime.Object , error ) {
820
+ createAction := action .(core.CreateAction )
821
+ if createAction == nil {
822
+ return false , nil , nil
823
+ }
824
+ eviction := createAction .GetObject ().(* policyv1.Eviction )
825
+ if eviction == nil {
826
+ return false , nil , nil
827
+ }
828
+ if eviction .Name == "d1" {
829
+ return true , nil , e1
830
+ }
831
+ if eviction .Name == "d2" {
832
+ return true , nil , e2
833
+ }
834
+ return true , nil , nil
835
+ })
836
+ evictionResults , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 }, []* apiv1.Pod {d1 , d2 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 0 * time .Second , 0 * time .Second , PodEvictionHeadroom )
837
+ assert .NoError (t , err )
838
+ assert .Equal (t , 2 , len (evictionResults ))
839
+ assert .Equal (t , p1 , evictionResults ["p1" ].Pod )
840
+ assert .Equal (t , p2 , evictionResults ["p2" ].Pod )
841
+ assert .NoError (t , evictionResults ["p1" ].Err )
842
+ assert .NoError (t , evictionResults ["p2" ].Err )
843
+ assert .False (t , evictionResults ["p1" ].TimedOut )
844
+ assert .False (t , evictionResults ["p2" ].TimedOut )
845
+ assert .True (t , evictionResults ["p1" ].WasEvictionSuccessful ())
846
+ assert .True (t , evictionResults ["p2" ].WasEvictionSuccessful ())
795
847
}
796
848
797
849
func TestDrainNodeEvictionFailure (t * testing.T ) {
@@ -825,7 +877,7 @@ func TestDrainNodeEvictionFailure(t *testing.T) {
825
877
return true , nil , nil
826
878
})
827
879
828
- evictionResults , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 , p4 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 0 * time .Second , 0 * time .Second , PodEvictionHeadroom )
880
+ evictionResults , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 , p4 }, [] * apiv1. Pod {}, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 20 , 0 * time .Second , 0 * time .Second , PodEvictionHeadroom )
829
881
assert .Error (t , err )
830
882
assert .Equal (t , 4 , len (evictionResults ))
831
883
assert .Equal (t , * p1 , * evictionResults ["p1" ].Pod )
@@ -874,7 +926,7 @@ func TestDrainNodeDisappearanceFailure(t *testing.T) {
874
926
return true , nil , nil
875
927
})
876
928
877
- evictionResults , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 , p4 }, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 0 , 0 * time .Second , 0 * time .Second , 0 * time .Second )
929
+ evictionResults , err := drainNode (n1 , []* apiv1.Pod {p1 , p2 , p3 , p4 }, [] * apiv1. Pod {}, fakeClient , kube_util .CreateEventRecorder (fakeClient ), 0 , 0 * time .Second , 0 * time .Second , 0 * time .Second )
878
930
assert .Error (t , err )
879
931
assert .Equal (t , 4 , len (evictionResults ))
880
932
assert .Equal (t , * p1 , * evictionResults ["p1" ].Pod )
0 commit comments