mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
Make JSON schema round tripping test more strict
This commit is contained in:
parent
9b09612d1b
commit
064763ebdd
@ -30,6 +30,7 @@ require (
|
|||||||
k8s.io/klog/v2 v2.40.1
|
k8s.io/klog/v2 v2.40.1
|
||||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65
|
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65
|
||||||
k8s.io/utils v0.0.0-20211208161948-7d6a63dca704
|
k8s.io/utils v0.0.0-20211208161948-7d6a63dca704
|
||||||
|
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.1
|
sigs.k8s.io/structured-merge-diff/v4 v4.2.1
|
||||||
sigs.k8s.io/yaml v1.2.0
|
sigs.k8s.io/yaml v1.2.0
|
||||||
)
|
)
|
||||||
|
@ -18,7 +18,14 @@ package validation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
|
||||||
|
kjson "sigs.k8s.io/json"
|
||||||
|
|
||||||
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
||||||
apiextensionsfuzzer "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer"
|
apiextensionsfuzzer "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer"
|
||||||
@ -46,12 +53,21 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
seed := rand.Int63()
|
seed := int64(time.Now().Nanosecond())
|
||||||
t.Logf("seed: %d", seed)
|
if override := os.Getenv("TEST_RAND_SEED"); len(override) > 0 {
|
||||||
|
overrideSeed, err := strconv.Atoi(override)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
seed = int64(overrideSeed)
|
||||||
|
t.Logf("using overridden seed: %d", seed)
|
||||||
|
} else {
|
||||||
|
t.Logf("seed (override with TEST_RAND_SEED if desired): %d", seed)
|
||||||
|
}
|
||||||
fuzzerFuncs := fuzzer.MergeFuzzerFuncs(apiextensionsfuzzer.Funcs)
|
fuzzerFuncs := fuzzer.MergeFuzzerFuncs(apiextensionsfuzzer.Funcs)
|
||||||
f := fuzzer.FuzzerFor(fuzzerFuncs, rand.NewSource(seed), codecs)
|
f := fuzzer.FuzzerFor(fuzzerFuncs, rand.NewSource(seed), codecs)
|
||||||
|
|
||||||
for i := 0; i < 20; i++ {
|
for i := 0; i < 50; i++ {
|
||||||
// fuzz internal types
|
// fuzz internal types
|
||||||
internal := &apiextensions.JSONSchemaProps{}
|
internal := &apiextensions.JSONSchemaProps{}
|
||||||
f.Fuzz(internal)
|
f.Fuzz(internal)
|
||||||
@ -70,8 +86,10 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
|
|
||||||
// JSON -> in-memory JSON => convertNullTypeToNullable => JSON
|
// JSON -> in-memory JSON => convertNullTypeToNullable => JSON
|
||||||
var j interface{}
|
var j interface{}
|
||||||
if err := json.Unmarshal(openAPIJSON, &j); err != nil {
|
if strictErrs, err := kjson.UnmarshalStrict(openAPIJSON, &j); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
} else if len(strictErrs) > 0 {
|
||||||
|
t.Fatal(strictErrs)
|
||||||
}
|
}
|
||||||
j = stripIntOrStringType(j)
|
j = stripIntOrStringType(j)
|
||||||
openAPIJSON, err = json.Marshal(j)
|
openAPIJSON, err = json.Marshal(j)
|
||||||
@ -81,8 +99,10 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
|
|
||||||
// JSON -> external
|
// JSON -> external
|
||||||
external := &apiextensionsv1.JSONSchemaProps{}
|
external := &apiextensionsv1.JSONSchemaProps{}
|
||||||
if err := json.Unmarshal(openAPIJSON, external); err != nil {
|
if strictErrs, err := kjson.UnmarshalStrict(openAPIJSON, external); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
} else if len(strictErrs) > 0 {
|
||||||
|
t.Fatal(strictErrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// external -> internal
|
// external -> internal
|
||||||
@ -92,7 +112,8 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !apiequality.Semantic.DeepEqual(internal, internalRoundTripped) {
|
if !apiequality.Semantic.DeepEqual(internal, internalRoundTripped) {
|
||||||
t.Fatalf("%d: expected\n\t%#v, got \n\t%#v", i, internal, internalRoundTripped)
|
t.Log(string(openAPIJSON))
|
||||||
|
t.Fatalf("%d: unexpected diff\n\t%s", i, cmp.Diff(internal, internalRoundTripped))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user