From 259cc951ffcba674d22c2d455234d8ed69628eef Mon Sep 17 00:00:00 2001 From: chao zheng Date: Wed, 13 Nov 2019 00:17:11 -0800 Subject: [PATCH] add ut for scheduler framework --- .../framework/v1alpha1/framework_test.go | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/pkg/scheduler/framework/v1alpha1/framework_test.go b/pkg/scheduler/framework/v1alpha1/framework_test.go index 7cf824f00b85..6e36683c1ff8 100644 --- a/pkg/scheduler/framework/v1alpha1/framework_test.go +++ b/pkg/scheduler/framework/v1alpha1/framework_test.go @@ -585,6 +585,161 @@ func TestPreFilterPlugins(t *testing.T) { } +func TestFilterPlugins(t *testing.T) { + tests := []struct { + name string + plugins []*TestPlugin + wantCode Code + }{ + { + name: "SuccessFilter", + plugins: []*TestPlugin{ + { + name: "TestPlugin", + inj: injectedResult{FilterStatus: int(Success)}, + }, + }, + wantCode: Success, + }, + { + name: "ErrorFilter", + plugins: []*TestPlugin{ + { + name: "TestPlugin", + inj: injectedResult{FilterStatus: int(Error)}, + }, + }, + wantCode: Error, + }, + { + name: "UnschedulableFilter", + plugins: []*TestPlugin{ + { + name: "TestPlugin", + inj: injectedResult{FilterStatus: int(Unschedulable)}, + }, + }, + wantCode: Unschedulable, + }, + { + name: "UnschedulableAndUnresolvableFilter", + plugins: []*TestPlugin{ + { + name: "TestPlugin", + inj: injectedResult{ + FilterStatus: int(UnschedulableAndUnresolvable)}, + }, + }, + wantCode: UnschedulableAndUnresolvable, + }, + // followings tests cover multiple-plugins scenarios + { + name: "ErrorAndErrorFilters", + plugins: []*TestPlugin{ + { + name: "TestPlugin1", + inj: injectedResult{FilterStatus: int(Error)}, + }, + + { + name: "TestPlugin2", + inj: injectedResult{FilterStatus: int(Error)}, + }, + }, + wantCode: Error, + }, + { + name: "SuccessAndSuccessFilters", + plugins: []*TestPlugin{ + { + name: "TestPlugin1", + inj: injectedResult{FilterStatus: int(Success)}, + }, + + { + name: "TestPlugin2", + inj: injectedResult{FilterStatus: int(Success)}, + }, + }, + wantCode: Success, + }, + { + name: "ErrorAndSuccessFilters", + plugins: []*TestPlugin{ + { + name: "TestPlugin1", + inj: injectedResult{FilterStatus: int(Error)}, + }, + { + name: "TestPlugin2", + inj: injectedResult{FilterStatus: int(Success)}, + }, + }, + wantCode: Error, + }, + { + name: "SuccessAndErrorFilters", + plugins: []*TestPlugin{ + { + + name: "TestPlugin1", + inj: injectedResult{FilterStatus: int(Success)}, + }, + { + name: "TestPlugin2", + inj: injectedResult{FilterStatus: int(Error)}, + }, + }, + wantCode: Error, + }, + { + name: "SuccessAndUnschedulableFilters", + plugins: []*TestPlugin{ + { + name: "TestPlugin1", + inj: injectedResult{FilterStatus: int(Success)}, + }, + + { + name: "TestPlugin2", + inj: injectedResult{FilterStatus: int(Unschedulable)}, + }, + }, + wantCode: Unschedulable, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := Registry{} + cfgPls := &config.Plugins{Filter: &config.PluginSet{}} + for _, pl := range tt.plugins { + // register all plugins + tmpPl := pl + if err := registry.Register(pl.name, + func(_ *runtime.Unknown, _ FrameworkHandle) (Plugin, error) { + return tmpPl, nil + }); err != nil { + t.Fatalf("fail to register filter plugin (%s)", pl.name) + } + // append plugins to filter pluginset + cfgPls.Filter.Enabled = append( + cfgPls.Filter.Enabled, + config.Plugin{Name: pl.name}) + } + + f, err := NewFramework(registry, cfgPls, emptyArgs) + if err != nil { + t.Fatalf("fail to create framework: %s", err) + } + status := f.RunFilterPlugins(context.TODO(), nil, pod, nil) + if status.Code() != tt.wantCode { + t.Errorf("Wrong status code. got: %v, want:%v", status.Code(), tt.wantCode) + } + }) + } +} + func TestRecordingMetrics(t *testing.T) { tests := []struct { name string