From fb895056c659913a9959b95b8dec1dc860adf7dd Mon Sep 17 00:00:00 2001 From: notpad Date: Tue, 11 Feb 2020 16:51:21 +0800 Subject: [PATCH] Add test --- .../plugins/interpodaffinity/filtering.go | 2 +- .../plugins/interpodaffinity/filtering_test.go | 14 ++++++++++++++ .../framework/plugins/nodeports/node_ports.go | 2 +- .../plugins/nodeports/node_ports_test.go | 14 ++++++++++++++ .../framework/plugins/noderesources/fit.go | 2 +- .../plugins/noderesources/fit_test.go | 14 ++++++++++++++ .../framework/plugins/podtopologyspread/BUILD | 1 + .../plugins/podtopologyspread/filtering.go | 2 +- .../podtopologyspread/filtering_test.go | 15 +++++++++++++++ .../serviceaffinity/service_affinity.go | 2 +- .../serviceaffinity/service_affinity_test.go | 18 ++++++++++++++++++ 11 files changed, 81 insertions(+), 5 deletions(-) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go index 9b5043d6ca4..af035260623 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go @@ -388,7 +388,7 @@ func (pl *InterPodAffinity) RemovePod(ctx context.Context, cycleState *framework func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - // The preFilterState wasn't pre-computed in prefilter. + // preFilterState doesn't exist, likely PreFilter wasn't invoked. return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go index a1840b5153d..620a0965cf5 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go @@ -1634,6 +1634,20 @@ func TestRequiredAffinityMultipleNodes(t *testing.T) { } } +func TestPreFilterDisabled(t *testing.T) { + pod := &v1.Pod{} + nodeInfo := nodeinfo.NewNodeInfo() + node := v1.Node{} + nodeInfo.SetNode(&node) + p := &InterPodAffinity{} + cycleState := framework.NewCycleState() + gotStatus := p.Filter(context.Background(), cycleState, pod, nodeInfo) + wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterInterPodAffinity" from cycleState: not found`) + if !reflect.DeepEqual(gotStatus, wantStatus) { + t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) + } +} + func TestPreFilterStateAddRemovePod(t *testing.T) { var label1 = map[string]string{ "region": "r1", diff --git a/pkg/scheduler/framework/plugins/nodeports/node_ports.go b/pkg/scheduler/framework/plugins/nodeports/node_ports.go index 55489fe64e8..db20a3ca4e4 100644 --- a/pkg/scheduler/framework/plugins/nodeports/node_ports.go +++ b/pkg/scheduler/framework/plugins/nodeports/node_ports.go @@ -86,7 +86,7 @@ func (pl *NodePorts) PreFilterExtensions() framework.PreFilterExtensions { func getPreFilterState(cycleState *framework.CycleState) (preFilterState, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - // preFilterState state doesn't exist. + // preFilterState doesn't exist, likely PreFilter wasn't invoked. return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) } diff --git a/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go b/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go index ff8ca7f67ab..009a6200382 100644 --- a/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go +++ b/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go @@ -163,6 +163,20 @@ func TestNodePorts(t *testing.T) { } } +func TestPreFilterDisabled(t *testing.T) { + pod := &v1.Pod{} + nodeInfo := schedulernodeinfo.NewNodeInfo() + node := v1.Node{} + nodeInfo.SetNode(&node) + p, _ := New(nil, nil) + cycleState := framework.NewCycleState() + gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), cycleState, pod, nodeInfo) + wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterNodePorts" from cycleState: not found`) + if !reflect.DeepEqual(gotStatus, wantStatus) { + t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) + } +} + func TestGetContainerPorts(t *testing.T) { tests := []struct { pod1 *v1.Pod diff --git a/pkg/scheduler/framework/plugins/noderesources/fit.go b/pkg/scheduler/framework/plugins/noderesources/fit.go index 38d6fa5a232..683d5105bd3 100644 --- a/pkg/scheduler/framework/plugins/noderesources/fit.go +++ b/pkg/scheduler/framework/plugins/noderesources/fit.go @@ -129,7 +129,7 @@ func (f *Fit) PreFilterExtensions() framework.PreFilterExtensions { func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - // The preFilterState doesn't exist. + // preFilterState doesn't exist, likely PreFilter wasn't invoked. return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) } diff --git a/pkg/scheduler/framework/plugins/noderesources/fit_test.go b/pkg/scheduler/framework/plugins/noderesources/fit_test.go index d7b7f97c636..b2d766a028b 100644 --- a/pkg/scheduler/framework/plugins/noderesources/fit_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/fit_test.go @@ -398,6 +398,20 @@ func TestEnoughRequests(t *testing.T) { } } +func TestPreFilterDisabled(t *testing.T) { + pod := &v1.Pod{} + nodeInfo := schedulernodeinfo.NewNodeInfo() + node := v1.Node{} + nodeInfo.SetNode(&node) + p, _ := NewFit(nil, nil) + cycleState := framework.NewCycleState() + gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), cycleState, pod, nodeInfo) + wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterNodeResourcesFit" from cycleState: not found`) + if !reflect.DeepEqual(gotStatus, wantStatus) { + t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) + } +} + func TestNotEnoughRequests(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PodOverhead, true)() notEnoughPodsTests := []struct { diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD index bf67b3c4bfe..3a3a789b950 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD +++ b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD @@ -35,6 +35,7 @@ go_test( deps = [ "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", + "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/testing:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go index 94a369f338f..87d4d9603f3 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go @@ -194,7 +194,7 @@ func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framewor func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - // The preFilterState wasn't pre-computed in prefilter. + // preFilterState doesn't exist, likely PreFilter wasn't invoked. return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) } diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go index 115ac64afed..fe489459747 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/labels" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" st "k8s.io/kubernetes/pkg/scheduler/testing" ) @@ -1464,3 +1465,17 @@ func TestMultipleConstraints(t *testing.T) { }) } } + +func TestPreFilterDisabled(t *testing.T) { + pod := &v1.Pod{} + nodeInfo := schedulernodeinfo.NewNodeInfo() + node := v1.Node{} + nodeInfo.SetNode(&node) + p := &PodTopologySpread{} + cycleState := framework.NewCycleState() + gotStatus := p.Filter(context.Background(), cycleState, pod, nodeInfo) + wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterPodTopologySpread" from cycleState: not found`) + if !reflect.DeepEqual(gotStatus, wantStatus) { + t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) + } +} diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go index 55a19c75002..1edc43bf3fa 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go @@ -190,7 +190,7 @@ func (pl *ServiceAffinity) RemovePod(ctx context.Context, cycleState *framework. func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - // The metadata wasn't pre-computed in prefilter. + // preFilterState doesn't exist, likely PreFilter wasn't invoked. return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) } diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go index 4aacc8528d1..7d2311da378 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go @@ -599,3 +599,21 @@ func mustGetNodeInfo(t *testing.T, snapshot *cache.Snapshot, name string) *nodei } return nodeInfo } + +func TestPreFilterDisabled(t *testing.T) { + pod := &v1.Pod{} + nodeInfo := nodeinfo.NewNodeInfo() + node := v1.Node{} + nodeInfo.SetNode(&node) + p := &ServiceAffinity{ + args: Args{ + AffinityLabels: []string{"region"}, + }, + } + cycleState := framework.NewCycleState() + gotStatus := p.Filter(context.Background(), cycleState, pod, nodeInfo) + wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterServiceAffinity" from cycleState: not found`) + if !reflect.DeepEqual(gotStatus, wantStatus) { + t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) + } +}