diff --git a/pkg/api/serialization_test.go b/pkg/api/serialization_test.go index 4f9fa87964f..27a2e352641 100644 --- a/pkg/api/serialization_test.go +++ b/pkg/api/serialization_test.go @@ -20,6 +20,7 @@ import ( "bytes" "encoding/hex" "encoding/json" + "fmt" "io/ioutil" "math/rand" "reflect" @@ -78,6 +79,13 @@ func dataAsString(data []byte) string { func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) { printer := spew.ConfigState{DisableMethods: true} + original := item + copied, err := api.Scheme.DeepCopy(item) + if err != nil { + panic(fmt.Sprintf("unable to copy: %v", err)) + } + item = copied.(runtime.Object) + name := reflect.TypeOf(item).Elem().Name() data, err := runtime.Encode(codec, item) if err != nil { @@ -85,13 +93,18 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) { return } + if !api.Semantic.DeepEqual(original, item) { + t.Errorf("0: %v: encode altered the object, diff: %v", name, diff.ObjectReflectDiff(original, item)) + return + } + obj2, err := runtime.Decode(codec, data) if err != nil { - t.Errorf("0: %v: %v\nCodec: %v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", item)) + t.Errorf("0: %v: %v\nCodec: %#v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", item)) panic("failed") } - if !api.Semantic.DeepEqual(item, obj2) { - t.Errorf("\n1: %v: diff: %v\nCodec: %v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectGoPrintDiff(item, obj2), codec, printer.Sprintf("%#v", item), dataAsString(data), printer.Sprintf("%#v", obj2)) + if !api.Semantic.DeepEqual(original, obj2) { + t.Errorf("\n1: %v: diff: %v\nCodec: %#v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectReflectDiff(item, obj2), codec, printer.Sprintf("%#v", item), dataAsString(data), printer.Sprintf("%#v", obj2)) return } @@ -101,7 +114,7 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) { return } if !api.Semantic.DeepEqual(item, obj3) { - t.Errorf("3: %v: diff: %v\nCodec: %v", name, diff.ObjectDiff(item, obj3), codec) + t.Errorf("3: %v: diff: %v\nCodec: %#v", name, diff.ObjectReflectDiff(item, obj3), codec) return } } diff --git a/pkg/api/v1/conversion_test.go b/pkg/api/v1/conversion_test.go index ac0b4e682f0..205777cd28e 100644 --- a/pkg/api/v1/conversion_test.go +++ b/pkg/api/v1/conversion_test.go @@ -204,8 +204,8 @@ func TestResourceListConversion(t *testing.T) { }, } - output := api.ResourceList{} for i, test := range tests { + output := api.ResourceList{} err := api.Scheme.Convert(&test.input, &output) if err != nil { t.Fatalf("unexpected error for case %d: %v", i, err)