func runTest(t *testing.T, codec runtime.Codec, source runtime.Object) { name := reflect.TypeOf(source).Elem().Name() apiObjectFuzzer.Fuzz(source) j, err := runtime.FindJSONBase(source) if err != nil { t.Fatalf("Unexpected error %v for %#v", err, source) } j.SetKind("") j.SetAPIVersion("") data, err := codec.Encode(source) if err != nil { t.Errorf("%v: %v (%#v)", name, err, source) return } obj2, err := codec.Decode(data) if err != nil { t.Errorf("%v: %v", name, err) return } else { if !reflect.DeepEqual(source, obj2) { t.Errorf("1: %v: diff: %v", name, runtime.ObjectDiff(source, obj2)) return } } obj3 := reflect.New(reflect.TypeOf(source).Elem()).Interface().(runtime.Object) err = codec.DecodeInto(data, obj3) if err != nil { t.Errorf("2: %v: %v", name, err) return } else { if !reflect.DeepEqual(source, obj3) { t.Errorf("3: %v: diff: %v", name, runtime.ObjectDiff(source, obj3)) return } } }
func TestInternalRoundTrip(t *testing.T) { latest := "v1beta2" for k, _ := range internal.Scheme.KnownTypes("") { obj, err := internal.Scheme.New("", k) if err != nil { t.Errorf("%s: unexpected error: %v", k, err) continue } apiObjectFuzzer.Fuzz(obj) newer, err := internal.Scheme.New(latest, k) if err != nil { t.Errorf("%s: unexpected error: %v", k, err) continue } if err := internal.Scheme.Convert(obj, newer); err != nil { t.Errorf("unable to convert %#v to %#v: %v", obj, newer, err) } actual, err := internal.Scheme.New("", k) if err != nil { t.Errorf("%s: unexpected error: %v", k, err) continue } if err := internal.Scheme.Convert(newer, actual); err != nil { t.Errorf("unable to convert %#v to %#v: %v", newer, actual, err) } if !reflect.DeepEqual(obj, actual) { t.Errorf("%s: diff %s", k, runtime.ObjectDiff(obj, actual)) } } }