Unify fuzzers and roundtrip tests
This commit is contained in:
@@ -32,6 +32,8 @@ go_library(
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/testing/fuzzer:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/fuzzer:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||
|
@@ -26,6 +26,8 @@ import (
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
apitesting "k8s.io/apimachinery/pkg/api/testing"
|
||||
"k8s.io/apimachinery/pkg/api/testing/fuzzer"
|
||||
genericfuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
@@ -49,7 +51,7 @@ import (
|
||||
|
||||
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
|
||||
// values in a Kubernetes context.
|
||||
func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
func overrideGenericFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(j *runtime.Object, c fuzz.Continue) {
|
||||
// TODO: uncomment when round trip starts from a versioned object
|
||||
@@ -83,8 +85,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
|
||||
// Convert the object to raw bytes
|
||||
bytes, err := runtime.Encode(codec, obj)
|
||||
if err != nil {
|
||||
t.Errorf("Failed to encode object: %v", err)
|
||||
return
|
||||
panic(fmt.Sprintf("Failed to encode object: %v", err))
|
||||
}
|
||||
|
||||
// Set the bytes field on the RawExtension
|
||||
@@ -93,7 +94,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
|
||||
}
|
||||
}
|
||||
|
||||
func coreFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func coreFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(q *resource.Quantity, c fuzz.Continue) {
|
||||
*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
|
||||
@@ -500,7 +501,7 @@ func coreFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func extensionFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func extensionFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(j *extensions.DeploymentSpec, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(j) // fuzz self without calling this function again
|
||||
@@ -580,7 +581,7 @@ func extensionFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func batchFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func batchFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(j *batch.JobSpec, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(j) // fuzz self without calling this function again
|
||||
@@ -617,7 +618,7 @@ func batchFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func autoscalingFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func autoscalingFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(s *autoscaling.HorizontalPodAutoscalerSpec, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(s) // fuzz self without calling this function again
|
||||
@@ -680,7 +681,7 @@ func autoscalingFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func rbacFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func rbacFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(r *rbac.RoleRef, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(r) // fuzz self without calling this function again
|
||||
@@ -714,7 +715,7 @@ func rbacFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func appsFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func appsFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(s *apps.StatefulSet, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(s) // fuzz self without calling this function again
|
||||
@@ -733,7 +734,7 @@ func appsFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
},
|
||||
}
|
||||
}
|
||||
func policyFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func policyFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(s *policy.PodDisruptionBudgetStatus, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(s) // fuzz self without calling this function again
|
||||
@@ -742,7 +743,7 @@ func policyFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func certificateFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func certificateFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(obj *certificates.CertificateSigningRequestSpec, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(obj) // fuzz self without calling this function again
|
||||
@@ -751,7 +752,7 @@ func certificateFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func admissionregistrationFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
func admissionregistrationFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{
|
||||
func(obj *admissionregistration.ExternalAdmissionHook, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(obj) // fuzz self without calling this function again
|
||||
@@ -766,22 +767,20 @@ func admissionregistrationFuncs(t apitesting.TestingCommon) []interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func FuzzerFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return apitesting.MergeFuzzerFuncs(t,
|
||||
apitesting.GenericFuzzerFuncs(t, codecs),
|
||||
overrideGenericFuncs(t, codecs),
|
||||
coreFuncs(t),
|
||||
extensionFuncs(t),
|
||||
appsFuncs(t),
|
||||
batchFuncs(t),
|
||||
autoscalingFuncs(t),
|
||||
rbacFuncs(t),
|
||||
kubeadmfuzzer.KubeadmFuzzerFuncs(t),
|
||||
policyFuncs(t),
|
||||
certificateFuncs(t),
|
||||
admissionregistrationFuncs(t),
|
||||
)
|
||||
}
|
||||
var FuzzerFuncs = fuzzer.MergeFuzzerFuncs(
|
||||
genericfuzzer.Funcs,
|
||||
overrideGenericFuncs,
|
||||
coreFuncs,
|
||||
extensionFuncs,
|
||||
appsFuncs,
|
||||
batchFuncs,
|
||||
autoscalingFuncs,
|
||||
rbacFuncs,
|
||||
kubeadmfuzzer.Funcs,
|
||||
policyFuncs,
|
||||
certificateFuncs,
|
||||
admissionregistrationFuncs,
|
||||
)
|
||||
|
||||
func newBool(val bool) *bool {
|
||||
p := new(bool)
|
||||
|
Reference in New Issue
Block a user