Add initial validation of Service objects
This commit is contained in:
parent
56735fe2ec
commit
e9edfc754e
@ -246,3 +246,14 @@ func ValidateManifest(manifest *ContainerManifest) []error {
|
|||||||
allErrs.Append(validateContainers(manifest.Containers, allVolumes)...)
|
allErrs.Append(validateContainers(manifest.Containers, allVolumes)...)
|
||||||
return []error(allErrs)
|
return []error(allErrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ValidateService(service *Service) []error {
|
||||||
|
allErrs := errorList{}
|
||||||
|
if service.ID == "" {
|
||||||
|
allErrs.Append(fmt.Errorf("ID should not be empty: %#v", *service))
|
||||||
|
}
|
||||||
|
if len(service.Selector) == 0 {
|
||||||
|
allErrs.Append(fmt.Errorf("Service %#v missing a selector", *service))
|
||||||
|
}
|
||||||
|
return []error(allErrs)
|
||||||
|
}
|
||||||
|
@ -262,3 +262,36 @@ func TestValidateManifest(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateService(t *testing.T) {
|
||||||
|
errs := ValidateService(&Service{
|
||||||
|
JSONBase: JSONBase{ID: "foo"},
|
||||||
|
Selector: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if len(errs) != 0 {
|
||||||
|
t.Errorf("Unexpected non-zero error list: %#v", errs)
|
||||||
|
}
|
||||||
|
|
||||||
|
errs = ValidateService(&Service{
|
||||||
|
Selector: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if len(errs) != 1 {
|
||||||
|
t.Errorf("Unexpected error list: %#v", errs)
|
||||||
|
}
|
||||||
|
|
||||||
|
errs = ValidateService(&Service{
|
||||||
|
JSONBase: JSONBase{ID: "foo"},
|
||||||
|
})
|
||||||
|
if len(errs) != 1 {
|
||||||
|
t.Errorf("Unexpected error list: %#v", errs)
|
||||||
|
}
|
||||||
|
|
||||||
|
errs = ValidateService(&Service{})
|
||||||
|
if len(errs) != 2 {
|
||||||
|
t.Errorf("Unexpected error list: %#v", errs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -112,8 +112,9 @@ func (sr *ServiceRegistryStorage) Extract(body []byte) (interface{}, error) {
|
|||||||
|
|
||||||
func (sr *ServiceRegistryStorage) Create(obj interface{}) (<-chan interface{}, error) {
|
func (sr *ServiceRegistryStorage) Create(obj interface{}) (<-chan interface{}, error) {
|
||||||
srv := obj.(api.Service)
|
srv := obj.(api.Service)
|
||||||
if srv.ID == "" {
|
errs := api.ValidateService(&srv)
|
||||||
return nil, fmt.Errorf("ID should not be empty: %#v", srv)
|
if len(errs) > 0 {
|
||||||
|
return nil, fmt.Errorf("Validation errors: %v", errs)
|
||||||
}
|
}
|
||||||
return apiserver.MakeAsync(func() (interface{}, error) {
|
return apiserver.MakeAsync(func() (interface{}, error) {
|
||||||
// TODO: Consider moving this to a rectification loop, so that we make/remove external load balancers
|
// TODO: Consider moving this to a rectification loop, so that we make/remove external load balancers
|
||||||
|
Loading…
Reference in New Issue
Block a user