// TODO: enableVersions should be centralized rather than spread in each API // group. // We can combine registered.RegisterVersions, registered.EnableVersions and // registered.RegisterGroup once we have moved enableVersions therecertificates func enableVersions(externalVersions []unversioned.GroupVersion) error { addVersionsToScheme(externalVersions...) preferredExternalVersion := externalVersions[0] groupMeta := apimachinery.GroupMeta{ GroupVersion: preferredExternalVersion, GroupVersions: externalVersions, RESTMapper: newRESTMapper(externalVersions), SelfLinker: runtime.SelfLinker(accessor), InterfacesFor: interfacesFor, } if err := registered.RegisterGroup(groupMeta); err != nil { return err } api.RegisterRESTMapper(groupMeta.RESTMapper) return nil }
func TestTypeMetaSelfLinker(t *testing.T) { table := map[string]struct { obj runtime.Object expect string try string succeed bool }{ "normal": { obj: &MyAPIObject{TypeMeta: InternalTypeMeta{SelfLink: "foobar"}}, expect: "foobar", try: "newbar", succeed: true, }, "fail": { obj: &MyIncorrectlyMarkedAsAPIObject{}, succeed: false, }, } linker := runtime.SelfLinker(meta.NewAccessor()) for name, item := range table { got, err := linker.SelfLink(item.obj) if e, a := item.succeed, err == nil; e != a { t.Errorf("%v: expected %v, got %v", name, e, a) } if e, a := item.expect, got; item.succeed && e != a { t.Errorf("%v: expected %v, got %v", name, e, a) } err = linker.SetSelfLink(item.obj, item.try) if e, a := item.succeed, err == nil; e != a { t.Errorf("%v: expected %v, got %v", name, e, a) } if item.succeed { got, err := linker.SelfLink(item.obj) if err != nil { t.Errorf("%v: expected no err, got %v", name, err) } if e, a := item.try, got; e != a { t.Errorf("%v: expected %v, got %v", name, e, a) } } } }