Skip to content

Commit

Permalink
Merge pull request #131 from maxsmythe/cherrypick-empty-params-schema…
Browse files Browse the repository at this point in the history
…-bugfix-to-0.2

Cherrypick empty parameters fix (#310)
  • Loading branch information
maxsmythe committed Aug 3, 2021
2 parents 5c03494 + 6982747 commit 9f26912
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,17 @@ func TestValidationVersionConversionAndTransformation(t *testing.T) {
},
error: false,
},
{
name: "Nil properties",
v: &Validation{
OpenAPIV3Schema: nil,
},
exp: &templates.Validation{
OpenAPIV3Schema: &apiextensions.JSONSchemaProps{
XPreserveUnknownFields: &trueBool,
},
},
},
}

for _, tc := range testCases {
Expand All @@ -201,3 +212,21 @@ func TestValidationVersionConversionAndTransformation(t *testing.T) {
})
}
}

func TestEmptyConversion(t *testing.T) {
trueBool := true
expected := &templates.Validation{
OpenAPIV3Schema: &apiextensions.JSONSchemaProps{
XPreserveUnknownFields: &trueBool,
},
}
in := &ConstraintTemplate{}
out := &templates.ConstraintTemplate{}
if err := Convert_v1alpha1_ConstraintTemplate_To_templates_ConstraintTemplate(in, out, nil); err != nil {
t.Fatalf("Conversion error: %v", err)
}

if !reflect.DeepEqual(out.Spec.CRD.Spec.Validation, expected) {
t.Fatalf("Conversion does not match expected result: %v", cmp.Diff(out, expected))
}
}
42 changes: 32 additions & 10 deletions constraint/pkg/apis/templates/v1alpha1/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,48 @@ package v1alpha1

import (
apisTemplates "github.com/open-policy-agent/frameworks/constraint/pkg/apis/templates"
"github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
coreTemplates "github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apimachinery/pkg/conversion"
)

func Convert_v1alpha1_Validation_To_templates_Validation(in *Validation, out *coreTemplates.Validation, s conversion.Scope) error { //nolint:golint
if in.OpenAPIV3Schema != nil {
inSchema := in.OpenAPIV3Schema.DeepCopy()
if err := apisTemplates.AddPreserveUnknownFields(inSchema); err != nil {
return err
}
inSchema := in.OpenAPIV3Schema
// to preserve legacy behavior, allow users to provide arbitrary parameters, regardless of whether the user specified them
if inSchema == nil {
inSchema = &apiextensionsv1beta1.JSONSchemaProps{}
}

inSchemaCopy := inSchema.DeepCopy()
if err := apisTemplates.AddPreserveUnknownFields(inSchemaCopy); err != nil {
return err
}

out.OpenAPIV3Schema = new(apiextensions.JSONSchemaProps)
if err := apiextensionsv1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(inSchemaCopy, out.OpenAPIV3Schema, s); err != nil {
return err
}

out.OpenAPIV3Schema = new(apiextensions.JSONSchemaProps)
if err := apiextensionsv1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(inSchema, out.OpenAPIV3Schema, s); err != nil {
return nil
}

// Convert_v1alpha1_CRDSpec_To_templates_CRDSpec is an autogenerated conversion function.
func Convert_v1alpha1_CRDSpec_To_templates_CRDSpec(in *CRDSpec, out *templates.CRDSpec, s conversion.Scope) error { //nolint:golint
if err := Convert_v1alpha1_Names_To_templates_Names(&in.Names, &out.Names, s); err != nil {
return err
}
validation := in.Validation
if validation == nil {
validation = &Validation{}
}
{
in, out := &validation, &out.Validation
*out = new(templates.Validation)
if err := Convert_v1alpha1_Validation_To_templates_Validation(*in, *out, s); err != nil {
return err
}

} else {
out.OpenAPIV3Schema = nil
}
return nil
}
21 changes: 0 additions & 21 deletions constraint/pkg/apis/templates/v1alpha1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,17 @@ func TestValidationVersionConversionAndTransformation(t *testing.T) {
},
error: false,
},
{
name: "Nil properties",
v: &Validation{
OpenAPIV3Schema: nil,
},
exp: &templates.Validation{
OpenAPIV3Schema: &apiextensions.JSONSchemaProps{
XPreserveUnknownFields: &trueBool,
},
},
},
}

for _, tc := range testCases {
Expand All @@ -200,3 +211,21 @@ func TestValidationVersionConversionAndTransformation(t *testing.T) {
})
}
}

func TestEmptyConversion(t *testing.T) {
trueBool := true
expected := &templates.Validation{
OpenAPIV3Schema: &apiextensions.JSONSchemaProps{
XPreserveUnknownFields: &trueBool,
},
}
in := &ConstraintTemplate{}
out := &templates.ConstraintTemplate{}
if err := Convert_v1beta1_ConstraintTemplate_To_templates_ConstraintTemplate(in, out, nil); err != nil {
t.Fatalf("Conversion error: %v", err)
}

if !reflect.DeepEqual(out.Spec.CRD.Spec.Validation, expected) {
t.Fatalf("Conversion does not match expected result: %v", cmp.Diff(out, expected))
}
}
39 changes: 30 additions & 9 deletions constraint/pkg/apis/templates/v1beta1/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,46 @@ package v1beta1

import (
apisTemplates "github.com/open-policy-agent/frameworks/constraint/pkg/apis/templates"
"github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
coreTemplates "github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apimachinery/pkg/conversion"
)

func Convert_v1beta1_Validation_To_templates_Validation(in *Validation, out *coreTemplates.Validation, s conversion.Scope) error { //nolint:golint
if in.OpenAPIV3Schema != nil {
inSchemaCopy := in.OpenAPIV3Schema.DeepCopy()
if err := apisTemplates.AddPreserveUnknownFields(inSchemaCopy); err != nil {
return err
}
inSchema := in.OpenAPIV3Schema
// to preserve legacy behavior, allow users to provide arbitrary parameters, regardless of whether the user specified them
if inSchema == nil {
inSchema = &apiextensionsv1beta1.JSONSchemaProps{}
}

out.OpenAPIV3Schema = new(apiextensions.JSONSchemaProps)
if err := apiextensionsv1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(inSchemaCopy, out.OpenAPIV3Schema, s); err != nil {
inSchemaCopy := inSchema.DeepCopy()
if err := apisTemplates.AddPreserveUnknownFields(inSchemaCopy); err != nil {
return err
}

out.OpenAPIV3Schema = new(apiextensions.JSONSchemaProps)
if err := apiextensionsv1beta1.Convert_v1beta1_JSONSchemaProps_To_apiextensions_JSONSchemaProps(inSchemaCopy, out.OpenAPIV3Schema, s); err != nil {
return err
}
return nil
}

func Convert_v1beta1_CRDSpec_To_templates_CRDSpec(in *CRDSpec, out *templates.CRDSpec, s conversion.Scope) error { //nolint:golint
if err := Convert_v1beta1_Names_To_templates_Names(&in.Names, &out.Names, s); err != nil {
return err
}
validation := in.Validation
if validation == nil {
validation = &Validation{}
}
{
in, out := &validation, &out.Validation
*out = new(templates.Validation)
if err := Convert_v1beta1_Validation_To_templates_Validation(*in, *out, s); err != nil {
return err
}
} else {
out.OpenAPIV3Schema = nil
}
return nil
}
21 changes: 0 additions & 21 deletions constraint/pkg/apis/templates/v1beta1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 9f26912

Please sign in to comment.