func TestInstallThirdPartyAPIPost(t *testing.T) { registered.AddThirdPartyAPIGroupVersions(unversioned.GroupVersion{Group: "company.com", Version: "v1"}, unversioned.GroupVersion{Group: "company.com", Version: "v3"}) for _, version := range versionsToTest { testInstallThirdPartyAPIPostForVersion(t, version) } }
func TestCodec(t *testing.T) { tests := []struct { into runtime.Object obj *Foo expectErr bool name string }{ { into: &runtime.VersionedObjects{}, obj: &Foo{ ObjectMeta: api.ObjectMeta{Name: "bar"}, TypeMeta: unversioned.TypeMeta{APIVersion: "company.com/v1", Kind: "Foo"}, }, expectErr: false, name: "versioned objects list", }, { obj: &Foo{ObjectMeta: api.ObjectMeta{Name: "bar"}}, expectErr: true, name: "missing kind", }, { obj: &Foo{ ObjectMeta: api.ObjectMeta{Name: "bar"}, TypeMeta: unversioned.TypeMeta{APIVersion: "company.com/v1", Kind: "Foo"}, }, name: "basic", }, { obj: &Foo{ ObjectMeta: api.ObjectMeta{Name: "bar", ResourceVersion: "baz"}, TypeMeta: unversioned.TypeMeta{APIVersion: "company.com/v1", Kind: "Foo"}, }, name: "resource version", }, { obj: &Foo{ ObjectMeta: api.ObjectMeta{ Name: "bar", CreationTimestamp: unversioned.Time{Time: time.Unix(100, 0)}, }, TypeMeta: unversioned.TypeMeta{ APIVersion: "company.com/v1", Kind: "Foo", }, }, name: "creation time", }, { obj: &Foo{ ObjectMeta: api.ObjectMeta{ Name: "bar", ResourceVersion: "baz", Labels: map[string]string{"foo": "bar", "baz": "blah"}, }, TypeMeta: unversioned.TypeMeta{APIVersion: "company.com/v1", Kind: "Foo"}, }, name: "labels", }, } registered.AddThirdPartyAPIGroupVersions(unversioned.GroupVersion{Group: "company.com", Version: "v1"}) for _, test := range tests { d := &thirdPartyResourceDataDecoder{kind: "Foo", delegate: testapi.Extensions.Codec()} e := &thirdPartyResourceDataEncoder{gvk: unversioned.GroupVersionKind{ Group: "company.com", Version: "v1", Kind: "Foo", }, delegate: testapi.Extensions.Codec()} data, err := json.Marshal(test.obj) if err != nil { t.Errorf("[%s] unexpected error: %v", test.name, err) continue } var obj runtime.Object if test.into != nil { err = runtime.DecodeInto(d, data, test.into) obj = test.into } else { obj, err = runtime.Decode(d, data) } if err != nil && !test.expectErr { t.Errorf("[%s] unexpected error: %v", test.name, err) continue } if test.expectErr { if err == nil { t.Errorf("[%s] unexpected non-error", test.name) } continue } var rsrcObj *extensions.ThirdPartyResourceData switch o := obj.(type) { case *extensions.ThirdPartyResourceData: rsrcObj = o case *runtime.VersionedObjects: rsrcObj = o.First().(*extensions.ThirdPartyResourceData) default: t.Errorf("[%s] unexpected object: %v", test.name, obj) continue } if !reflect.DeepEqual(rsrcObj.ObjectMeta, test.obj.ObjectMeta) { t.Errorf("[%s]\nexpected\n%v\nsaw\n%v\n", test.name, rsrcObj.ObjectMeta, test.obj.ObjectMeta) } var output Foo if err := json.Unmarshal(rsrcObj.Data, &output); err != nil { t.Errorf("[%s] unexpected error: %v", test.name, err) continue } if !reflect.DeepEqual(&output, test.obj) { t.Errorf("[%s]\nexpected\n%v\nsaw\n%v\n", test.name, test.obj, &output) } data, err = runtime.Encode(e, rsrcObj) if err != nil { t.Errorf("[%s] unexpected error: %v", test.name, err) } var output2 Foo if err := json.Unmarshal(data, &output2); err != nil { t.Errorf("[%s] unexpected error: %v", test.name, err) continue } if !reflect.DeepEqual(&output2, test.obj) { t.Errorf("[%s]\nexpected\n%v\nsaw\n%v\n", test.name, test.obj, &output2) } } }