1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-28 14:41:10 +01:00

TestPodEvictorReset: check the dry mode evicts duplicated pods

This commit is contained in:
Jan Chaloupka
2024-06-23 20:30:36 +02:00
parent f5060adcd1
commit fadef326ff
2 changed files with 52 additions and 25 deletions

View File

@@ -70,16 +70,17 @@ type profileRunner struct {
} }
type descheduler struct { type descheduler struct {
rs *options.DeschedulerServer rs *options.DeschedulerServer
podLister listersv1.PodLister podLister listersv1.PodLister
nodeLister listersv1.NodeLister nodeLister listersv1.NodeLister
namespaceLister listersv1.NamespaceLister namespaceLister listersv1.NamespaceLister
priorityClassLister schedulingv1.PriorityClassLister priorityClassLister schedulingv1.PriorityClassLister
getPodsAssignedToNode podutil.GetPodsAssignedToNodeFunc getPodsAssignedToNode podutil.GetPodsAssignedToNodeFunc
sharedInformerFactory informers.SharedInformerFactory sharedInformerFactory informers.SharedInformerFactory
deschedulerPolicy *api.DeschedulerPolicy deschedulerPolicy *api.DeschedulerPolicy
eventRecorder events.EventRecorder eventRecorder events.EventRecorder
podEvictor *evictions.PodEvictor podEvictor *evictions.PodEvictor
podEvictionReactionFnc func(*fakeclientset.Clientset) func(action core.Action) (bool, runtime.Object, error)
} }
func newDescheduler(rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string, eventRecorder events.EventRecorder, sharedInformerFactory informers.SharedInformerFactory) (*descheduler, error) { func newDescheduler(rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string, eventRecorder events.EventRecorder, sharedInformerFactory informers.SharedInformerFactory) (*descheduler, error) {
@@ -105,16 +106,17 @@ func newDescheduler(rs *options.DeschedulerServer, deschedulerPolicy *api.Desche
) )
return &descheduler{ return &descheduler{
rs: rs, rs: rs,
podLister: podLister, podLister: podLister,
nodeLister: nodeLister, nodeLister: nodeLister,
namespaceLister: namespaceLister, namespaceLister: namespaceLister,
priorityClassLister: priorityClassLister, priorityClassLister: priorityClassLister,
getPodsAssignedToNode: getPodsAssignedToNode, getPodsAssignedToNode: getPodsAssignedToNode,
sharedInformerFactory: sharedInformerFactory, sharedInformerFactory: sharedInformerFactory,
deschedulerPolicy: deschedulerPolicy, deschedulerPolicy: deschedulerPolicy,
eventRecorder: eventRecorder, eventRecorder: eventRecorder,
podEvictor: podEvictor, podEvictor: podEvictor,
podEvictionReactionFnc: podEvictionReactionFnc,
}, nil }, nil
} }
@@ -141,7 +143,7 @@ func (d *descheduler) runDeschedulerLoop(ctx context.Context, nodes []*v1.Node)
// Create a new cache so we start from scratch without any leftovers // Create a new cache so we start from scratch without any leftovers
fakeClient := fakeclientset.NewSimpleClientset() fakeClient := fakeclientset.NewSimpleClientset()
// simulate a pod eviction by deleting a pod // simulate a pod eviction by deleting a pod
fakeClient.PrependReactor("create", "pods", podEvictionReactionFnc(fakeClient)) fakeClient.PrependReactor("create", "pods", d.podEvictionReactionFnc(fakeClient))
err := cachedClient(d.rs.Client, fakeClient, d.podLister, d.nodeLister, d.namespaceLister, d.priorityClassLister) err := cachedClient(d.rs.Client, fakeClient, d.podLister, d.nodeLister, d.namespaceLister, d.priorityClassLister)
if err != nil { if err != nil {
return err return err

View File

@@ -390,6 +390,11 @@ func TestPodEvictorReset(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("Unable to create a descheduler instance: %v", err) t.Fatalf("Unable to create a descheduler instance: %v", err)
} }
var fakeEvictedPods []string
descheduler.podEvictionReactionFnc = func(*fakeclientset.Clientset) func(action core.Action) (bool, runtime.Object, error) {
return podEvictionReactionTestingFnc(&fakeEvictedPods)
}
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
@@ -406,8 +411,8 @@ func TestPodEvictorReset(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("Unable to run a descheduling loop: %v", err) t.Fatalf("Unable to run a descheduling loop: %v", err)
} }
if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 2 { if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 2 || len(fakeEvictedPods) != 0 {
t.Fatalf("Expected (2,2) pods evicted, got (%v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods)) t.Fatalf("Expected (2,2,0) pods evicted, got (%v, %v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods), len(fakeEvictedPods))
} }
// a single pod eviction expected // a single pod eviction expected
@@ -415,7 +420,27 @@ func TestPodEvictorReset(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("Unable to run a descheduling loop: %v", err) t.Fatalf("Unable to run a descheduling loop: %v", err)
} }
if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 4 { if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 4 || len(fakeEvictedPods) != 0 {
t.Fatalf("Expected (2,4) pods evicted, got (%v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods)) t.Fatalf("Expected (2,4,0) pods evicted, got (%v, %v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods), len(fakeEvictedPods))
}
// check the fake client syncing and the right pods evicted
rs.DryRun = true
evictedPods = []string{}
// a single pod eviction expected
err = descheduler.runDeschedulerLoop(ctx, nodes)
if err != nil {
t.Fatalf("Unable to run a descheduling loop: %v", err)
}
if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 0 || len(fakeEvictedPods) != 2 {
t.Fatalf("Expected (2,0,2) pods evicted, got (%v, %v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods), len(fakeEvictedPods))
}
// a single pod eviction expected
err = descheduler.runDeschedulerLoop(ctx, nodes)
if err != nil {
t.Fatalf("Unable to run a descheduling loop: %v", err)
}
if descheduler.podEvictor.TotalEvicted() != 2 || len(evictedPods) != 0 || len(fakeEvictedPods) != 4 {
t.Fatalf("Expected (2,0,4) pods evicted, got (%v, %v, %v) instead", descheduler.podEvictor.TotalEvicted(), len(evictedPods), len(fakeEvictedPods))
} }
} }