From 3c5cb228b9040f423181818826451eaeab79801c Mon Sep 17 00:00:00 2001 From: Salvatore Dario Minonne Date: Thu, 11 May 2017 11:55:02 +0200 Subject: [PATCH] apiextesions-server integration tests: de-registering and registering --- .../test/integration/BUILD | 1 + .../test/integration/registration_test.go | 96 ++++++++++++++++++- .../test/integration/testserver/BUILD | 1 + .../test/integration/testserver/resources.go | 21 ++++ 4 files changed, 118 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/kube-apiextensions-server/test/integration/BUILD b/staging/src/k8s.io/kube-apiextensions-server/test/integration/BUILD index 78bfb9a6d16..7d68d57382d 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/test/integration/BUILD +++ b/staging/src/k8s.io/kube-apiextensions-server/test/integration/BUILD @@ -18,6 +18,7 @@ go_test( "integration", ], deps = [ + "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", diff --git a/staging/src/k8s.io/kube-apiextensions-server/test/integration/registration_test.go b/staging/src/k8s.io/kube-apiextensions-server/test/integration/registration_test.go index 4beb870c342..81ee179b578 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/test/integration/registration_test.go +++ b/staging/src/k8s.io/kube-apiextensions-server/test/integration/registration_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -242,5 +243,98 @@ func TestMultipleRegistration(t *testing.T) { if e, a := createdNoxuInstance, gottenNoxuInstance2; !reflect.DeepEqual(e, a) { t.Errorf("expected %v, got %v", e, a) } - +} + +func TestDeRegistrationAndReRegistration(t *testing.T) { + stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServer() + if err != nil { + t.Fatal(err) + } + defer close(stopCh) + noxuDefinition := testserver.NewNoxuCustomResourceDefinition() + ns := "not-the-default" + sameInstanceName := "foo" + func() { + noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + if err != nil { + t.Fatal(err) + } + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + if _, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition); err != nil { + t.Fatal(err) + } + // Remove sameInstanceName since at the moment there's no finalizers. + // TODO: as soon finalizers will be implemented Delete can be removed. + if err := noxuNamespacedResourceClient.Delete(sameInstanceName, nil); err != nil { + t.Fatal(err) + } + if err := testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient); err != nil { + t.Fatal(err) + } + if _, err := testserver.GetCustomResourceDefinition(noxuDefinition, apiExtensionClient); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + if _, err = noxuNamespacedResourceClient.List(metav1.ListOptions{}); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + if _, err = noxuNamespacedResourceClient.Get("foo"); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + }() + + func() { + if _, err := testserver.GetCustomResourceDefinition(noxuDefinition, apiExtensionClient); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + if err != nil { + t.Fatal(err) + } + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + initialList, err := noxuNamespacedResourceClient.List(metav1.ListOptions{}) + if err != nil { + t.Fatal(err) + } + if _, err = noxuNamespacedResourceClient.Get(sameInstanceName); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + if e, a := 0, len(initialList.(*unstructured.UnstructuredList).Items); e != a { + t.Fatalf("expected %v, got %v", e, a) + } + createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) + if err != nil { + t.Fatal(err) + } + gottenNoxuInstance, err := noxuNamespacedResourceClient.Get(sameInstanceName) + if err != nil { + t.Fatal(err) + } + if e, a := createdNoxuInstance, gottenNoxuInstance; !reflect.DeepEqual(e, a) { + t.Fatalf("expected %v, got %v", e, a) + } + listWithItem, err := noxuNamespacedResourceClient.List(metav1.ListOptions{}) + if err != nil { + t.Fatal(err) + } + if e, a := 1, len(listWithItem.(*unstructured.UnstructuredList).Items); e != a { + t.Fatalf("expected %v, got %v", e, a) + } + if e, a := *createdNoxuInstance, listWithItem.(*unstructured.UnstructuredList).Items[0]; !reflect.DeepEqual(e, a) { + t.Fatalf("expected %v, got %v", e, a) + } + + if err := noxuNamespacedResourceClient.Delete(sameInstanceName, nil); err != nil { + t.Fatal(err) + } + if _, err = noxuNamespacedResourceClient.Get(sameInstanceName); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expected a NotFound error, got:%v", err) + } + listWithoutItem, err := noxuNamespacedResourceClient.List(metav1.ListOptions{}) + if err != nil { + t.Fatal(err) + } + if e, a := 0, len(listWithoutItem.(*unstructured.UnstructuredList).Items); e != a { + t.Fatalf("expected %v, got %v", e, a) + } + }() } diff --git a/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/BUILD b/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/BUILD index aa56f97b927..9d15c33cde5 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/BUILD +++ b/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/BUILD @@ -16,6 +16,7 @@ go_library( tags = ["automanaged"], deps = [ "//vendor/github.com/pborman/uuid:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/resources.go b/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/resources.go index 849b59f1919..84b3bb7f679 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/resources.go +++ b/staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/resources.go @@ -19,6 +19,7 @@ package testserver import ( "time" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -123,3 +124,23 @@ func CreateNewCustomResourceDefinition(customResourceDefinition *apiextensionsv1 } return dynamicClient, nil } + +func DeleteCustomResourceDefinition(customResource *apiextensionsv1alpha1.CustomResourceDefinition, apiExtensionsClient clientset.Interface) error { + if err := apiExtensionsClient.Apiextensions().CustomResourceDefinitions().Delete(customResource.Name, nil); err != nil { + return err + } + err := wait.PollImmediate(30*time.Millisecond, 30*time.Second, func() (bool, error) { + if _, err := apiExtensionsClient.Discovery().ServerResourcesForGroupVersion(customResource.Spec.Group + "/" + customResource.Spec.Version); err != nil { + if errors.IsNotFound(err) { + return true, nil + } + return false, err + } + return false, nil + }) + return err +} + +func GetCustomResourceDefinition(customResource *apiextensionsv1alpha1.CustomResourceDefinition, apiExtensionsClient clientset.Interface) (*apiextensionsv1alpha1.CustomResourceDefinition, error) { + return apiExtensionsClient.Apiextensions().CustomResourceDefinitions().Get(customResource.Name, metav1.GetOptions{}) +}