related test update

This commit is contained in:
lichuqiang 2018-08-15 15:42:58 +08:00
parent b4a57f6855
commit 4c43d626f2
7 changed files with 180 additions and 203 deletions

View File

@ -39,8 +39,8 @@ func TestDropAlphaFields(t *testing.T) {
} }
// Test that field gets dropped when feature gate is not set // Test that field gets dropped when feature gate is not set
if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false,DynamicProvisioningScheduling=false"); err != nil { if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false"); err != nil {
t.Fatalf("Failed to set feature gate for VolumeScheduling or DynamicProvisioningScheduling: %v", err) t.Fatalf("Failed to set feature gate for VolumeScheduling: %v", err)
} }
class := &storage.StorageClass{ class := &storage.StorageClass{
VolumeBindingMode: &bindingMode, VolumeBindingMode: &bindingMode,
@ -59,8 +59,8 @@ func TestDropAlphaFields(t *testing.T) {
VolumeBindingMode: &bindingMode, VolumeBindingMode: &bindingMode,
AllowedTopologies: allowedTopologies, AllowedTopologies: allowedTopologies,
} }
if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true,DynamicProvisioningScheduling=true"); err != nil { if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true"); err != nil {
t.Fatalf("Failed to set feature gate for VolumeScheduling or DynamicProvisioningScheduling: %v", err) t.Fatalf("Failed to set feature gate for VolumeScheduling: %v", err)
} }
DropDisabledAlphaFields(class) DropDisabledAlphaFields(class)
if class.VolumeBindingMode != &bindingMode { if class.VolumeBindingMode != &bindingMode {
@ -70,7 +70,7 @@ func TestDropAlphaFields(t *testing.T) {
t.Errorf("AllowedTopologies field got unexpectantly modified: %+v", class.AllowedTopologies) t.Errorf("AllowedTopologies field got unexpectantly modified: %+v", class.AllowedTopologies)
} }
if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false,DynamicProvisioningScheduling=false"); err != nil { if err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false"); err != nil {
t.Fatalf("Failed to disable feature gate for VolumeScheduling or DynamicProvisioningScheduling: %v", err) t.Fatalf("Failed to disable feature gate for VolumeScheduling: %v", err)
} }
} }

View File

