CSIStorageCapacity: CSIStorageCapacity API
This adds the CSIStorageCapacity API change for https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1472-storage-capacity-tracking
This commit is contained in:
@@ -1939,3 +1939,104 @@ func TestCSIDriverValidationUpdate(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateCSIStorageCapacity(t *testing.T) {
|
||||
storageClassName := "test-sc"
|
||||
invalidName := "-invalid-@#$%^&*()-"
|
||||
|
||||
goodCapacity := storage.CSIStorageCapacity{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "csc-329803da-fdd2-42e4-af6f-7b07e7ccc305",
|
||||
Namespace: metav1.NamespaceDefault,
|
||||
},
|
||||
StorageClassName: storageClassName,
|
||||
}
|
||||
goodTopology := metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{"foo": "bar"},
|
||||
}
|
||||
|
||||
scenarios := map[string]struct {
|
||||
isExpectedFailure bool
|
||||
capacity *storage.CSIStorageCapacity
|
||||
}{
|
||||
"good-capacity": {
|
||||
capacity: &goodCapacity,
|
||||
},
|
||||
"missing-storage-class-name": {
|
||||
isExpectedFailure: true,
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.StorageClassName = ""
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"bad-storage-class-name": {
|
||||
isExpectedFailure: true,
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.StorageClassName = invalidName
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"good-capacity-value": {
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.Capacity = resource.NewQuantity(1, resource.BinarySI)
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"bad-capacity-value": {
|
||||
isExpectedFailure: true,
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.Capacity = resource.NewQuantity(-11, resource.BinarySI)
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"good-topology": {
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.NodeTopology = &goodTopology
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"empty-topology": {
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.NodeTopology = &metav1.LabelSelector{}
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
"bad-topology-fields": {
|
||||
isExpectedFailure: true,
|
||||
capacity: func() *storage.CSIStorageCapacity {
|
||||
capacity := goodCapacity
|
||||
capacity.NodeTopology = &metav1.LabelSelector{
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
{
|
||||
Key: "foo",
|
||||
Operator: metav1.LabelSelectorOperator("no-such-operator"),
|
||||
Values: []string{
|
||||
"bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return &capacity
|
||||
}(),
|
||||
},
|
||||
}
|
||||
|
||||
for name, scenario := range scenarios {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
errs := ValidateCSIStorageCapacity(scenario.capacity)
|
||||
if len(errs) == 0 && scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected success")
|
||||
}
|
||||
if len(errs) > 0 && !scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected failure: %+v", errs)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user