From 608911d5ac056247831f3bffcada4d714c9234d8 Mon Sep 17 00:00:00 2001 From: wangqingcan Date: Tue, 9 Oct 2018 10:34:34 +0800 Subject: [PATCH] add test for new constructor --- cmd/kube-scheduler/app/server.go | 24 ++++++++++++----- pkg/scheduler/BUILD | 5 ++++ pkg/scheduler/scheduler.go | 1 - pkg/scheduler/scheduler_test.go | 46 ++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index f33835d9139..7af5c7658cd 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -147,14 +147,24 @@ func run(cmd *cobra.Command, args []string, opts *options.Options) error { } // Create the scheduler. - sched, err := scheduler.New(c.Client, c.InformerFactory.Core().V1().Nodes(), c.PodInformer, - c.InformerFactory.Core().V1().PersistentVolumes(), c.InformerFactory.Core().V1().PersistentVolumeClaims(), - c.InformerFactory.Core().V1().ReplicationControllers(), c.InformerFactory.Apps().V1().ReplicaSets(), - c.InformerFactory.Apps().V1().StatefulSets(), c.InformerFactory.Core().V1().Services(), - c.InformerFactory.Policy().V1beta1().PodDisruptionBudgets(), storageClassInformer, c.Recorder, c.ComponentConfig.AlgorithmSource, - scheduler.WithName(c.ComponentConfig.SchedulerName), scheduler.WithHardPodAffinitySymmetricWeight(c.ComponentConfig.HardPodAffinitySymmetricWeight), + sched, err := scheduler.New(c.Client, + c.InformerFactory.Core().V1().Nodes(), + c.PodInformer, + c.InformerFactory.Core().V1().PersistentVolumes(), + c.InformerFactory.Core().V1().PersistentVolumeClaims(), + c.InformerFactory.Core().V1().ReplicationControllers(), + c.InformerFactory.Apps().V1().ReplicaSets(), + c.InformerFactory.Apps().V1().StatefulSets(), + c.InformerFactory.Core().V1().Services(), + c.InformerFactory.Policy().V1beta1().PodDisruptionBudgets(), + storageClassInformer, + c.Recorder, + c.ComponentConfig.AlgorithmSource, + scheduler.WithName(c.ComponentConfig.SchedulerName), + scheduler.WithHardPodAffinitySymmetricWeight(c.ComponentConfig.HardPodAffinitySymmetricWeight), scheduler.WithEquivalenceClassCacheEnabled(c.ComponentConfig.EnableContentionProfiling), - scheduler.WithPreemptionDisabled(c.ComponentConfig.DisablePreemption), scheduler.WithPercentageOfNodesToScore(c.ComponentConfig.PercentageOfNodesToScore), + scheduler.WithPreemptionDisabled(c.ComponentConfig.DisablePreemption), + scheduler.WithPercentageOfNodesToScore(c.ComponentConfig.PercentageOfNodesToScore), scheduler.WithBindTimeoutSeconds(*c.ComponentConfig.BindTimeoutSeconds)) if err != nil { return err diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index ec840b4b9af..7880deda529 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -48,6 +48,8 @@ go_test( "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/api:go_default_library", + "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/cache:go_default_library", "//pkg/scheduler/core:go_default_library", "//pkg/scheduler/factory:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", @@ -60,8 +62,11 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", ], diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 7074768a466..a30d5b50dd5 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -134,7 +134,6 @@ var defaultSchedulerOptions = schedulerOptions{ } // New returns a Scheduler -// TODO:Once we have the nice constructor,we should modify cmd/kube-scheduler to use it. func New(client clientset.Interface, nodeInformer coreinformers.NodeInformer, podInformer coreinformers.PodInformer, diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index 7960e5a39c9..79219115fed 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -29,8 +29,11 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + clientsetfake "k8s.io/client-go/kubernetes/fake" clientcache "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/legacyscheme" @@ -38,6 +41,8 @@ import ( "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/api" + kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" + schedulercache "k8s.io/kubernetes/pkg/scheduler/cache" "k8s.io/kubernetes/pkg/scheduler/core" "k8s.io/kubernetes/pkg/scheduler/factory" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" @@ -120,6 +125,14 @@ func podWithResources(id, desiredHost string, limits v1.ResourceList, requests v return pod } +func PredicateOne(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) { + return true, nil, nil +} + +func PriorityOne(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*v1.Node) (api.HostPriorityList, error) { + return []api.HostPriority{}, nil +} + type mockScheduler struct { machine string err error @@ -140,6 +153,39 @@ func (es mockScheduler) Preempt(pod *v1.Pod, nodeLister algorithm.NodeLister, sc return nil, nil, nil, nil } +func TestSchedulerCreation(t *testing.T) { + client := clientsetfake.NewSimpleClientset() + informerFactory := informers.NewSharedInformerFactory(client, 0) + + testSource := "testProvider" + eventBroadcaster := record.NewBroadcaster() + eventBroadcaster.StartLogging(t.Logf).Stop() + + defaultBindTimeout := int64(30) + factory.RegisterFitPredicate("PredicateOne", PredicateOne) + factory.RegisterPriorityFunction("PriorityOne", PriorityOne, 1) + factory.RegisterAlgorithmProvider(testSource, sets.NewString("PredicateOne"), sets.NewString("PriorityOne")) + + _, err := New(client, + informerFactory.Core().V1().Nodes(), + factory.NewPodInformer(client, 0), + informerFactory.Core().V1().PersistentVolumes(), + informerFactory.Core().V1().PersistentVolumeClaims(), + informerFactory.Core().V1().ReplicationControllers(), + informerFactory.Apps().V1().ReplicaSets(), + informerFactory.Apps().V1().StatefulSets(), + informerFactory.Core().V1().Services(), + informerFactory.Policy().V1beta1().PodDisruptionBudgets(), + informerFactory.Storage().V1().StorageClasses(), + eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.EventSource{Component: "scheduler"}), + kubeschedulerconfig.SchedulerAlgorithmSource{Provider: &testSource}, + WithBindTimeoutSeconds(defaultBindTimeout)) + + if err != nil { + t.Fatalf("Failed to create scheduler: %v", err) + } +} + func TestScheduler(t *testing.T) { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(t.Logf).Stop()