Merge pull request #48810 from sttts/sttts-fuzzer-cleanup
Automatic merge from submit-queue (batch tested with PRs 49114, 48810) Unify fuzzers and roundtrip tests - reorganize apimachinery/pkg/api/testing package to avoid circular imports - make fuzzers modular per apigroup - add roundtrip test for meta types - add roundtrip test for a couple of staging apigroups Follow-up: - split `pkg/api` tests by apigroup
This commit is contained in:
		@@ -14,7 +14,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//cmd/kubeadm/app/apis/kubeadm:go_default_library",
 | 
					        "//cmd/kubeadm/app/apis/kubeadm:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,11 +19,12 @@ package fuzzer
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
	"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
 | 
						"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func KubeadmFuzzerFuncs(t apitesting.TestingCommon) []interface{} {
 | 
					// Funcs returns the fuzzer functions for the kubeadm apis.
 | 
				
			||||||
 | 
					func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(obj *kubeadm.MasterConfiguration, c fuzz.Continue) {
 | 
							func(obj *kubeadm.MasterConfiguration, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(obj)
 | 
								c.FuzzNoCustom(obj)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,6 @@ go_test(
 | 
				
			|||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//cmd/kubeadm/app/apis/kubeadm/fuzzer:go_default_library",
 | 
					        "//cmd/kubeadm/app/apis/kubeadm/fuzzer:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,10 +19,10 @@ package install
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
	"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/fuzzer"
 | 
						kubeadmfuzzer "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/fuzzer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRoundTripTypes(t *testing.T) {
 | 
					func TestRoundTripTypes(t *testing.T) {
 | 
				
			||||||
	apitesting.RoundTripTestForAPIGroup(t, Install, fuzzer.KubeadmFuzzerFuncs(t))
 | 
						roundtrip.RoundTripTestForAPIGroup(t, Install, kubeadmfuzzer.Funcs)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,6 @@ cmd/kube-controller-manager/app
 | 
				
			|||||||
cmd/kube-proxy/app
 | 
					cmd/kube-proxy/app
 | 
				
			||||||
cmd/kubeadm/app
 | 
					cmd/kubeadm/app
 | 
				
			||||||
cmd/kubeadm/app/apis/kubeadm
 | 
					cmd/kubeadm/app/apis/kubeadm
 | 
				
			||||||
cmd/kubeadm/app/apis/kubeadm/fuzzer
 | 
					 | 
				
			||||||
cmd/kubeadm/app/apis/kubeadm/v1alpha1
 | 
					cmd/kubeadm/app/apis/kubeadm/v1alpha1
 | 
				
			||||||
cmd/kubeadm/app/apis/kubeadm/validation
 | 
					cmd/kubeadm/app/apis/kubeadm/validation
 | 
				
			||||||
cmd/kubeadm/app/cmd
 | 
					cmd/kubeadm/app/cmd
 | 
				
			||||||
@@ -568,18 +567,19 @@ staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource
 | 
				
			|||||||
staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
 | 
					staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
 | 
				
			||||||
staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver
 | 
					staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/api/meta
 | 
					staging/src/k8s.io/apimachinery/pkg/api/meta
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/api/testing
 | 
					staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer
 | 
				
			||||||
 | 
					staging/src/k8s.io/apimachinery/pkg/api/testing/roundtrip
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/api/validation
 | 
					staging/src/k8s.io/apimachinery/pkg/api/validation
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/api/validation/path
 | 
					staging/src/k8s.io/apimachinery/pkg/api/validation/path
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apimachinery/announced
 | 
					staging/src/k8s.io/apimachinery/pkg/apimachinery/announced
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apimachinery/registered
 | 
					staging/src/k8s.io/apimachinery/pkg/apimachinery/registered
 | 
				
			||||||
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/meta/v1
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/v1
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/meta/v1alpha1
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/meta/v1alpha1
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/testapigroup
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/fuzzer
 | 
					 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1
 | 
					staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/conversion
 | 
					staging/src/k8s.io/apimachinery/pkg/conversion
 | 
				
			||||||
staging/src/k8s.io/apimachinery/pkg/conversion/unstructured
 | 
					staging/src/k8s.io/apimachinery/pkg/conversion/unstructured
 | 
				
			||||||
@@ -625,7 +625,6 @@ staging/src/k8s.io/apiserver/pkg/apis/audit
 | 
				
			|||||||
staging/src/k8s.io/apiserver/pkg/apis/audit/v1alpha1
 | 
					staging/src/k8s.io/apiserver/pkg/apis/audit/v1alpha1
 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/apis/audit/validation
 | 
					staging/src/k8s.io/apiserver/pkg/apis/audit/validation
 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/apis/example
 | 
					staging/src/k8s.io/apiserver/pkg/apis/example
 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/apis/example/fuzzer
 | 
					 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/apis/example/v1
 | 
					staging/src/k8s.io/apiserver/pkg/apis/example/v1
 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/audit
 | 
					staging/src/k8s.io/apiserver/pkg/audit
 | 
				
			||||||
staging/src/k8s.io/apiserver/pkg/audit/policy
 | 
					staging/src/k8s.io/apiserver/pkg/audit/policy
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,8 @@ go_test(
 | 
				
			|||||||
        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/meta: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/api/testing/roundtrip:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
@@ -31,7 +31,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func BenchmarkPodConversion(b *testing.B) {
 | 
					func BenchmarkPodConversion(b *testing.B) {
 | 
				
			||||||
	apiObjectFuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(b, api.Codecs), rand.NewSource(benchmarkSeed))
 | 
						apiObjectFuzzer := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(benchmarkSeed), api.Codecs)
 | 
				
			||||||
	items := make([]api.Pod, 4)
 | 
						items := make([]api.Pod, 4)
 | 
				
			||||||
	for i := range items {
 | 
						for i := range items {
 | 
				
			||||||
		apiObjectFuzzer.Fuzz(&items[i])
 | 
							apiObjectFuzzer.Fuzz(&items[i])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,20 +22,21 @@ import (
 | 
				
			|||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
						"k8s.io/kubernetes/pkg/api/testapi"
 | 
				
			||||||
	kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
						kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestDeepCopyApiObjects(t *testing.T) {
 | 
					func TestDeepCopyApiObjects(t *testing.T) {
 | 
				
			||||||
	for i := 0; i < *apitesting.FuzzIters; i++ {
 | 
						for i := 0; i < *roundtrip.FuzzIters; i++ {
 | 
				
			||||||
		for _, version := range []schema.GroupVersion{testapi.Default.InternalGroupVersion(), api.Registry.GroupOrDie(api.GroupName).GroupVersion} {
 | 
							for _, version := range []schema.GroupVersion{testapi.Default.InternalGroupVersion(), api.Registry.GroupOrDie(api.GroupName).GroupVersion} {
 | 
				
			||||||
			f := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(rand.Int63()))
 | 
								f := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(rand.Int63()), api.Codecs)
 | 
				
			||||||
			for kind := range api.Scheme.KnownTypes(version) {
 | 
								for kind := range api.Scheme.KnownTypes(version) {
 | 
				
			||||||
				doDeepCopyTest(t, version.WithKind(kind), f)
 | 
									doDeepCopyTest(t, version.WithKind(kind), f)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -82,9 +83,9 @@ func doDeepCopyTest(t *testing.T, kind schema.GroupVersionKind, f *fuzz.Fuzzer)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestDeepCopySingleType(t *testing.T) {
 | 
					func TestDeepCopySingleType(t *testing.T) {
 | 
				
			||||||
	for i := 0; i < *apitesting.FuzzIters; i++ {
 | 
						for i := 0; i < *roundtrip.FuzzIters; i++ {
 | 
				
			||||||
		for _, version := range []schema.GroupVersion{testapi.Default.InternalGroupVersion(), api.Registry.GroupOrDie(api.GroupName).GroupVersion} {
 | 
							for _, version := range []schema.GroupVersion{testapi.Default.InternalGroupVersion(), api.Registry.GroupOrDie(api.GroupName).GroupVersion} {
 | 
				
			||||||
			f := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(rand.Int63()))
 | 
								f := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(rand.Int63()), api.Codecs)
 | 
				
			||||||
			doDeepCopyTest(t, version.WithKind("Pod"), f)
 | 
								doDeepCopyTest(t, version.WithKind("Pod"), f)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ import (
 | 
				
			|||||||
	batchv2alpha1 "k8s.io/api/batch/v2alpha1"
 | 
						batchv2alpha1 "k8s.io/api/batch/v2alpha1"
 | 
				
			||||||
	apiv1 "k8s.io/api/core/v1"
 | 
						apiv1 "k8s.io/api/core/v1"
 | 
				
			||||||
	extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
 | 
						extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						roundtrip "k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
@@ -163,7 +163,7 @@ func TestDefaulting(t *testing.T) {
 | 
				
			|||||||
		iter := 0
 | 
							iter := 0
 | 
				
			||||||
		changedOnce := false
 | 
							changedOnce := false
 | 
				
			||||||
		for {
 | 
							for {
 | 
				
			||||||
			if iter > *apitesting.FuzzIters {
 | 
								if iter > *roundtrip.FuzzIters {
 | 
				
			||||||
				if !expectedChanged || changedOnce {
 | 
									if !expectedChanged || changedOnce {
 | 
				
			||||||
					break
 | 
										break
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ import (
 | 
				
			|||||||
	"github.com/gogo/protobuf/proto"
 | 
						"github.com/gogo/protobuf/proto"
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
@@ -98,7 +98,7 @@ func fieldsHaveProtobufTags(obj reflect.Type) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestProtobufRoundTrip(t *testing.T) {
 | 
					func TestProtobufRoundTrip(t *testing.T) {
 | 
				
			||||||
	obj := &v1.Pod{}
 | 
						obj := &v1.Pod{}
 | 
				
			||||||
	apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(benchmarkSeed)).Fuzz(obj)
 | 
						fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(benchmarkSeed), api.Codecs).Fuzz(obj)
 | 
				
			||||||
	// InitContainers are turned into annotations by conversion.
 | 
						// InitContainers are turned into annotations by conversion.
 | 
				
			||||||
	obj.Spec.InitContainers = nil
 | 
						obj.Spec.InitContainers = nil
 | 
				
			||||||
	obj.Status.InitContainerStatuses = nil
 | 
						obj.Status.InitContainerStatuses = nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,8 @@ import (
 | 
				
			|||||||
	"k8s.io/api/extensions/v1beta1"
 | 
						"k8s.io/api/extensions/v1beta1"
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/conversion"
 | 
						"k8s.io/apimachinery/pkg/conversion"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
@@ -53,7 +54,7 @@ import (
 | 
				
			|||||||
// fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate
 | 
					// fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate
 | 
				
			||||||
// fuzzer registered with the apitesting package.
 | 
					// fuzzer registered with the apitesting package.
 | 
				
			||||||
func fuzzInternalObject(t *testing.T, forVersion schema.GroupVersion, item runtime.Object, seed int64) runtime.Object {
 | 
					func fuzzInternalObject(t *testing.T, forVersion schema.GroupVersion, item runtime.Object, seed int64) runtime.Object {
 | 
				
			||||||
	apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(seed)).Fuzz(item)
 | 
						fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), api.Codecs).Fuzz(item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	j, err := meta.TypeAccessor(item)
 | 
						j, err := meta.TypeAccessor(item)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -143,9 +144,9 @@ func TestSpecificKind(t *testing.T) {
 | 
				
			|||||||
	internalGVK := schema.GroupVersionKind{Group: "extensions", Version: runtime.APIVersionInternal, Kind: "DaemonSet"}
 | 
						internalGVK := schema.GroupVersionKind{Group: "extensions", Version: runtime.APIVersionInternal, Kind: "DaemonSet"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	seed := rand.Int63()
 | 
						seed := rand.Int63()
 | 
				
			||||||
	fuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(seed))
 | 
						fuzzer := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), api.Codecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting.RoundTripSpecificKind(t, internalGVK, api.Scheme, api.Codecs, fuzzer, nil)
 | 
						roundtrip.RoundTripSpecificKind(t, internalGVK, api.Scheme, api.Codecs, fuzzer, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var nonRoundTrippableTypes = sets.NewString(
 | 
					var nonRoundTrippableTypes = sets.NewString(
 | 
				
			||||||
@@ -204,7 +205,7 @@ func TestCommonKindsRegistered(t *testing.T) {
 | 
				
			|||||||
// in all of the API groups registered for test in the testapi package.
 | 
					// in all of the API groups registered for test in the testapi package.
 | 
				
			||||||
func TestRoundTripTypes(t *testing.T) {
 | 
					func TestRoundTripTypes(t *testing.T) {
 | 
				
			||||||
	seed := rand.Int63()
 | 
						seed := rand.Int63()
 | 
				
			||||||
	fuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(seed))
 | 
						fuzzer := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), api.Codecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nonRoundTrippableTypes := map[schema.GroupVersionKind]bool{
 | 
						nonRoundTrippableTypes := map[schema.GroupVersionKind]bool{
 | 
				
			||||||
		{Group: "componentconfig", Version: runtime.APIVersionInternal, Kind: "KubeletConfiguration"}:       true,
 | 
							{Group: "componentconfig", Version: runtime.APIVersionInternal, Kind: "KubeletConfiguration"}:       true,
 | 
				
			||||||
@@ -212,7 +213,7 @@ func TestRoundTripTypes(t *testing.T) {
 | 
				
			|||||||
		{Group: "componentconfig", Version: runtime.APIVersionInternal, Kind: "KubeSchedulerConfiguration"}: true,
 | 
							{Group: "componentconfig", Version: runtime.APIVersionInternal, Kind: "KubeSchedulerConfiguration"}: true,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting.RoundTripTypes(t, api.Scheme, api.Codecs, fuzzer, nonRoundTrippableTypes)
 | 
						roundtrip.RoundTripTypes(t, api.Scheme, api.Codecs, fuzzer, nonRoundTrippableTypes)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestEncodePtr tests that a pointer to a golang type can be encoded and
 | 
					// TestEncodePtr tests that a pointer to a golang type can be encoded and
 | 
				
			||||||
@@ -300,7 +301,7 @@ func TestUnversionedTypes(t *testing.T) {
 | 
				
			|||||||
// TestObjectWatchFraming establishes that a watch event can be encoded and
 | 
					// TestObjectWatchFraming establishes that a watch event can be encoded and
 | 
				
			||||||
// decoded correctly through each of the supported RFC2046 media types.
 | 
					// decoded correctly through each of the supported RFC2046 media types.
 | 
				
			||||||
func TestObjectWatchFraming(t *testing.T) {
 | 
					func TestObjectWatchFraming(t *testing.T) {
 | 
				
			||||||
	f := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(benchmarkSeed))
 | 
						f := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(benchmarkSeed), api.Codecs)
 | 
				
			||||||
	secret := &api.Secret{}
 | 
						secret := &api.Secret{}
 | 
				
			||||||
	f.Fuzz(secret)
 | 
						f.Fuzz(secret)
 | 
				
			||||||
	secret.Data["binary"] = []byte{0x00, 0x10, 0x30, 0x55, 0xff, 0x00}
 | 
						secret.Data["binary"] = []byte{0x00, 0x10, 0x30, 0x55, 0xff, 0x00}
 | 
				
			||||||
@@ -382,7 +383,7 @@ func TestObjectWatchFraming(t *testing.T) {
 | 
				
			|||||||
const benchmarkSeed = 100
 | 
					const benchmarkSeed = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func benchmarkItems(b *testing.B) []v1.Pod {
 | 
					func benchmarkItems(b *testing.B) []v1.Pod {
 | 
				
			||||||
	apiObjectFuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(b, api.Codecs), rand.NewSource(benchmarkSeed))
 | 
						apiObjectFuzzer := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(benchmarkSeed), api.Codecs)
 | 
				
			||||||
	items := make([]v1.Pod, 10)
 | 
						items := make([]v1.Pod, 10)
 | 
				
			||||||
	for i := range items {
 | 
						for i := range items {
 | 
				
			||||||
		var pod api.Pod
 | 
							var pod api.Pod
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,8 @@ go_library(
 | 
				
			|||||||
        "//vendor/k8s.io/api/core/v1:go_default_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/resource:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing: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/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,8 @@ import (
 | 
				
			|||||||
	"k8s.io/api/core/v1"
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						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"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/fields"
 | 
						"k8s.io/apimachinery/pkg/fields"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"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
 | 
					// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
 | 
				
			||||||
// values in a Kubernetes context.
 | 
					// values in a Kubernetes context.
 | 
				
			||||||
func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					func overrideGenericFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(j *runtime.Object, c fuzz.Continue) {
 | 
							func(j *runtime.Object, c fuzz.Continue) {
 | 
				
			||||||
			// TODO: uncomment when round trip starts from a versioned object
 | 
								// 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
 | 
								// Convert the object to raw bytes
 | 
				
			||||||
			bytes, err := runtime.Encode(codec, obj)
 | 
								bytes, err := runtime.Encode(codec, obj)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("Failed to encode object: %v", err)
 | 
									panic(fmt.Sprintf("Failed to encode object: %v", err))
 | 
				
			||||||
				return
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Set the bytes field on the RawExtension
 | 
								// 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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(q *resource.Quantity, c fuzz.Continue) {
 | 
							func(q *resource.Quantity, c fuzz.Continue) {
 | 
				
			||||||
			*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
 | 
								*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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(j *extensions.DeploymentSpec, c fuzz.Continue) {
 | 
							func(j *extensions.DeploymentSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(j) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(j *batch.JobSpec, c fuzz.Continue) {
 | 
							func(j *batch.JobSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(j) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(s *autoscaling.HorizontalPodAutoscalerSpec, c fuzz.Continue) {
 | 
							func(s *autoscaling.HorizontalPodAutoscalerSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(s) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(r *rbac.RoleRef, c fuzz.Continue) {
 | 
							func(r *rbac.RoleRef, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(r) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(s *apps.StatefulSet, c fuzz.Continue) {
 | 
							func(s *apps.StatefulSet, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(s) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(s *policy.PodDisruptionBudgetStatus, c fuzz.Continue) {
 | 
							func(s *policy.PodDisruptionBudgetStatus, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(s) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(obj *certificates.CertificateSigningRequestSpec, c fuzz.Continue) {
 | 
							func(obj *certificates.CertificateSigningRequestSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(obj) // fuzz self without calling this function again
 | 
								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{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(obj *admissionregistration.ExternalAdmissionHook, c fuzz.Continue) {
 | 
							func(obj *admissionregistration.ExternalAdmissionHook, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(obj) // fuzz self without calling this function again
 | 
								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{} {
 | 
					var FuzzerFuncs = fuzzer.MergeFuzzerFuncs(
 | 
				
			||||||
	return apitesting.MergeFuzzerFuncs(t,
 | 
						genericfuzzer.Funcs,
 | 
				
			||||||
		apitesting.GenericFuzzerFuncs(t, codecs),
 | 
						overrideGenericFuncs,
 | 
				
			||||||
		overrideGenericFuncs(t, codecs),
 | 
						coreFuncs,
 | 
				
			||||||
		coreFuncs(t),
 | 
						extensionFuncs,
 | 
				
			||||||
		extensionFuncs(t),
 | 
						appsFuncs,
 | 
				
			||||||
		appsFuncs(t),
 | 
						batchFuncs,
 | 
				
			||||||
		batchFuncs(t),
 | 
						autoscalingFuncs,
 | 
				
			||||||
		autoscalingFuncs(t),
 | 
						rbacFuncs,
 | 
				
			||||||
		rbacFuncs(t),
 | 
						kubeadmfuzzer.Funcs,
 | 
				
			||||||
		kubeadmfuzzer.KubeadmFuzzerFuncs(t),
 | 
						policyFuncs,
 | 
				
			||||||
		policyFuncs(t),
 | 
						certificateFuncs,
 | 
				
			||||||
		certificateFuncs(t),
 | 
						admissionregistrationFuncs,
 | 
				
			||||||
		admissionregistrationFuncs(t),
 | 
					)
 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newBool(val bool) *bool {
 | 
					func newBool(val bool) *bool {
 | 
				
			||||||
	p := new(bool)
 | 
						p := new(bool)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,19 +21,18 @@ import (
 | 
				
			|||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
					 | 
				
			||||||
	kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/conversion/unstructured"
 | 
						"k8s.io/apimachinery/pkg/conversion/unstructured"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/json"
 | 
						"k8s.io/apimachinery/pkg/util/json"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"k8s.io/kubernetes/pkg/api/testapi"
 | 
				
			||||||
 | 
						kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
 | 
					func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
 | 
				
			||||||
@@ -45,7 +44,7 @@ func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
 | 
				
			|||||||
		t.Fatalf("Couldn't create internal object %v: %v", kind, err)
 | 
							t.Fatalf("Couldn't create internal object %v: %v", kind, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	seed := rand.Int63()
 | 
						seed := rand.Int63()
 | 
				
			||||||
	apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(seed)).
 | 
						fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), api.Codecs).
 | 
				
			||||||
		// We are explicitly overwriting custom fuzzing functions, to ensure
 | 
							// We are explicitly overwriting custom fuzzing functions, to ensure
 | 
				
			||||||
		// that InitContainers and their statuses are not generated. This is
 | 
							// that InitContainers and their statuses are not generated. This is
 | 
				
			||||||
		// because in thise test we are simply doing json operations, in which
 | 
							// because in thise test we are simply doing json operations, in which
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,7 +79,7 @@ go_test(
 | 
				
			|||||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource: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/v1:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,16 +24,16 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/ghodss/yaml"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	"k8s.io/api/extensions/v1beta1"
 | 
						"k8s.io/api/extensions/v1beta1"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	k8syaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
						k8syaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
						"k8s.io/kubernetes/pkg/api/testapi"
 | 
				
			||||||
	kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
						kapitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/ghodss/yaml"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func readPod(filename string) ([]byte, error) {
 | 
					func readPod(filename string) ([]byte, error) {
 | 
				
			||||||
@@ -146,7 +146,7 @@ func TestValidateOk(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	seed := rand.Int63()
 | 
						seed := rand.Int63()
 | 
				
			||||||
	apiObjectFuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(t, api.Codecs), rand.NewSource(seed))
 | 
						apiObjectFuzzer := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), api.Codecs)
 | 
				
			||||||
	for i := 0; i < 5; i++ {
 | 
						for i := 0; i < 5; i++ {
 | 
				
			||||||
		for _, test := range tests {
 | 
							for _, test := range tests {
 | 
				
			||||||
			testObj := test.obj
 | 
								testObj := test.obj
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,12 +10,14 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["types_test.go"],
 | 
					    srcs = ["roundtrip_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					        "//vendor/github.com/google/gofuzz: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/api/testing/roundtrip: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/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,10 +22,13 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
 | 
						roundtrip "k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
 | 
						metafuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ runtime.Object = &Example{}
 | 
					var _ runtime.Object = &Example{}
 | 
				
			||||||
@@ -34,7 +37,7 @@ var _ metav1.ObjectMetaAccessor = &Example{}
 | 
				
			|||||||
var _ runtime.Object = &ExampleList{}
 | 
					var _ runtime.Object = &ExampleList{}
 | 
				
			||||||
var _ metav1.ListMetaAccessor = &ExampleList{}
 | 
					var _ metav1.ListMetaAccessor = &ExampleList{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func exampleFuzzerFuncs(t apitesting.TestingCommon) []interface{} {
 | 
					func exampleFuzzerFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(obj *ExampleList, c fuzz.Continue) {
 | 
							func(obj *ExampleList, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(obj)
 | 
								c.FuzzNoCustom(obj)
 | 
				
			||||||
@@ -55,9 +58,9 @@ func TestRoundTrip(t *testing.T) {
 | 
				
			|||||||
	AddToScheme(scheme)
 | 
						AddToScheme(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	seed := rand.Int63()
 | 
						seed := rand.Int63()
 | 
				
			||||||
	fuzzerFuncs := apitesting.MergeFuzzerFuncs(t, apitesting.GenericFuzzerFuncs(t, codecs), exampleFuzzerFuncs(t))
 | 
						fuzzerFuncs := fuzzer.MergeFuzzerFuncs(metafuzzer.Funcs, exampleFuzzerFuncs)
 | 
				
			||||||
	fuzzer := apitesting.FuzzerFor(fuzzerFuncs, rand.NewSource(seed))
 | 
						fuzzer := fuzzer.FuzzerFor(fuzzerFuncs, rand.NewSource(seed), codecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("Example"), scheme, codecs, fuzzer, nil)
 | 
						roundtrip.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("Example"), scheme, codecs, fuzzer, nil)
 | 
				
			||||||
	apitesting.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("ExampleList"), scheme, codecs, fuzzer, nil)
 | 
						roundtrip.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("ExampleList"), scheme, codecs, fuzzer, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["fuzzer.go"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -14,25 +14,19 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package install
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
 | 
						"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRoundTripTypes(t *testing.T) {
 | 
					// Funcs returns the fuzzer functions for the apiextensions apis.
 | 
				
			||||||
	apitesting.RoundTripTestForAPIGroup(t, Install, apitesting.MergeFuzzerFuncs(t,
 | 
					func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
		fuzzerFuncs(),
 | 
					 | 
				
			||||||
	))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func fuzzerFuncs() []interface{} {
 | 
					 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(obj *apiextensions.CustomResourceDefinitionSpec, c fuzz.Continue) {
 | 
							func(obj *apiextensions.CustomResourceDefinitionSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(obj)
 | 
								c.FuzzNoCustom(obj)
 | 
				
			||||||
@@ -10,13 +10,12 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["install_test.go"],
 | 
					    srcs = ["roundtrip_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					        "//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library",
 | 
					 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apiextensionsfuzzer "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/fuzzer"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestRoundTrip(t *testing.T) {
 | 
				
			||||||
 | 
						roundtrip.RoundTripTestForAPIGroup(t, Install, apiextensionsfuzzer.Funcs)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -5,44 +5,16 @@ licenses(["notice"])
 | 
				
			|||||||
load(
 | 
					load(
 | 
				
			||||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
    "go_library",
 | 
					    "go_library",
 | 
				
			||||||
    "go_test",
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
go_test(
 | 
					 | 
				
			||||||
    name = "go_default_test",
 | 
					 | 
				
			||||||
    srcs = ["valuefuzz_test.go"],
 | 
					 | 
				
			||||||
    library = ":go_default_library",
 | 
					 | 
				
			||||||
    tags = ["automanaged"],
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = [
 | 
					    srcs = ["codec.go"],
 | 
				
			||||||
        "codec.go",
 | 
					 | 
				
			||||||
        "fuzzer.go",
 | 
					 | 
				
			||||||
        "roundtrip.go",
 | 
					 | 
				
			||||||
        "valuefuzz.go",
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/github.com/davecgh/go-spew/spew:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/github.com/golang/protobuf/proto:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
					 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					    "go_test",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_test(
 | 
				
			||||||
 | 
					    name = "go_default_test",
 | 
				
			||||||
 | 
					    srcs = ["valuefuzz_test.go"],
 | 
				
			||||||
 | 
					    library = ":go_default_library",
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "fuzzer.go",
 | 
				
			||||||
 | 
					        "valuefuzz.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FuzzerFuncs returns a list of func(*SomeType, c fuzz.Continue) functions.
 | 
				
			||||||
 | 
					type FuzzerFuncs func(codecs runtimeserializer.CodecFactory) []interface{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FuzzerFor can randomly populate api objects that are destined for version.
 | 
				
			||||||
 | 
					func FuzzerFor(funcs FuzzerFuncs, src rand.Source, codecs runtimeserializer.CodecFactory) *fuzz.Fuzzer {
 | 
				
			||||||
 | 
						f := fuzz.New().NilChance(.5).NumElements(0, 1)
 | 
				
			||||||
 | 
						if src != nil {
 | 
				
			||||||
 | 
							f.RandSource(src)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						f.Funcs(funcs(codecs)...)
 | 
				
			||||||
 | 
						return f
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MergeFuzzerFuncs will merge the given funcLists, overriding early funcs with later ones if there first
 | 
				
			||||||
 | 
					// argument has the same type.
 | 
				
			||||||
 | 
					func MergeFuzzerFuncs(funcs ...FuzzerFuncs) FuzzerFuncs {
 | 
				
			||||||
 | 
						return FuzzerFuncs(func(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
 | 
							result := []interface{}{}
 | 
				
			||||||
 | 
							for _, f := range funcs {
 | 
				
			||||||
 | 
								if f != nil {
 | 
				
			||||||
 | 
									result = append(result, f(codecs)...)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return result
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package testing
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package testing
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "testing"
 | 
					import "testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["roundtrip.go"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/github.com/davecgh/go-spew/spew:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/github.com/golang/protobuf/proto:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/meta: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/apimachinery/announced:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/fuzzer:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package testing
 | 
					package roundtrip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/hex"
 | 
						"encoding/hex"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
@@ -28,16 +29,19 @@ import (
 | 
				
			|||||||
	"github.com/golang/protobuf/proto"
 | 
						"github.com/golang/protobuf/proto"
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
	flag "github.com/spf13/pflag"
 | 
						flag "github.com/spf13/pflag"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/serializer/protobuf"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						apimeta "k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
 | 
						apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apimachinery/announced"
 | 
						"k8s.io/apimachinery/pkg/apimachinery/announced"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apimachinery/registered"
 | 
						"k8s.io/apimachinery/pkg/apimachinery/registered"
 | 
				
			||||||
 | 
						metafuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
	runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/serializer/json"
 | 
						"k8s.io/apimachinery/pkg/runtime/serializer/json"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime/serializer/protobuf"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -46,7 +50,7 @@ type InstallFunc func(groupFactoryRegistry announced.APIGroupFactoryRegistry, re
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// RoundTripTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides
 | 
					// RoundTripTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides
 | 
				
			||||||
// enough information to round trip
 | 
					// enough information to round trip
 | 
				
			||||||
func RoundTripTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs []interface{}) {
 | 
					func RoundTripTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs) {
 | 
				
			||||||
	groupFactoryRegistry := make(announced.APIGroupFactoryRegistry)
 | 
						groupFactoryRegistry := make(announced.APIGroupFactoryRegistry)
 | 
				
			||||||
	registry := registered.NewOrDie("")
 | 
						registry := registered.NewOrDie("")
 | 
				
			||||||
	scheme := runtime.NewScheme()
 | 
						scheme := runtime.NewScheme()
 | 
				
			||||||
@@ -56,15 +60,19 @@ func RoundTripTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RoundTripTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
 | 
					// RoundTripTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
 | 
				
			||||||
func RoundTripTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs []interface{}) {
 | 
					func RoundTripTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs fuzzer.FuzzerFuncs) {
 | 
				
			||||||
	codecFactory := runtimeserializer.NewCodecFactory(scheme)
 | 
						codecFactory := runtimeserializer.NewCodecFactory(scheme)
 | 
				
			||||||
	fuzzer := DefaultFuzzers(t, codecFactory, fuzzingFuncs)
 | 
						f := fuzzer.FuzzerFor(
 | 
				
			||||||
	RoundTripTypesWithoutProtobuf(t, scheme, codecFactory, fuzzer, nil)
 | 
							fuzzer.MergeFuzzerFuncs(metafuzzer.Funcs, fuzzingFuncs),
 | 
				
			||||||
 | 
							rand.NewSource(rand.Int63()),
 | 
				
			||||||
 | 
							codecFactory,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						RoundTripTypesWithoutProtobuf(t, scheme, codecFactory, f, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RoundTripProtobufTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides
 | 
					// RoundTripProtobufTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides
 | 
				
			||||||
// enough information to round trip
 | 
					// enough information to round trip
 | 
				
			||||||
func RoundTripProtobufTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs []interface{}) {
 | 
					func RoundTripProtobufTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs) {
 | 
				
			||||||
	groupFactoryRegistry := make(announced.APIGroupFactoryRegistry)
 | 
						groupFactoryRegistry := make(announced.APIGroupFactoryRegistry)
 | 
				
			||||||
	registry := registered.NewOrDie("")
 | 
						registry := registered.NewOrDie("")
 | 
				
			||||||
	scheme := runtime.NewScheme()
 | 
						scheme := runtime.NewScheme()
 | 
				
			||||||
@@ -74,9 +82,13 @@ func RoundTripProtobufTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzi
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RoundTripProtobufTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
 | 
					// RoundTripProtobufTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
 | 
				
			||||||
func RoundTripProtobufTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs []interface{}) {
 | 
					func RoundTripProtobufTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs fuzzer.FuzzerFuncs) {
 | 
				
			||||||
	codecFactory := runtimeserializer.NewCodecFactory(scheme)
 | 
						codecFactory := runtimeserializer.NewCodecFactory(scheme)
 | 
				
			||||||
	fuzzer := DefaultFuzzers(t, codecFactory, fuzzingFuncs)
 | 
						fuzzer := fuzzer.FuzzerFor(
 | 
				
			||||||
 | 
							fuzzer.MergeFuzzerFuncs(metafuzzer.Funcs, fuzzingFuncs),
 | 
				
			||||||
 | 
							rand.NewSource(rand.Int63()),
 | 
				
			||||||
 | 
							codecFactory,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
	RoundTripTypes(t, scheme, codecFactory, fuzzer, nil)
 | 
						RoundTripTypes(t, scheme, codecFactory, fuzzer, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -160,7 +172,7 @@ func roundTripSpecificKind(t *testing.T, gvk schema.GroupVersionKind, scheme *ru
 | 
				
			|||||||
func fuzzInternalObject(t *testing.T, fuzzer *fuzz.Fuzzer, object runtime.Object) runtime.Object {
 | 
					func fuzzInternalObject(t *testing.T, fuzzer *fuzz.Fuzzer, object runtime.Object) runtime.Object {
 | 
				
			||||||
	fuzzer.Fuzz(object)
 | 
						fuzzer.Fuzz(object)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	j, err := meta.TypeAccessor(object)
 | 
						j, err := apimeta.TypeAccessor(object)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Unexpected error %v for %#v", err, object)
 | 
							t.Fatalf("Unexpected error %v for %#v", err, object)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -183,7 +195,7 @@ func roundTripToAllExternalVersions(t *testing.T, scheme *runtime.Scheme, codecF
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Couldn't make a %v? %v", internalGVK, err)
 | 
							t.Fatalf("Couldn't make a %v? %v", internalGVK, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, err := meta.TypeAccessor(object); err != nil {
 | 
						if _, err := apimeta.TypeAccessor(object); err != nil {
 | 
				
			||||||
		t.Fatalf("%q is not a TypeMeta and cannot be tested - add it to nonRoundTrippableInternalTypes: %v", internalGVK, err)
 | 
							t.Fatalf("%q is not a TypeMeta and cannot be tested - add it to nonRoundTrippableInternalTypes: %v", internalGVK, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -204,7 +216,7 @@ func roundTripToAllExternalVersions(t *testing.T, scheme *runtime.Scheme, codecF
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		t.Logf("\tround tripping to %v %v", externalGVK, externalGoType)
 | 
							t.Logf("\tround tripping to %v %v", externalGVK, externalGoType)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		roundTrip(t, scheme, TestCodec(codecFactory, externalGVK.GroupVersion()), object)
 | 
							roundTrip(t, scheme, apitesting.TestCodec(codecFactory, externalGVK.GroupVersion()), object)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// TODO remove this hack after we're past the intermediate steps
 | 
							// TODO remove this hack after we're past the intermediate steps
 | 
				
			||||||
		if !skipProtobuf && externalGVK.Group != "kubeadm.k8s.io" {
 | 
							if !skipProtobuf && externalGVK.Group != "kubeadm.k8s.io" {
 | 
				
			||||||
@@ -220,7 +232,7 @@ func roundTripOfExternalType(t *testing.T, scheme *runtime.Scheme, codecFactory
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Couldn't make a %v? %v", externalGVK, err)
 | 
							t.Fatalf("Couldn't make a %v? %v", externalGVK, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	typeAcc, err := meta.TypeAccessor(object)
 | 
						typeAcc, err := apimeta.TypeAccessor(object)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("%q is not a TypeMeta and cannot be tested - add it to nonRoundTrippableInternalTypes: %v", externalGVK, err)
 | 
							t.Fatalf("%q is not a TypeMeta and cannot be tested - add it to nonRoundTrippableInternalTypes: %v", externalGVK, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -279,7 +291,7 @@ func roundTrip(t *testing.T, scheme *runtime.Scheme, codec runtime.Codec, object
 | 
				
			|||||||
	// copy or conversion should alter the object
 | 
						// copy or conversion should alter the object
 | 
				
			||||||
	// TODO eliminate this global
 | 
						// TODO eliminate this global
 | 
				
			||||||
	if !apiequality.Semantic.DeepEqual(original, object) {
 | 
						if !apiequality.Semantic.DeepEqual(original, object) {
 | 
				
			||||||
		t.Errorf("0: %v: encode altered the object, diff: %v", name, diff.ObjectReflectDiff(original, object))
 | 
							t.Errorf("%v: encode altered the object, diff: %v", name, diff.ObjectReflectDiff(original, object))
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -303,14 +315,14 @@ func roundTrip(t *testing.T, scheme *runtime.Scheme, codec runtime.Codec, object
 | 
				
			|||||||
	// decode (deserialize) the encoded data back into an object
 | 
						// decode (deserialize) the encoded data back into an object
 | 
				
			||||||
	obj2, err := runtime.Decode(codec, data)
 | 
						obj2, err := runtime.Decode(codec, data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("0: %v: %v\nCodec: %#v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", object))
 | 
							t.Errorf("%v: %v\nCodec: %#v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", object))
 | 
				
			||||||
		panic("failed")
 | 
							panic("failed")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ensure that the object produced from decoding the encoded data is equal
 | 
						// ensure that the object produced from decoding the encoded data is equal
 | 
				
			||||||
	// to the original object
 | 
						// to the original object
 | 
				
			||||||
	if !apiequality.Semantic.DeepEqual(original, obj2) {
 | 
						if !apiequality.Semantic.DeepEqual(original, obj2) {
 | 
				
			||||||
		t.Errorf("1: %v: diff: %v\nCodec: %#v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectReflectDiff(object, obj2), codec, printer.Sprintf("%#v", object), dataAsString(data), printer.Sprintf("%#v", obj2))
 | 
							t.Errorf("%v: diff: %v\nCodec: %#v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectReflectDiff(object, obj2), codec, printer.Sprintf("%#v", object), dataAsString(data), printer.Sprintf("%#v", obj2))
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -318,27 +330,66 @@ func roundTrip(t *testing.T, scheme *runtime.Scheme, codec runtime.Codec, object
 | 
				
			|||||||
	// create a new object)
 | 
						// create a new object)
 | 
				
			||||||
	obj3 := reflect.New(reflect.TypeOf(object).Elem()).Interface().(runtime.Object)
 | 
						obj3 := reflect.New(reflect.TypeOf(object).Elem()).Interface().(runtime.Object)
 | 
				
			||||||
	if err := runtime.DecodeInto(codec, data, obj3); err != nil {
 | 
						if err := runtime.DecodeInto(codec, data, obj3); err != nil {
 | 
				
			||||||
		t.Errorf("2: %v: %v", name, err)
 | 
							t.Errorf("%v: %v", name, err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// special case for kinds which are internal and external at the same time (many in meta.k8s.io are). For those
 | 
				
			||||||
 | 
						// runtime.DecodeInto above will return the external variant and set the APIVersion and kind, while the input
 | 
				
			||||||
 | 
						// object might be internal. Hence, we clear those values for obj3 for that case to correctly compare.
 | 
				
			||||||
 | 
						intAndExt, err := internalAndExternalKind(scheme, object)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("%v: %v", name, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if intAndExt {
 | 
				
			||||||
 | 
							typeAcc, err := apimeta.TypeAccessor(object)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								t.Fatalf("%v: error accessing TypeMeta: %v", name, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if len(typeAcc.GetAPIVersion()) == 0 {
 | 
				
			||||||
 | 
								typeAcc, err := apimeta.TypeAccessor(obj3)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									t.Fatalf("%v: error accessing TypeMeta: %v", name, err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								typeAcc.SetAPIVersion("")
 | 
				
			||||||
 | 
								typeAcc.SetKind("")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ensure that the new runtime object is equal to the original after being
 | 
						// ensure that the new runtime object is equal to the original after being
 | 
				
			||||||
	// decoded into
 | 
						// decoded into
 | 
				
			||||||
	if !apiequality.Semantic.DeepEqual(object, obj3) {
 | 
						if !apiequality.Semantic.DeepEqual(object, obj3) {
 | 
				
			||||||
		t.Errorf("3: %v: diff: %v\nCodec: %#v", name, diff.ObjectReflectDiff(object, obj3), codec)
 | 
							t.Errorf("%v: diff: %v\nCodec: %#v", name, diff.ObjectReflectDiff(object, obj3), codec)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// do structure-preserving fuzzing of the deep-copied object. If it shares anything with the original,
 | 
						// do structure-preserving fuzzing of the deep-copied object. If it shares anything with the original,
 | 
				
			||||||
	// the deep-copy was actually only a shallow copy. Then original and obj3 will be different after fuzzing.
 | 
						// the deep-copy was actually only a shallow copy. Then original and obj3 will be different after fuzzing.
 | 
				
			||||||
	// NOTE: we use the encoding+decoding here as an alternative, guaranteed deep-copy to compare against.
 | 
						// NOTE: we use the encoding+decoding here as an alternative, guaranteed deep-copy to compare against.
 | 
				
			||||||
	ValueFuzz(object)
 | 
						fuzzer.ValueFuzz(object)
 | 
				
			||||||
	if !apiequality.Semantic.DeepEqual(original, obj3) {
 | 
						if !apiequality.Semantic.DeepEqual(original, obj3) {
 | 
				
			||||||
		t.Errorf("0: %v: fuzzing a copy altered the original, diff: %v", name, diff.ObjectReflectDiff(original, object))
 | 
							t.Errorf("%v: fuzzing a copy altered the original, diff: %v", name, diff.ObjectReflectDiff(original, object))
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func internalAndExternalKind(scheme *runtime.Scheme, object runtime.Object) (bool, error) {
 | 
				
			||||||
 | 
						kinds, _, err := scheme.ObjectKinds(object)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return false, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						internal, external := false, false
 | 
				
			||||||
 | 
						for _, k := range kinds {
 | 
				
			||||||
 | 
							if k.Version == runtime.APIVersionInternal {
 | 
				
			||||||
 | 
								internal = true
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								external = true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return internal && external, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// dataAsString returns the given byte array as a string; handles detecting
 | 
					// dataAsString returns the given byte array as a string; handles detecting
 | 
				
			||||||
// protocol buffers.
 | 
					// protocol buffers.
 | 
				
			||||||
func dataAsString(data []byte) string {
 | 
					func dataAsString(data []byte) string {
 | 
				
			||||||
							
								
								
									
										25
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["fuzzer.go"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/github.com/google/gofuzz: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/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -14,24 +14,25 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package testing
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"math/rand"
 | 
						"fmt"
 | 
				
			||||||
	"reflect"
 | 
					 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"testing"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
 | 
						apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						metav1alpha1 "k8s.io/apimachinery/pkg/apis/meta/v1alpha1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/types"
 | 
						"k8s.io/apimachinery/pkg/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GenericFuzzerFuncs(t TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					func genericFuzzerFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(q *resource.Quantity, c fuzz.Continue) {
 | 
							func(q *resource.Quantity, c fuzz.Continue) {
 | 
				
			||||||
			*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
 | 
								*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
 | 
				
			||||||
@@ -53,28 +54,6 @@ func GenericFuzzerFuncs(t TestingCommon, codecs runtimeserializer.CodecFactory)
 | 
				
			|||||||
			j.APIVersion = ""
 | 
								j.APIVersion = ""
 | 
				
			||||||
			j.Kind = ""
 | 
								j.Kind = ""
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		func(j *metav1.TypeMeta, c fuzz.Continue) {
 | 
					 | 
				
			||||||
			// We have to customize the randomization of TypeMetas because their
 | 
					 | 
				
			||||||
			// APIVersion and Kind must remain blank in memory.
 | 
					 | 
				
			||||||
			j.APIVersion = ""
 | 
					 | 
				
			||||||
			j.Kind = ""
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		func(j *metav1.ObjectMeta, c fuzz.Continue) {
 | 
					 | 
				
			||||||
			j.Name = c.RandString()
 | 
					 | 
				
			||||||
			j.ResourceVersion = strconv.FormatUint(c.RandUint64(), 10)
 | 
					 | 
				
			||||||
			j.SelfLink = c.RandString()
 | 
					 | 
				
			||||||
			j.UID = types.UID(c.RandString())
 | 
					 | 
				
			||||||
			j.GenerateName = c.RandString()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			var sec, nsec int64
 | 
					 | 
				
			||||||
			c.Fuzz(&sec)
 | 
					 | 
				
			||||||
			c.Fuzz(&nsec)
 | 
					 | 
				
			||||||
			j.CreationTimestamp = metav1.Unix(sec, nsec).Rfc3339Copy()
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		func(j *metav1.ListMeta, c fuzz.Continue) {
 | 
					 | 
				
			||||||
			j.ResourceVersion = strconv.FormatUint(c.RandUint64(), 10)
 | 
					 | 
				
			||||||
			j.SelfLink = c.RandString()
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		func(j *runtime.Object, c fuzz.Continue) {
 | 
							func(j *runtime.Object, c fuzz.Continue) {
 | 
				
			||||||
			// TODO: uncomment when round trip starts from a versioned object
 | 
								// TODO: uncomment when round trip starts from a versioned object
 | 
				
			||||||
			if true { //c.RandBool() {
 | 
								if true { //c.RandBool() {
 | 
				
			||||||
@@ -98,77 +77,100 @@ func GenericFuzzerFuncs(t TestingCommon, codecs runtimeserializer.CodecFactory)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			// Find a codec for converting the object to raw bytes.  This is necessary for the
 | 
								// Find a codec for converting the object to raw bytes.  This is necessary for the
 | 
				
			||||||
			// api version and kind to be correctly set be serialization.
 | 
								// api version and kind to be correctly set be serialization.
 | 
				
			||||||
			var codec = TestCodec(codecs, metav1.SchemeGroupVersion)
 | 
								var codec = apitesting.TestCodec(codecs, metav1.SchemeGroupVersion)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Convert the object to raw bytes
 | 
								// Convert the object to raw bytes
 | 
				
			||||||
			bytes, err := runtime.Encode(codec, obj)
 | 
								bytes, err := runtime.Encode(codec, obj)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("Failed to encode object: %v", err)
 | 
									panic(fmt.Sprintf("Failed to encode object: %v", err))
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// strip trailing newlines which do not survive roundtrips
 | 
				
			||||||
 | 
								for len(bytes) >= 1 && bytes[len(bytes)-1] == 10 {
 | 
				
			||||||
 | 
									bytes = bytes[:len(bytes)-1]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Set the bytes field on the RawExtension
 | 
								// Set the bytes field on the RawExtension
 | 
				
			||||||
			r.Raw = bytes
 | 
								r.Raw = bytes
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestingCommon abstracts testing.T and testing.B
 | 
					func v1FuzzerFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
type TestingCommon interface {
 | 
						return []interface{}{
 | 
				
			||||||
	Log(args ...interface{})
 | 
							func(j *metav1.TypeMeta, c fuzz.Continue) {
 | 
				
			||||||
	Logf(format string, args ...interface{})
 | 
								// We have to customize the randomization of TypeMetas because their
 | 
				
			||||||
	Error(args ...interface{})
 | 
								// APIVersion and Kind must remain blank in memory.
 | 
				
			||||||
	Errorf(format string, args ...interface{})
 | 
								j.APIVersion = ""
 | 
				
			||||||
	Fatal(args ...interface{})
 | 
								j.Kind = ""
 | 
				
			||||||
	Fatalf(format string, args ...interface{})
 | 
							},
 | 
				
			||||||
}
 | 
							func(j *metav1.ObjectMeta, c fuzz.Continue) {
 | 
				
			||||||
 | 
								j.Name = c.RandString()
 | 
				
			||||||
 | 
								j.ResourceVersion = strconv.FormatUint(c.RandUint64(), 10)
 | 
				
			||||||
 | 
								j.SelfLink = c.RandString()
 | 
				
			||||||
 | 
								j.UID = types.UID(c.RandString())
 | 
				
			||||||
 | 
								j.GenerateName = c.RandString()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
								var sec, nsec int64
 | 
				
			||||||
	_ TestingCommon = &testing.T{}
 | 
								c.Fuzz(&sec)
 | 
				
			||||||
	_ TestingCommon = &testing.B{}
 | 
								c.Fuzz(&nsec)
 | 
				
			||||||
)
 | 
								j.CreationTimestamp = metav1.Unix(sec, nsec).Rfc3339Copy()
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
// FuzzerFor can randomly populate api objects that are destined for version.
 | 
							func(j *metav1.ListMeta, c fuzz.Continue) {
 | 
				
			||||||
func FuzzerFor(funcs []interface{}, src rand.Source) *fuzz.Fuzzer {
 | 
								j.ResourceVersion = strconv.FormatUint(c.RandUint64(), 10)
 | 
				
			||||||
	f := fuzz.New().NilChance(.5).NumElements(0, 1)
 | 
								j.SelfLink = c.RandString()
 | 
				
			||||||
	if src != nil {
 | 
							},
 | 
				
			||||||
		f.RandSource(src)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	f.Funcs(funcs...)
 | 
					 | 
				
			||||||
	return f
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MergeFuzzerFuncs will merge the given funcLists, overriding early funcs with later ones if there first
 | 
					func v1alpha1FuzzerFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
// argument has the same type.
 | 
						return []interface{}{
 | 
				
			||||||
func MergeFuzzerFuncs(t TestingCommon, funcLists ...[]interface{}) []interface{} {
 | 
							func(r *metav1alpha1.TableRow, c fuzz.Continue) {
 | 
				
			||||||
	funcMap := map[string]interface{}{}
 | 
								c.Fuzz(&r.Object)
 | 
				
			||||||
	for _, list := range funcLists {
 | 
								c.Fuzz(&r.Conditions)
 | 
				
			||||||
		for _, f := range list {
 | 
								if len(r.Conditions) == 0 {
 | 
				
			||||||
			fT := reflect.TypeOf(f)
 | 
									r.Conditions = nil
 | 
				
			||||||
			if fT.Kind() != reflect.Func || fT.NumIn() != 2 {
 | 
					 | 
				
			||||||
				t.Errorf("Fuzzer func with invalid type: %v", fT)
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			funcMap[fT.In(0).String()] = f
 | 
								n := c.Intn(10)
 | 
				
			||||||
		}
 | 
								if n > 0 {
 | 
				
			||||||
 | 
									r.Cells = make([]interface{}, n)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for i := range r.Cells {
 | 
				
			||||||
 | 
									t := c.Intn(6)
 | 
				
			||||||
 | 
									switch t {
 | 
				
			||||||
 | 
									case 0:
 | 
				
			||||||
 | 
										r.Cells[i] = c.RandString()
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										r.Cells[i] = c.Uint64()
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										r.Cells[i] = c.RandBool()
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										// maps roundtrip as map[interface{}]interface{}, but the json codec cannot encode that
 | 
				
			||||||
 | 
										// TODO: get maps to roundtrip properly
 | 
				
			||||||
 | 
										/*
 | 
				
			||||||
 | 
											x := map[string]interface{}{}
 | 
				
			||||||
 | 
											for j := c.Intn(10) + 1; j >= 0; j-- {
 | 
				
			||||||
 | 
												x[c.RandString()] = c.RandString()
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											r.Cells[i] = x
 | 
				
			||||||
 | 
										*/
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										x := make([]interface{}, c.Intn(10))
 | 
				
			||||||
 | 
										for i := range x {
 | 
				
			||||||
 | 
											x[i] = c.Uint64()
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										r.Cells[i] = x
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										r.Cells[i] = nil
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	result := []interface{}{}
 | 
					 | 
				
			||||||
	for _, f := range funcMap {
 | 
					 | 
				
			||||||
		result = append(result, f)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return result
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func DefaultFuzzers(t TestingCommon, codecFactory runtimeserializer.CodecFactory, fuzzerFuncs []interface{}) *fuzz.Fuzzer {
 | 
					var Funcs = fuzzer.MergeFuzzerFuncs(
 | 
				
			||||||
	seed := rand.Int63()
 | 
						genericFuzzerFuncs,
 | 
				
			||||||
 | 
						v1FuzzerFuncs,
 | 
				
			||||||
	return FuzzerFor(
 | 
						v1alpha1FuzzerFuncs,
 | 
				
			||||||
		MergeFuzzerFuncs(t,
 | 
					)
 | 
				
			||||||
			GenericFuzzerFuncs(t, codecFactory),
 | 
					 | 
				
			||||||
			fuzzerFuncs,
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		rand.NewSource(seed),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -10,10 +10,15 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["register_test.go"],
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "register_test.go",
 | 
				
			||||||
 | 
					        "roundtrip_test.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip: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/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package internalversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/apis/meta/fuzzer"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestRoundTrip(t *testing.T) {
 | 
				
			||||||
 | 
						roundtrip.RoundTripTestForScheme(t, scheme, fuzzer.Funcs)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -14,6 +14,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing: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/testapigroup:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/testapigroup:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,18 +17,21 @@ limitations under the License.
 | 
				
			|||||||
package fuzzer
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/testapigroup"
 | 
						"k8s.io/apimachinery/pkg/apis/testapigroup"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/testapigroup/v1"
 | 
						"k8s.io/apimachinery/pkg/apis/testapigroup/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apimachinery in order to have more realistic
 | 
					// overrideMetaFuncs override some generic fuzzer funcs from k8s.io/apimachinery in order to have more realistic
 | 
				
			||||||
// values in a Kubernetes context.
 | 
					// values in a Kubernetes context.
 | 
				
			||||||
func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					func overrideMetaFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(j *runtime.Object, c fuzz.Continue) {
 | 
							func(j *runtime.Object, c fuzz.Continue) {
 | 
				
			||||||
			// TODO: uncomment when round trip starts from a versioned object
 | 
								// TODO: uncomment when round trip starts from a versioned object
 | 
				
			||||||
@@ -54,7 +57,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
 | 
				
			|||||||
			// Convert the object to raw bytes
 | 
								// Convert the object to raw bytes
 | 
				
			||||||
			bytes, err := runtime.Encode(apitesting.TestCodec(codecs, v1.SchemeGroupVersion), obj)
 | 
								bytes, err := runtime.Encode(apitesting.TestCodec(codecs, v1.SchemeGroupVersion), obj)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("Failed to encode object: %v", err)
 | 
									panic(fmt.Sprintf("Failed to encode object: %v", err))
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +67,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func testapigroupFuncs(t apitesting.TestingCommon) []interface{} {
 | 
					func testapigroupFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(s *testapigroup.CarpSpec, c fuzz.Continue) {
 | 
							func(s *testapigroup.CarpSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(s)
 | 
								c.FuzzNoCustom(s)
 | 
				
			||||||
@@ -90,10 +93,8 @@ func testapigroupFuncs(t apitesting.TestingCommon) []interface{} {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Funcs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					// Funcs returns the fuzzer functions for the testapigroup.
 | 
				
			||||||
	return apitesting.MergeFuzzerFuncs(t,
 | 
					var Funcs = fuzzer.MergeFuzzerFuncs(
 | 
				
			||||||
		apitesting.GenericFuzzerFuncs(t, codecs),
 | 
						overrideMetaFuncs,
 | 
				
			||||||
		overrideGenericFuncs(t, codecs),
 | 
						testapigroupFuncs,
 | 
				
			||||||
		testapigroupFuncs(t),
 | 
					)
 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ licenses(["notice"])
 | 
				
			|||||||
load(
 | 
					load(
 | 
				
			||||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
    "go_library",
 | 
					    "go_library",
 | 
				
			||||||
 | 
					    "go_test",
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
@@ -19,3 +20,14 @@ go_library(
 | 
				
			|||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_test(
 | 
				
			||||||
 | 
					    name = "go_default_test",
 | 
				
			||||||
 | 
					    srcs = ["roundtrip_test.go"],
 | 
				
			||||||
 | 
					    library = ":go_default_library",
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/testapigroup/fuzzer:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
 | 
						testapigroupfuzzer "k8s.io/apimachinery/pkg/apis/testapigroup/fuzzer"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestRoundTrip(t *testing.T) {
 | 
				
			||||||
 | 
						roundtrip.RoundTripTestForAPIGroup(t, Install, testapigroupfuzzer.Funcs)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -14,6 +14,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
					        "//vendor/github.com/google/gofuzz:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/testing: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/runtime:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apiserver/pkg/apis/example:go_default_library",
 | 
					        "//vendor/k8s.io/apiserver/pkg/apis/example:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,18 +17,21 @@ limitations under the License.
 | 
				
			|||||||
package fuzzer
 | 
					package fuzzer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/google/gofuzz"
 | 
						"github.com/google/gofuzz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/apis/example"
 | 
						"k8s.io/apiserver/pkg/apis/example"
 | 
				
			||||||
	examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
 | 
						examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
 | 
					// overrideMetaFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
 | 
				
			||||||
// values in a Kubernetes context.
 | 
					// values in a Kubernetes context.
 | 
				
			||||||
func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					func overrideMetaFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(j *runtime.Object, c fuzz.Continue) {
 | 
							func(j *runtime.Object, c fuzz.Continue) {
 | 
				
			||||||
			// TODO: uncomment when round trip starts from a versioned object
 | 
								// TODO: uncomment when round trip starts from a versioned object
 | 
				
			||||||
@@ -54,7 +57,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
 | 
				
			|||||||
			// Convert the object to raw bytes
 | 
								// Convert the object to raw bytes
 | 
				
			||||||
			bytes, err := runtime.Encode(apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion), obj)
 | 
								bytes, err := runtime.Encode(apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion), obj)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("Failed to encode object: %v", err)
 | 
									panic(fmt.Sprintf("Failed to encode object: %v", err))
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +67,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func exampleFuncs(t apitesting.TestingCommon) []interface{} {
 | 
					func exampleFuncs(codecs runtimeserializer.CodecFactory) []interface{} {
 | 
				
			||||||
	return []interface{}{
 | 
						return []interface{}{
 | 
				
			||||||
		func(s *example.PodSpec, c fuzz.Continue) {
 | 
							func(s *example.PodSpec, c fuzz.Continue) {
 | 
				
			||||||
			c.FuzzNoCustom(s)
 | 
								c.FuzzNoCustom(s)
 | 
				
			||||||
@@ -90,10 +93,8 @@ func exampleFuncs(t apitesting.TestingCommon) []interface{} {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Funcs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
 | 
					// Funcs returns the fuzzer functions for the example api group.
 | 
				
			||||||
	return apitesting.MergeFuzzerFuncs(t,
 | 
					var Funcs = fuzzer.MergeFuzzerFuncs(
 | 
				
			||||||
		apitesting.GenericFuzzerFuncs(t, codecs),
 | 
						overrideMetaFuncs,
 | 
				
			||||||
		overrideGenericFuncs(t, codecs),
 | 
						exampleFuncs,
 | 
				
			||||||
		exampleFuncs(t),
 | 
					)
 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ licenses(["notice"])
 | 
				
			|||||||
load(
 | 
					load(
 | 
				
			||||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
    "go_library",
 | 
					    "go_library",
 | 
				
			||||||
 | 
					    "go_test",
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
@@ -19,3 +20,14 @@ go_library(
 | 
				
			|||||||
        "//vendor/k8s.io/apiserver/pkg/apis/example/v1:go_default_library",
 | 
					        "//vendor/k8s.io/apiserver/pkg/apis/example/v1:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_test(
 | 
				
			||||||
 | 
					    name = "go_default_test",
 | 
				
			||||||
 | 
					    srcs = ["roundtrip_test.go"],
 | 
				
			||||||
 | 
					    library = ":go_default_library",
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apiserver/pkg/apis/example/fuzzer:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
 | 
						examplefuzzer "k8s.io/apiserver/pkg/apis/example/fuzzer"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestRoundTrip(t *testing.T) {
 | 
				
			||||||
 | 
						roundtrip.RoundTripTestForAPIGroup(t, Install, examplefuzzer.Funcs)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -25,7 +25,7 @@ go_test(
 | 
				
			|||||||
        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/meta: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/internalversion:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ import (
 | 
				
			|||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
						apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						fuzzer "k8s.io/apimachinery/pkg/api/testing/fuzzer"
 | 
				
			||||||
	metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
 | 
						metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
				
			||||||
@@ -4104,7 +4104,7 @@ func newTestRequestInfoResolver() *request.RequestInfoFactory {
 | 
				
			|||||||
const benchmarkSeed = 100
 | 
					const benchmarkSeed = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func benchmarkItems(b *testing.B) []example.Pod {
 | 
					func benchmarkItems(b *testing.B) []example.Pod {
 | 
				
			||||||
	clientapiObjectFuzzer := apitesting.FuzzerFor(examplefuzzer.Funcs(b, codecs), rand.NewSource(benchmarkSeed))
 | 
						clientapiObjectFuzzer := fuzzer.FuzzerFor(examplefuzzer.Funcs, rand.NewSource(benchmarkSeed), codecs)
 | 
				
			||||||
	items := make([]example.Pod, 3)
 | 
						items := make([]example.Pod, 3)
 | 
				
			||||||
	for i := range items {
 | 
						for i := range items {
 | 
				
			||||||
		clientapiObjectFuzzer.Fuzz(&items[i])
 | 
							clientapiObjectFuzzer.Fuzz(&items[i])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,10 +10,10 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["install_test.go"],
 | 
					    srcs = ["roundtrip_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = ["//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library"],
 | 
					    deps = ["//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library"],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,9 +19,9 @@ package install
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						roundtrip "k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRoundTripTypes(t *testing.T) {
 | 
					func TestRoundTripTypes(t *testing.T) {
 | 
				
			||||||
	apitesting.RoundTripTestForAPIGroup(t, Install, nil)
 | 
						roundtrip.RoundTripTestForAPIGroup(t, Install, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -13,7 +13,7 @@ go_test(
 | 
				
			|||||||
    srcs = ["scheme_test.go"],
 | 
					    srcs = ["scheme_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = ["//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library"],
 | 
					    deps = ["//vendor/k8s.io/apimachinery/pkg/api/testing/roundtrip:go_default_library"],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,9 +19,9 @@ package apiserver
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apitesting "k8s.io/apimachinery/pkg/api/testing"
 | 
						"k8s.io/apimachinery/pkg/api/testing/roundtrip"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRoundTripTypes(t *testing.T) {
 | 
					func TestRoundTripTypes(t *testing.T) {
 | 
				
			||||||
	apitesting.RoundTripTestForScheme(t, Scheme, nil)
 | 
						roundtrip.RoundTripTestForScheme(t, Scheme, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user