test(kubectl::explain): move the flaky test out of conformance

Signed-off-by: knight42 <anonymousknight96@gmail.com>
This commit is contained in:
knight42 2020-04-27 11:24:01 +08:00
parent d3d870f051
commit b9fb9b82f3
No known key found for this signature in database
GPG Key ID: 1040B69865E7D86C

View File

@ -28,7 +28,9 @@ import (
"github.com/go-openapi/spec" "github.com/go-openapi/spec"
"github.com/onsi/ginkgo" "github.com/onsi/ginkgo"
openapiutil "k8s.io/kube-openapi/pkg/util"
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
"sigs.k8s.io/yaml"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
@ -39,10 +41,8 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
k8sclientset "k8s.io/client-go/kubernetes" k8sclientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
openapiutil "k8s.io/kube-openapi/pkg/util"
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/utils/crd" "k8s.io/kubernetes/test/utils/crd"
"sigs.k8s.io/yaml"
) )
var ( var (
@ -68,12 +68,6 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu
framework.Failf("%v", err) framework.Failf("%v", err)
} }
customServiceShortName := "ksvc"
crdSvc, err := setupCRDWithShortName(f, schemaCustomService, "service", customServiceShortName, "v1alpha1")
if err != nil {
framework.Failf("%v", err)
}
meta := fmt.Sprintf(metaPattern, crd.Crd.Spec.Names.Kind, crd.Crd.Spec.Group, crd.Crd.Spec.Versions[0].Name, "test-foo") meta := fmt.Sprintf(metaPattern, crd.Crd.Spec.Names.Kind, crd.Crd.Spec.Group, crd.Crd.Spec.Versions[0].Name, "test-foo")
ns := fmt.Sprintf("--namespace=%v", f.Namespace.Name) ns := fmt.Sprintf("--namespace=%v", f.Namespace.Name)
@ -126,11 +120,6 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu
framework.Failf("%v", err) framework.Failf("%v", err)
} }
ginkgo.By("kubectl explain works for CR with the same resource name as built-in object")
if err := verifyKubectlExplain(f.Namespace.Name, customServiceShortName+".spec", `(?s)DESCRIPTION:.*Specification of CustomService.*FIELDS:.*dummy.*<string>.*Dummy property`); err != nil {
framework.Failf("%v", err)
}
ginkgo.By("kubectl explain works to return error when explain is called on property that doesn't exist") ginkgo.By("kubectl explain works to return error when explain is called on property that doesn't exist")
if _, err := framework.RunKubectl(f.Namespace.Name, "explain", crd.Crd.Spec.Names.Plural+".spec.bars2"); err == nil || !strings.Contains(err.Error(), `field "bars2" does not exist`) { if _, err := framework.RunKubectl(f.Namespace.Name, "explain", crd.Crd.Spec.Names.Plural+".spec.bars2"); err == nil || !strings.Contains(err.Error(), `field "bars2" does not exist`) {
framework.Failf("unexpected no error when explaining property that doesn't exist: %v", err) framework.Failf("unexpected no error when explaining property that doesn't exist: %v", err)
@ -139,9 +128,6 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu
if err := cleanupCRD(f, crd); err != nil { if err := cleanupCRD(f, crd); err != nil {
framework.Failf("%v", err) framework.Failf("%v", err)
} }
if err := cleanupCRD(f, crdSvc); err != nil {
framework.Failf("%v", err)
}
}) })
/* /*
@ -478,6 +464,34 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu
framework.Failf("%v", err) framework.Failf("%v", err)
} }
}) })
// Marked as flaky until https://github.com/kubernetes/kubernetes/issues/65517 is solved.
ginkgo.It("[Flaky] kubectl explain works for CR with the same resource name as built-in object.", func() {
customServiceShortName := fmt.Sprintf("ksvc-%d", time.Now().Unix()) // make short name unique
opt := func(crd *apiextensionsv1.CustomResourceDefinition) {
crd.ObjectMeta = metav1.ObjectMeta{Name: "services." + crd.Spec.Group}
crd.Spec.Names = apiextensionsv1.CustomResourceDefinitionNames{
Plural: "services",
Singular: "service",
ListKind: "ServiceList",
Kind: "Service",
ShortNames: []string{customServiceShortName},
}
}
crdSvc, err := setupCRDAndVerifySchemaWithOptions(f, schemaCustomService, schemaCustomService, "service", []string{"v1"}, opt)
if err != nil {
framework.Failf("%v", err)
}
if err := verifyKubectlExplain(f.Namespace.Name, customServiceShortName+".spec", `(?s)DESCRIPTION:.*Specification of CustomService.*FIELDS:.*dummy.*<string>.*Dummy property`); err != nil {
_ = cleanupCRD(f, crdSvc) // need to remove the crd since its name is unchanged
framework.Failf("%v", err)
}
if err := cleanupCRD(f, crdSvc); err != nil {
framework.Failf("%v", err)
}
})
}) })
func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, versions ...string) (*crd.TestCrd, error) { func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, versions ...string) (*crd.TestCrd, error) {
@ -490,19 +504,6 @@ func setupCRD(f *framework.Framework, schema []byte, groupSuffix string, version
return setupCRDAndVerifySchema(f, schema, expect, groupSuffix, versions...) return setupCRDAndVerifySchema(f, schema, expect, groupSuffix, versions...)
} }
func setupCRDWithShortName(f *framework.Framework, schema []byte, groupSuffix, shortName string, versions ...string) (*crd.TestCrd, error) {
expect := schema
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`)
}
setShortName := func(crd *apiextensionsv1.CustomResourceDefinition) {
crd.Spec.Names.ShortNames = []string{shortName}
}
return setupCRDAndVerifySchemaWithOptions(f, schema, expect, groupSuffix, versions, setShortName)
}
func setupCRDAndVerifySchema(f *framework.Framework, schema, expect []byte, groupSuffix string, versions ...string) (*crd.TestCrd, error) { func setupCRDAndVerifySchema(f *framework.Framework, schema, expect []byte, groupSuffix string, versions ...string) (*crd.TestCrd, error) {
return setupCRDAndVerifySchemaWithOptions(f, schema, expect, groupSuffix, versions) return setupCRDAndVerifySchemaWithOptions(f, schema, expect, groupSuffix, versions)
} }