@ -827,73 +827,67 @@ func TestValidateAllowedTopologies(t *testing.T) {
cases := map[string]bindingTest{ cases := map[string]bindingTest{
"no topology": { "no topology": {
class: makeClass(nil, nil), class: makeClass(&waitingMode, nil),
shouldSucceed: true, shouldSucceed: true,
}, },
"valid topology": { "valid topology": {
class: makeClass(nil, validTopology), class: makeClass(&waitingMode, validTopology),
shouldSucceed: true, shouldSucceed: true,
}, },
"topology invalid key": { "topology invalid key": {
class: makeClass(nil, topologyInvalidKey), class: makeClass(&waitingMode, topologyInvalidKey),
shouldSucceed: false, shouldSucceed: false,
}, },
"topology lack of values": { "topology lack of values": {
class: makeClass(nil, topologyLackOfValues), class: makeClass(&waitingMode, topologyLackOfValues),
shouldSucceed: false, shouldSucceed: false,
}, },
"duplicate TopologySelectorRequirement values": { "duplicate TopologySelectorRequirement values": {
class: makeClass(nil, topologyDupValues), class: makeClass(&waitingMode, topologyDupValues),
shouldSucceed: false, shouldSucceed: false,
}, },
"multiple TopologySelectorRequirement values": { "multiple TopologySelectorRequirement values": {
class: makeClass(nil, topologyMultiValues), class: makeClass(&waitingMode, topologyMultiValues),
shouldSucceed: true, shouldSucceed: true,
}, },
"empty MatchLabelExpressions": { "empty MatchLabelExpressions": {
class: makeClass(nil, topologyEmptyMatchLabelExpressions), class: makeClass(&waitingMode, topologyEmptyMatchLabelExpressions),
shouldSucceed: false, shouldSucceed: false,
}, },
"duplicate MatchLabelExpression keys": { "duplicate MatchLabelExpression keys": {
class: makeClass(nil, topologyDupKeys), class: makeClass(&waitingMode, topologyDupKeys),
shouldSucceed: false, shouldSucceed: false,
}, },
"duplicate MatchLabelExpression keys but across separate terms": { "duplicate MatchLabelExpression keys but across separate terms": {
class: makeClass(nil, topologyMultiTerm), class: makeClass(&waitingMode, topologyMultiTerm),
shouldSucceed: true, shouldSucceed: true,
}, },
"duplicate AllowedTopologies terms - identical": { "duplicate AllowedTopologies terms - identical": {
class: makeClass(nil, topologyDupTermsIdentical), class: makeClass(&waitingMode, topologyDupTermsIdentical),
shouldSucceed: false, shouldSucceed: false,
}, },
"two AllowedTopologies terms, with a pair of the same MatchLabelExpressions and a pair of different ones": { "two AllowedTopologies terms, with a pair of the same MatchLabelExpressions and a pair of different ones": {
class: makeClass(nil, topologyExprsOneSameOneDiff), class: makeClass(&waitingMode, topologyExprsOneSameOneDiff),
shouldSucceed: true, shouldSucceed: true,
}, },
"two AllowedTopologies terms, with a pair of the same Values and a pair of different ones": { "two AllowedTopologies terms, with a pair of the same Values and a pair of different ones": {
class: makeClass(nil, topologyValuesOneSameOneDiff), class: makeClass(&waitingMode, topologyValuesOneSameOneDiff),
shouldSucceed: true, shouldSucceed: true,
}, },
"duplicate AllowedTopologies terms - different MatchLabelExpressions order": { "duplicate AllowedTopologies terms - different MatchLabelExpressions order": {
class: makeClass(nil, topologyDupTermsDiffExprOrder), class: makeClass(&waitingMode, topologyDupTermsDiffExprOrder),
shouldSucceed: false, shouldSucceed: false,
}, },
"duplicate AllowedTopologies terms - different TopologySelectorRequirement values order": { "duplicate AllowedTopologies terms - different TopologySelectorRequirement values order": {
class: makeClass(nil, topologyDupTermsDiffValueOrder), class: makeClass(&waitingMode, topologyDupTermsDiffValueOrder),
shouldSucceed: false, shouldSucceed: false,
}, },
} }
// Disable VolumeScheduling so nil VolumeBindingMode doesn't fail to validate.
err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false")
if err != nil {
t.Fatalf("Failed to disable feature gate for VolumeScheduling: %v", err)
}
// TODO: remove when feature gate not required // TODO: remove when feature gate not required
err = utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=true") err := utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true")
if err != nil { if err != nil {
t.Fatalf("Failed to enable feature gate for DynamicProvisioningScheduling: %v", err) t.Fatalf("Failed to enable feature gate for VolumeScheduling: %v", err)
} }
for testName, testCase := range cases { for testName, testCase := range cases {
@ -906,9 +900,9 @@ func TestValidateAllowedTopologies(t *testing.T) {
} }
} }
err = utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=false") err = utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false")
if err != nil { if err != nil {
t.Fatalf("Failed to disable feature gate for DynamicProvisioningScheduling: %v", err) t.Fatalf("Failed to disable feature gate for VolumeScheduling: %v", err)
} }
for testName, testCase := range cases { for testName, testCase := range cases {

View File

@ -237,12 +237,21 @@ func addVolumeAnnotation(volume *v1.PersistentVolume, annName, annValue string)
return volume return volume
} }
func makePVCClass(scName *string) *v1.PersistentVolumeClaim { func makePVCClass(scName *string, hasSelectNodeAnno bool) *v1.PersistentVolumeClaim {
return &v1.PersistentVolumeClaim{ claim := &v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{},
},
Spec: v1.PersistentVolumeClaimSpec{ Spec: v1.PersistentVolumeClaimSpec{
StorageClassName: scName, StorageClassName: scName,
}, },
} }
if hasSelectNodeAnno {
claim.Annotations[annSelectedNode] = "node-name"
}
return claim
} }
func makeStorageClass(scName string, mode *storagev1.VolumeBindingMode) *storagev1.StorageClass { func makeStorageClass(scName string, mode *storagev1.VolumeBindingMode) *storagev1.StorageClass {
@ -271,26 +280,30 @@ func TestDelayBinding(t *testing.T) {
shouldFail bool shouldFail bool
}{ }{
"nil-class": { "nil-class": {
pvc: makePVCClass(nil), pvc: makePVCClass(nil, false),
shouldDelay: false, shouldDelay: false,
}, },
"class-not-found": { "class-not-found": {
pvc: makePVCClass(&classNotHere), pvc: makePVCClass(&classNotHere, false),
shouldDelay: false, shouldDelay: false,
}, },
"no-mode-class": { "no-mode-class": {
pvc: makePVCClass(&classNoMode), pvc: makePVCClass(&classNoMode, false),
shouldDelay: false, shouldDelay: false,
shouldFail: true, shouldFail: true,
}, },
"immediate-mode-class": { "immediate-mode-class": {
pvc: makePVCClass(&classImmediateMode), pvc: makePVCClass(&classImmediateMode, false),
shouldDelay: false, shouldDelay: false,
}, },
"wait-mode-class": { "wait-mode-class": {
pvc: makePVCClass(&classWaitMode), pvc: makePVCClass(&classWaitMode, false),
shouldDelay: true, shouldDelay: true,
}, },
"wait-mode-class-with-selectedNode": {
pvc: makePVCClass(&classWaitMode, true),
shouldDelay: false,
},
} }
classes := []*storagev1.StorageClass{ classes := []*storagev1.StorageClass{
@ -314,7 +327,7 @@ func TestDelayBinding(t *testing.T) {
// When volumeScheduling feature gate is disabled, should always be delayed // When volumeScheduling feature gate is disabled, should always be delayed
name := "volumeScheduling-feature-disabled" name := "volumeScheduling-feature-disabled"
shouldDelay, err := ctrl.shouldDelayBinding(makePVCClass(&classWaitMode)) shouldDelay, err := ctrl.shouldDelayBinding(makePVCClass(&classWaitMode, false))
if err != nil { if err != nil {
t.Errorf("Test %q returned error: %v", name, err) t.Errorf("Test %q returned error: %v", name, err)
} }
@ -338,43 +351,4 @@ func TestDelayBinding(t *testing.T) {
t.Errorf("Test %q returned unexpected %v", name, test.shouldDelay) t.Errorf("Test %q returned unexpected %v", name, test.shouldDelay)
} }
} }
// When dynamicProvisioningScheduling feature gate is disabled, should be delayed,
// even if the pvc has selectedNode annotation.
provisionedClaim := makePVCClass(&classWaitMode)
provisionedClaim.Annotations = map[string]string{annSelectedNode: "node-name"}
name = "dynamicProvisioningScheduling-feature-disabled"
shouldDelay, err = ctrl.shouldDelayBinding(provisionedClaim)
if err != nil {
t.Errorf("Test %q returned error: %v", name, err)
}
if !shouldDelay {
t.Errorf("Test %q returned false, expected true", name)
}
// Enable DynamicProvisioningScheduling feature gate
utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=true")
defer utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=false")
// When the pvc does not have selectedNode annotation, should be delayed,
// even if dynamicProvisioningScheduling feature gate is enabled.
name = "dynamicProvisioningScheduling-feature-enabled, selectedNode-annotation-not-set"
shouldDelay, err = ctrl.shouldDelayBinding(makePVCClass(&classWaitMode))
if err != nil {
t.Errorf("Test %q returned error: %v", name, err)
}
if !shouldDelay {
t.Errorf("Test %q returned false, expected true", name)
}
// Should not be delayed when dynamicProvisioningScheduling feature gate is enabled,
// and the pvc has selectedNode annotation.
name = "dynamicProvisioningScheduling-feature-enabled, selectedNode-annotation-set"
shouldDelay, err = ctrl.shouldDelayBinding(provisionedClaim)
if err != nil {
t.Errorf("Test %q returned error: %v", name, err)
}
if shouldDelay {
t.Errorf("Test %q returned true, expected false", name)
}
} }

