From 1cfed1cca696eedd77e1af549f637de6418e528b Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Tue, 21 May 2019 16:09:42 -0700 Subject: [PATCH 1/2] fix crd openapi alpha e2e make schema used in e2e structural so it can be published; GET before UPDATE to tolerate object change --- test/e2e/apimachinery/crd_publish_openapi.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/e2e/apimachinery/crd_publish_openapi.go b/test/e2e/apimachinery/crd_publish_openapi.go index fed04d05743..99967a3cf33 100644 --- a/test/e2e/apimachinery/crd_publish_openapi.go +++ b/test/e2e/apimachinery/crd_publish_openapi.go @@ -32,6 +32,7 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apiserver/validation" apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" utilversion "k8s.io/apimachinery/pkg/util/version" "k8s.io/apimachinery/pkg/util/wait" @@ -309,6 +310,10 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Feature:CustomResourcePublish } ginkgo.By("mark a version not serverd") + crd.Crd, err = crd.APIExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(crd.Crd.Name, metav1.GetOptions{}) + if err != nil { + framework.Failf("%v", err) + } crd.Crd.Spec.Versions[1].Served = false crd.Crd, err = crd.APIExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Update(crd.Crd) if err != nil { @@ -579,9 +584,11 @@ properties: properties: dummy: description: Dummy property. + type: object status: description: Status of Waldo type: object properties: bars: - description: List of Bars and their statuses.`) + description: List of Bars and their statuses. + type: array`) From 629bdf5e841d65fa030256b2246fe95b9d5d61a2 Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Wed, 22 May 2019 12:16:08 -0700 Subject: [PATCH 2/2] restore test behavior for CRD without validation cases the test doesn't set empty validation but expects CRD controller to treat nil schema specially and publish an empty schema --- test/e2e/apimachinery/crd_publish_openapi.go | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/test/e2e/apimachinery/crd_publish_openapi.go b/test/e2e/apimachinery/crd_publish_openapi.go index 99967a3cf33..afa4c053bcd 100644 --- a/test/e2e/apimachinery/crd_publish_openapi.go +++ b/test/e2e/apimachinery/crd_publish_openapi.go @@ -341,12 +341,16 @@ func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, version return nil, fmt.Errorf("require at least one version for CRD") } - if schema == nil { - schema = []byte(`type: object`) - } + expect := schema props := &v1beta1.JSONSchemaProps{} - if err := yaml.Unmarshal(schema, props); err != nil { - return nil, err + if schema == nil { + // to be backwards compatible, we expect CRD controller to treat + // CRD with nil schema specially and publish an empty schema + expect = []byte(`type: object`) + } else { + if err := yaml.Unmarshal(schema, props); err != nil { + return nil, err + } } crd, err := crd.CreateMultiVersionTestCRD(f, group, func(crd *v1beta1.CustomResourceDefinition) { @@ -360,8 +364,11 @@ func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, version } crd.Spec.Versions = apiVersions - crd.Spec.Validation = &v1beta1.CustomResourceValidation{ - OpenAPIV3Schema: props, + // set up validation when input schema isn't nil + if schema != nil { + crd.Spec.Validation = &v1beta1.CustomResourceValidation{ + OpenAPIV3Schema: props, + } } }) if err != nil { @@ -369,7 +376,7 @@ func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, version } for _, v := range crd.Crd.Spec.Versions { - if err := waitForDefinition(f.ClientSet, definitionName(crd, v.Name), schema); err != nil { + if err := waitForDefinition(f.ClientSet, definitionName(crd, v.Name), expect); err != nil { return nil, fmt.Errorf("%v", err) } }