func TestEtcdGet(t *testing.T) { fakeEtcdClient, etcdStorage := newEtcdStorage(t) storage, _ := NewStorage(etcdStorage) test := resttest.New(t, storage, fakeEtcdClient.SetError) resourcequota := validNewResourceQuota() test.TestGet(resourcequota) }
func TestUpdate(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError).AllowCreateOnUpdate() test.TestUpdate( // valid validNewLimitRange(), func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // updateFunc func(obj runtime.Object) runtime.Object { object := obj.(*api.LimitRange) object.Spec.Limits = []api.LimitRangeItem{ { Type: api.LimitTypePod, Max: api.ResourceList{ api.ResourceCPU: resource.MustParse("1000"), api.ResourceMemory: resource.MustParse("100000"), }, Min: api.ResourceList{ api.ResourceCPU: resource.MustParse("10"), api.ResourceMemory: resource.MustParse("1000"), }, }, } return object }, ) }
func TestDelete(t *testing.T) { ctx := api.NewDefaultContext() storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) key, _ := storage.KeyFunc(ctx, validDeployment.Name) key = etcdtest.AddPrefix(key) createFn := func() runtime.Object { dc := validNewDeployment() dc.ResourceVersion = "1" fakeClient.Data[key] = tools.EtcdResponseWithError{ R: &etcd.Response{ Node: &etcd.Node{ Value: runtime.EncodeOrDie(testapi.Codec(), dc), ModifiedIndex: 1, }, }, } return dc } gracefulSetFn := func() bool { // If the deployment is still around after trying to delete either the delete // failed, or we're deleting it gracefully. if fakeClient.Data[key].R.Node != nil { return true } return false } test.TestDelete(createFn, gracefulSetFn) }
func TestUpdate(t *testing.T) { fakeEtcdClient, etcdStorage := newEtcdStorage(t) storage := NewStorage(etcdStorage) test := resttest.New(t, storage, fakeEtcdClient.SetError) key, err := storage.KeyFunc(test.TestContext(), "foo") if err != nil { t.Fatal(err) } key = etcdtest.AddPrefix(key) fakeEtcdClient.ExpectNotFoundGet(key) fakeEtcdClient.ChangeIndex = 2 serviceAccount := validNewServiceAccount("foo") existing := validNewServiceAccount("exists") existing.Namespace = test.TestNamespace() obj, err := storage.Create(test.TestContext(), existing) if err != nil { t.Fatalf("unable to create object: %v", err) } older := obj.(*api.ServiceAccount) older.ResourceVersion = "1" test.TestUpdate( serviceAccount, existing, older, ) }
func TestDelete(t *testing.T) { storage, _, _, fakeClient := newStorage(t) ctx := api.NewDefaultContext() key, _ := storage.Etcd.KeyFunc(ctx, "foo") key = etcdtest.AddPrefix(key) test := resttest.New(t, storage, fakeClient.SetError) createFn := func() runtime.Object { pod := validChangedPod() fakeClient.Data[key] = tools.EtcdResponseWithError{ R: &etcd.Response{ Node: &etcd.Node{ Value: runtime.EncodeOrDie(testapi.Codec(), pod), ModifiedIndex: 1, }, }, } return pod } gracefulSetFn := func() bool { if fakeClient.Data[key].R.Node == nil { return false } return fakeClient.Data[key].R.Node.TTL == 30 } test.TestDelete(createFn, gracefulSetFn) }
func TestEtcdGet(t *testing.T) { fakeEtcdClient, etcdStorage := newEtcdStorage(t) storage := NewStorage(etcdStorage, nil).Pod test := resttest.New(t, storage, fakeEtcdClient.SetError) pod := validNewPod() test.TestGet(pod) }
func TestCreate(t *testing.T) { storage, _, _, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) pod := validNewPod() pod.ObjectMeta = api.ObjectMeta{} // Make an invalid pod with an an incorrect label. invalidPod := validNewPod() invalidPod.Namespace = test.TestNamespace() invalidPod.Labels = map[string]string{ "invalid/label/to/cause/validation/failure": "bar", } test.TestCreate( // valid pod, func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // invalid (empty contains list) &api.Pod{ Spec: api.PodSpec{ Containers: []api.Container{}, }, }, // invalid (invalid labels) invalidPod, ) }
func TestUpdate(t *testing.T) { fakeClient, helper := newHelper(t) storage := NewREST(helper, nil).Route test := resttest.New(t, storage, fakeClient.SetError) key, err := storage.KeyFunc(test.TestContext(), "foo") if err != nil { t.Fatal(err) } key = etcdtest.AddPrefix(key) fakeClient.ExpectNotFoundGet(key) fakeClient.ChangeIndex = 2 route := validNewRoute("foo") route.Namespace = test.TestNamespace() existing := validNewRoute("exists") existing.Namespace = test.TestNamespace() obj, err := storage.Create(test.TestContext(), existing) if err != nil { t.Fatalf("unable to create object: %v", err) } older := obj.(*api.Route) older.ResourceVersion = "1" test.TestUpdate( route, existing, older, ) }
func TestUpdate(t *testing.T) { storage, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) key, err := storage.KeyFunc(test.TestContext(), "foo") if err != nil { t.Fatal(err) } key = etcdtest.AddPrefix(key) fakeEtcdClient.ExpectNotFoundGet(key) fakeEtcdClient.ChangeIndex = 2 rsrc := validNewThirdPartyResource("foo") existing := validNewThirdPartyResource("exists") existing.Namespace = test.TestNamespace() obj, err := storage.Create(test.TestContext(), existing) if err != nil { t.Fatalf("unable to create object: %v", err) } older := obj.(*expapi.ThirdPartyResource) older.ResourceVersion = "1" test.TestUpdate( rsrc, existing, older, ) }
func TestDelete(t *testing.T) { ctx := api.NewDefaultContext() storage, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) rsrc := validNewThirdPartyResource("foo2") key, _ := storage.KeyFunc(ctx, "foo2") key = etcdtest.AddPrefix(key) createFn := func() runtime.Object { fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{ R: &etcd.Response{ Node: &etcd.Node{ Value: runtime.EncodeOrDie(testapi.Codec(), rsrc), ModifiedIndex: 1, }, }, } return rsrc } gracefulSetFn := func() bool { if fakeEtcdClient.Data[key].R.Node == nil { return false } return fakeEtcdClient.Data[key].R.Node.TTL == 30 } test.TestDeleteNoGraceful(createFn, gracefulSetFn) }
func TestCreate(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) secret := validNewSecret("foo") secret.ObjectMeta = api.ObjectMeta{GenerateName: "foo-"} test.TestCreate( // valid secret, func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // invalid &api.Secret{}, &api.Secret{ ObjectMeta: api.ObjectMeta{Name: "name"}, Data: map[string][]byte{"name with spaces": []byte("")}, }, &api.Secret{ ObjectMeta: api.ObjectMeta{Name: "name"}, Data: map[string][]byte{"~.dotfile": []byte("")}, }, ) }
func TestDelete(t *testing.T) { ctx := api.NewContext() storage, fakeEtcdClient := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError).ClusterScope() node := validChangedNode() key, _ := storage.KeyFunc(ctx, node.Name) key = etcdtest.AddPrefix(key) createFn := func() runtime.Object { fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{ R: &etcd.Response{ Node: &etcd.Node{ Value: runtime.EncodeOrDie(latest.Codec, node), ModifiedIndex: 1, }, }, } return node } gracefulSetFn := func() bool { if fakeEtcdClient.Data[key].R.Node == nil { return false } return fakeEtcdClient.Data[key].R.Node.TTL == 30 } test.TestDeleteNoGraceful(createFn, gracefulSetFn) }
func TestCreate(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) validService := validService() validService.ObjectMeta = api.ObjectMeta{} test.TestCreate( // valid validService, func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // invalid &api.Service{ Spec: api.ServiceSpec{}, }, // invalid &api.Service{ Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, ClusterIP: "invalid", SessionAffinity: "None", Type: api.ServiceTypeClusterIP, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, TargetPort: util.NewIntOrStringFromInt(6502), }}, }, }, ) }
func TestEtcdWatch(t *testing.T) { storage, _, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) test.TestWatch( validNewResourceQuota(), func() { fakeClient.WaitForWatchCompletion() }, func(err error) { fakeClient.WatchInjectError <- err }, func(obj runtime.Object, action string) error { return registrytest.EmitObject(fakeClient, obj, action) }, // matching labels []labels.Set{}, // not matching labels []labels.Set{ {"foo": "bar"}, }, // matching fields []fields.Set{ {"metadata.name": "foo"}, }, // not matchin fields []fields.Set{ {"metadata.name": "bar"}, }, registrytest.WatchActions, ) }
func TestCreate(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) test.TestCreate( // valid &api.ReplicationController{ Spec: api.ReplicationControllerSpec{ Replicas: 2, Selector: map[string]string{"a": "b"}, Template: &validPodTemplate.Template, }, }, func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // invalid &api.ReplicationController{ Spec: api.ReplicationControllerSpec{ Replicas: 2, Selector: map[string]string{}, Template: &validPodTemplate.Template, }, }, ) }
func New(t *testing.T, fakeClient *tools.FakeEtcdClient, storage *etcdgeneric.Etcd) *Tester { return &Tester{ tester: resttest.New(t, storage, fakeClient.SetError), fakeClient: fakeClient, storage: storage, } }
func TestUpdate(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError).AllowCreateOnUpdate() test.TestUpdate( // valid validService(), func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // updateFunc func(obj runtime.Object) runtime.Object { object := obj.(*api.Service) object.Spec = api.ServiceSpec{ Selector: map[string]string{"bar": "baz2"}, SessionAffinity: api.ServiceAffinityNone, Type: api.ServiceTypeClusterIP, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, TargetPort: util.NewIntOrStringFromInt(6502), }}, } return object }, ) }
func TestUpdate(t *testing.T) { storage, _, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError).ClusterScope() test.TestUpdate( // valid validNewPersistentVolume("foo"), func(ctx api.Context, obj runtime.Object) error { return registrytest.SetObject(fakeClient, storage.KeyFunc, ctx, obj) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }, func(ctx api.Context, obj runtime.Object) (runtime.Object, error) { return registrytest.GetObject(fakeClient, storage.KeyFunc, storage.NewFunc, ctx, obj) }, // updateFunc func(obj runtime.Object) runtime.Object { object := obj.(*api.PersistentVolume) object.Spec.Capacity = api.ResourceList{ api.ResourceName(api.ResourceStorage): resource.MustParse("20G"), } return object }, ) }
func TestDelete(t *testing.T) { ctx := api.NewDefaultContext() storage, _, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) pv := validChangedPersistentVolumeClaim() key, _ := storage.KeyFunc(ctx, pv.Name) key = etcdtest.AddPrefix(key) createFn := func() runtime.Object { fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{ R: &etcd.Response{ Node: &etcd.Node{ Value: runtime.EncodeOrDie(latest.Codec, pv), ModifiedIndex: 1, }, }, } return pv } gracefulSetFn := func() bool { if fakeEtcdClient.Data[key].R.Node == nil { return false } return fakeEtcdClient.Data[key].R.Node.TTL == 30 } test.TestDelete(createFn, gracefulSetFn) }
func TestCreate(t *testing.T) { storage, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) autoscaler := validNewHorizontalPodAutoscaler("foo") autoscaler.ObjectMeta = api.ObjectMeta{} test.TestCreate( // valid autoscaler, // invalid &expapi.HorizontalPodAutoscaler{}, ) }
func TestCreate(t *testing.T) { storage, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) rsrc := validNewThirdPartyResource("foo") rsrc.ObjectMeta = api.ObjectMeta{} test.TestCreate( // valid rsrc, // invalid &expapi.ThirdPartyResource{}, ) }
func TestEtcdList(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext())) test.TestList( validNewDeployment(), func(objects []runtime.Object) []runtime.Object { return registrytest.SetObjectsForKey(fakeClient, key, objects) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }) }
func TestCreate(t *testing.T) { fakeEtcdClient, helper := newHelper(t) storage := NewREST(helper) test := resttest.New(t, storage, fakeEtcdClient.SetError).ClusterScope() image := validNewImage() image.ObjectMeta = kapi.ObjectMeta{GenerateName: "foo"} test.TestCreate( // valid image, // invalid &api.Image{}, ) }
func TestCreate(t *testing.T) { fakeEtcdClient, helper := newHelper(t) storage := NewREST(helper) test := resttest.New(t, storage, fakeEtcdClient.SetError) template := validNew() template.ObjectMeta = kapi.ObjectMeta{} test.TestCreate( // valid template, // invalid &api.Template{}, ) }
func TestCreate(t *testing.T) { storage, fakeEtcdClient := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError) endpoints := validNewEndpoints() endpoints.ObjectMeta = api.ObjectMeta{} test.TestCreate( // valid endpoints, // invalid &api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: "_-a123-a_"}, }, ) }
func TestList(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext())) autoscaler := validNewHorizontalPodAutoscaler("foo") test.TestList( autoscaler, func(objects []runtime.Object) []runtime.Object { return registrytest.SetObjectsForKey(fakeClient, key, objects) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }) }
func TestList(t *testing.T) { storage, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError).ClusterScope() key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext())) namespace := validNewNamespace() test.TestList( namespace, func(objects []runtime.Object) []runtime.Object { return registrytest.SetObjectsForKey(fakeClient, key, objects) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }) }
func TestCreate(t *testing.T) { storage, fakeEtcdClient := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError).ClusterScope() node := validNewNode() node.ObjectMeta = api.ObjectMeta{GenerateName: "foo"} test.TestCreate( // valid node, // invalid &api.Node{ ObjectMeta: api.ObjectMeta{Name: "_-a123-a_"}, }, ) }
func TestCreate(t *testing.T) { storage, _, fakeEtcdClient, _ := newStorage(t) test := resttest.New(t, storage, fakeEtcdClient.SetError).ClusterScope() pv := validNewPersistentVolume("foo") pv.ObjectMeta = api.ObjectMeta{GenerateName: "foo"} test.TestCreate( // valid pv, // invalid &api.PersistentVolume{ ObjectMeta: api.ObjectMeta{Name: "*BadName!"}, }, ) }
func TestEtcdListPersistentVolumeClaims(t *testing.T) { storage, _, fakeClient := newStorage(t) test := resttest.New(t, storage, fakeClient.SetError) key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext())) claim := validNewPersistentVolumeClaim("foo", api.NamespaceDefault) test.TestList( claim, func(objects []runtime.Object) []runtime.Object { return registrytest.SetObjectsForKey(fakeClient, key, objects) }, func(resourceVersion uint64) { registrytest.SetResourceVersion(fakeClient, resourceVersion) }) }