mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 01:06:27 +00:00
client-go tpr example: round trip external tpr types
This commit is contained in:
parent
7a06299f4a
commit
fb2298de18
@ -242,8 +242,15 @@ func roundTripOfExternalType(t *testing.T, scheme *runtime.Scheme, codecFactory
|
|||||||
|
|
||||||
// roundTrip applies a single round-trip test to the given runtime object
|
// roundTrip applies a single round-trip test to the given runtime object
|
||||||
// using the given codec. The round-trip test ensures that an object can be
|
// using the given codec. The round-trip test ensures that an object can be
|
||||||
// deep-copied and converted from internal -> versioned -> internal without
|
// deep-copied, converted, marshaled and back without loss of data.
|
||||||
// loss of data.
|
//
|
||||||
|
// For internal types this means
|
||||||
|
//
|
||||||
|
// internal -> external -> json/protobuf -> external -> internal.
|
||||||
|
//
|
||||||
|
// For external types this means
|
||||||
|
//
|
||||||
|
// external -> json/protobuf -> external.
|
||||||
func roundTrip(t *testing.T, scheme *runtime.Scheme, codec runtime.Codec, object runtime.Object) {
|
func roundTrip(t *testing.T, scheme *runtime.Scheme, codec runtime.Codec, object runtime.Object) {
|
||||||
printer := spew.ConfigState{DisableMethods: true}
|
printer := spew.ConfigState{DisableMethods: true}
|
||||||
original := object
|
original := object
|
||||||
|
@ -17,8 +17,15 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/gofuzz"
|
||||||
|
|
||||||
|
apitesting "k8s.io/apimachinery/pkg/api/testing"
|
||||||
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"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ runtime.Object = &Example{}
|
var _ runtime.Object = &Example{}
|
||||||
@ -26,3 +33,31 @@ 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{} {
|
||||||
|
return []interface{}{
|
||||||
|
func(obj *ExampleList, c fuzz.Continue) {
|
||||||
|
c.FuzzNoCustom(obj)
|
||||||
|
obj.Items = make([]Example, c.Intn(10))
|
||||||
|
for i := range obj.Items {
|
||||||
|
c.Fuzz(&obj.Items[i])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestRoundTrip tests that the third-party kinds can be marshaled and unmarshaled correctly to/from JSON
|
||||||
|
// without the loss of information. Moreover, deep copy is tested.
|
||||||
|
func TestRoundTrip(t *testing.T) {
|
||||||
|
scheme := runtime.NewScheme()
|
||||||
|
codecs := serializer.NewCodecFactory(scheme)
|
||||||
|
|
||||||
|
AddToScheme(scheme)
|
||||||
|
|
||||||
|
seed := rand.Int63()
|
||||||
|
fuzzerFuncs := apitesting.MergeFuzzerFuncs(t, apitesting.GenericFuzzerFuncs(t, codecs), exampleFuzzerFuncs(t))
|
||||||
|
fuzzer := apitesting.FuzzerFor(fuzzerFuncs, rand.NewSource(seed))
|
||||||
|
|
||||||
|
apitesting.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("Example"), scheme, codecs, fuzzer, nil)
|
||||||
|
apitesting.RoundTripSpecificKindWithoutProtobuf(t, SchemeGroupVersion.WithKind("ExampleList"), scheme, codecs, fuzzer, nil)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user