From 5a0e1930026ff35ba873e3a4a6076c6c150e67b4 Mon Sep 17 00:00:00 2001 From: Natasha Sarkar Date: Mon, 22 Feb 2021 14:35:23 -0800 Subject: [PATCH] moved common resource definitions to separate function --- api/krusty/component_test.go | 126 +++++------ api/krusty/openapicustomschema_test.go | 295 +++++-------------------- api/krusty/openapiversion_test.go | 26 +-- kyaml/openapi/openapi.go | 2 +- 4 files changed, 138 insertions(+), 311 deletions(-) diff --git a/api/krusty/component_test.go b/api/krusty/component_test.go index 25ae4f858..3c5e41fe2 100644 --- a/api/krusty/component_test.go +++ b/api/krusty/component_test.go @@ -33,7 +33,7 @@ func writeK(path string, content string) FileGen { } func writeTestBase(th kusttest_test.Harness) { - th.WriteK("/app/base", ` + th.WriteK("/base", ` resources: - deploy.yaml configMapGenerator: @@ -42,7 +42,7 @@ configMapGenerator: - testValue=purple - otherValue=green `) - th.WriteF("/app/base/deploy.yaml", ` + th.WriteF("/base/deploy.yaml", ` apiVersion: v1 kind: Deployment metadata: @@ -53,7 +53,7 @@ spec: } func writeTestComponent(th kusttest_test.Harness) { - th.WriteC("/app/comp", ` + th.WriteC("/comp", ` namePrefix: comp- replicas: - name: storefront @@ -67,7 +67,7 @@ configMapGenerator: - testValue=blue - compValue=red `) - th.WriteF("/app/comp/stub.yaml", ` + th.WriteF("/comp/stub.yaml", ` apiVersion: v1 kind: Deployment metadata: @@ -78,7 +78,7 @@ spec: } func writeOverlayProd(th kusttest_test.Harness) { - th.WriteK("/app/prod", ` + th.WriteK("/prod", ` resources: - ../base - db @@ -90,7 +90,7 @@ components: } func writeDB(th kusttest_test.Harness) { - deployment("db", "/app/prod/db")(th) + deployment("db", "/prod/db")(th) } func deployment(name string, path string) FileGen { @@ -114,7 +114,7 @@ func TestComponent(t *testing.T) { // resources that come before it in the resources list of the parent Kustomization. "basic-component": { input: []FileGen{writeTestBase, writeTestComponent, writeOverlayProd}, - runPath: "/app/prod", + runPath: "/prod", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -149,14 +149,14 @@ spec: }, "multiple-components": { input: []FileGen{writeTestBase, writeTestComponent, writeDB, - writeC("/app/additionalcomp", ` + writeC("/additionalcomp", ` configMapGenerator: - name: my-configmap behavior: merge literals: - otherValue=orange `), - writeK("/app/prod", ` + writeK("/prod", ` resources: - ../base - db @@ -166,7 +166,7 @@ components: - ../additionalcomp `), }, - runPath: "/app/prod", + runPath: "/prod", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -201,7 +201,7 @@ spec: }, "nested-components": { input: []FileGen{writeTestBase, writeTestComponent, writeDB, - writeC("/app/additionalcomp", ` + writeC("/additionalcomp", ` components: - ../comp configMapGenerator: @@ -210,7 +210,7 @@ configMapGenerator: literals: - otherValue=orange `), - writeK("/app/prod", ` + writeK("/prod", ` resources: - ../base - db @@ -219,7 +219,7 @@ components: - ../additionalcomp `), }, - runPath: "/app/prod", + runPath: "/prod", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -256,13 +256,13 @@ spec: // without being affected by the component in another branch of the resource tree "basic-component-with-repeated-base": { input: []FileGen{writeTestBase, writeTestComponent, writeOverlayProd, - writeK("/app/repeated", ` + writeK("/repeated", ` resources: - ../base - ../prod `), }, - runPath: "/app/repeated", + runPath: "/repeated", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -312,7 +312,7 @@ spec: }, "applying-component-directly-should-be-same-as-kustomization": { input: []FileGen{writeTestBase, writeTestComponent, - writeC("/app/direct-component", ` + writeC("/direct-component", ` resources: - ../base configMapGenerator: @@ -323,7 +323,7 @@ configMapGenerator: - testValue=blue `), }, - runPath: "/app/direct-component", + runPath: "/direct-component", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -344,7 +344,7 @@ metadata: }, "missing-optional-component-api-version": { input: []FileGen{writeTestBase, writeOverlayProd, - writeF("/app/comp/"+konfig.DefaultKustomizationFileName(), ` + writeF("/comp/"+konfig.DefaultKustomizationFileName(), ` kind: Component configMapGenerator: - name: my-configmap @@ -353,7 +353,7 @@ configMapGenerator: - otherValue=orange `), }, - runPath: "/app/prod", + runPath: "/prod", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -382,25 +382,25 @@ spec: // accumulator when "comp-b" is accumulated. In practice we could use simple Kustomizations for this example. "components-can-add-the-same-base-if-the-first-renames-resources": { input: []FileGen{writeTestBase, - deployment("proxy", "/app/comp-a/proxy.yaml"), - writeC("/app/comp-a", ` + deployment("proxy", "/comp-a/proxy.yaml"), + writeC("/comp-a", ` resources: - ../base nameSuffix: "-a" `), - writeC("/app/comp-b", ` + writeC("/comp-b", ` resources: - ../base nameSuffix: "-b" `), - writeK("/app/prod", ` + writeK("/prod", ` components: - ../comp-a - ../comp-b`), }, - runPath: "/app/prod", + runPath: "/prod", expectedOutput: ` apiVersion: v1 kind: Deployment @@ -436,34 +436,34 @@ metadata: "multiple-bases-can-add-the-same-component-if-it-doesn-not-define-named-entities": { input: []FileGen{ - writeC("/app/comp", ` + writeC("/comp", ` namespace: prod `), - writeK("/app/base-a", ` + writeK("/base-a", ` resources: - proxy.yaml components: - ../comp `), - deployment("proxy-a", "/app/base-a/proxy.yaml"), - writeK("/app/base-b", ` + deployment("proxy-a", "/base-a/proxy.yaml"), + writeK("/base-b", ` resources: - proxy.yaml components: - ../comp `), - deployment("proxy-b", "/app/base-b/proxy.yaml"), - writeK("/app/prod", ` + deployment("proxy-b", "/base-b/proxy.yaml"), + writeK("/prod", ` resources: - proxy.yaml - ../base-a - ../base-b `), - deployment("proxy-prod", "/app/prod/proxy.yaml"), + deployment("proxy-prod", "/prod/proxy.yaml"), }, - runPath: "/app/prod", + runPath: "/prod", // Note that the namepsace has not been applied to proxy-prod because it was not in scope when the // component was applied expectedOutput: ` @@ -513,30 +513,30 @@ func TestComponentErrors(t *testing.T) { }{ "components-cannot-be-added-to-resources": { input: []FileGen{writeTestBase, writeTestComponent, - writeK("/app/compinres", ` + writeK("/compinres", ` resources: - ../base - ../comp `), }, - runPath: "app/compinres", - expectedError: "expected kind != 'Component' for path '/app/comp'", + runPath: "compinres", + expectedError: "expected kind != 'Component' for path '/comp'", }, "kustomizations-cannot-be-added-to-components": { input: []FileGen{writeTestBase, writeTestComponent, - writeK("/app/kustincomponents", ` + writeK("/kustincomponents", ` components: - ../base - ../comp `), }, - runPath: "/app/kustincomponents", + runPath: "/kustincomponents", expectedError: "accumulating components: accumulateDirectory: \"expected kind 'Component' for path " + - "'/app/base' but got 'Kustomization'", + "'/base' but got 'Kustomization'", }, "files-cannot-be-added-to-components-list": { input: []FileGen{writeTestBase, - writeF("/app/filesincomponents/stub.yaml", ` + writeF("/filesincomponents/stub.yaml", ` apiVersion: v1 kind: Deployment metadata: @@ -544,18 +544,18 @@ metadata: spec: replicas: 1 `), - writeK("/app/filesincomponents", ` + writeK("/filesincomponents", ` components: - stub.yaml - ../comp `), }, - runPath: "/app/filesincomponents", - expectedError: "'/app/filesincomponents/stub.yaml' must be a directory to be a root", + runPath: "/filesincomponents", + expectedError: "'/filesincomponents/stub.yaml' must be a directory to be a root", }, "invalid-component-api-version": { input: []FileGen{writeTestBase, writeOverlayProd, - writeF("/app/comp/"+konfig.DefaultKustomizationFileName(), ` + writeF("/comp/"+konfig.DefaultKustomizationFileName(), ` apiVersion: kustomize.config.k8s.io/v1beta1 kind: Component configMapGenerator: @@ -565,22 +565,22 @@ configMapGenerator: - otherValue=orange `), }, - runPath: "/app/prod", + runPath: "/prod", expectedError: "apiVersion for Component should be kustomize.config.k8s.io/v1alpha1", }, "components-cannot-add-the-same-resource": { input: []FileGen{writeTestBase, - writeC("/app/comp-a", ` + writeC("/comp-a", ` resources: - proxy.yaml `), - deployment("proxy", "/app/comp-a/proxy.yaml"), - writeC("/app/comp-b", ` + deployment("proxy", "/comp-a/proxy.yaml"), + writeC("/comp-b", ` resources: - proxy.yaml `), - deployment("proxy", "/app/comp-b/proxy.yaml"), - writeK("/app/prod", ` + deployment("proxy", "/comp-b/proxy.yaml"), + writeK("/prod", ` resources: - ../base @@ -588,49 +588,49 @@ components: - ../comp-a - ../comp-b`), }, - runPath: "/app/prod", + runPath: "/prod", expectedError: "may not add resource with an already registered id: ~G_v1_Deployment|~X|proxy", }, "components-cannot-add-the-same-base": { input: []FileGen{writeTestBase, - deployment("proxy", "/app/comp-a/proxy.yaml"), - writeC("/app/comp-a", ` + deployment("proxy", "/comp-a/proxy.yaml"), + writeC("/comp-a", ` resources: - ../base `), - writeC("/app/comp-b", ` + writeC("/comp-b", ` resources: - ../base `), - writeK("/app/prod", ` + writeK("/prod", ` components: - ../comp-a - ../comp-b`), }, - runPath: "/app/prod", + runPath: "/prod", expectedError: "may not add resource with an already registered id: ~G_v1_Deployment|~X|storefront", }, "components-cannot-add-bases-containing-the-same-resource": { input: []FileGen{writeTestBase, - writeC("/app/comp-a", ` + writeC("/comp-a", ` resources: - ../base-a `), - writeK("/app/base-a", ` + writeK("/base-a", ` resources: - proxy.yaml `), - deployment("proxy", "/app/base-a/proxy.yaml"), - writeC("/app/comp-b", ` + deployment("proxy", "/base-a/proxy.yaml"), + writeC("/comp-b", ` resources: - ../base-b `), - writeK("/app/base-b", ` + writeK("/base-b", ` resources: - proxy.yaml `), - deployment("proxy", "/app/base-b/proxy.yaml"), - writeK("/app/prod", ` + deployment("proxy", "/base-b/proxy.yaml"), + writeK("/prod", ` resources: - ../base @@ -638,7 +638,7 @@ components: - ../comp-a - ../comp-b`), }, - runPath: "/app/prod", + runPath: "/prod", expectedError: "may not add resource with an already registered id: ~G_v1_Deployment|~X|proxy", }, } diff --git a/api/krusty/openapicustomschema_test.go b/api/krusty/openapicustomschema_test.go index 439dc44ba..ead5288c5 100644 --- a/api/krusty/openapicustomschema_test.go +++ b/api/krusty/openapicustomschema_test.go @@ -14,14 +14,34 @@ func writeTestSchema(th kusttest_test.Harness, filepath string) { th.WriteF(filepath+"mycrd_schema.json", string(bytes)) } +func writeCustomResource(th kusttest_test.Harness, filepath string) { + th.WriteF(filepath, ` +apiVersion: example.com/v1alpha1 +kind: MyCRD +metadata: + name: service +spec: + template: + spec: + containers: + - name: server + image: server + command: example + ports: + - name: grpc + protocol: TCP + containerPort: 8080 +`) +} + func writeTestComponentWithCustomSchema(th kusttest_test.Harness) { - writeTestSchema(th, "/app/comp/") + writeTestSchema(th, "/comp/") openapi.ResetOpenAPI() - th.WriteC("/app/comp", ` + th.WriteC("/comp", ` openapi: path: mycrd_schema.json `) - th.WriteF("/app/comp/stub.yaml", ` + th.WriteF("/comp/stub.yaml", ` apiVersion: v1 kind: Deployment metadata: @@ -31,16 +51,7 @@ spec: `) } -// Test for issue #2825 -func TestCustomOpenApiFieldBasicUsage(t *testing.T) { - th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` -resources: -- mycrd.yaml - -openapi: - path: mycrd_schema.json - +const customSchemaPatch = ` patchesStrategicMerge: - |- apiVersion: example.com/v1alpha1 @@ -53,29 +64,9 @@ patchesStrategicMerge: containers: - name: server image: nginx -`) - th.WriteF("/app/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 -`) - writeTestSchema(th, "/app/") - openapi.ResetOpenAPI() +` - m := th.Run("/app", th.MakeDefaultOptions()) - th.AssertActualEqualsExpected(m, ` +const patchedCustomResource = ` apiVersion: example.com/v1alpha1 kind: MyCRD metadata: @@ -91,54 +82,39 @@ spec: - containerPort: 8080 name: grpc protocol: TCP -`) +` + +// Test for issue #2825 +func TestCustomOpenApiFieldBasicUsage(t *testing.T) { + th := kusttest_test.MakeHarness(t) + th.WriteK(".", ` +resources: +- mycrd.yaml +openapi: + path: mycrd_schema.json +`+customSchemaPatch) + writeCustomResource(th, "/mycrd.yaml") + writeTestSchema(th, "./") + openapi.ResetOpenAPI() + m := th.Run(".", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, patchedCustomResource) } // Error if user tries to specify both builtin version // and custom schema func TestCustomOpenApiFieldBothPathAndVersion(t *testing.T) { th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` + th.WriteK(".", ` resources: - mycrd.yaml - openapi: version: v1.18.8 path: mycrd_schema.json - -patchesStrategicMerge: -- |- - apiVersion: example.com/v1alpha1 - kind: MyCRD - metadata: - name: service - spec: - template: - spec: - containers: - - name: server - image: nginx -`) - th.WriteF("/app/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 -`) - writeTestSchema(th, "/app/") +`+customSchemaPatch) + writeCustomResource(th, "/mycrd.yaml") + writeTestSchema(th, "./") openapi.ResetOpenAPI() - err := th.RunWithErr("/app", th.MakeDefaultOptions()) + err := th.RunWithErr(".", th.MakeDefaultOptions()) assert.Error(t, err) assert.Equal(t, "builtin version and custom schema provided, cannot use both", @@ -148,48 +124,18 @@ spec: // Test for if the filepath specified is not found func TestCustomOpenApiFieldFileNotFound(t *testing.T) { th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` + th.WriteK(".", ` resources: - mycrd.yaml - openapi: path: mycrd_schema.json - -patchesStrategicMerge: -- |- - apiVersion: example.com/v1alpha1 - kind: MyCRD - metadata: - name: service - spec: - template: - spec: - containers: - - name: server - image: nginx -`) - th.WriteF("/app/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 -`) +`+customSchemaPatch) + writeCustomResource(th, "/mycrd.yaml") openapi.ResetOpenAPI() - err := th.RunWithErr("/app", th.MakeDefaultOptions()) + err := th.RunWithErr(".", th.MakeDefaultOptions()) assert.Error(t, err) assert.Equal(t, - "'/app/mycrd_schema.json' doesn't exist", + "'/mycrd_schema.json' doesn't exist", err.Error()) } @@ -198,64 +144,18 @@ func TestCustomOpenApiFieldFromBase(t *testing.T) { th.WriteK("base", ` resources: - mycrd.yaml - openapi: path: mycrd_schema.json -`) - th.WriteF("base/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 `) th.WriteK("overlay", ` resources: - ../base - -patchesStrategicMerge: -- |- - apiVersion: example.com/v1alpha1 - kind: MyCRD - metadata: - name: service - spec: - template: - spec: - containers: - - name: server - image: nginx -`) +`+customSchemaPatch) + writeCustomResource(th, "base/mycrd.yaml") writeTestSchema(th, "/base/") openapi.ResetOpenAPI() m := th.Run("overlay", th.MakeDefaultOptions()) - th.AssertActualEqualsExpected(m, ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - command: example - image: nginx - name: server - ports: - - containerPort: 8080 - name: grpc - protocol: TCP -`) + th.AssertActualEqualsExpected(m, patchedCustomResource) assert.Equal(t, "using custom schema from file provided", openapi.GetSchemaVersion()) } @@ -265,62 +165,18 @@ func TestCustomOpenApiFieldFromOverlay(t *testing.T) { th.WriteK("base", ` resources: - mycrd.yaml -`) - th.WriteF("base/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 `) th.WriteK("overlay", ` resources: - ../base openapi: path: mycrd_schema.json -patchesStrategicMerge: -- |- - apiVersion: example.com/v1alpha1 - kind: MyCRD - metadata: - name: service - spec: - template: - spec: - containers: - - name: server - image: nginx -`) +`+customSchemaPatch) + writeCustomResource(th, "base/mycrd.yaml") writeTestSchema(th, "/overlay/") openapi.ResetOpenAPI() m := th.Run("overlay", th.MakeDefaultOptions()) - th.AssertActualEqualsExpected(m, ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - command: example - image: nginx - name: server - ports: - - containerPort: 8080 - name: grpc - protocol: TCP -`) + th.AssertActualEqualsExpected(m, patchedCustomResource) assert.Equal(t, "using custom schema from file provided", openapi.GetSchemaVersion()) } @@ -332,42 +188,14 @@ resources: - mycrd.yaml openapi: path: mycrd_schema.json -`) - th.WriteF("base/mycrd.yaml", ` -apiVersion: example.com/v1alpha1 -kind: MyCRD -metadata: - name: service -spec: - template: - spec: - containers: - - name: server - image: server - command: example - ports: - - name: grpc - protocol: TCP - containerPort: 8080 `) th.WriteK("overlay", ` resources: - ../base openapi: version: v1.19.1 -patchesStrategicMerge: -- |- - apiVersion: example.com/v1alpha1 - kind: MyCRD - metadata: - name: service - spec: - template: - spec: - containers: - - name: server - image: nginx -`) +`+customSchemaPatch) + writeCustomResource(th, "base/mycrd.yaml") writeTestSchema(th, "/base/") openapi.ResetOpenAPI() m := th.Run("overlay", th.MakeDefaultOptions()) @@ -383,8 +211,7 @@ spec: - image: nginx name: server `) - assert.Equal(t, "v1191", - openapi.GetSchemaVersion()) + assert.Equal(t, "v1191", openapi.GetSchemaVersion()) } func TestCustomOpenAPIFieldFromComponent(t *testing.T) { diff --git a/api/krusty/openapiversion_test.go b/api/krusty/openapiversion_test.go index 8b71e0015..416b111f7 100644 --- a/api/krusty/openapiversion_test.go +++ b/api/krusty/openapiversion_test.go @@ -11,13 +11,13 @@ import ( func TestOpenApiFieldBasicUsage(t *testing.T) { th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` + th.WriteK(".", ` openapi: version: v1.18.8 resources: - deployment.yaml `) - th.WriteF("/app/deployment.yaml", ` + th.WriteF("/deployment.yaml", ` apiVersion: apps/v1 kind: Deployment metadata: @@ -29,7 +29,7 @@ spec: - image: whatever `) - m := th.Run("/app", th.MakeDefaultOptions()) + m := th.Run(".", th.MakeDefaultOptions()) th.AssertActualEqualsExpected(m, ` apiVersion: apps/v1 kind: Deployment @@ -46,13 +46,13 @@ spec: func TestOpenApiFieldNotBuiltin(t *testing.T) { th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` + th.WriteK(".", ` openapi: version: v1.14.1 resources: - deployment.yaml `) - th.WriteF("/app/deployment.yaml", ` + th.WriteF("/deployment.yaml", ` apiVersion: apps/v1 kind: Deployment metadata: @@ -64,7 +64,7 @@ spec: - image: whatever `) - err := th.RunWithErr("/app", th.MakeDefaultOptions()) + err := th.RunWithErr(".", th.MakeDefaultOptions()) if err == nil { t.Fatalf("expected an error") } @@ -72,11 +72,11 @@ spec: func TestOpenApiFieldDefaultVersion(t *testing.T) { th := kusttest_test.MakeHarness(t) - th.WriteK("/app", ` + th.WriteK(".", ` resources: - deployment.yaml `) - th.WriteF("/app/deployment.yaml", ` + th.WriteF("/deployment.yaml", ` apiVersion: apps/v1 kind: Deployment metadata: @@ -88,7 +88,7 @@ spec: - image: whatever `) - m := th.Run("/app", th.MakeDefaultOptions()) + m := th.Run(".", th.MakeDefaultOptions()) th.AssertActualEqualsExpected(m, ` apiVersion: apps/v1 kind: Deployment @@ -260,7 +260,7 @@ spec: func TestOpenAPIFieldFromComponentDefault(t *testing.T) { input := []FileGen{writeTestBase, writeTestComponent, writeOverlayProd} - runPath := "/app/prod" + runPath := "/prod" th := kusttest_test.MakeHarness(t) for _, f := range input { @@ -271,11 +271,11 @@ func TestOpenAPIFieldFromComponentDefault(t *testing.T) { } func writeTestComponentWithOlderOpenAPIVersion(th kusttest_test.Harness) { - th.WriteC("/app/comp", ` + th.WriteC("/comp", ` openapi: version: v1.18.8 `) - th.WriteF("/app/comp/stub.yaml", ` + th.WriteF("/comp/stub.yaml", ` apiVersion: v1 kind: Deployment metadata: @@ -285,7 +285,7 @@ spec: `) } -const runPath = "/app/prod" +const runPath = "prod" func TestOpenAPIFieldFromComponent(t *testing.T) { input := []FileGen{ diff --git a/kyaml/openapi/openapi.go b/kyaml/openapi/openapi.go index 018bcd831..25bdbcdc7 100644 --- a/kyaml/openapi/openapi.go +++ b/kyaml/openapi/openapi.go @@ -481,7 +481,7 @@ func initSchema() { ResetOpenAPI() err := parse(customSchema) if err != nil { - panic(err) + panic("invalid schema file") } return }