@@ -20,8 +20,8 @@ import (
20
20
"context"
21
21
"fmt"
22
22
"math"
23
- "reflect"
24
23
"strconv"
24
+ "strings"
25
25
"testing"
26
26
"time"
27
27
@@ -34,15 +34,16 @@ import (
34
34
"k8s.io/apimachinery/pkg/util/wait"
35
35
"k8s.io/client-go/informers"
36
36
clientsetfake "k8s.io/client-go/kubernetes/fake"
37
+ pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util"
37
38
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
38
39
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder"
39
40
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
40
41
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread"
41
42
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
42
43
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread"
44
+ "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding"
43
45
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
44
46
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
45
- fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake"
46
47
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
47
48
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
48
49
"k8s.io/kubernetes/pkg/scheduler/profile"
@@ -418,13 +419,19 @@ func TestGenericScheduler(t *testing.T) {
418
419
// Pod with existing PVC
419
420
registerPlugins : []st.RegisterPluginFunc {
420
421
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
422
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
421
423
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
422
424
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
423
425
},
424
426
nodes : []string {"machine1" , "machine2" },
425
- pvcs : []v1.PersistentVolumeClaim {{ObjectMeta : metav1.ObjectMeta {Name : "existingPVC" }}},
427
+ pvcs : []v1.PersistentVolumeClaim {
428
+ {
429
+ ObjectMeta : metav1.ObjectMeta {Name : "existingPVC" , UID : types .UID ("existingPVC" ), Namespace : v1 .NamespaceDefault },
430
+ Spec : v1.PersistentVolumeClaimSpec {VolumeName : "existingPV" },
431
+ },
432
+ },
426
433
pod : & v1.Pod {
427
- ObjectMeta : metav1.ObjectMeta {Name : "ignore" , UID : types .UID ("ignore" )},
434
+ ObjectMeta : metav1.ObjectMeta {Name : "ignore" , UID : types .UID ("ignore" ), Namespace : v1 . NamespaceDefault },
428
435
Spec : v1.PodSpec {
429
436
Volumes : []v1.Volume {
430
437
{
@@ -445,6 +452,7 @@ func TestGenericScheduler(t *testing.T) {
445
452
// Pod with non existing PVC
446
453
registerPlugins : []st.RegisterPluginFunc {
447
454
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
455
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
448
456
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
449
457
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
450
458
},
@@ -470,13 +478,14 @@ func TestGenericScheduler(t *testing.T) {
470
478
// Pod with deleting PVC
471
479
registerPlugins : []st.RegisterPluginFunc {
472
480
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
481
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
473
482
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
474
483
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
475
484
},
476
485
nodes : []string {"machine1" , "machine2" },
477
- pvcs : []v1.PersistentVolumeClaim {{ObjectMeta : metav1.ObjectMeta {Name : "existingPVC" , DeletionTimestamp : & metav1.Time {}}}},
486
+ pvcs : []v1.PersistentVolumeClaim {{ObjectMeta : metav1.ObjectMeta {Name : "existingPVC" , UID : types . UID ( "existingPVC" ), Namespace : v1 . NamespaceDefault , DeletionTimestamp : & metav1.Time {}}}},
478
487
pod : & v1.Pod {
479
- ObjectMeta : metav1.ObjectMeta {Name : "ignore" , UID : types .UID ("ignore" )},
488
+ ObjectMeta : metav1.ObjectMeta {Name : "ignore" , UID : types .UID ("ignore" ), Namespace : v1 . NamespaceDefault },
480
489
Spec : v1.PodSpec {
481
490
Volumes : []v1.Volume {
482
491
{
@@ -728,10 +737,22 @@ func TestGenericScheduler(t *testing.T) {
728
737
cache .AddNode (node )
729
738
}
730
739
740
+ ctx := context .Background ()
741
+ cs := clientsetfake .NewSimpleClientset ()
742
+ informerFactory := informers .NewSharedInformerFactory (cs , 0 )
743
+ for _ , pvc := range test .pvcs {
744
+ metav1 .SetMetaDataAnnotation (& pvc .ObjectMeta , pvutil .AnnBindCompleted , "true" )
745
+ cs .CoreV1 ().PersistentVolumeClaims (pvc .Namespace ).Create (ctx , & pvc , metav1.CreateOptions {})
746
+ if pvName := pvc .Spec .VolumeName ; pvName != "" {
747
+ pv := v1.PersistentVolume {ObjectMeta : metav1.ObjectMeta {Name : pvName }}
748
+ cs .CoreV1 ().PersistentVolumes ().Create (ctx , & pv , metav1.CreateOptions {})
749
+ }
750
+ }
731
751
snapshot := internalcache .NewSnapshot (test .pods , nodes )
732
752
fwk , err := st .NewFramework (
733
753
test .registerPlugins ,
734
754
frameworkruntime .WithSnapshotSharedLister (snapshot ),
755
+ frameworkruntime .WithInformerFactory (informerFactory ),
735
756
frameworkruntime .WithPodNominator (internalqueue .NewPodNominator ()),
736
757
)
737
758
if err != nil {
@@ -741,19 +762,18 @@ func TestGenericScheduler(t *testing.T) {
741
762
Framework : fwk ,
742
763
}
743
764
744
- var pvcs []v1.PersistentVolumeClaim
745
- pvcs = append (pvcs , test .pvcs ... )
746
- pvcLister := fakeframework .PersistentVolumeClaimLister (pvcs )
747
-
748
765
scheduler := NewGenericScheduler (
749
766
cache ,
750
767
snapshot ,
751
768
[]framework.Extender {},
752
- pvcLister ,
753
- schedulerapi .DefaultPercentageOfNodesToScore )
754
- result , err := scheduler .Schedule (context .Background (), prof , framework .NewCycleState (), test .pod )
755
- if ! reflect .DeepEqual (err , test .wErr ) {
756
- t .Errorf ("want: %v, got: %v" , test .wErr , err )
769
+ schedulerapi .DefaultPercentageOfNodesToScore ,
770
+ )
771
+ informerFactory .Start (ctx .Done ())
772
+ informerFactory .WaitForCacheSync (ctx .Done ())
773
+
774
+ result , err := scheduler .Schedule (ctx , prof , framework .NewCycleState (), test .pod )
775
+ if err != test .wErr && ! strings .Contains (err .Error (), test .wErr .Error ()) {
776
+ t .Errorf ("Unexpected error: %v, expected: %v" , err .Error (), test .wErr )
757
777
}
758
778
if test .expectedHosts != nil && ! test .expectedHosts .Has (result .SuggestedHost ) {
759
779
t .Errorf ("Expected: %s, got: %s" , test .expectedHosts , result .SuggestedHost )
@@ -775,7 +795,7 @@ func makeScheduler(nodes []*v1.Node) *genericScheduler {
775
795
s := NewGenericScheduler (
776
796
cache ,
777
797
emptySnapshot ,
778
- nil , nil ,
798
+ nil ,
779
799
schedulerapi .DefaultPercentageOfNodesToScore )
780
800
cache .UpdateSnapshot (s .(* genericScheduler ).nodeInfoSnapshot )
781
801
return s .(* genericScheduler )
@@ -1069,7 +1089,6 @@ func TestZeroRequest(t *testing.T) {
1069
1089
nil ,
1070
1090
emptySnapshot ,
1071
1091
[]framework.Extender {},
1072
- nil ,
1073
1092
schedulerapi .DefaultPercentageOfNodesToScore ).(* genericScheduler )
1074
1093
scheduler .nodeInfoSnapshot = snapshot
1075
1094
0 commit comments