Merge pull request #124539 from Huang-Wei/ut-for-123465
test to catch illegal nodeNames returned by PreFilterResult
This commit is contained in:
		@@ -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}))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user