test to catch illegal nodeNames returned by PreFilterResult

This commit is contained in:
Wei Huang 2024-04-26 15:45:46 -07:00
parent a5753f60d6
commit d3821508f1
No known key found for this signature in database
GPG Key ID: 17AFE05D01EA77B2

View File

@ -32,6 +32,7 @@ import (
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
listersv1 "k8s.io/client-go/listers/core/v1" listersv1 "k8s.io/client-go/listers/core/v1"
@ -77,9 +78,10 @@ type PreEnqueuePlugin struct {
} }
type PreFilterPlugin struct { type PreFilterPlugin struct {
numPreFilterCalled int numPreFilterCalled int
failPreFilter bool failPreFilter bool
rejectPreFilter bool rejectPreFilter bool
preFilterResultNodes sets.Set[string]
} }
type ScorePlugin struct { type ScorePlugin struct {
@ -521,6 +523,9 @@ func (pp *PreFilterPlugin) PreFilter(ctx context.Context, state *framework.Cycle
if pp.rejectPreFilter { if pp.rejectPreFilter {
return nil, framework.NewStatus(framework.Unschedulable, fmt.Sprintf("reject pod %v", pod.Name)) return nil, framework.NewStatus(framework.Unschedulable, fmt.Sprintf("reject pod %v", pod.Name))
} }
if len(pp.preFilterResultNodes) != 0 {
return &framework.PreFilterResult{NodeNames: pp.preFilterResultNodes}, nil
}
return nil, nil return nil, nil
} }
@ -620,9 +625,10 @@ func TestPreFilterPlugin(t *testing.T) {
testContext := testutils.InitTestAPIServer(t, "prefilter-plugin", nil) testContext := testutils.InitTestAPIServer(t, "prefilter-plugin", nil)
tests := []struct { tests := []struct {
name string name string
fail bool fail bool
reject bool reject bool
preFilterResultNodes sets.Set[string]
}{ }{
{ {
name: "disable fail and reject flags", name: "disable fail and reject flags",
@ -639,6 +645,18 @@ func TestPreFilterPlugin(t *testing.T) {
fail: false, fail: false,
reject: true, reject: true,
}, },
{
name: "inject legal node names in PreFilterResult",
fail: false,
reject: false,
preFilterResultNodes: sets.New[string]("test-node-0", "test-node-1"),
},
{
name: "inject legal and illegal node names in PreFilterResult",
fail: false,
reject: false,
preFilterResultNodes: sets.New[string]("test-node-0", "non-existent-node"),
},
} }
for _, test := range tests { for _, test := range tests {
@ -654,6 +672,7 @@ func TestPreFilterPlugin(t *testing.T) {
preFilterPlugin.failPreFilter = test.fail preFilterPlugin.failPreFilter = test.fail
preFilterPlugin.rejectPreFilter = test.reject preFilterPlugin.rejectPreFilter = test.reject
preFilterPlugin.preFilterResultNodes = test.preFilterResultNodes
// Create a best effort pod. // Create a best effort pod.
pod, err := testutils.CreatePausePod(testCtx.ClientSet, pod, err := testutils.CreatePausePod(testCtx.ClientSet,
testutils.InitPausePod(&testutils.PausePodConfig{Name: "test-pod", Namespace: testCtx.NS.Name})) testutils.InitPausePod(&testutils.PausePodConfig{Name: "test-pod", Namespace: testCtx.NS.Name}))