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:
Patrick Ohly
2020-06-04 20:49:25 +02:00
parent 158d70aeff
commit 22aeb81e84
17 changed files with 844 additions and 1 deletions

View File

@@ -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)
}
})
}
}