func TestEtcdControllerValidatesUpdate(t *testing.T) { ctx := api.NewDefaultContext() storage, _ := newStorage(t) updateController, err := createController(storage, validController, t) if err != nil { t.Errorf("Failed to create controller, cannot proceed with test.") } updaters := []func(rc api.ReplicationController) (runtime.Object, bool, error){ func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.UID = "newUID" return storage.Update(ctx, &rc) }, func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.Name = "" return storage.Update(ctx, &rc) }, func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.Spec.Selector = map[string]string{} return storage.Update(ctx, &rc) }, } for _, u := range updaters { c, updated, err := u(updateController) if c != nil || updated { t.Errorf("Expected nil object and not created") } if !errors.IsInvalid(err) && !errors.IsBadRequest(err) { t.Errorf("Expected invalid or bad request error, got %v of type %T", err, err) } } }
// Visit implements Visitor func (r *Selector) Visit(fn VisitorFunc) error { list, err := NewHelper(r.Client, r.Mapping).List(r.Namespace, r.Selector) if err != nil { if errors.IsBadRequest(err) || errors.IsNotFound(err) { if r.Selector.Empty() { glog.V(2).Infof("Unable to list %q: %v", r.Mapping.Resource, err) } else { glog.V(2).Infof("Unable to find %q that match the selector %q: %v", r.Mapping.Resource, r.Selector, err) } return nil } return err } accessor := r.Mapping.MetadataAccessor resourceVersion, _ := accessor.ResourceVersion(list) info := &Info{ Client: r.Client, Mapping: r.Mapping, Namespace: r.Namespace, Object: list, ResourceVersion: resourceVersion, } return fn(info) }
func TestEndpointsRegistryDelete(t *testing.T) { registry := registrytest.NewServiceRegistry() storage := NewREST(registry) _, err := storage.Delete(api.NewContext(), "n/a") if err == nil { t.Error("unexpected non-error") } else if !errors.IsBadRequest(err) { t.Errorf("unexpected error: %v", err) } }
func TestCreateControllerWithConflictingNamespace(t *testing.T) { storage, _ := newStorage(t) controller := &api.ReplicationController{ ObjectMeta: api.ObjectMeta{Name: "test", Namespace: "not-default"}, } ctx := api.NewDefaultContext() channel, err := storage.Create(ctx, controller) if channel != nil { t.Error("Expected a nil channel, but we got a value") } errSubString := "namespace" if err == nil { t.Errorf("Expected an error, but we didn't get one") } else if !errors.IsBadRequest(err) || strings.Index(err.Error(), errSubString) == -1 { t.Errorf("Expected a Bad Request error with the sub string '%s', got %v", errSubString, err) } }
func TestControllerValidatesUpdate(t *testing.T) { mockRegistry := registrytest.ControllerRegistry{ Controllers: &api.ReplicationControllerList{}, } storage := REST{ registry: &mockRegistry, podLister: nil, strategy: Strategy, } var validControllerSpec = api.ReplicationControllerSpec{ Selector: validPodTemplate.Spec.Labels, Template: &validPodTemplate.Spec, } var validController = api.ReplicationController{ ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: "default"}, Spec: validControllerSpec, } ctx := api.NewDefaultContext() storage.Create(ctx, &validController) ns := "newNamespace" updaters := []func(rc api.ReplicationController) (runtime.Object, bool, error){ func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.UID = "newUID" return storage.Update(ctx, &rc) }, func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.Name = "" return storage.Update(ctx, &rc) }, func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.Namespace = ns return storage.Update(api.WithNamespace(ctx, ns), &rc) }, func(rc api.ReplicationController) (runtime.Object, bool, error) { rc.Spec.Selector = map[string]string{} return storage.Update(ctx, &rc) }, } for _, u := range updaters { c, updated, err := u(validController) if c != nil || updated { t.Errorf("Expected nil object and not created") } if !errors.IsInvalid(err) { t.Errorf("Expected to get an invalid resource error, got %v", err) } } // The update should fail if the namespace on the controller is set to something // other than the namespace on the given context, even if the namespace on the // controller is valid. c, updated, err := storage.Update(api.WithNamespace(ctx, ns), &validController) if c != nil || updated { t.Errorf("Expected nil object and not created") } errSubString := "namespace" if err == nil { t.Errorf("Expected an error, but we didn't get one") } else if !errors.IsBadRequest(err) || strings.Index(err.Error(), errSubString) == -1 { t.Errorf("Expected a Bad Request error with the sub string '%s', got %v", errSubString, err) } }