diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go index 3f0c27acb25..0775971df58 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go @@ -43,6 +43,38 @@ const ( noxuInstanceNum int64 = 9223372036854775807 ) +// NewRandomNameV1CustomResourceDefinition generates a CRD with random name to avoid name conflict in e2e tests +func NewRandomNameV1CustomResourceDefinition(scope apiextensionsv1.ResourceScope) *apiextensionsv1.CustomResourceDefinition { + // ensure the singular doesn't end in an s for now + gName := names.SimpleNameGenerator.GenerateName("foo") + "a" + return &apiextensionsv1.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Name: gName + "s.mygroup.example.com"}, + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ + Group: "mygroup.example.com", + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ + { + Name: "v1beta1", + Served: true, + Storage: true, + Schema: &apiextensionsv1.CustomResourceValidation{ + OpenAPIV3Schema: &apiextensionsv1.JSONSchemaProps{ + XPreserveUnknownFields: pointer.BoolPtr(true), + Type: "object", + }, + }, + }, + }, + Names: apiextensionsv1.CustomResourceDefinitionNames{ + Plural: gName + "s", + Singular: gName, + Kind: gName, + ListKind: gName + "List", + }, + Scope: scope, + }, + } +} + // NewRandomNameCustomResourceDefinition generates a CRD with random name to avoid name conflict in e2e tests func NewRandomNameCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { // ensure the singular doesn't end in an s for now diff --git a/test/e2e/apimachinery/BUILD b/test/e2e/apimachinery/BUILD index 876cfcfc700..f16551e6f6b 100644 --- a/test/e2e/apimachinery/BUILD +++ b/test/e2e/apimachinery/BUILD @@ -42,7 +42,6 @@ go_library( "//staging/src/k8s.io/api/scheduling/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/test/integration:go_default_library", diff --git a/test/e2e/apimachinery/custom_resource_definition.go b/test/e2e/apimachinery/custom_resource_definition.go index f5b7344d623..11a9cd2ea3e 100644 --- a/test/e2e/apimachinery/custom_resource_definition.go +++ b/test/e2e/apimachinery/custom_resource_definition.go @@ -19,7 +19,7 @@ package apimachinery import ( "github.com/onsi/ginkgo" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/equality" @@ -52,14 +52,14 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { apiExtensionClient, err := clientset.NewForConfig(config) framework.ExpectNoError(err, "initializing apiExtensionClient") - randomDefinition := fixtures.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) + randomDefinition := fixtures.NewRandomNameV1CustomResourceDefinition(v1.ClusterScoped) // Create CRD and waits for the resource to be recognized and available. - randomDefinition, err = fixtures.CreateNewCustomResourceDefinition(randomDefinition, apiExtensionClient, f.DynamicClient) + randomDefinition, err = fixtures.CreateNewV1CustomResourceDefinition(randomDefinition, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "creating CustomResourceDefinition") defer func() { - err = fixtures.DeleteCustomResourceDefinition(randomDefinition, apiExtensionClient) + err = fixtures.DeleteV1CustomResourceDefinition(randomDefinition, apiExtensionClient) framework.ExpectNoError(err, "deleting CustomResourceDefinition") }() }) @@ -80,30 +80,30 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { testUUID := string(uuid.NewUUID()) // Create CRD and wait for the resource to be recognized and available. - crds := make([]*v1beta1.CustomResourceDefinition, testListSize) + crds := make([]*v1.CustomResourceDefinition, testListSize) for i := 0; i < testListSize; i++ { - crd := fixtures.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) + crd := fixtures.NewRandomNameV1CustomResourceDefinition(v1.ClusterScoped) crd.Labels = map[string]string{"e2e-list-test-uuid": testUUID} - crd, err = fixtures.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) + crd, err = fixtures.CreateNewV1CustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "creating CustomResourceDefinition") crds[i] = crd } // Create a crd w/o the label to ensure the label selector matching works correctly - crd := fixtures.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) - crd, err = fixtures.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) + crd := fixtures.NewRandomNameV1CustomResourceDefinition(v1.ClusterScoped) + crd, err = fixtures.CreateNewV1CustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "creating CustomResourceDefinition") defer func() { - err = fixtures.DeleteCustomResourceDefinition(crd, apiExtensionClient) + err = fixtures.DeleteV1CustomResourceDefinition(crd, apiExtensionClient) framework.ExpectNoError(err, "deleting CustomResourceDefinition") }() selectorListOpts := metav1.ListOptions{LabelSelector: "e2e-list-test-uuid=" + testUUID} - list, err := apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().List(selectorListOpts) + list, err := apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().List(selectorListOpts) framework.ExpectNoError(err, "listing CustomResourceDefinitions") framework.ExpectEqual(len(list.Items), testListSize) for _, actual := range list.Items { - var expected *v1beta1.CustomResourceDefinition + var expected *v1.CustomResourceDefinition for _, e := range crds { if e.Name == actual.Name && e.Namespace == actual.Namespace { expected = e @@ -119,7 +119,7 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { // Use delete collection to remove the CRDs err = fixtures.DeleteCustomResourceDefinitions(selectorListOpts, apiExtensionClient) framework.ExpectNoError(err, "deleting CustomResourceDefinitions") - _, err = apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(crd.Name, metav1.GetOptions{}) + _, err = apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().Get(crd.Name, metav1.GetOptions{}) framework.ExpectNoError(err, "getting remaining CustomResourceDefinition") }) @@ -135,20 +135,20 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { framework.ExpectNoError(err, "initializing apiExtensionClient") dynamicClient, err := dynamic.NewForConfig(config) framework.ExpectNoError(err, "initializing dynamic client") - gvr := v1beta1.SchemeGroupVersion.WithResource("customresourcedefinitions") + gvr := v1.SchemeGroupVersion.WithResource("customresourcedefinitions") resourceClient := dynamicClient.Resource(gvr) // Create CRD and waits for the resource to be recognized and available. - crd := fixtures.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) - crd, err = fixtures.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) + crd := fixtures.NewRandomNameV1CustomResourceDefinition(v1.ClusterScoped) + crd, err = fixtures.CreateNewV1CustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "creating CustomResourceDefinition") defer func() { - err = fixtures.DeleteCustomResourceDefinition(crd, apiExtensionClient) + err = fixtures.DeleteV1CustomResourceDefinition(crd, apiExtensionClient) framework.ExpectNoError(err, "deleting CustomResourceDefinition") }() - var updated *v1beta1.CustomResourceDefinition - updateCondition := v1beta1.CustomResourceDefinitionCondition{Message: "updated"} + var updated *v1.CustomResourceDefinition + updateCondition := v1.CustomResourceDefinitionCondition{Message: "updated"} err = retry.RetryOnConflict(retry.DefaultRetry, func() error { // Use dynamic client to read the status sub-resource since typed client does not expose it. u, err := resourceClient.Get(crd.GetName(), metav1.GetOptions{}, "status") @@ -158,14 +158,14 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { e2elog.Failf("Expected CustomResourceDefinition Spec to match status sub-resource Spec, but got:\n%s", diff.ObjectReflectDiff(status.Spec, crd.Spec)) } status.Status.Conditions = append(status.Status.Conditions, updateCondition) - updated, err = apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().UpdateStatus(status) + updated, err = apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().UpdateStatus(status) return err }) framework.ExpectNoError(err, "updating CustomResourceDefinition status") expectCondition(updated.Status.Conditions, updateCondition) - patchCondition := v1beta1.CustomResourceDefinitionCondition{Message: "patched"} - patched, err := apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Patch( + patchCondition := v1.CustomResourceDefinitionCondition{Message: "patched"} + patched, err := apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().Patch( crd.GetName(), types.JSONPatchType, []byte(`[{"op": "add", "path": "/status/conditions", "value": [{"message": "patched"}]}]`), @@ -177,14 +177,14 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { }) }) -func unstructuredToCRD(obj *unstructured.Unstructured) *v1beta1.CustomResourceDefinition { - crd := new(v1beta1.CustomResourceDefinition) +func unstructuredToCRD(obj *unstructured.Unstructured) *v1.CustomResourceDefinition { + crd := new(v1.CustomResourceDefinition) err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, crd) framework.ExpectNoError(err, "converting unstructured to CustomResourceDefinition") return crd } -func expectCondition(conditions []v1beta1.CustomResourceDefinitionCondition, expected v1beta1.CustomResourceDefinitionCondition) { +func expectCondition(conditions []v1.CustomResourceDefinitionCondition, expected v1.CustomResourceDefinitionCondition) { for _, c := range conditions { if equality.Semantic.DeepEqual(c, expected) { return diff --git a/test/e2e/apimachinery/garbage_collector.go b/test/e2e/apimachinery/garbage_collector.go index 04d39c17afb..7d00009aa04 100644 --- a/test/e2e/apimachinery/garbage_collector.go +++ b/test/e2e/apimachinery/garbage_collector.go @@ -25,7 +25,7 @@ import ( batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" "k8s.io/api/core/v1" - apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" apiextensionstestserver "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" @@ -876,23 +876,25 @@ var _ = SIGDescribe("Garbage collector", func() { // Create a random custom resource definition and ensure it's available for // use. - definition := apiextensionstestserver.NewRandomNameCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + definition := apiextensionstestserver.NewRandomNameV1CustomResourceDefinition(apiextensionsv1.ClusterScoped) defer func() { - err = apiextensionstestserver.DeleteCustomResourceDefinition(definition, apiExtensionClient) + err = apiextensionstestserver.DeleteV1CustomResourceDefinition(definition, apiExtensionClient) if err != nil && !errors.IsNotFound(err) { e2elog.Failf("failed to delete CustomResourceDefinition: %v", err) } }() - definition, err = apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, f.DynamicClient) + definition, err = apiextensionstestserver.CreateNewV1CustomResourceDefinition(definition, apiExtensionClient, f.DynamicClient) if err != nil { e2elog.Failf("failed to create CustomResourceDefinition: %v", err) } + framework.ExpectEqual(len(definition.Spec.Versions), 1, "custom resource definition should have one version") + version := definition.Spec.Versions[0] // Get a client for the custom resource. - gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural} + gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: version.Name, Resource: definition.Spec.Names.Plural} resourceClient := f.DynamicClient.Resource(gvr) - apiVersion := definition.Spec.Group + "/" + definition.Spec.Version + apiVersion := definition.Spec.Group + "/" + version.Name // Create a custom owner resource. ownerName := names.SimpleNameGenerator.GenerateName("owner") @@ -977,23 +979,25 @@ var _ = SIGDescribe("Garbage collector", func() { // Create a random custom resource definition and ensure it's available for // use. - definition := apiextensionstestserver.NewRandomNameCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + definition := apiextensionstestserver.NewRandomNameV1CustomResourceDefinition(apiextensionsv1.ClusterScoped) defer func() { - err = apiextensionstestserver.DeleteCustomResourceDefinition(definition, apiExtensionClient) + err = apiextensionstestserver.DeleteV1CustomResourceDefinition(definition, apiExtensionClient) if err != nil && !errors.IsNotFound(err) { e2elog.Failf("failed to delete CustomResourceDefinition: %v", err) } }() - definition, err = apiextensionstestserver.CreateNewCustomResourceDefinition(definition, apiExtensionClient, f.DynamicClient) + definition, err = apiextensionstestserver.CreateNewV1CustomResourceDefinition(definition, apiExtensionClient, f.DynamicClient) if err != nil { e2elog.Failf("failed to create CustomResourceDefinition: %v", err) } + framework.ExpectEqual(len(definition.Spec.Versions), 1, "custom resource definition should have one version") + version := definition.Spec.Versions[0] // Get a client for the custom resource. - gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural} + gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: version.Name, Resource: definition.Spec.Names.Plural} resourceClient := f.DynamicClient.Resource(gvr) - apiVersion := definition.Spec.Group + "/" + definition.Spec.Version + apiVersion := definition.Spec.Group + "/" + version.Name // Create a custom owner resource. ownerName := names.SimpleNameGenerator.GenerateName("owner")