mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-12-15 20:37:39 +00:00
Merge pull request #120252 from kerthcet/cleanup/framework-import
Move framework testing libraries to the right place
This commit is contained in:
@@ -1,320 +0,0 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package fake
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||
corelisters "k8s.io/client-go/listers/core/v1"
|
||||
storagelisters "k8s.io/client-go/listers/storage/v1"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework"
|
||||
)
|
||||
|
||||
var _ corelisters.ServiceLister = &ServiceLister{}
|
||||
|
||||
// ServiceLister implements ServiceLister on []v1.Service for test purposes.
|
||||
type ServiceLister []*v1.Service
|
||||
|
||||
// Services returns nil.
|
||||
func (f ServiceLister) Services(namespace string) corelisters.ServiceNamespaceLister {
|
||||
var services []*v1.Service
|
||||
for i := range f {
|
||||
if f[i].Namespace == namespace {
|
||||
services = append(services, f[i])
|
||||
}
|
||||
}
|
||||
return &serviceNamespaceLister{
|
||||
services: services,
|
||||
namespace: namespace,
|
||||
}
|
||||
}
|
||||
|
||||
// List returns v1.ServiceList, the list of all services.
|
||||
func (f ServiceLister) List(labels.Selector) ([]*v1.Service, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// serviceNamespaceLister is implementation of ServiceNamespaceLister returned by Services() above.
|
||||
type serviceNamespaceLister struct {
|
||||
services []*v1.Service
|
||||
namespace string
|
||||
}
|
||||
|
||||
func (f *serviceNamespaceLister) Get(name string) (*v1.Service, error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
func (f *serviceNamespaceLister) List(selector labels.Selector) ([]*v1.Service, error) {
|
||||
return f.services, nil
|
||||
}
|
||||
|
||||
var _ corelisters.ReplicationControllerLister = &ControllerLister{}
|
||||
|
||||
// ControllerLister implements ControllerLister on []v1.ReplicationController for test purposes.
|
||||
type ControllerLister []*v1.ReplicationController
|
||||
|
||||
// List returns []v1.ReplicationController, the list of all ReplicationControllers.
|
||||
func (f ControllerLister) List(labels.Selector) ([]*v1.ReplicationController, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// GetPodControllers gets the ReplicationControllers that have the selector that match the labels on the given pod
|
||||
func (f ControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1.ReplicationController, err error) {
|
||||
var selector labels.Selector
|
||||
|
||||
for i := range f {
|
||||
controller := f[i]
|
||||
if controller.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector = labels.Set(controller.Spec.Selector).AsSelectorPreValidated()
|
||||
if selector.Matches(labels.Set(pod.Labels)) {
|
||||
controllers = append(controllers, controller)
|
||||
}
|
||||
}
|
||||
if len(controllers) == 0 {
|
||||
err = fmt.Errorf("could not find Replication Controller for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// ReplicationControllers returns nil
|
||||
func (f ControllerLister) ReplicationControllers(namespace string) corelisters.ReplicationControllerNamespaceLister {
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ appslisters.ReplicaSetLister = &ReplicaSetLister{}
|
||||
|
||||
// ReplicaSetLister implements ControllerLister on []extensions.ReplicaSet for test purposes.
|
||||
type ReplicaSetLister []*appsv1.ReplicaSet
|
||||
|
||||
// List returns replica sets.
|
||||
func (f ReplicaSetLister) List(labels.Selector) ([]*appsv1.ReplicaSet, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// GetPodReplicaSets gets the ReplicaSets that have the selector that match the labels on the given pod
|
||||
func (f ReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*appsv1.ReplicaSet, err error) {
|
||||
var selector labels.Selector
|
||||
|
||||
for _, rs := range f {
|
||||
if rs.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector, err = metav1.LabelSelectorAsSelector(rs.Spec.Selector)
|
||||
if err != nil {
|
||||
// This object has an invalid selector, it does not match the pod
|
||||
continue
|
||||
}
|
||||
|
||||
if selector.Matches(labels.Set(pod.Labels)) {
|
||||
rss = append(rss, rs)
|
||||
}
|
||||
}
|
||||
if len(rss) == 0 {
|
||||
err = fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// ReplicaSets returns nil
|
||||
func (f ReplicaSetLister) ReplicaSets(namespace string) appslisters.ReplicaSetNamespaceLister {
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ appslisters.StatefulSetLister = &StatefulSetLister{}
|
||||
|
||||
// StatefulSetLister implements ControllerLister on []appsv1.StatefulSet for testing purposes.
|
||||
type StatefulSetLister []*appsv1.StatefulSet
|
||||
|
||||
// List returns stateful sets.
|
||||
func (f StatefulSetLister) List(labels.Selector) ([]*appsv1.StatefulSet, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// GetPodStatefulSets gets the StatefulSets that have the selector that match the labels on the given pod.
|
||||
func (f StatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*appsv1.StatefulSet, err error) {
|
||||
var selector labels.Selector
|
||||
|
||||
for _, ss := range f {
|
||||
if ss.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector, err = metav1.LabelSelectorAsSelector(ss.Spec.Selector)
|
||||
if err != nil {
|
||||
// This object has an invalid selector, it does not match the pod
|
||||
continue
|
||||
}
|
||||
if selector.Matches(labels.Set(pod.Labels)) {
|
||||
sss = append(sss, ss)
|
||||
}
|
||||
}
|
||||
if len(sss) == 0 {
|
||||
err = fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// StatefulSets returns nil
|
||||
func (f StatefulSetLister) StatefulSets(namespace string) appslisters.StatefulSetNamespaceLister {
|
||||
return nil
|
||||
}
|
||||
|
||||
// persistentVolumeClaimNamespaceLister is implementation of PersistentVolumeClaimNamespaceLister returned by List() above.
|
||||
type persistentVolumeClaimNamespaceLister struct {
|
||||
pvcs []*v1.PersistentVolumeClaim
|
||||
namespace string
|
||||
}
|
||||
|
||||
func (f *persistentVolumeClaimNamespaceLister) Get(name string) (*v1.PersistentVolumeClaim, error) {
|
||||
for _, pvc := range f.pvcs {
|
||||
if pvc.Name == name && pvc.Namespace == f.namespace {
|
||||
return pvc, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("persistentvolumeclaim %q not found", name)
|
||||
}
|
||||
|
||||
func (f persistentVolumeClaimNamespaceLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
// PersistentVolumeClaimLister declares a []v1.PersistentVolumeClaim type for testing.
|
||||
type PersistentVolumeClaimLister []v1.PersistentVolumeClaim
|
||||
|
||||
var _ corelisters.PersistentVolumeClaimLister = PersistentVolumeClaimLister{}
|
||||
|
||||
// List gets PVC matching the namespace and PVC ID.
|
||||
func (pvcs PersistentVolumeClaimLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
// PersistentVolumeClaims returns a fake PersistentVolumeClaimLister object.
|
||||
func (pvcs PersistentVolumeClaimLister) PersistentVolumeClaims(namespace string) corelisters.PersistentVolumeClaimNamespaceLister {
|
||||
ps := make([]*v1.PersistentVolumeClaim, len(pvcs))
|
||||
for i := range pvcs {
|
||||
ps[i] = &pvcs[i]
|
||||
}
|
||||
return &persistentVolumeClaimNamespaceLister{
|
||||
pvcs: ps,
|
||||
namespace: namespace,
|
||||
}
|
||||
}
|
||||
|
||||
// NodeInfoLister declares a framework.NodeInfo type for testing.
|
||||
type NodeInfoLister []*framework.NodeInfo
|
||||
|
||||
// Get returns a fake node object in the fake nodes.
|
||||
func (nodes NodeInfoLister) Get(nodeName string) (*framework.NodeInfo, error) {
|
||||
for _, node := range nodes {
|
||||
if node != nil && node.Node().Name == nodeName {
|
||||
return node, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("unable to find node: %s", nodeName)
|
||||
}
|
||||
|
||||
// List lists all nodes.
|
||||
func (nodes NodeInfoLister) List() ([]*framework.NodeInfo, error) {
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
// HavePodsWithAffinityList is supposed to list nodes with at least one pod with affinity. For the fake lister
|
||||
// we just return everything.
|
||||
func (nodes NodeInfoLister) HavePodsWithAffinityList() ([]*framework.NodeInfo, error) {
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
// HavePodsWithRequiredAntiAffinityList is supposed to list nodes with at least one pod with
|
||||
// required anti-affinity. For the fake lister we just return everything.
|
||||
func (nodes NodeInfoLister) HavePodsWithRequiredAntiAffinityList() ([]*framework.NodeInfo, error) {
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
var _ storagelisters.CSINodeLister = CSINodeLister{}
|
||||
|
||||
// CSINodeLister declares a storagev1.CSINode type for testing.
|
||||
type CSINodeLister []storagev1.CSINode
|
||||
|
||||
// Get returns a fake CSINode object.
|
||||
func (n CSINodeLister) Get(name string) (*storagev1.CSINode, error) {
|
||||
for _, cn := range n {
|
||||
if cn.Name == name {
|
||||
return &cn, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("csiNode %q not found", name)
|
||||
}
|
||||
|
||||
// List lists all CSINodes in the indexer.
|
||||
func (n CSINodeLister) List(selector labels.Selector) (ret []*storagev1.CSINode, err error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
// PersistentVolumeLister declares a []v1.PersistentVolume type for testing.
|
||||
type PersistentVolumeLister []v1.PersistentVolume
|
||||
|
||||
var _ corelisters.PersistentVolumeLister = PersistentVolumeLister{}
|
||||
|
||||
// Get returns a fake PV object in the fake PVs by PV ID.
|
||||
func (pvs PersistentVolumeLister) Get(pvID string) (*v1.PersistentVolume, error) {
|
||||
for _, pv := range pvs {
|
||||
if pv.Name == pvID {
|
||||
return &pv, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("unable to find persistent volume: %s", pvID)
|
||||
}
|
||||
|
||||
// List lists all PersistentVolumes in the indexer.
|
||||
func (pvs PersistentVolumeLister) List(selector labels.Selector) ([]*v1.PersistentVolume, error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
// StorageClassLister declares a []storagev1.StorageClass type for testing.
|
||||
type StorageClassLister []storagev1.StorageClass
|
||||
|
||||
var _ storagelisters.StorageClassLister = StorageClassLister{}
|
||||
|
||||
// Get returns a fake storage class object in the fake storage classes by name.
|
||||
func (classes StorageClassLister) Get(name string) (*storagev1.StorageClass, error) {
|
||||
for _, sc := range classes {
|
||||
if sc.Name == name {
|
||||
return &sc, nil
|
||||
}
|
||||
}
|
||||
return nil, &errors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Reason: metav1.StatusReasonNotFound,
|
||||
Message: fmt.Sprintf("unable to find storage class: %s", name),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// List lists all StorageClass in the indexer.
|
||||
func (classes StorageClassLister) List(selector labels.Selector) ([]*storagev1.StorageClass, error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
}
|
||||
@@ -56,6 +56,7 @@ import (
|
||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
|
||||
st "k8s.io/kubernetes/pkg/scheduler/testing"
|
||||
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -228,9 +229,9 @@ func TestPostFilter(t *testing.T) {
|
||||
"node1": framework.NewStatus(framework.Unschedulable),
|
||||
"node2": framework.NewStatus(framework.Unschedulable),
|
||||
},
|
||||
extender: &st.FakeExtender{
|
||||
extender: &tf.FakeExtender{
|
||||
ExtenderName: "FakeExtender1",
|
||||
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.Node1PredicateExtender},
|
||||
},
|
||||
wantResult: framework.NewPostFilterResultWithNominatedNode("node1"),
|
||||
wantStatus: framework.NewStatus(framework.Success),
|
||||
@@ -342,11 +343,11 @@ func TestPostFilter(t *testing.T) {
|
||||
podInformer.GetStore().Add(tt.pods[i])
|
||||
}
|
||||
// Register NodeResourceFit as the Filter & PreFilter plugin.
|
||||
registeredPlugins := []st.RegisterPluginFunc{
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
st.RegisterPluginAsExtensions("test-plugin", newTestPlugin, "PreFilter"),
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
registeredPlugins := []tf.RegisterPluginFunc{
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
tf.RegisterPluginAsExtensions("test-plugin", newTestPlugin, "PreFilter"),
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
}
|
||||
var extenders []framework.Extender
|
||||
if tt.extender != nil {
|
||||
@@ -355,7 +356,7 @@ func TestPostFilter(t *testing.T) {
|
||||
logger, ctx := ktesting.NewTestContext(t)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
f, err := st.NewFramework(ctx, registeredPlugins, "",
|
||||
f, err := tf.NewFramework(ctx, registeredPlugins, "",
|
||||
frameworkruntime.WithClientSet(cs),
|
||||
frameworkruntime.WithEventRecorder(&events.FakeRecorder{}),
|
||||
frameworkruntime.WithInformerFactory(informerFactory),
|
||||
@@ -410,7 +411,7 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
nodeNames []string
|
||||
testPods []*v1.Pod
|
||||
initPods []*v1.Pod
|
||||
registerPlugins []st.RegisterPluginFunc
|
||||
registerPlugins []tf.RegisterPluginFunc
|
||||
pdbs []*policy.PodDisruptionBudget
|
||||
fakeFilterRC framework.Code // return code for fake filter plugin
|
||||
disableParallelism bool
|
||||
@@ -419,8 +420,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
name: "a pod that does not fit on any node",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterFilterPlugin("FalseFilter", st.NewFalseFilterPlugin),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterFilterPlugin("FalseFilter", tf.NewFalseFilterPlugin),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -435,8 +436,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "a pod that fits with no preemption",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterFilterPlugin("TrueFilter", st.NewTrueFilterPlugin),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterFilterPlugin("TrueFilter", tf.NewTrueFilterPlugin),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -452,8 +453,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "a pod that fits on one node with no preemption",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterFilterPlugin("MatchFilter", st.NewMatchFilterPlugin),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterFilterPlugin("MatchFilter", tf.NewMatchFilterPlugin),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -470,8 +471,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "a pod that fits on both nodes when lower priority pods are preempted",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -501,8 +502,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "a pod that would fit on the nodes, but other pods running are higher priority, no preemption would happen",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -517,8 +518,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "medium priority pod is preempted, but lower priority one stays as it is small",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -549,8 +550,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "mixed priority pods are preempted",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -580,8 +581,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "mixed priority pods are preempted, pick later StartTime one when priorities are equal",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -611,9 +612,9 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "pod with anti-affinity is preempted",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
st.RegisterPluginAsExtensions(interpodaffinity.Name, interpodaffinity.New, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
tf.RegisterPluginAsExtensions(interpodaffinity.Name, interpodaffinity.New, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -643,8 +644,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "preemption to resolve pod topology spread filter failure",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(podtopologyspread.Name, podTopologySpreadFunc, "PreFilter", "Filter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(podtopologyspread.Name, podTopologySpreadFunc, "PreFilter", "Filter"),
|
||||
},
|
||||
nodeNames: []string{"node-a/zone1", "node-b/zone1", "node-x/zone2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -680,8 +681,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "get Unschedulable in the preemption phase when the filter plugins filtering the nodes",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -697,8 +698,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "preemption with violation of same pdb",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -732,8 +733,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "preemption with violation of the pdb with pod whose eviction was processed, the victim doesn't belong to DisruptedPods",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -767,8 +768,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "preemption with violation of the pdb with pod whose eviction was processed, the victim belongs to DisruptedPods",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -802,8 +803,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "preemption with violation of the pdb with pod whose eviction was processed, the victim which belongs to DisruptedPods is treated as 'nonViolating'",
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -840,8 +841,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
{
|
||||
name: "all nodes are possible candidates, but DefaultPreemptionArgs limits to 2",
|
||||
args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 40, MinCandidateNodesAbsolute: 1},
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3", "node4", "node5"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -877,8 +878,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
{
|
||||
name: "some nodes are not possible candidates, DefaultPreemptionArgs limits to 2",
|
||||
args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 40, MinCandidateNodesAbsolute: 1},
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3", "node4", "node5"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -914,8 +915,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
{
|
||||
name: "preemption offset across multiple scheduling cycles and wrap around",
|
||||
args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 40, MinCandidateNodesAbsolute: 1},
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3", "node4", "node5"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -983,8 +984,8 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
{
|
||||
name: "preemption looks past numCandidates until a non-PDB violating node is found",
|
||||
args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 40, MinCandidateNodesAbsolute: 2},
|
||||
registerPlugins: []st.RegisterPluginFunc{
|
||||
st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugins: []tf.RegisterPluginFunc{
|
||||
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3", "node4", "node5"},
|
||||
testPods: []*v1.Pod{
|
||||
@@ -1059,18 +1060,18 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
snapshot := internalcache.NewSnapshot(tt.initPods, nodes)
|
||||
|
||||
// For each test, register a FakeFilterPlugin along with essential plugins and tt.registerPlugins.
|
||||
fakePlugin := st.FakeFilterPlugin{
|
||||
fakePlugin := tf.FakeFilterPlugin{
|
||||
FailedNodeReturnCodeMap: fakeFilterRCMap,
|
||||
}
|
||||
registeredPlugins := append([]st.RegisterPluginFunc{
|
||||
st.RegisterFilterPlugin(
|
||||
registeredPlugins := append([]tf.RegisterPluginFunc{
|
||||
tf.RegisterFilterPlugin(
|
||||
"FakeFilter",
|
||||
func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) {
|
||||
return &fakePlugin, nil
|
||||
},
|
||||
)},
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
)
|
||||
registeredPlugins = append(registeredPlugins, tt.registerPlugins...)
|
||||
var objs []runtime.Object
|
||||
@@ -1092,7 +1093,7 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
logger, ctx := ktesting.NewTestContext(t)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
fwk, err := st.NewFramework(
|
||||
fwk, err := tf.NewFramework(
|
||||
ctx,
|
||||
registeredPlugins, "",
|
||||
frameworkruntime.WithPodNominator(internalqueue.NewPodNominator(informerFactory.Core().V1().Pods().Lister())),
|
||||
@@ -1176,7 +1177,7 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
func TestSelectBestCandidate(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
registerPlugin st.RegisterPluginFunc
|
||||
registerPlugin tf.RegisterPluginFunc
|
||||
nodeNames []string
|
||||
pod *v1.Pod
|
||||
pods []*v1.Pod
|
||||
@@ -1184,7 +1185,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
name: "a pod that fits on both nodes when lower priority pods are preempted",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(largeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1195,7 +1196,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "node with min highest priority pod is picked",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1210,7 +1211,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "when highest priorities are the same, minimum sum of priorities is picked",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1225,7 +1226,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "when highest priority and sum are the same, minimum number of pods is picked",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1245,7 +1246,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
// pickOneNodeForPreemption adjusts pod priorities when finding the sum of the victims. This
|
||||
// test ensures that the logic works correctly.
|
||||
name: "sum of adjusted priorities is considered",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1262,7 +1263,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "non-overlapping lowest high priority, sum priorities, and number of pods",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3", "node4"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(veryHighPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1283,7 +1284,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "same priority, same number of victims, different start time for each node's pod",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1298,7 +1299,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "same priority, same number of victims, different start time for all pods",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1313,7 +1314,7 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "different priority, same number of victims, different start time for all pods",
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
|
||||
pods: []*v1.Pod{
|
||||
@@ -1346,12 +1347,12 @@ func TestSelectBestCandidate(t *testing.T) {
|
||||
logger, ctx := ktesting.NewTestContext(t)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
fwk, err := st.NewFramework(
|
||||
fwk, err := tf.NewFramework(
|
||||
ctx,
|
||||
[]st.RegisterPluginFunc{
|
||||
[]tf.RegisterPluginFunc{
|
||||
tt.registerPlugin,
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
},
|
||||
"",
|
||||
frameworkruntime.WithPodNominator(internalqueue.NewPodNominator(informerFactory.Core().V1().Pods().Lister())),
|
||||
@@ -1493,11 +1494,11 @@ func TestPodEligibleToPreemptOthers(t *testing.T) {
|
||||
for _, n := range test.nodes {
|
||||
nodes = append(nodes, st.MakeNode().Name(n).Obj())
|
||||
}
|
||||
registeredPlugins := []st.RegisterPluginFunc{
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
registeredPlugins := []tf.RegisterPluginFunc{
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
}
|
||||
f, err := st.NewFramework(ctx, registeredPlugins, "",
|
||||
f, err := tf.NewFramework(ctx, registeredPlugins, "",
|
||||
frameworkruntime.WithSnapshotSharedLister(internalcache.NewSnapshot(test.pods, nodes)),
|
||||
frameworkruntime.WithLogger(logger),
|
||||
)
|
||||
@@ -1516,9 +1517,9 @@ func TestPreempt(t *testing.T) {
|
||||
name string
|
||||
pod *v1.Pod
|
||||
pods []*v1.Pod
|
||||
extenders []*st.FakeExtender
|
||||
extenders []*tf.FakeExtender
|
||||
nodeNames []string
|
||||
registerPlugin st.RegisterPluginFunc
|
||||
registerPlugin tf.RegisterPluginFunc
|
||||
want *framework.PostFilterResult
|
||||
expectedPods []string // list of preempted pods
|
||||
}{
|
||||
@@ -1532,7 +1533,7 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p3.1").UID("p3.1").Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node1"),
|
||||
expectedPods: []string{"p1.1", "p1.2"},
|
||||
},
|
||||
@@ -1550,7 +1551,7 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p-x2").UID("p-x2").Namespace(v1.NamespaceDefault).Node("node-x").Label("foo", "").Priority(highPriority).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node-a/zone1", "node-b/zone1", "node-x/zone2"},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(podtopologyspread.Name, podTopologySpreadFunc, "PreFilter", "Filter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(podtopologyspread.Name, podTopologySpreadFunc, "PreFilter", "Filter"),
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node-b"),
|
||||
expectedPods: []string{"p-b1"},
|
||||
},
|
||||
@@ -1563,17 +1564,17 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(largeRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
extenders: []*st.FakeExtender{
|
||||
extenders: []*tf.FakeExtender{
|
||||
{
|
||||
ExtenderName: "FakeExtender1",
|
||||
Predicates: []st.FitPredicate{st.TruePredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.TruePredicateExtender},
|
||||
},
|
||||
{
|
||||
ExtenderName: "FakeExtender2",
|
||||
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.Node1PredicateExtender},
|
||||
},
|
||||
},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node1"),
|
||||
expectedPods: []string{"p1.1", "p1.2"},
|
||||
},
|
||||
@@ -1586,13 +1587,13 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
extenders: []*st.FakeExtender{
|
||||
extenders: []*tf.FakeExtender{
|
||||
{
|
||||
ExtenderName: "FakeExtender1",
|
||||
Predicates: []st.FitPredicate{st.FalsePredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.FalsePredicateExtender},
|
||||
},
|
||||
},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: nil,
|
||||
expectedPods: []string{},
|
||||
},
|
||||
@@ -1605,18 +1606,18 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
extenders: []*st.FakeExtender{
|
||||
extenders: []*tf.FakeExtender{
|
||||
{
|
||||
Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.ErrorPredicateExtender},
|
||||
Ignorable: true,
|
||||
ExtenderName: "FakeExtender1",
|
||||
},
|
||||
{
|
||||
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.Node1PredicateExtender},
|
||||
ExtenderName: "FakeExtender2",
|
||||
},
|
||||
},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node1"),
|
||||
expectedPods: []string{"p1.1", "p1.2"},
|
||||
},
|
||||
@@ -1629,18 +1630,18 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2"},
|
||||
extenders: []*st.FakeExtender{
|
||||
extenders: []*tf.FakeExtender{
|
||||
{
|
||||
ExtenderName: "FakeExtender1",
|
||||
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.Node1PredicateExtender},
|
||||
UnInterested: true,
|
||||
},
|
||||
{
|
||||
ExtenderName: "FakeExtender2",
|
||||
Predicates: []st.FitPredicate{st.TruePredicateExtender},
|
||||
Predicates: []tf.FitPredicate{tf.TruePredicateExtender},
|
||||
},
|
||||
},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
// sum of priorities of all victims on node1 is larger than node2, node2 is chosen.
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node2"),
|
||||
expectedPods: []string{"p2.1"},
|
||||
@@ -1655,7 +1656,7 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: nil,
|
||||
expectedPods: nil,
|
||||
},
|
||||
@@ -1669,7 +1670,7 @@ func TestPreempt(t *testing.T) {
|
||||
st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
|
||||
},
|
||||
nodeNames: []string{"node1", "node2", "node3"},
|
||||
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
registerPlugin: tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
|
||||
want: framework.NewPostFilterResultWithNominatedNode("node1"),
|
||||
expectedPods: []string{"p1.1", "p1.2"},
|
||||
},
|
||||
@@ -1730,12 +1731,12 @@ func TestPreempt(t *testing.T) {
|
||||
extender.CachedNodeNameToInfo = cachedNodeInfoMap
|
||||
extenders = append(extenders, extender)
|
||||
}
|
||||
fwk, err := st.NewFramework(
|
||||
fwk, err := tf.NewFramework(
|
||||
ctx,
|
||||
[]st.RegisterPluginFunc{
|
||||
[]tf.RegisterPluginFunc{
|
||||
test.registerPlugin,
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
},
|
||||
"",
|
||||
frameworkruntime.WithClientSet(client),
|
||||
|
||||
@@ -33,8 +33,8 @@ import (
|
||||
csitrans "k8s.io/csi-translation-lib"
|
||||
csilibplugins "k8s.io/csi-translation-lib/plugins"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework"
|
||||
fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake"
|
||||
st "k8s.io/kubernetes/pkg/scheduler/testing"
|
||||
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
"k8s.io/kubernetes/test/utils/ktesting"
|
||||
"k8s.io/utils/pointer"
|
||||
@@ -641,8 +641,8 @@ func TestCSILimits(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func getFakeCSIPVLister(volumeName string, driverNames ...string) fakeframework.PersistentVolumeLister {
|
||||
pvLister := fakeframework.PersistentVolumeLister{}
|
||||
func getFakeCSIPVLister(volumeName string, driverNames ...string) tf.PersistentVolumeLister {
|
||||
pvLister := tf.PersistentVolumeLister{}
|
||||
for _, driver := range driverNames {
|
||||
for j := 0; j < 4; j++ {
|
||||
volumeHandle := fmt.Sprintf("%s-%s-%d", volumeName, driver, j)
|
||||
@@ -686,8 +686,8 @@ func getFakeCSIPVLister(volumeName string, driverNames ...string) fakeframework.
|
||||
return pvLister
|
||||
}
|
||||
|
||||
func getFakeCSIPVCLister(volumeName, scName string, driverNames ...string) fakeframework.PersistentVolumeClaimLister {
|
||||
pvcLister := fakeframework.PersistentVolumeClaimLister{}
|
||||
func getFakeCSIPVCLister(volumeName, scName string, driverNames ...string) tf.PersistentVolumeClaimLister {
|
||||
pvcLister := tf.PersistentVolumeClaimLister{}
|
||||
for _, driver := range driverNames {
|
||||
for j := 0; j < 4; j++ {
|
||||
v := fmt.Sprintf("%s-%s-%d", volumeName, driver, j)
|
||||
@@ -729,8 +729,8 @@ func enableMigrationOnNode(csiNode *storagev1.CSINode, pluginName string) {
|
||||
csiNode.Annotations = nodeInfoAnnotations
|
||||
}
|
||||
|
||||
func getFakeCSIStorageClassLister(scName, provisionerName string) fakeframework.StorageClassLister {
|
||||
return fakeframework.StorageClassLister{
|
||||
func getFakeCSIStorageClassLister(scName, provisionerName string) tf.StorageClassLister {
|
||||
return tf.StorageClassLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: scName},
|
||||
Provisioner: provisionerName,
|
||||
@@ -738,8 +738,8 @@ func getFakeCSIStorageClassLister(scName, provisionerName string) fakeframework.
|
||||
}
|
||||
}
|
||||
|
||||
func getFakeCSINodeLister(csiNode *storagev1.CSINode) fakeframework.CSINodeLister {
|
||||
csiNodeLister := fakeframework.CSINodeLister{}
|
||||
func getFakeCSINodeLister(csiNode *storagev1.CSINode) tf.CSINodeLister {
|
||||
csiNodeLister := tf.CSINodeLister{}
|
||||
if csiNode != nil {
|
||||
csiNodeLister = append(csiNodeLister, *csiNode.DeepCopy())
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
csilibplugins "k8s.io/csi-translation-lib/plugins"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework"
|
||||
fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
|
||||
st "k8s.io/kubernetes/pkg/scheduler/testing"
|
||||
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
@@ -974,8 +974,8 @@ func TestGetMaxVols(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func getFakePVCLister(filterName string) fakeframework.PersistentVolumeClaimLister {
|
||||
return fakeframework.PersistentVolumeClaimLister{
|
||||
func getFakePVCLister(filterName string) tf.PersistentVolumeClaimLister {
|
||||
return tf.PersistentVolumeClaimLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "some" + filterName + "Vol"},
|
||||
Spec: v1.PersistentVolumeClaimSpec{
|
||||
@@ -1035,8 +1035,8 @@ func getFakePVCLister(filterName string) fakeframework.PersistentVolumeClaimList
|
||||
}
|
||||
}
|
||||
|
||||
func getFakePVLister(filterName string) fakeframework.PersistentVolumeLister {
|
||||
return fakeframework.PersistentVolumeLister{
|
||||
func getFakePVLister(filterName string) tf.PersistentVolumeLister {
|
||||
return tf.PersistentVolumeLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "some" + filterName + "Vol"},
|
||||
Spec: v1.PersistentVolumeSpec{
|
||||
|
||||
@@ -29,10 +29,10 @@ import (
|
||||
"k8s.io/klog/v2/ktesting"
|
||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework"
|
||||
fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake"
|
||||
plugintesting "k8s.io/kubernetes/pkg/scheduler/framework/plugins/testing"
|
||||
"k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||
st "k8s.io/kubernetes/pkg/scheduler/testing"
|
||||
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
|
||||
)
|
||||
|
||||
func createPodWithVolume(pod, pv, pvc string) *v1.Pod {
|
||||
@@ -40,7 +40,7 @@ func createPodWithVolume(pod, pv, pvc string) *v1.Pod {
|
||||
}
|
||||
|
||||
func TestSingleZone(t *testing.T) {
|
||||
pvLister := fakeframework.PersistentVolumeLister{
|
||||
pvLister := tf.PersistentVolumeLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "Vol_1", Labels: map[string]string{v1.LabelFailureDomainBetaZone: "us-west1-a"}},
|
||||
},
|
||||
@@ -61,7 +61,7 @@ func TestSingleZone(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
pvcLister := fakeframework.PersistentVolumeClaimLister{
|
||||
pvcLister := tf.PersistentVolumeClaimLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "PVC_1", Namespace: "default"},
|
||||
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_1"},
|
||||
@@ -283,7 +283,7 @@ func TestSingleZone(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMultiZone(t *testing.T) {
|
||||
pvLister := fakeframework.PersistentVolumeLister{
|
||||
pvLister := tf.PersistentVolumeLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "Vol_1", Labels: map[string]string{v1.LabelFailureDomainBetaZone: "us-west1-a"}},
|
||||
},
|
||||
@@ -301,7 +301,7 @@ func TestMultiZone(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
pvcLister := fakeframework.PersistentVolumeClaimLister{
|
||||
pvcLister := tf.PersistentVolumeClaimLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "PVC_1", Namespace: "default"},
|
||||
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_1"},
|
||||
@@ -423,7 +423,7 @@ func TestWithBinding(t *testing.T) {
|
||||
classImmediate = "Class_Immediate"
|
||||
)
|
||||
|
||||
scLister := fakeframework.StorageClassLister{
|
||||
scLister := tf.StorageClassLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: classImmediate},
|
||||
},
|
||||
@@ -433,13 +433,13 @@ func TestWithBinding(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
pvLister := fakeframework.PersistentVolumeLister{
|
||||
pvLister := tf.PersistentVolumeLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "Vol_1", Labels: map[string]string{v1.LabelFailureDomainBetaZone: "us-west1-a"}},
|
||||
},
|
||||
}
|
||||
|
||||
pvcLister := fakeframework.PersistentVolumeClaimLister{
|
||||
pvcLister := tf.PersistentVolumeClaimLister{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "PVC_1", Namespace: "default"},
|
||||
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_1"},
|
||||
|
||||
@@ -48,6 +48,7 @@ import (
|
||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
|
||||
st "k8s.io/kubernetes/pkg/scheduler/testing"
|
||||
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -268,9 +269,9 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
logger, _ := ktesting.NewTestContext(t)
|
||||
registeredPlugins := append([]st.RegisterPluginFunc{
|
||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New)},
|
||||
st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
registeredPlugins := append([]tf.RegisterPluginFunc{
|
||||
tf.RegisterQueueSortPlugin(queuesort.Name, queuesort.New)},
|
||||
tf.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New),
|
||||
)
|
||||
var objs []runtime.Object
|
||||
for _, p := range append(tt.testPods, tt.initPods...) {
|
||||
@@ -284,7 +285,7 @@ func TestDryRunPreemption(t *testing.T) {
|
||||
_, ctx := ktesting.NewTestContext(t)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
fwk, err := st.NewFramework(
|
||||
fwk, err := tf.NewFramework(
|
||||
ctx,
|
||||
registeredPlugins, "",
|
||||
frameworkruntime.WithPodNominator(internalqueue.NewPodNominator(informerFactory.Core().V1().Pods().Lister())),
|
||||
|
||||
Reference in New Issue
Block a user