Address comments

Signed-off-by: Dr. Stefan Schimanski <stefan.schimanski@gmail.com>
This commit is contained in:
Dr. Stefan Schimanski 2024-12-16 13:51:06 +01:00
parent 0d18ae303b
commit 0c1b1e0450
No known key found for this signature in database
GPG Key ID: 4C68E0F19F95EC33
3 changed files with 9 additions and 24 deletions

View File

@ -33,17 +33,16 @@ import (
celconfig "k8s.io/apiserver/pkg/apis/cel" celconfig "k8s.io/apiserver/pkg/apis/cel"
) )
// FieldValidatorsFromFile extracts the CEL validators by version and JSONPath from a CRD file and returns // MustLoadManifest loads a CRD from a file and panics on error.
// a validator func for testing against samples. func MustLoadManifest[T any](t *testing.T, pth string) *T {
func FieldValidatorsFromFile(t *testing.T, crdFilePath string) (validatorsByVersionByJSONPath map[string]map[string]CELValidateFunc) { data, err := os.ReadFile(pth)
data, err := os.ReadFile(crdFilePath)
require.NoError(t, err) require.NoError(t, err)
var crd apiextensionsv1.CustomResourceDefinition var crd T
err = yaml.Unmarshal(data, &crd) err = yaml.Unmarshal(data, &crd)
require.NoError(t, err) require.NoError(t, err)
return FieldValidators(t, &crd) return &crd
} }
// FieldValidators extracts the CEL validators by version and JSONPath from a CRD and returns // FieldValidators extracts the CEL validators by version and JSONPath from a CRD and returns

View File

@ -21,6 +21,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apitest "k8s.io/apiextensions-apiserver/pkg/test" apitest "k8s.io/apiextensions-apiserver/pkg/test"
) )
@ -126,7 +127,7 @@ func TestAPIExportPermissionClaimCELValidation(t *testing.T) {
}, },
} }
validators := apitest.FieldValidatorsFromFile(t, "apiexports_crd.yaml") validators := apitest.FieldValidators(t, apitest.MustLoadManifest[apiextensionsv1.CustomResourceDefinition](t, "apiexports_crd.yaml"))
for _, tc := range testCases { for _, tc := range testCases {
pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items" pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items"
@ -191,7 +192,7 @@ func TestResourceSelectorCELValidation(t *testing.T) {
}, },
} }
validators := apitest.FieldValidatorsFromFile(t, "apiexports_crd.yaml") validators := apitest.FieldValidators(t, apitest.MustLoadManifest[apiextensionsv1.CustomResourceDefinition](t, "apiexports_crd.yaml"))
for _, tc := range testCases { for _, tc := range testCases {
pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items.properties.resourceSelector.items" pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items.properties.resourceSelector.items"
@ -272,7 +273,7 @@ func TestAPIExportPermissionClaimPattern(t *testing.T) {
}, },
} }
validators := apitest.PatternValidatorsFromFile(t, "apiexports_crd.yaml") validators := apitest.PatternValidators(t, apitest.MustLoadManifest[apiextensionsv1.CustomResourceDefinition](t, "apiexports_crd.yaml"))
for _, tc := range testCases { for _, tc := range testCases {
pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items.properties.resourceSelector.items.properties.name" pth := "openAPIV3Schema.properties.spec.properties.permissionClaims.items.properties.resourceSelector.items.properties.name"

View File

@ -18,7 +18,6 @@ package test
import ( import (
"errors" "errors"
"os"
"regexp" "regexp"
"testing" "testing"
@ -28,22 +27,8 @@ import (
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apiextensions-apiserver/pkg/apiserver/schema" "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
"sigs.k8s.io/yaml"
) )
// PatternValidatorsFromFile extracts the pattern validators by version and JSONPath from a CRD file and returns
// a validator func for testing against samples.
func PatternValidatorsFromFile(t *testing.T, crdFilePath string) (validatorsByVersionByJSONPath map[string]map[string]PatternValidateFunc) {
data, err := os.ReadFile(crdFilePath)
require.NoError(t, err)
var crd apiextensionsv1.CustomResourceDefinition
err = yaml.Unmarshal(data, &crd)
require.NoError(t, err)
return PatternValidators(t, &crd)
}
// PatternValidators extracts the pattern validators by version and JSONPath from a CRD and returns // PatternValidators extracts the pattern validators by version and JSONPath from a CRD and returns
// a validator func for testing against samples. // a validator func for testing against samples.
func PatternValidators(t *testing.T, crd *apiextensionsv1.CustomResourceDefinition) (validatorsByVersionByJSONPath map[string]map[string]PatternValidateFunc) { func PatternValidators(t *testing.T, crd *apiextensionsv1.CustomResourceDefinition) (validatorsByVersionByJSONPath map[string]map[string]PatternValidateFunc) {