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:
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user