Skip to content

Commit

Permalink
Added validation for ServiceBinding spec ParametersFrom
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitri-d committed Feb 15, 2018
1 parent 9fa4e70 commit b3de6ec
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 12 deletions.
4 changes: 4 additions & 0 deletions pkg/apis/servicecatalog/validation/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ func validateServiceBindingSpec(spec *sc.ServiceBindingSpec, fldPath *field.Path
allErrs = append(allErrs, field.Invalid(fldPath.Child("secretName"), spec.SecretName, msg))
}

if spec.ParametersFrom != nil {
allErrs = append(allErrs, validateParametersFromSource(spec.ParametersFrom, fldPath)...)
}

return allErrs
}

Expand Down
44 changes: 44 additions & 0 deletions pkg/apis/servicecatalog/validation/binding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,50 @@ func TestValidateServiceBinding(t *testing.T) {
}(),
valid: false,
},
{
name: "valid parametersFrom",
binding: func() *servicecatalog.ServiceBinding {
b := validServiceBinding()
b.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "test-key-name", Key: "test-key"}}}
return b
}(),
valid: true,
},
{
name: "missing key reference in parametersFrom",
binding: func() *servicecatalog.ServiceBinding {
b := validServiceBinding()
b.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{{SecretKeyRef: nil}}
return b
}(),
valid: false,
},
{
name: "key name is missing in parametersFrom",
binding: func() *servicecatalog.ServiceBinding {
b := validServiceBinding()
b.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "", Key: "test-key"}}}
return b
}(),
valid: false,
},
{
name: "key is missing in parametersFrom",
binding: func() *servicecatalog.ServiceBinding {
b := validServiceBinding()
b.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "test-key-name", Key: ""}}}
return b
}(),
valid: false,
},

{
name: "valid with in-progress bind",
binding: validServiceBindingWithInProgressBind(),
Expand Down
13 changes: 1 addition & 12 deletions pkg/apis/servicecatalog/validation/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,18 +88,7 @@ func validateServiceInstanceSpec(spec *sc.ServiceInstanceSpec, fldPath *field.Pa
allErrs = append(allErrs, validatePlanReference(&spec.PlanReference, fldPath)...)

if spec.ParametersFrom != nil {
for _, paramsFrom := range spec.ParametersFrom {
if paramsFrom.SecretKeyRef != nil {
if paramsFrom.SecretKeyRef.Name == "" {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom.secretKeyRef.name"), "name is required"))
}
if paramsFrom.SecretKeyRef.Key == "" {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom.secretKeyRef.key"), "key is required"))
}
} else {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom"), "source must not be empty if present"))
}
}
allErrs = append(allErrs, validateParametersFromSource(spec.ParametersFrom, fldPath)...)
}
if spec.Parameters != nil {
if len(spec.Parameters.Raw) == 0 {
Expand Down
43 changes: 43 additions & 0 deletions pkg/apis/servicecatalog/validation/instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,49 @@ func TestValidateServiceInstance(t *testing.T) {
}(),
valid: false,
},
{
name: "valid parametersFrom",
instance: func() *servicecatalog.ServiceInstance {
i := validServiceInstance()
i.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "test-key-name", Key: "test-key"}}}
return i
}(),
valid: true,
},
{
name: "missing key reference in parametersFrom",
instance: func() *servicecatalog.ServiceInstance {
i := validServiceInstance()
i.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{{SecretKeyRef: nil}}
return i
}(),
valid: false,
},
{
name: "key name is missing in parametersFrom",
instance: func() *servicecatalog.ServiceInstance {
i := validServiceInstance()
i.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "", Key: "test-key"}}}
return i
}(),
valid: false,
},
{
name: "key is missing in parametersFrom",
instance: func() *servicecatalog.ServiceInstance {
i := validServiceInstance()
i.Spec.ParametersFrom =
[]servicecatalog.ParametersFromSource{
{SecretKeyRef: &servicecatalog.SecretKeyReference{Name: "test-key-name", Key: ""}}}
return i
}(),
valid: false,
},
{
name: "valid with in-progress provision",
instance: validServiceInstanceWithInProgressProvision(),
Expand Down
21 changes: 21 additions & 0 deletions pkg/apis/servicecatalog/validation/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package validation

import (
sc "github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog"
"k8s.io/apimachinery/pkg/util/validation/field"
"regexp"
)

Expand All @@ -25,3 +27,22 @@ var hexademicalStringRegexp = regexp.MustCompile("^[[:xdigit:]]*$")
func stringIsHexadecimal(s string) bool {
return hexademicalStringRegexp.MatchString(s)
}

func validateParametersFromSource(parametersFrom []sc.ParametersFromSource, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}

for _, paramsFrom := range parametersFrom {
if paramsFrom.SecretKeyRef != nil {
if paramsFrom.SecretKeyRef.Name == "" {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom.secretKeyRef.name"), "name is required"))
}
if paramsFrom.SecretKeyRef.Key == "" {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom.secretKeyRef.key"), "key is required"))
}
} else {
allErrs = append(allErrs, field.Required(fldPath.Child("parametersFrom"), "source must not be empty if present"))
}
}

return allErrs
}

0 comments on commit b3de6ec

Please sign in to comment.