@@ -21,6 +21,7 @@ import (
21
21
"fmt"
22
22
"math"
23
23
"strconv"
24
+ "strings"
24
25
"testing"
25
26
"time"
26
27
@@ -33,12 +34,14 @@ import (
33
34
"k8s.io/apimachinery/pkg/util/wait"
34
35
"k8s.io/client-go/informers"
35
36
clientsetfake "k8s.io/client-go/kubernetes/fake"
37
+ pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util"
36
38
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
37
39
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder"
38
40
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
39
41
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread"
40
42
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
41
43
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread"
44
+ "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding"
42
45
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
43
46
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
44
47
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
@@ -416,11 +419,17 @@ func TestGenericScheduler(t *testing.T) {
416
419
// Pod with existing PVC
417
420
registerPlugins : []st.RegisterPluginFunc {
418
421
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
422
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
419
423
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
420
424
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
421
425
},
422
426
nodes : []string {"machine1" , "machine2" },
423
- pvcs : []v1.PersistentVolumeClaim {{ObjectMeta : metav1.ObjectMeta {Name : "existingPVC" , UID : types .UID ("existingPVC" ), Namespace : v1 .NamespaceDefault }}},
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
+ },
424
433
pod : & v1.Pod {
425
434
ObjectMeta : metav1.ObjectMeta {Name : "ignore" , UID : types .UID ("ignore" ), Namespace : v1 .NamespaceDefault },
426
435
Spec : v1.PodSpec {
@@ -443,6 +452,7 @@ func TestGenericScheduler(t *testing.T) {
443
452
// Pod with non existing PVC
444
453
registerPlugins : []st.RegisterPluginFunc {
445
454
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
455
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
446
456
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
447
457
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
448
458
},
@@ -468,6 +478,7 @@ func TestGenericScheduler(t *testing.T) {
468
478
// Pod with deleting PVC
469
479
registerPlugins : []st.RegisterPluginFunc {
470
480
st .RegisterQueueSortPlugin (queuesort .Name , queuesort .New ),
481
+ st .RegisterPreFilterPlugin (volumebinding .Name , volumebinding .New ),
471
482
st .RegisterFilterPlugin ("TrueFilter" , st .NewTrueFilterPlugin ),
472
483
st .RegisterBindPlugin (defaultbinder .Name , defaultbinder .New ),
473
484
},
@@ -726,10 +737,16 @@ func TestGenericScheduler(t *testing.T) {
726
737
cache .AddNode (node )
727
738
}
728
739
740
+ ctx := context .Background ()
729
741
cs := clientsetfake .NewSimpleClientset ()
730
742
informerFactory := informers .NewSharedInformerFactory (cs , 0 )
731
- for i := range test .pvcs {
732
- informerFactory .Core ().V1 ().PersistentVolumeClaims ().Informer ().GetStore ().Add (& test .pvcs [i ])
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
+ }
733
750
}
734
751
snapshot := internalcache .NewSnapshot (test .pods , nodes )
735
752
fwk , err := st .NewFramework (
@@ -749,9 +766,13 @@ func TestGenericScheduler(t *testing.T) {
749
766
cache ,
750
767
snapshot ,
751
768
[]framework.Extender {},
752
- schedulerapi .DefaultPercentageOfNodesToScore )
753
- result , err := scheduler .Schedule (context .Background (), prof , framework .NewCycleState (), test .pod )
754
- if err != test .wErr && err .Error () != test .wErr .Error () {
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 ()) {
755
776
t .Errorf ("Unexpected error: %v, expected: %v" , err .Error (), test .wErr )
756
777
}
757
778
if test .expectedHosts != nil && ! test .expectedHosts .Has (result .SuggestedHost ) {
0 commit comments