View File

@ -46,10 +46,10 @@ var (
badPVC = makeBadPVC() badPVC = makeBadPVC()
immediateUnboundPVC = makeTestPVC("immediate-unbound-pvc", "1G", pvcUnbound, "", "1", &immediateClass) immediateUnboundPVC = makeTestPVC("immediate-unbound-pvc", "1G", pvcUnbound, "", "1", &immediateClass)
immediateBoundPVC = makeTestPVC("immediate-bound-pvc", "1G", pvcBound, "pv-bound-immediate", "1", &immediateClass) immediateBoundPVC = makeTestPVC("immediate-bound-pvc", "1G", pvcBound, "pv-bound-immediate", "1", &immediateClass)
provisionedPVC = makeTestPVC("provisioned-pvc", "1Gi", pvcUnbound, "", "1", &waitClass) provisionedPVC = makeTestPVC("provisioned-pvc", "1Gi", pvcUnbound, "", "1", &waitClassWithProvisioner)
provisionedPVC2 = makeTestPVC("provisioned-pvc2", "1Gi", pvcUnbound, "", "1", &waitClass) provisionedPVC2 = makeTestPVC("provisioned-pvc2", "1Gi", pvcUnbound, "", "1", &waitClassWithProvisioner)
provisionedPVCHigherVersion = makeTestPVC("provisioned-pvc2", "1Gi", pvcUnbound, "", "2", &waitClass) provisionedPVCHigherVersion = makeTestPVC("provisioned-pvc2", "1Gi", pvcUnbound, "", "2", &waitClassWithProvisioner)
noProvisionerPVC = makeTestPVC("no-provisioner-pvc", "1Gi", pvcUnbound, "", "1", &provisionNotSupportClass) noProvisionerPVC = makeTestPVC("no-provisioner-pvc", "1Gi", pvcUnbound, "", "1", &waitClass)
topoMismatchPVC = makeTestPVC("topo-mismatch-pvc", "1Gi", pvcUnbound, "", "1", &topoMismatchClass) topoMismatchPVC = makeTestPVC("topo-mismatch-pvc", "1Gi", pvcUnbound, "", "1", &topoMismatchClass)
pvNoNode = makeTestPV("pv-no-node", "", "1G", "1", nil, waitClass) pvNoNode = makeTestPV("pv-no-node", "", "1G", "1", nil, waitClass)
@ -74,7 +74,7 @@ var (
waitClass = "waitClass" waitClass = "waitClass"
immediateClass = "immediateClass" immediateClass = "immediateClass"
provisionNotSupportClass = "provisionNotSupportedClass" waitClassWithProvisioner = "waitClassWithProvisioner"
topoMismatchClass = "topoMismatchClass" topoMismatchClass = "topoMismatchClass"
nodeLabelKey = "nodeKey" nodeLabelKey = "nodeKey"
@ -110,7 +110,7 @@ func newTestBinder(t *testing.T) *testEnv {
classes := []*storagev1.StorageClass{ classes := []*storagev1.StorageClass{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: waitClass, Name: waitClassWithProvisioner,
}, },
VolumeBindingMode: &waitMode, VolumeBindingMode: &waitMode,
Provisioner: "test-provisioner", Provisioner: "test-provisioner",
@ -133,7 +133,7 @@ func newTestBinder(t *testing.T) *testEnv {
}, },
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: provisionNotSupportClass, Name: waitClass,
}, },
VolumeBindingMode: &waitMode, VolumeBindingMode: &waitMode,
Provisioner: "kubernetes.io/no-provisioner", Provisioner: "kubernetes.io/no-provisioner",
@ -776,9 +776,9 @@ func TestFindPodVolumesWithProvisioning(t *testing.T) {
}, },
} }
// Set VolumeScheduling and DynamicProvisioningScheduling feature gate // Set VolumeScheduling feature gate
utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true,DynamicProvisioningScheduling=true") utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true")
defer utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false,DynamicProvisioningScheduling=false") defer utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false")
testNode := &v1.Node{ testNode := &v1.Node{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{

View File

@ -1040,7 +1040,7 @@ func TestSelectZoneForVolume(t *testing.T) {
ZonesWithNodes string ZonesWithNodes string
Node *v1.Node Node *v1.Node
AllowedTopologies []v1.TopologySelectorTerm AllowedTopologies []v1.TopologySelectorTerm
DynamicProvisioningScheduling bool VolumeScheduling bool
// Expectations around returned zone from SelectZoneForVolume // Expectations around returned zone from SelectZoneForVolume
Reject bool // expect error due to validation failing Reject bool // expect error due to validation failing
ExpectSpecificZone bool // expect returned zone to specifically match a single zone (rather than one from a set) ExpectSpecificZone bool // expect returned zone to specifically match a single zone (rather than one from a set)
@ -1053,7 +1053,7 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node irrelevant // [1] Node irrelevant
// [2] Zone and Zones parameters presents // [2] Zone and Zones parameters presents
// [3] AllowedTopologies irrelevant // [3] AllowedTopologies irrelevant
// [4] DynamicProvisioningScheduling irrelevant // [4] VolumeScheduling irrelevant
{ {
Name: "Nil_Node_with_Zone_Zones_parameters_present", Name: "Nil_Node_with_Zone_Zones_parameters_present",
ZonePresent: true, ZonePresent: true,
@ -1067,11 +1067,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node with no zone labels // [1] Node with no zone labels
// [2] Zone/Zones parameter irrelevant // [2] Zone/Zones parameter irrelevant
// [3] AllowedTopologies irrelevant // [3] AllowedTopologies irrelevant
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Node_with_no_Zone_labels", Name: "Node_with_no_Zone_labels",
Node: nodeWithNoLabels, Node: nodeWithNoLabels,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: true, Reject: true,
}, },
@ -1079,13 +1079,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node with zone labels // [1] Node with zone labels
// [2] Zone parameter specified // [2] Zone parameter specified
// [3] AllowedTopologies irrelevant // [3] AllowedTopologies irrelevant
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Node_with_Zone_labels_and_Zone_parameter_present", Name: "Node_with_Zone_labels_and_Zone_parameter_present",
Node: nodeWithZoneLabels, Node: nodeWithZoneLabels,
ZonePresent: true, ZonePresent: true,
Zone: "zoneX", Zone: "zoneX",
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: true, Reject: true,
}, },
@ -1093,13 +1093,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node with zone labels // [1] Node with zone labels
// [2] Zones parameter specified // [2] Zones parameter specified
// [3] AllowedTopologies irrelevant // [3] AllowedTopologies irrelevant
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Node_with_Zone_labels_and_Zones_parameter_present", Name: "Node_with_Zone_labels_and_Zones_parameter_present",
Node: nodeWithZoneLabels, Node: nodeWithZoneLabels,
ZonesPresent: true, ZonesPresent: true,
Zones: "zoneX,zoneY", Zones: "zoneX,zoneY",
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: true, Reject: true,
}, },
@ -1107,13 +1107,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] Zone parameter specified // [2] Zone parameter specified
// [3] AllowedTopologies specified // [3] AllowedTopologies specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Zone_parameter_and_Allowed_Topology_term", Name: "Nil_Node_and_Zone_parameter_and_Allowed_Topology_term",
Node: nil, Node: nil,
ZonePresent: true, ZonePresent: true,
Zone: "zoneX", Zone: "zoneX",
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1131,13 +1131,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] Zones parameter specified // [2] Zones parameter specified
// [3] AllowedTopologies specified // [3] AllowedTopologies specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Zones_parameter_and_Allowed_Topology_term", Name: "Nil_Node_and_Zones_parameter_and_Allowed_Topology_term",
Node: nil, Node: nil,
ZonesPresent: true, ZonesPresent: true,
Zones: "zoneX,zoneY", Zones: "zoneX,zoneY",
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1155,11 +1155,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] no Zone/Zones parameter // [2] no Zone/Zones parameter
// [3] AllowedTopologies with invalid key specified // [3] AllowedTopologies with invalid key specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Invalid_Allowed_Topology_Key", Name: "Nil_Node_and_Invalid_Allowed_Topology_Key",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1181,11 +1181,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] no Zone/Zones parameter // [2] no Zone/Zones parameter
// [3] Invalid AllowedTopologies // [3] Invalid AllowedTopologies
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Invalid_AllowedTopologies", Name: "Nil_Node_and_Invalid_AllowedTopologies",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{}, MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{},
@ -1194,17 +1194,17 @@ func TestSelectZoneForVolume(t *testing.T) {
Reject: true, Reject: true,
}, },
// POSITIVE TESTS WITH DynamicProvisioningScheduling DISABLED // POSITIVE TESTS WITH VolumeScheduling DISABLED
// Select zone from active zones [Pass] // Select zone from active zones [Pass]
// [1] nil Node (Node irrelevant) // [1] nil Node (Node irrelevant)
// [2] no Zone parameter // [2] no Zone parameter
// [3] no AllowedTopologies // [3] no AllowedTopologies
// [4] DynamicProvisioningScheduling disabled // [4] VolumeScheduling disabled
{ {
Name: "No_Zone_Zones_parameter_and_DynamicProvisioningScheduling_disabled", Name: "No_Zone_Zones_parameter_and_VolumeScheduling_disabled",
ZonesWithNodes: "zoneX,zoneY", ZonesWithNodes: "zoneX,zoneY",
DynamicProvisioningScheduling: false, VolumeScheduling: false,
Reject: false, Reject: false,
ExpectedZones: "zoneX,zoneY", ExpectedZones: "zoneX,zoneY",
}, },
@ -1213,12 +1213,12 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node (Node irrelevant) // [1] nil Node (Node irrelevant)
// [2] Zone parameter specified // [2] Zone parameter specified
// [3] no AllowedTopologies // [3] no AllowedTopologies
// [4] DynamicProvisioningScheduling disabled // [4] VolumeScheduling disabled
{ {
Name: "Zone_parameter_present_and_DynamicProvisioningScheduling_disabled", Name: "Zone_parameter_present_and_VolumeScheduling_disabled",
ZonePresent: true, ZonePresent: true,
Zone: "zoneX", Zone: "zoneX",
DynamicProvisioningScheduling: false, VolumeScheduling: false,
Reject: false, Reject: false,
ExpectSpecificZone: true, ExpectSpecificZone: true,
ExpectedZone: "zoneX", ExpectedZone: "zoneX",
@ -1228,28 +1228,28 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node (Node irrelevant) // [1] nil Node (Node irrelevant)
// [2] Zones parameter specified // [2] Zones parameter specified
// [3] no AllowedTopologies // [3] no AllowedTopologies
// [4] DynamicProvisioningScheduling disabled // [4] VolumeScheduling disabled
{ {
Name: "Zones_parameter_present_and_DynamicProvisioningScheduling_disabled", Name: "Zones_parameter_present_and_VolumeScheduling_disabled",
ZonesPresent: true, ZonesPresent: true,
Zones: "zoneX,zoneY", Zones: "zoneX,zoneY",
DynamicProvisioningScheduling: false, VolumeScheduling: false,
Reject: false, Reject: false,
ExpectedZones: "zoneX,zoneY", ExpectedZones: "zoneX,zoneY",
}, },
// POSITIVE TESTS WITH DynamicProvisioningScheduling ENABLED // POSITIVE TESTS WITH VolumeScheduling ENABLED
// Select zone from active zones [Pass] // Select zone from active zones [Pass]
// [1] nil Node // [1] nil Node
// [2] no Zone parameter specified // [2] no Zone parameter specified
// [3] no AllowedTopologies // [3] no AllowedTopologies
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_No_Zone_Zones_parameter_and_no_Allowed_topologies_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_and_No_Zone_Zones_parameter_and_no_Allowed_topologies_and_VolumeScheduling_enabled",
Node: nil, Node: nil,
ZonesWithNodes: "zoneX,zoneY", ZonesWithNodes: "zoneX,zoneY",
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: false, Reject: false,
ExpectedZones: "zoneX,zoneY", ExpectedZones: "zoneX,zoneY",
}, },
@ -1258,13 +1258,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] Zone parameter specified // [2] Zone parameter specified
// [3] no AllowedTopology specified // [3] no AllowedTopology specified
// [4] DynamicSchedulingEnabled enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Zone_parameter_present_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_and_Zone_parameter_present_and_VolumeScheduling_enabled",
ZonePresent: true, ZonePresent: true,
Zone: "zoneX", Zone: "zoneX",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: false, Reject: false,
ExpectSpecificZone: true, ExpectSpecificZone: true,
ExpectedZone: "zoneX", ExpectedZone: "zoneX",
@ -1274,13 +1274,13 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] Zones parameter specified // [2] Zones parameter specified
// [3] no AllowedTopology // [3] no AllowedTopology
// [4] DynamicSchedulingEnabled enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Zones_parameter_present_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_and_Zones_parameter_present_and_VolumeScheduling_enabled",
ZonesPresent: true, ZonesPresent: true,
Zones: "zoneX,zoneY", Zones: "zoneX,zoneY",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: false, Reject: false,
ExpectedZones: "zoneX,zoneY", ExpectedZones: "zoneX,zoneY",
}, },
@ -1289,11 +1289,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node with zone labels // [1] Node with zone labels
// [2] no zone/zones parameters // [2] no zone/zones parameters
// [3] no AllowedTopology // [3] no AllowedTopology
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Node_with_Zone_labels_and_DynamicProvisioningScheduling_enabled", Name: "Node_with_Zone_labels_and_VolumeScheduling_enabled",
Node: nodeWithZoneLabels, Node: nodeWithZoneLabels,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
Reject: false, Reject: false,
ExpectSpecificZone: true, ExpectSpecificZone: true,
ExpectedZone: "zoneX", ExpectedZone: "zoneX",
@ -1303,11 +1303,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] Node with zone labels // [1] Node with zone labels
// [2] no Zone/Zones parameters // [2] no Zone/Zones parameters
// [3] AllowedTopology with single term with multiple values specified (ignored) // [3] AllowedTopology with single term with multiple values specified (ignored)
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Node_with_Zone_labels_and_Multiple_Allowed_Topology_values_and_DynamicProvisioningScheduling_enabled", Name: "Node_with_Zone_labels_and_Multiple_Allowed_Topology_values_and_VolumeScheduling_enabled",
Node: nodeWithZoneLabels, Node: nodeWithZoneLabels,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1327,11 +1327,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] no Zone/Zones parametes specified // [2] no Zone/Zones parametes specified
// [3] AllowedTopologies with single term with multiple values specified // [3] AllowedTopologies with single term with multiple values specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_with_Multiple_Allowed_Topology_values_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_with_Multiple_Allowed_Topology_values_and_VolumeScheduling_enabled",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1350,11 +1350,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] no Zone/Zones parametes specified // [2] no Zone/Zones parametes specified
// [3] AllowedTopologies with multiple terms specified // [3] AllowedTopologies with multiple terms specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Multiple_Allowed_Topology_terms_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_and_Multiple_Allowed_Topology_terms_and_VolumeScheduling_enabled",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1382,11 +1382,11 @@ func TestSelectZoneForVolume(t *testing.T) {
// [1] nil Node // [1] nil Node
// [2] no Zone/Zones parametes specified // [2] no Zone/Zones parametes specified
// [3] AllowedTopologies with single term and value specified // [3] AllowedTopologies with single term and value specified
// [4] DynamicProvisioningScheduling enabled // [4] VolumeScheduling enabled
{ {
Name: "Nil_Node_and_Single_Allowed_Topology_term_value_and_DynamicProvisioningScheduling_enabled", Name: "Nil_Node_and_Single_Allowed_Topology_term_value_and_VolumeScheduling_enabled",
Node: nil, Node: nil,
DynamicProvisioningScheduling: true, VolumeScheduling: true,
AllowedTopologies: []v1.TopologySelectorTerm{ AllowedTopologies: []v1.TopologySelectorTerm{
{ {
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{ MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
@ -1404,9 +1404,9 @@ func TestSelectZoneForVolume(t *testing.T) {
} }
for _, test := range tests { for _, test := range tests {
utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=false") utilfeature.DefaultFeatureGate.Set("VolumeScheduling=false")
if test.DynamicProvisioningScheduling { if test.VolumeScheduling {
utilfeature.DefaultFeatureGate.Set("DynamicProvisioningScheduling=true") utilfeature.DefaultFeatureGate.Set("VolumeScheduling=true")
} }
var zonesParameter, zonesWithNodes sets.String var zonesParameter, zonesWithNodes sets.String

View File

@ -1116,6 +1116,16 @@ items:
- get - get
- list - list
- watch - watch
- apiGroups:
- ""
resources:
- persistentvolumeclaims
verbs:
- get
- list
- patch
- update
- watch
- aggregationRule: - aggregationRule:
clusterRoleSelectors: clusterRoleSelectors:
- matchLabels: - matchLabels:

View File

@ -266,7 +266,6 @@ func TestVolumeBindingRescheduling(t *testing.T) {
features := map[string]bool{ features := map[string]bool{
"VolumeScheduling": true, "VolumeScheduling": true,
"PersistentLocalVolumes": true, "PersistentLocalVolumes": true,
"DynamicProvisioningScheduling": true,
} }
config := setupCluster(t, "volume-scheduling", 2, features, 0) config := setupCluster(t, "volume-scheduling", 2, features, 0)
defer config.teardown() defer config.teardown()