mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
235 lines
5.1 KiB
Go
235 lines
5.1 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package krusty_test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
|
"sigs.k8s.io/kustomize/kyaml/openapi"
|
|
)
|
|
|
|
func writeTestSchema(th kusttest_test.Harness, filepath string) {
|
|
bytes, _ := ioutil.ReadFile("testdata/customschema.json")
|
|
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, "comp/")
|
|
openapi.ResetOpenAPI()
|
|
th.WriteC("comp", `
|
|
openapi:
|
|
path: mycrd_schema.json
|
|
`)
|
|
th.WriteF("comp/stub.yaml", `
|
|
apiVersion: v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: stub
|
|
spec:
|
|
replicas: 1
|
|
`)
|
|
}
|
|
|
|
const customSchemaPatch = `
|
|
patchesStrategicMerge:
|
|
- |-
|
|
apiVersion: example.com/v1alpha1
|
|
kind: MyCRD
|
|
metadata:
|
|
name: service
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: server
|
|
image: nginx
|
|
`
|
|
|
|
const patchedCustomResource = `
|
|
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
|
|
`
|
|
|
|
// 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(".", `
|
|
resources:
|
|
- mycrd.yaml
|
|
openapi:
|
|
version: v1.20.4
|
|
path: mycrd_schema.json
|
|
`+customSchemaPatch)
|
|
writeCustomResource(th, "mycrd.yaml")
|
|
writeTestSchema(th, "./")
|
|
openapi.ResetOpenAPI()
|
|
err := th.RunWithErr(".", th.MakeDefaultOptions())
|
|
assert.Error(t, err)
|
|
assert.Equal(t,
|
|
"builtin version and custom schema provided, cannot use both",
|
|
err.Error())
|
|
}
|
|
|
|
// Test for if the filepath specified is not found
|
|
func TestCustomOpenApiFieldFileNotFound(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK(".", `
|
|
resources:
|
|
- mycrd.yaml
|
|
openapi:
|
|
path: mycrd_schema.json
|
|
`+customSchemaPatch)
|
|
writeCustomResource(th, "mycrd.yaml")
|
|
openapi.ResetOpenAPI()
|
|
err := th.RunWithErr(".", th.MakeDefaultOptions())
|
|
assert.Error(t, err)
|
|
assert.Equal(t,
|
|
"'/mycrd_schema.json' doesn't exist",
|
|
err.Error())
|
|
}
|
|
|
|
func TestCustomOpenApiFieldFromBase(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("base", `
|
|
resources:
|
|
- mycrd.yaml
|
|
openapi:
|
|
path: mycrd_schema.json
|
|
`)
|
|
th.WriteK("overlay", `
|
|
resources:
|
|
- ../base
|
|
`+customSchemaPatch)
|
|
writeCustomResource(th, "base/mycrd.yaml")
|
|
writeTestSchema(th, "base/")
|
|
openapi.ResetOpenAPI()
|
|
m := th.Run("overlay", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, patchedCustomResource)
|
|
assert.Equal(t, "using custom schema from file provided",
|
|
openapi.GetSchemaVersion())
|
|
}
|
|
|
|
func TestCustomOpenApiFieldFromOverlay(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("base", `
|
|
resources:
|
|
- mycrd.yaml
|
|
`)
|
|
th.WriteK("overlay", `
|
|
resources:
|
|
- ../base
|
|
openapi:
|
|
path: mycrd_schema.json
|
|
`+customSchemaPatch)
|
|
writeCustomResource(th, "base/mycrd.yaml")
|
|
writeTestSchema(th, "overlay/")
|
|
openapi.ResetOpenAPI()
|
|
m := th.Run("overlay", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, patchedCustomResource)
|
|
assert.Equal(t, "using custom schema from file provided",
|
|
openapi.GetSchemaVersion())
|
|
}
|
|
|
|
func TestCustomOpenApiFieldOverlayTakesPrecedence(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
openapi.ResetOpenAPI()
|
|
th.WriteK("base", `
|
|
resources:
|
|
- mycrd.yaml
|
|
openapi:
|
|
path: mycrd_schema.json
|
|
`)
|
|
th.WriteK("overlay", `
|
|
resources:
|
|
- ../base
|
|
openapi:
|
|
version: v1.20.4
|
|
`+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:
|
|
- image: nginx
|
|
name: server
|
|
`)
|
|
assert.Equal(t, "v1204", openapi.GetSchemaVersion())
|
|
}
|
|
|
|
func TestCustomOpenAPIFieldFromComponent(t *testing.T) {
|
|
input := []FileGen{
|
|
writeTestBase,
|
|
writeTestComponentWithCustomSchema,
|
|
writeOverlayProd}
|
|
|
|
th := kusttest_test.MakeHarness(t)
|
|
for _, f := range input {
|
|
f(th)
|
|
}
|
|
openapi.ResetOpenAPI()
|
|
th.Run("prod", th.MakeDefaultOptions())
|
|
assert.Equal(t, "using custom schema from file provided", openapi.GetSchemaVersion())
|
|
}
|