Regression test and fix for APIs that satisfy ValidationSchemaProvider but not Validator

This commit is contained in:
Katrina Verey
2022-04-22 17:19:49 -04:00
parent bcae65770a
commit 2e230b4d4b
2 changed files with 26 additions and 1 deletions

View File

@@ -173,7 +173,7 @@ func LoadFunctionConfig(src *yaml.RNode, api interface{}) error {
if v, ok := api.(Validator); ok {
return combineErrors(schemaValidationError, v.Validate())
}
return nil
return schemaValidationError
}
func combineErrors(schemaErr, customErr error) error {

View File

@@ -17,6 +17,7 @@ import (
"sigs.k8s.io/kustomize/kyaml/fn/framework/frameworktestutil"
"sigs.k8s.io/kustomize/kyaml/fn/framework/parser"
"sigs.k8s.io/kustomize/kyaml/openapi"
"sigs.k8s.io/kustomize/kyaml/resid"
"sigs.k8s.io/kustomize/kyaml/yaml"
"sigs.k8s.io/kustomize/kyaml/fn/framework"
@@ -700,6 +701,16 @@ func (e errorMergeTest) Validate() error {
return nil
}
func (a schemaProviderOnlyTest) Schema() (*spec.Schema, error) {
schema, err := framework.SchemaFromFunctionDefinition(resid.NewGvk("example.com", "v1alpha1", "JavaSpringBoot"), javaSpringBootDefinition)
return schema, errors.WrapPrefixf(err, "parsing JavaSpringBoot schema")
}
type schemaProviderOnlyTest struct {
Metadata Metadata `yaml:"metadata" json:"metadata"`
Spec v1alpha1JavaSpringBootSpec `yaml:"spec" json:"spec"`
}
func TestLoadFunctionConfig(t *testing.T) {
tests := []struct {
name string
@@ -755,6 +766,19 @@ spec:
api: &errorMergeTest{},
wantErrMsgs: []string{
`validation failure list:
spec.replicas in body should be less than or equal to 9`,
},
}, {
name: "schema provider only",
src: yaml.MustParse(`
apiVersion: example.com/v1alpha1
kind: JavaSpringBoot
spec:
replicas: 11
`),
api: &schemaProviderOnlyTest{},
wantErrMsgs: []string{
`validation failure list:
spec.replicas in body should be less than or equal to 9`,
},
},
@@ -813,6 +837,7 @@ test: true
require.NoError(t, err)
require.Equal(t, tt.want, tt.api)
} else {
require.Error(t, err)
for _, msg := range tt.wantErrMsgs {
require.Contains(t, err.Error(), msg)
}