From 393324497ff2745b4760dee0763b16b5ecd96010 Mon Sep 17 00:00:00 2001 From: xuzhonghu Date: Thu, 26 Apr 2018 16:53:07 +0800 Subject: [PATCH] make use of simple dynamic client in test --- .../test/integration/basic_test.go | 117 ++++++++---------- .../test/integration/finalization_test.go | 12 +- .../test/integration/registration_test.go | 92 ++++++++------ .../test/integration/subresources_test.go | 66 ++++++---- .../test/integration/testserver/resources.go | 38 +++--- .../test/integration/testserver/start.go | 10 +- .../test/integration/validation_test.go | 40 +++--- .../test/integration/yaml_test.go | 14 ++- test/e2e/apimachinery/BUILD | 1 - test/e2e/apimachinery/aggregator.go | 17 +-- test/e2e/apimachinery/crd_watch.go | 25 ++-- .../custom_resource_definition.go | 2 +- test/e2e/apimachinery/garbage_collector.go | 12 +- test/e2e/apimachinery/generated_clientset.go | 2 +- test/e2e/apimachinery/webhook.go | 4 +- test/e2e/apps/cronjob.go | 2 +- test/e2e/auth/audit.go | 2 +- test/e2e/framework/BUILD | 1 - test/e2e/framework/crd_util.go | 18 ++- test/e2e/framework/framework.go | 7 +- test/e2e/framework/util.go | 32 ++--- test/e2e/kubectl/kubectl.go | 4 +- test/integration/garbagecollector/BUILD | 1 + .../garbage_collector_test.go | 35 +++--- 24 files changed, 288 insertions(+), 266 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go index e373a178a28..a020b674ff7 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go @@ -43,48 +43,49 @@ func TestServerUp(t *testing.T) { } func TestNamespaceScopedCRUD(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - testSimpleCRUD(t, ns, noxuDefinition, noxuVersionClient) - testFieldSelector(t, ns, noxuDefinition, noxuVersionClient) + + testSimpleCRUD(t, ns, noxuDefinition, dynamicClient) + testFieldSelector(t, ns, noxuDefinition, dynamicClient) } func TestClusterScopedCRUD(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "" - testSimpleCRUD(t, ns, noxuDefinition, noxuVersionClient) - testFieldSelector(t, ns, noxuDefinition, noxuVersionClient) + testSimpleCRUD(t, ns, noxuDefinition, dynamicClient) + testFieldSelector(t, ns, noxuDefinition, dynamicClient) } -func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition, noxuVersionClient dynamic.Interface) { - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) +func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition, dynamicClient dynamic.DynamicInterface) { + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) initialList, err := noxuResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) } - if e, a := 0, len(initialList.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(initialList.Items); e != a { t.Errorf("expected %v, got %v", e, a) } initialListTypeMeta, err := meta.TypeAccessor(initialList) @@ -157,10 +158,10 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta if err != nil { t.Fatal(err) } - if e, a := 1, len(listWithItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 1, len(listWithItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } - if e, a := *createdNoxuInstance, listWithItem.(*unstructured.UnstructuredList).Items[0]; !reflect.DeepEqual(e, a) { + if e, a := *createdNoxuInstance, listWithItem.Items[0]; !reflect.DeepEqual(e, a) { t.Errorf("expected %v, got %v", e, a) } @@ -172,7 +173,7 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta if err != nil { t.Fatal(err) } - if e, a := 0, len(listWithoutItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(listWithoutItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } @@ -200,13 +201,13 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta } } -func testFieldSelector(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition, noxuVersionClient dynamic.Interface) { - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) +func testFieldSelector(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition, dynamicClient dynamic.DynamicInterface) { + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) initialList, err := noxuResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) } - if e, a := 0, len(initialList.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(initialList.Items); e != a { t.Errorf("expected %v, got %v", e, a) } initialListTypeMeta, err := meta.TypeAccessor(initialList) @@ -291,10 +292,10 @@ func testFieldSelector(t *testing.T, ns string, noxuDefinition *apiextensionsv1b if err != nil { t.Fatal(err) } - if e, a := 1, len(listWithItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 1, len(listWithItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } - if e, a := *createdNoxuInstanceFoo, listWithItem.(*unstructured.UnstructuredList).Items[0]; !reflect.DeepEqual(e, a) { + if e, a := *createdNoxuInstanceFoo, listWithItem.Items[0]; !reflect.DeepEqual(e, a) { t.Errorf("expected %v, got %v", e, a) } @@ -309,7 +310,7 @@ func testFieldSelector(t *testing.T, ns string, noxuDefinition *apiextensionsv1b if err != nil { t.Fatal(err) } - if e, a := 0, len(listWithoutItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(listWithoutItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } @@ -347,7 +348,7 @@ func TestDiscovery(t *testing.T) { group := "mygroup.example.com" version := "v1beta1" - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -355,7 +356,7 @@ func TestDiscovery(t *testing.T) { scope := apiextensionsv1beta1.NamespaceScoped noxuDefinition := testserver.NewNoxuCustomResourceDefinition(scope) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -395,25 +396,25 @@ func TestDiscovery(t *testing.T) { } func TestNoNamespaceReject(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) initialList, err := noxuResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) } - if e, a := 0, len(initialList.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(initialList.Items); e != a { t.Errorf("expected %v, got %v", e, a) } initialListTypeMeta, err := meta.TypeAccessor(initialList) @@ -434,27 +435,27 @@ func TestNoNamespaceReject(t *testing.T) { } func TestSameNameDiffNamespace(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns1 := "namespace-1" - testSimpleCRUD(t, ns1, noxuDefinition, noxuVersionClient) + testSimpleCRUD(t, ns1, noxuDefinition, dynamicClient) ns2 := "namespace-2" - testSimpleCRUD(t, ns2, noxuDefinition, noxuVersionClient) + testSimpleCRUD(t, ns2, noxuDefinition, dynamicClient) } func TestSelfLink(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -462,16 +463,13 @@ func TestSelfLink(t *testing.T) { // namespace scoped noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuNamespacedResourceClient := noxuVersionClient.Resource(&metav1.APIResource{ - Name: noxuDefinition.Spec.Names.Plural, - Namespaced: noxuDefinition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) @@ -485,15 +483,12 @@ func TestSelfLink(t *testing.T) { // cluster scoped curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - curletVersionClient, err := testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - curletResourceClient := curletVersionClient.Resource(&metav1.APIResource{ - Name: curletDefinition.Spec.Names.Plural, - Namespaced: curletDefinition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) + curletResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition) curletInstanceToCreate := testserver.NewCurletInstance(ns, "foo") createdCurletInstance, err := curletResourceClient.Create(curletInstanceToCreate) @@ -507,23 +502,20 @@ func TestSelfLink(t *testing.T) { } func TestPreserveInt(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuNamespacedResourceClient := noxuVersionClient.Resource(&metav1.APIResource{ - Name: noxuDefinition.Spec.Names.Plural, - Namespaced: true, - }, ns) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) @@ -552,23 +544,20 @@ func TestPreserveInt(t *testing.T) { } func TestPatch(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuNamespacedResourceClient := noxuVersionClient.Resource(&metav1.APIResource{ - Name: noxuDefinition.Spec.Names.Plural, - Namespaced: true, - }, ns) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) @@ -626,25 +615,25 @@ func TestPatch(t *testing.T) { } func TestCrossNamespaceListWatch(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) initialList, err := noxuResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) } - if e, a := 0, len(initialList.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(initialList.Items); e != a { t.Errorf("expected %v, got %v", e, a) } @@ -661,13 +650,13 @@ func TestCrossNamespaceListWatch(t *testing.T) { instances := make(map[string]*unstructured.Unstructured) ns1 := "namespace-1" - noxuNamespacedResourceClient1 := NewNamespacedCustomResourceClient(ns1, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient1 := NewNamespacedCustomResourceClient(ns1, dynamicClient, noxuDefinition) instances[ns1] = createInstanceWithNamespaceHelper(t, ns1, "foo1", noxuNamespacedResourceClient1, noxuDefinition) noxuNamespacesWatch1, err := noxuNamespacedResourceClient1.Watch(metav1.ListOptions{ResourceVersion: initialListListMeta.GetResourceVersion()}) defer noxuNamespacesWatch1.Stop() ns2 := "namespace-2" - noxuNamespacedResourceClient2 := NewNamespacedCustomResourceClient(ns2, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient2 := NewNamespacedCustomResourceClient(ns2, dynamicClient, noxuDefinition) instances[ns2] = createInstanceWithNamespaceHelper(t, ns2, "foo2", noxuNamespacedResourceClient2, noxuDefinition) noxuNamespacesWatch2, err := noxuNamespacedResourceClient2.Watch(metav1.ListOptions{ResourceVersion: initialListListMeta.GetResourceVersion()}) defer noxuNamespacesWatch2.Stop() @@ -677,11 +666,11 @@ func TestCrossNamespaceListWatch(t *testing.T) { t.Fatal(err) } - if e, a := 2, len(createdList.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 2, len(createdList.Items); e != a { t.Errorf("expected %v, got %v", e, a) } - for _, a := range createdList.(*unstructured.UnstructuredList).Items { + for _, a := range createdList.Items { if e := instances[a.GetNamespace()]; !reflect.DeepEqual(e, &a) { t.Errorf("expected %v, got %v", e, a) } @@ -725,7 +714,7 @@ func TestCrossNamespaceListWatch(t *testing.T) { checkNamespacesWatchHelper(t, ns2, noxuNamespacesWatch2) } -func createInstanceWithNamespaceHelper(t *testing.T, ns string, name string, noxuNamespacedResourceClient dynamic.ResourceInterface, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition) *unstructured.Unstructured { +func createInstanceWithNamespaceHelper(t *testing.T, ns string, name string, noxuNamespacedResourceClient dynamic.DynamicResourceInterface, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition) *unstructured.Unstructured { createdInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, name), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) @@ -762,14 +751,14 @@ func checkNamespacesWatchHelper(t *testing.T, ns string, namespacedwatch watch.I } func TestNameConflict(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go index 7cb76ee4183..fc62c5377e0 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go @@ -31,17 +31,17 @@ import ( ) func TestFinalization(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() require.NoError(t, err) defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) require.NoError(t, err) ns := "not-the-default" name := "foo123" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) instance := testserver.NewNoxuInstance(ns, name) instance.SetFinalizers([]string{"noxu.example.com/finalizer"}) @@ -94,19 +94,19 @@ func TestFinalization(t *testing.T) { } func TestFinalizationAndDeletion(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() require.NoError(t, err) defer close(stopCh) // Create a CRD. noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) require.NoError(t, err) // Create a CR with a finalizer. ns := "not-the-default" name := "foo123" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) instance := testserver.NewNoxuInstance(ns, name) instance.SetFinalizers([]string{"noxu.example.com/finalizer"}) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go index 7cdd2bc7c77..2594a9933af 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go @@ -36,11 +36,12 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/dynamic" ) -func instantiateCustomResource(t *testing.T, instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) { +func instantiateCustomResource(t *testing.T, instanceToCreate *unstructured.Unstructured, client dynamic.DynamicResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) { createdInstance, err := client.Create(instanceToCreate) if err != nil { t.Logf("%#v", createdInstance) @@ -67,29 +68,35 @@ func instantiateCustomResource(t *testing.T, instanceToCreate *unstructured.Unst return createdInstance, nil } -func NewNamespacedCustomResourceClient(ns string, client dynamic.Interface, definition *apiextensionsv1beta1.CustomResourceDefinition) dynamic.ResourceInterface { - return client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural, - Namespaced: definition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) +func NewNamespacedCustomResourceClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface { + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + + if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { + return client.NamespacedResource(gvr, ns) + } + return client.ClusterResource(gvr) } -func NewNamespacedCustomResourceStatusClient(ns string, client dynamic.Interface, definition *apiextensionsv1beta1.CustomResourceDefinition) dynamic.ResourceInterface { - return client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural + "/status", - Namespaced: definition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) +func NewNamespacedCustomResourceStatusClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface { + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + + if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { + return client.NamespacedSubresource(gvr, "status", ns) + } + return client.ClusterSubresource(gvr, "status") } -func NewNamespacedCustomResourceScaleClient(ns string, client dynamic.Interface, definition *apiextensionsv1beta1.CustomResourceDefinition) dynamic.ResourceInterface { - return client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural + "/scale", - Namespaced: definition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) +func NewNamespacedCustomResourceScaleClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface { + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + + if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { + return client.NamespacedSubresource(gvr, "scale", ns) + } + return client.ClusterSubresource(gvr, "scale") } func TestMultipleResourceInstances(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -97,11 +104,11 @@ func TestMultipleResourceInstances(t *testing.T) { ns := "not-the-default" noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) noxuList, err := noxuNamespacedResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) @@ -168,10 +175,10 @@ func TestMultipleResourceInstances(t *testing.T) { if err != nil { t.Fatal(err) } - if e, a := len(instances), len(listWithItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := len(instances), len(listWithItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } - for _, a := range listWithItem.(*unstructured.UnstructuredList).Items { + for _, a := range listWithItem.Items { if e := instances[a.GetName()].Instance; !reflect.DeepEqual(e, &a) { t.Errorf("expected %v, got %v", e, a) } @@ -185,7 +192,7 @@ func TestMultipleResourceInstances(t *testing.T) { if err != nil { t.Fatal(err) } - if e, a := 0, len(listWithoutItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(listWithoutItem.Items); e != a { t.Errorf("expected %v, got %v", e, a) } @@ -213,7 +220,7 @@ func TestMultipleResourceInstances(t *testing.T) { } func TestMultipleRegistration(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -222,11 +229,11 @@ func TestMultipleRegistration(t *testing.T) { ns := "not-the-default" sameInstanceName := "foo" noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) @@ -241,11 +248,11 @@ func TestMultipleRegistration(t *testing.T) { } curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - curletVersionClient, err := testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - curletNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, curletVersionClient, curletDefinition) + curletNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition) createdCurletInstance, err := instantiateCustomResource(t, testserver.NewCurletInstance(ns, sameInstanceName), curletNamespacedResourceClient, curletDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) @@ -269,7 +276,7 @@ func TestMultipleRegistration(t *testing.T) { } func TestDeRegistrationAndReRegistration(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -278,11 +285,11 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { ns := "not-the-default" sameInstanceName := "foo" func() { - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) if _, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition); err != nil { t.Fatal(err) } @@ -304,11 +311,11 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { 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) + err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) initialList, err := noxuNamespacedResourceClient.List(metav1.ListOptions{}) if err != nil { t.Fatal(err) @@ -316,7 +323,7 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { if _, err = noxuNamespacedResourceClient.Get(sameInstanceName, metav1.GetOptions{}); 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 { + if e, a := 0, len(initialList.Items); e != a { t.Fatalf("expected %v, got %v", e, a) } createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) @@ -334,10 +341,10 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { if err != nil { t.Fatal(err) } - if e, a := 1, len(listWithItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 1, len(listWithItem.Items); e != a { t.Fatalf("expected %v, got %v", e, a) } - if e, a := *createdNoxuInstance, listWithItem.(*unstructured.UnstructuredList).Items[0]; !reflect.DeepEqual(e, a) { + if e, a := *createdNoxuInstance, listWithItem.Items[0]; !reflect.DeepEqual(e, a) { t.Fatalf("expected %v, got %v", e, a) } @@ -351,7 +358,7 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { if err != nil { t.Fatal(err) } - if e, a := 0, len(listWithoutItem.(*unstructured.UnstructuredList).Items); e != a { + if e, a := 0, len(listWithoutItem.Items); e != a { t.Fatalf("expected %v, got %v", e, a) } }() @@ -372,28 +379,31 @@ func TestEtcdStorage(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(clientConfig) + dynamicClient, err := dynamic.NewForConfig(clientConfig) + if err != nil { + t.Fatal(err) + } etcdPrefix := getPrefixFromConfig(t, config) ns1 := "another-default-is-possible" curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - curletVersionClient, err := testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - curletNamespacedResourceClient := NewNamespacedCustomResourceClient(ns1, curletVersionClient, curletDefinition) + curletNamespacedResourceClient := NewNamespacedCustomResourceClient(ns1, dynamicClient, curletDefinition) if _, err := instantiateCustomResource(t, testserver.NewCurletInstance(ns1, "bar"), curletNamespacedResourceClient, curletDefinition); err != nil { t.Fatalf("unable to create curlet cluster scoped Instance:%v", err) } ns2 := "the-cruel-default" noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns2, noxuVersionClient, noxuDefinition) + noxuNamespacedResourceClient := NewNamespacedCustomResourceClient(ns2, dynamicClient, noxuDefinition) if _, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns2, "foo"), noxuNamespacedResourceClient, noxuDefinition); err != nil { t.Fatalf("unable to create noxu namespace scoped Instance:%v", err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go index 7f04c8215eb..763c0f9abf3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go @@ -93,21 +93,21 @@ func TestStatusSubresource(t *testing.T) { // enable alpha feature CustomResourceSubresources defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CustomResourceSubresources, true)() - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) - noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) + noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, NewNoxuSubresourceInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) @@ -218,26 +218,29 @@ func TestScaleSubresource(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) // set invalid json path for specReplicasPath noxuDefinition.Spec.Subresources.Scale.SpecReplicasPath = "foo,bar" - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: specReplicasPath should be a valid json path under .spec") } noxuDefinition.Spec.Subresources.Scale.SpecReplicasPath = ".spec.replicas" - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) - noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) + noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, NewNoxuSubresourceInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) @@ -345,11 +348,14 @@ func TestValidationSchema(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } // fields other than properties in root schema are not allowed noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: if subresources for custom resources are enabled, only properties can be used at the root of the schema") } @@ -367,7 +373,7 @@ func TestValidationSchema(t *testing.T) { }, }, } - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatalf("unable to created crd %v: %v", noxuDefinition.Name, err) } @@ -377,7 +383,7 @@ func TestValidateOnlyStatus(t *testing.T) { // enable alpha feature CustomResourceSubresources defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CustomResourceSubresources, true)() - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -417,13 +423,13 @@ func TestValidateOnlyStatus(t *testing.T) { OpenAPIV3Schema: schema, } - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) - noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) + noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, dynamicClient, noxuDefinition) // set .spec.num = 10 and .status.num = 10 noxuInstance := NewNoxuSubresourceInstance(ns, "foo") @@ -506,10 +512,13 @@ func TestSubresourcesDiscovery(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -580,21 +589,21 @@ func TestGeneration(t *testing.T) { // enable alpha feature CustomResourceSubresources defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CustomResourceSubresources, true)() - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) - noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) + noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, NewNoxuSubresourceInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) @@ -664,18 +673,21 @@ func TestSubresourcePatch(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) - noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, noxuVersionClient, noxuDefinition) - noxuScaleResourceClient := NewNamespacedCustomResourceScaleClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) + noxuStatusResourceClient := NewNamespacedCustomResourceStatusClient(ns, dynamicClient, noxuDefinition) + noxuScaleResourceClient := NewNamespacedCustomResourceScaleClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, NewNoxuSubresourceInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go index bf54e149086..87d41835f14 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go @@ -154,10 +154,10 @@ func NewCurletInstance(namespace, name string) *unstructured.Unstructured { // the apiextension apiserver has installed the CRD. But it's not safe to watch // the created CR. Please call CreateNewCustomResourceDefinition if you need to // watch the CR. -func CreateNewCustomResourceDefinitionWatchUnsafe(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface, clientPool dynamic.ClientPool) (dynamic.Interface, error) { - _, err := apiExtensionsClient.Apiextensions().CustomResourceDefinitions().Create(crd) +func CreateNewCustomResourceDefinitionWatchUnsafe(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface) error { + _, err := apiExtensionsClient.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd) if err != nil { - return nil, err + return err } // wait until the resource appears in discovery @@ -173,17 +173,14 @@ func CreateNewCustomResourceDefinitionWatchUnsafe(crd *apiextensionsv1beta1.Cust } return false, nil }) - if err != nil { - return nil, err - } - return clientPool.ClientForGroupVersionResource(schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}) + return err } -func CreateNewCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface, clientPool dynamic.ClientPool) (dynamic.Interface, error) { - dynamicClient, err := CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionsClient, clientPool) +func CreateNewCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface, dynamicClientSet dynamic.DynamicInterface) error { + err := CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionsClient) if err != nil { - return nil, err + return err } // This is only for a test. We need the watch cache to have a resource version that works for the test. @@ -198,28 +195,33 @@ func CreateNewCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceD // before like the created RV could be too old to watch. var primingErr error wait.PollImmediate(500*time.Millisecond, 30*time.Second, func() (bool, error) { - primingErr = checkForWatchCachePrimed(crd, dynamicClient) + primingErr = checkForWatchCachePrimed(crd, dynamicClientSet) if primingErr == nil { return true, nil } return false, nil }) if primingErr != nil { - return nil, primingErr + return primingErr } - return dynamicClient, nil + return nil } -func checkForWatchCachePrimed(crd *apiextensionsv1beta1.CustomResourceDefinition, dynamicClient dynamic.Interface) error { +func checkForWatchCachePrimed(crd *apiextensionsv1beta1.CustomResourceDefinition, dynamicClientSet dynamic.DynamicInterface) error { ns := "" if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { ns = "aval" } - resourceClient := dynamicClient.Resource(&metav1.APIResource{ - Name: crd.Spec.Names.Plural, - Namespaced: crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped, - }, ns) + + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + var resourceClient dynamic.DynamicResourceInterface + if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { + resourceClient = dynamicClientSet.NamespacedResource(gvr, ns) + } else { + resourceClient = dynamicClientSet.ClusterResource(gvr) + } + initialList, err := resourceClient.List(metav1.ListOptions{}) if err != nil { return err diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go index b0f73e68d95..d8711e0031f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go @@ -139,7 +139,7 @@ func StartDefaultServer() (chan struct{}, *rest.Config, error) { return StartServer(config) } -func StartDefaultServerWithClients() (chan struct{}, clientset.Interface, dynamic.ClientPool, error) { +func StartDefaultServerWithClients() (chan struct{}, clientset.Interface, dynamic.DynamicInterface, error) { stopCh, config, err := StartDefaultServer() if err != nil { return nil, nil, nil, err @@ -151,5 +151,11 @@ func StartDefaultServerWithClients() (chan struct{}, clientset.Interface, dynami return nil, nil, nil, err } - return stopCh, apiExtensionsClient, dynamic.NewDynamicClientPool(config), nil + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + close(stopCh) + return nil, nil, nil, err + } + + return stopCh, apiExtensionsClient, dynamicClient, nil } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go index 3ef47b658d6..aa5984aa2a3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go @@ -31,20 +31,20 @@ import ( ) func TestForProperValidationErrors(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) tests := []struct { name string @@ -169,20 +169,20 @@ func newNoxuValidationInstance(namespace, name string) *unstructured.Unstructure } func TestCustomResourceValidation(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, newNoxuValidationInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) @@ -190,20 +190,20 @@ func TestCustomResourceValidation(t *testing.T) { } func TestCustomResourceUpdateValidation(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) _, err = instantiateCustomResource(t, newNoxuValidationInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu instance: %v", err) @@ -233,20 +233,20 @@ func TestCustomResourceUpdateValidation(t *testing.T) { } func TestCustomResourceValidationErrors(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } defer close(stopCh) noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) tests := []struct { name string @@ -324,7 +324,7 @@ func TestCustomResourceValidationErrors(t *testing.T) { } func TestCRValidationOnCRDUpdate(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -335,12 +335,12 @@ func TestCRValidationOnCRDUpdate(t *testing.T) { // set stricter schema noxuDefinition.Spec.Validation.OpenAPIV3Schema.Required = []string{"alpha", "beta", "epsilon"} - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } ns := "not-the-default" - noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := NewNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) // CR is rejected _, err = instantiateCustomResource(t, newNoxuValidationInstance(ns, "foo"), noxuResourceClient, noxuDefinition) @@ -378,7 +378,7 @@ func TestCRValidationOnCRDUpdate(t *testing.T) { } func TestForbiddenFieldsInSchema(t *testing.T) { - stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients() + stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() if err != nil { t.Fatal(err) } @@ -387,7 +387,7 @@ func TestForbiddenFieldsInSchema(t *testing.T) { noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) noxuDefinition.Spec.Validation.OpenAPIV3Schema.AdditionalProperties.Allows = false - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: additionalProperties cannot be set to false") } @@ -398,7 +398,7 @@ func TestForbiddenFieldsInSchema(t *testing.T) { } noxuDefinition.Spec.Validation.OpenAPIV3Schema.AdditionalProperties.Allows = true - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: uniqueItems cannot be set to true") } @@ -409,14 +409,14 @@ func TestForbiddenFieldsInSchema(t *testing.T) { UniqueItems: false, } - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatal("unexpected non-error: $ref cannot be non-empty string") } noxuDefinition.Spec.Validation.OpenAPIV3Schema.Ref = nil - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go index 9f23427f02f..be1e2103e4d 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go @@ -48,10 +48,13 @@ func TestYAML(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -367,10 +370,13 @@ func TestYAMLSubresource(t *testing.T) { if err != nil { t.Fatal(err) } - clientPool := dynamic.NewDynamicClientPool(config) + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + t.Fatal(err) + } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.ClusterScoped) - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/test/e2e/apimachinery/BUILD b/test/e2e/apimachinery/BUILD index 59589894e29..c965e28b0ac 100644 --- a/test/e2e/apimachinery/BUILD +++ b/test/e2e/apimachinery/BUILD @@ -26,7 +26,6 @@ go_library( importpath = "k8s.io/kubernetes/test/e2e/apimachinery", deps = [ "//pkg/api/v1/pod:go_default_library", - "//pkg/apis/core:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/printers:go_default_library", "//pkg/util/version:go_default_library", diff --git a/test/e2e/apimachinery/aggregator.go b/test/e2e/apimachinery/aggregator.go index 126d770a8d2..54d8f306192 100644 --- a/test/e2e/apimachinery/aggregator.go +++ b/test/e2e/apimachinery/aggregator.go @@ -391,10 +391,7 @@ func TestSampleAPIServer(f *framework.Framework, image string) { if !ok { framework.Failf("could not find group version resource for dynamic client and wardle/flunders.") } - clientPool := f.ClientPool - dynamicClient, err := clientPool.ClientForGroupVersionResource(gvr) - framework.ExpectNoError(err, "getting group version resources for dynamic client") - apiResource := metav1.APIResource{Name: gvr.Resource, Namespaced: true} + dynamicClient := f.DynamicClient.NamespacedResource(gvr, namespace) // kubectl create -f flunders-1.yaml // Request Body: {"apiVersion":"wardle.k8s.io/v1alpha1","kind":"Flunder","metadata":{"labels":{"sample-label":"true"},"name":"test-flunder","namespace":"default"}} @@ -411,27 +408,23 @@ func TestSampleAPIServer(f *framework.Framework, image string) { unstruct := &unstructuredv1.Unstructured{} err = unstruct.UnmarshalJSON(jsonFlunder) framework.ExpectNoError(err, "unmarshalling test-flunder as unstructured for create using dynamic client") - unstruct, err = dynamicClient.Resource(&apiResource, namespace).Create(unstruct) + unstruct, err = dynamicClient.Create(unstruct) framework.ExpectNoError(err, "listing flunders using dynamic client") // kubectl get flunders - obj, err := dynamicClient.Resource(&apiResource, namespace).List(metav1.ListOptions{}) + unstructuredList, err := dynamicClient.List(metav1.ListOptions{}) framework.ExpectNoError(err, "listing flunders using dynamic client") - unstructuredList, ok := obj.(*unstructuredv1.UnstructuredList) - validateErrorWithDebugInfo(f, err, pods, "casting flunders list(%T) as unstructuredList using dynamic client", obj) if len(unstructuredList.Items) != 1 { framework.Failf("failed to get back the correct flunders list %v from the dynamic client", unstructuredList) } // kubectl delete flunder test-flunder - err = dynamicClient.Resource(&apiResource, namespace).Delete(flunderName, &metav1.DeleteOptions{}) + err = dynamicClient.Delete(flunderName, &metav1.DeleteOptions{}) validateErrorWithDebugInfo(f, err, pods, "deleting flunders(%v) using dynamic client", unstructuredList.Items) // kubectl get flunders - obj, err = dynamicClient.Resource(&apiResource, namespace).List(metav1.ListOptions{}) + unstructuredList, err = dynamicClient.List(metav1.ListOptions{}) framework.ExpectNoError(err, "listing flunders using dynamic client") - unstructuredList, ok = obj.(*unstructuredv1.UnstructuredList) - validateErrorWithDebugInfo(f, err, pods, "casting flunders list(%T) as unstructuredList using dynamic client", obj) if len(unstructuredList.Items) != 0 { framework.Failf("failed to get back the correct deleted flunders list %v from the dynamic client", unstructuredList) } diff --git a/test/e2e/apimachinery/crd_watch.go b/test/e2e/apimachinery/crd_watch.go index cf8eb17d557..ff2c830844f 100644 --- a/test/e2e/apimachinery/crd_watch.go +++ b/test/e2e/apimachinery/crd_watch.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/dynamic" "k8s.io/kubernetes/test/e2e/framework" @@ -63,7 +64,7 @@ var _ = SIGDescribe("CustomResourceDefinition Watch", func() { } noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, f.ClientPool) + err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, f.DynamicClient) if err != nil { framework.Failf("failed to create CustomResourceDefinition: %v", err) } @@ -76,7 +77,7 @@ var _ = SIGDescribe("CustomResourceDefinition Watch", func() { }() ns := "" - noxuResourceClient := newNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition) + noxuResourceClient := newNamespacedCustomResourceClient(ns, f.DynamicClient, noxuDefinition) watchA, err := watchCRWithName(noxuResourceClient, watchCRNameA) Expect(err).NotTo(HaveOccurred()) @@ -114,7 +115,7 @@ var _ = SIGDescribe("CustomResourceDefinition Watch", func() { }) }) -func watchCRWithName(crdResourceClient dynamic.ResourceInterface, name string) (watch.Interface, error) { +func watchCRWithName(crdResourceClient dynamic.DynamicResourceInterface, name string) (watch.Interface, error) { return crdResourceClient.Watch( metav1.ListOptions{ FieldSelector: "metadata.name=" + name, @@ -123,7 +124,7 @@ func watchCRWithName(crdResourceClient dynamic.ResourceInterface, name string) ( ) } -func instantiateCustomResource(instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) { +func instantiateCustomResource(instanceToCreate *unstructured.Unstructured, client dynamic.DynamicResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) { createdInstance, err := client.Create(instanceToCreate) if err != nil { return nil, err @@ -149,13 +150,17 @@ func instantiateCustomResource(instanceToCreate *unstructured.Unstructured, clie return createdInstance, nil } -func deleteCustomResource(client dynamic.ResourceInterface, name string) error { +func deleteCustomResource(client dynamic.DynamicResourceInterface, name string) error { return client.Delete(name, &metav1.DeleteOptions{}) } -func newNamespacedCustomResourceClient(ns string, client dynamic.Interface, definition *apiextensionsv1beta1.CustomResourceDefinition) dynamic.ResourceInterface { - return client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural, - Namespaced: definition.Spec.Scope == apiextensionsv1beta1.NamespaceScoped, - }, ns) +func newNamespacedCustomResourceClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface { + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + + if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { + return client.NamespacedResource(gvr, ns) + } else { + return client.ClusterResource(gvr) + } + } diff --git a/test/e2e/apimachinery/custom_resource_definition.go b/test/e2e/apimachinery/custom_resource_definition.go index a7c963a2324..e16e8607778 100644 --- a/test/e2e/apimachinery/custom_resource_definition.go +++ b/test/e2e/apimachinery/custom_resource_definition.go @@ -55,7 +55,7 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { randomDefinition := testserver.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) //create CRD and waits for the resource to be recognized and available. - _, err = testserver.CreateNewCustomResourceDefinition(randomDefinition, apiExtensionClient, f.ClientPool) + err = testserver.CreateNewCustomResourceDefinition(randomDefinition, apiExtensionClient, f.DynamicClient) if err != nil { framework.Failf("failed to create CustomResourceDefinition: %v", err) } diff --git a/test/e2e/apimachinery/garbage_collector.go b/test/e2e/apimachinery/garbage_collector.go index 1f139a669d0..1f0e43ef58b 100644 --- a/test/e2e/apimachinery/garbage_collector.go +++ b/test/e2e/apimachinery/garbage_collector.go @@ -36,7 +36,6 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/storage/names" clientset "k8s.io/client-go/kubernetes" - api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework/metrics" @@ -918,16 +917,15 @@ var _ = SIGDescribe("Garbage collector", func() { framework.Failf("failed to delete CustomResourceDefinition: %v", err) } }() - client, err := apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, f.ClientPool) + err = apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, f.DynamicClient) if err != nil { framework.Failf("failed to create CustomResourceDefinition: %v", err) } // Get a client for the custom resource. - resourceClient := client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural, - Namespaced: false, - }, api.NamespaceNone) + gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural} + resourceClient := f.DynamicClient.ClusterResource(gvr) + apiVersion := definition.Spec.Group + "/" + definition.Spec.Version // Create a custom owner resource. @@ -1001,7 +999,7 @@ var _ = SIGDescribe("Garbage collector", func() { }) It("should delete jobs and pods created by cronjob", func() { - framework.SkipIfMissingResource(f.ClientPool, CronJobGroupVersionResource, f.Namespace.Name) + framework.SkipIfMissingResource(f.DynamicClient, CronJobGroupVersionResource, f.Namespace.Name) By("Create the cronjob") cronJob := newCronJob("simple", "*/1 * * * ?") diff --git a/test/e2e/apimachinery/generated_clientset.go b/test/e2e/apimachinery/generated_clientset.go index 0a919d17c84..228e9a26b3e 100644 --- a/test/e2e/apimachinery/generated_clientset.go +++ b/test/e2e/apimachinery/generated_clientset.go @@ -264,7 +264,7 @@ var _ = SIGDescribe("Generated clientset", func() { f := framework.NewDefaultFramework("clientset") BeforeEach(func() { - framework.SkipIfMissingResource(f.ClientPool, CronJobGroupVersionResource, f.Namespace.Name) + framework.SkipIfMissingResource(f.DynamicClient, CronJobGroupVersionResource, f.Namespace.Name) }) It("should create v1beta1 cronJobs, delete cronJobs, watch cronJobs", func() { diff --git a/test/e2e/apimachinery/webhook.go b/test/e2e/apimachinery/webhook.go index 5dbda0239c3..248f6fb5466 100644 --- a/test/e2e/apimachinery/webhook.go +++ b/test/e2e/apimachinery/webhook.go @@ -1081,7 +1081,7 @@ func registerMutatingWebhookForCustomResource(f *framework.Framework, context *c return func() { client.AdmissionregistrationV1beta1().MutatingWebhookConfigurations().Delete(configName, nil) } } -func testCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1.CustomResourceDefinition, customResourceClient dynamic.ResourceInterface) { +func testCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1.CustomResourceDefinition, customResourceClient dynamic.DynamicResourceInterface) { By("Creating a custom resource that should be denied by the webhook") crInstance := &unstructured.Unstructured{ Object: map[string]interface{}{ @@ -1104,7 +1104,7 @@ func testCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1 } } -func testMutatingCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1.CustomResourceDefinition, customResourceClient dynamic.ResourceInterface) { +func testMutatingCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1.CustomResourceDefinition, customResourceClient dynamic.DynamicResourceInterface) { By("Creating a custom resource that should be mutated by the webhook") cr := &unstructured.Unstructured{ Object: map[string]interface{}{ diff --git a/test/e2e/apps/cronjob.go b/test/e2e/apps/cronjob.go index 6fe71e09c66..7a31d5c0234 100644 --- a/test/e2e/apps/cronjob.go +++ b/test/e2e/apps/cronjob.go @@ -51,7 +51,7 @@ var _ = SIGDescribe("CronJob", func() { successCommand := []string{"/bin/true"} BeforeEach(func() { - framework.SkipIfMissingResource(f.ClientPool, CronJobGroupVersionResourceBeta, f.Namespace.Name) + framework.SkipIfMissingResource(f.DynamicClient, CronJobGroupVersionResourceBeta, f.Namespace.Name) }) // multiple jobs running at once diff --git a/test/e2e/auth/audit.go b/test/e2e/auth/audit.go index 272cd442fc3..80a4bbc2889 100644 --- a/test/e2e/auth/audit.go +++ b/test/e2e/auth/audit.go @@ -619,7 +619,7 @@ var _ = SIGDescribe("Advanced Audit", func() { // Create and delete custom resource definition. { func() { - _, err = testserver.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.ClientPool) + err = testserver.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "failed to create custom resource definition") testserver.DeleteCustomResourceDefinition(crd, apiExtensionClient) }, diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 3784978b57c..3531b8170da 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -119,7 +119,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource: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/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/test/e2e/framework/crd_util.go b/test/e2e/framework/crd_util.go index 8fb19abbc42..08b90100af9 100644 --- a/test/e2e/framework/crd_util.go +++ b/test/e2e/framework/crd_util.go @@ -23,6 +23,7 @@ import ( crdclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/apiextensions-apiserver/test/integration/testserver" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/dynamic" ) @@ -37,7 +38,7 @@ type TestCrd struct { ApiVersion string ApiExtensionClient *crdclientset.Clientset Crd *apiextensionsv1beta1.CustomResourceDefinition - DynamicClient dynamic.ResourceInterface + DynamicClient dynamic.DynamicResourceInterface CleanUp CleanCrdFn } @@ -66,18 +67,23 @@ func CreateTestCRD(f *Framework) (*TestCrd, error) { Failf("failed to initialize apiExtensionClient: %v", err) return nil, err } + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + Failf("failed to initialize dynamic client: %v", err) + return nil, err + } + crd := newCRDForTest(testcrd) //create CRD and waits for the resource to be recognized and available. - dynamicClient, err := testserver.CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionClient, f.ClientPool) + err = testserver.CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionClient) if err != nil { Failf("failed to create CustomResourceDefinition: %v", err) return nil, err } - resourceClient := dynamicClient.Resource(&metav1.APIResource{ - Name: crd.Spec.Names.Plural, - Namespaced: true, - }, f.Namespace.Name) + + gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural} + resourceClient := dynamicClient.NamespacedResource(gvr, f.Namespace.Name) testcrd.ApiExtensionClient = apiExtensionClient testcrd.Crd = crd diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 4aca7e1d541..209966e8d81 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -70,7 +70,7 @@ type Framework struct { InternalClientset *internalclientset.Clientset AggregatorClient *aggregatorclient.Clientset - ClientPool dynamic.ClientPool + DynamicClient dynamic.DynamicInterface ScalesGetter scaleclient.ScalesGetter @@ -167,7 +167,8 @@ func (f *Framework) BeforeEach() { Expect(err).NotTo(HaveOccurred()) f.AggregatorClient, err = aggregatorclient.NewForConfig(config) Expect(err).NotTo(HaveOccurred()) - f.ClientPool = dynamic.NewClientPool(config, legacyscheme.Registry.RESTMapper(), dynamic.LegacyAPIPathResolverFunc) + f.DynamicClient, err = dynamic.NewForConfig(config) + Expect(err).NotTo(HaveOccurred()) // create scales getter, set GroupVersion and NegotiatedSerializer to default values // as they are required when creating a REST client. @@ -288,7 +289,7 @@ func (f *Framework) AfterEach() { if f.NamespaceDeletionTimeout != 0 { timeout = f.NamespaceDeletionTimeout } - if err := deleteNS(f.ClientSet, f.ClientPool, ns.Name, timeout); err != nil { + if err := deleteNS(f.ClientSet, f.DynamicClient, ns.Name, timeout); err != nil { if !apierrors.IsNotFound(err) { nsDeletionErrors[ns.Name] = err } else { diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 6bc58864890..62a221a249e 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -56,7 +56,6 @@ import ( extensions "k8s.io/api/extensions/v1beta1" apierrs "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/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -508,13 +507,9 @@ func SkipUnlessServerVersionGTE(v *utilversion.Version, c discovery.ServerVersio } } -func SkipIfMissingResource(clientPool dynamic.ClientPool, gvr schema.GroupVersionResource, namespace string) { - dynamicClient, err := clientPool.ClientForGroupVersionResource(gvr) - if err != nil { - Failf("Unexpected error getting dynamic client for %v: %v", gvr.GroupVersion(), err) - } - apiResource := metav1.APIResource{Name: gvr.Resource, Namespaced: true} - _, err = dynamicClient.Resource(&apiResource, namespace).List(metav1.ListOptions{}) +func SkipIfMissingResource(dynamicClient dynamic.DynamicInterface, gvr schema.GroupVersionResource, namespace string) { + resourceClient := dynamicClient.NamespacedResource(gvr, namespace) + _, err := resourceClient.List(metav1.ListOptions{}) if err != nil { // not all resources support list, so we ignore those if apierrs.IsMethodNotSupported(err) || apierrs.IsNotFound(err) || apierrs.IsForbidden(err) { @@ -1092,7 +1087,7 @@ func CheckTestingNSDeletedExcept(c clientset.Interface, skip string) error { // deleteNS deletes the provided namespace, waits for it to be completely deleted, and then checks // whether there are any pods remaining in a non-terminating state. -func deleteNS(c clientset.Interface, clientPool dynamic.ClientPool, namespace string, timeout time.Duration) error { +func deleteNS(c clientset.Interface, dynamicClient dynamic.DynamicInterface, namespace string, timeout time.Duration) error { startTime := time.Now() if err := c.CoreV1().Namespaces().Delete(namespace, nil); err != nil { return err @@ -1111,7 +1106,7 @@ func deleteNS(c clientset.Interface, clientPool dynamic.ClientPool, namespace st }) // verify there is no more remaining content in the namespace - remainingContent, cerr := hasRemainingContent(c, clientPool, namespace) + remainingContent, cerr := hasRemainingContent(c, dynamicClient, namespace) if cerr != nil { return cerr } @@ -1236,10 +1231,10 @@ func isDynamicDiscoveryError(err error) bool { } // hasRemainingContent checks if there is remaining content in the namespace via API discovery -func hasRemainingContent(c clientset.Interface, clientPool dynamic.ClientPool, namespace string) (bool, error) { +func hasRemainingContent(c clientset.Interface, dynamicClient dynamic.DynamicInterface, namespace string) (bool, error) { // some tests generate their own framework.Client rather than the default - // TODO: ensure every test call has a configured clientPool - if clientPool == nil { + // TODO: ensure every test call has a configured dynamicClient + if dynamicClient == nil { return false, nil } @@ -1263,7 +1258,7 @@ func hasRemainingContent(c clientset.Interface, clientPool dynamic.ClientPool, n // dump how many of resource type is on the server in a log. for gvr := range groupVersionResources { // get a client for this group version... - dynamicClient, err := clientPool.ClientForGroupVersionResource(gvr) + dynamicClient := dynamicClient.NamespacedResource(gvr, namespace) if err != nil { // not all resource types support list, so some errors here are normal depending on the resource type. Logf("namespace: %s, unable to get client - gvr: %v, error: %v", namespace, gvr, err) @@ -1271,12 +1266,11 @@ func hasRemainingContent(c clientset.Interface, clientPool dynamic.ClientPool, n } // get the api resource apiResource := metav1.APIResource{Name: gvr.Resource, Namespaced: true} - // TODO: temporary hack for https://github.com/kubernetes/kubernetes/issues/31798 - if ignoredResources.Has(apiResource.Name) { + if ignoredResources.Has(gvr.Resource) { Logf("namespace: %s, resource: %s, ignored listing per whitelist", namespace, apiResource.Name) continue } - obj, err := dynamicClient.Resource(&apiResource, namespace).List(metav1.ListOptions{}) + unstructuredList, err := dynamicClient.List(metav1.ListOptions{}) if err != nil { // not all resources support list, so we ignore those if apierrs.IsMethodNotSupported(err) || apierrs.IsNotFound(err) || apierrs.IsForbidden(err) { @@ -1288,10 +1282,6 @@ func hasRemainingContent(c clientset.Interface, clientPool dynamic.ClientPool, n } return false, err } - unstructuredList, ok := obj.(*unstructured.UnstructuredList) - if !ok { - return false, fmt.Errorf("namespace: %s, resource: %s, expected *unstructured.UnstructuredList, got %#v", namespace, apiResource.Name, obj) - } if len(unstructuredList.Items) > 0 { Logf("namespace: %s, resource: %s, items remaining: %v", namespace, apiResource.Name, len(unstructuredList.Items)) contentRemaining = true diff --git a/test/e2e/kubectl/kubectl.go b/test/e2e/kubectl/kubectl.go index d30e3f426c4..0cd2ac1f590 100644 --- a/test/e2e/kubectl/kubectl.go +++ b/test/e2e/kubectl/kubectl.go @@ -199,7 +199,7 @@ var _ = SIGDescribe("Kubectl alpha client", func() { }) It("should create a CronJob", func() { - framework.SkipIfMissingResource(f.ClientPool, CronJobGroupVersionResourceAlpha, f.Namespace.Name) + framework.SkipIfMissingResource(f.DynamicClient, CronJobGroupVersionResourceAlpha, f.Namespace.Name) schedule := "*/5 * * * ?" framework.RunKubectlOrDie("run", cjName, "--restart=OnFailure", "--generator=cronjob/v2alpha1", @@ -1414,7 +1414,7 @@ metadata: }) It("should create a CronJob", func() { - framework.SkipIfMissingResource(f.ClientPool, CronJobGroupVersionResourceBeta, f.Namespace.Name) + framework.SkipIfMissingResource(f.DynamicClient, CronJobGroupVersionResourceBeta, f.Namespace.Name) schedule := "*/5 * * * ?" framework.RunKubectlOrDie("run", cjName, "--restart=OnFailure", "--generator=cronjob/v1beta1", diff --git a/test/integration/garbagecollector/BUILD b/test/integration/garbagecollector/BUILD index 23a4c27adfa..8bc8f3eeb83 100644 --- a/test/integration/garbagecollector/BUILD +++ b/test/integration/garbagecollector/BUILD @@ -23,6 +23,7 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/resource: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", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/names:go_default_library", diff --git a/test/integration/garbagecollector/garbage_collector_test.go b/test/integration/garbagecollector/garbage_collector_test.go index bc38a27975e..9ec08aca7ee 100644 --- a/test/integration/garbagecollector/garbage_collector_test.go +++ b/test/integration/garbagecollector/garbage_collector_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/storage/names" @@ -167,23 +168,23 @@ func link(t *testing.T, owner, dependent metav1.Object) { func createRandomCustomResourceDefinition( t *testing.T, apiExtensionClient apiextensionsclientset.Interface, - clientPool dynamic.ClientPool, + dynamicClient dynamic.DynamicInterface, namespace string, -) (*apiextensionsv1beta1.CustomResourceDefinition, dynamic.ResourceInterface) { +) (*apiextensionsv1beta1.CustomResourceDefinition, dynamic.DynamicResourceInterface) { // Create a random custom resource definition and ensure it's available for // use. definition := apiextensionstestserver.NewRandomNameCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - client, err := apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, clientPool) + err := apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, dynamicClient) if err != nil { t.Fatalf("failed to create CustomResourceDefinition: %v", err) } // Get a client for the custom resource. - resourceClient := client.Resource(&metav1.APIResource{ - Name: definition.Spec.Names.Plural, - Namespaced: true, - }, namespace) + gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural} + + resourceClient := dynamicClient.NamespacedResource(gvr, namespace) + return definition, resourceClient } @@ -192,7 +193,7 @@ type testContext struct { gc *garbagecollector.GarbageCollector clientSet clientset.Interface apiExtensionClient apiextensionsclientset.Interface - clientPool dynamic.ClientPool + dynamicClient dynamic.DynamicInterface startGC func(workers int) // syncPeriod is how often the GC started with startGC will be resynced. syncPeriod time.Duration @@ -226,6 +227,10 @@ func setupWithServer(t *testing.T, result *kubeapiservertesting.TestServer, work config.ContentConfig = dynamic.ContentConfig() metaOnlyClientPool := dynamic.NewClientPool(&config, restMapper, dynamic.LegacyAPIPathResolverFunc) clientPool := dynamic.NewClientPool(&config, restMapper, dynamic.LegacyAPIPathResolverFunc) + dynamicClient, err := dynamic.NewForConfig(&config) + if err != nil { + t.Fatalf("failed to create dynamicClient: %v", err) + } sharedInformers := informers.NewSharedInformerFactory(clientSet, 0) alwaysStarted := make(chan struct{}) close(alwaysStarted) @@ -262,7 +267,7 @@ func setupWithServer(t *testing.T, result *kubeapiservertesting.TestServer, work gc: gc, clientSet: clientSet, apiExtensionClient: apiExtensionClient, - clientPool: clientPool, + dynamicClient: dynamicClient, startGC: startGC, syncPeriod: syncPeriod, } @@ -797,11 +802,11 @@ func TestCustomResourceCascadingDeletion(t *testing.T) { ctx := setup(t, 5) defer ctx.tearDown() - clientSet, apiExtensionClient, clientPool := ctx.clientSet, ctx.apiExtensionClient, ctx.clientPool + clientSet, apiExtensionClient, dynamicClient := ctx.clientSet, ctx.apiExtensionClient, ctx.dynamicClient ns := createNamespaceOrDie("crd-cascading", clientSet, t) - definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, clientPool, ns.Name) + definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name) // Create a custom owner resource. owner := newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")) @@ -857,13 +862,13 @@ func TestMixedRelationships(t *testing.T) { ctx := setup(t, 5) defer ctx.tearDown() - clientSet, apiExtensionClient, clientPool := ctx.clientSet, ctx.apiExtensionClient, ctx.clientPool + clientSet, apiExtensionClient, dynamicClient := ctx.clientSet, ctx.apiExtensionClient, ctx.dynamicClient ns := createNamespaceOrDie("crd-mixed", clientSet, t) configMapClient := clientSet.CoreV1().ConfigMaps(ns.Name) - definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, clientPool, ns.Name) + definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name) // Create a custom owner resource. customOwner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner"))) @@ -955,13 +960,13 @@ func TestCRDDeletionCascading(t *testing.T) { ctx := setup(t, 5) defer ctx.tearDown() - clientSet, apiExtensionClient, clientPool := ctx.clientSet, ctx.apiExtensionClient, ctx.clientPool + clientSet, apiExtensionClient, dynamicClient := ctx.clientSet, ctx.apiExtensionClient, ctx.dynamicClient ns := createNamespaceOrDie("crd-mixed", clientSet, t) configMapClient := clientSet.CoreV1().ConfigMaps(ns.Name) - definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, clientPool, ns.Name) + definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name) // Create a custom owner resource. owner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")))