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(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) } } } }
// This codec can decode any object that Kubernetes is aware of. var Codec = v1beta1.Codec // accessor is the shared static metadata accessor for the API. var accessor = meta.NewAccessor() // ResourceVersioner describes a default versioner that can handle all types // of versioning. // TODO: when versioning changes, make this part of each API definition. var ResourceVersioner = runtime.ResourceVersioner(accessor) // SelfLinker can set or get the SelfLink field of all API types. // TODO: when versioning changes, make this part of each API definition. // TODO(lavalamp): Combine SelfLinker & ResourceVersioner interfaces, force all uses // to go through the InterfacesFor method below. var SelfLinker = runtime.SelfLinker(accessor) // RESTMapper provides the default mapping between REST paths and the objects declared in api.Scheme and all known // Kubernetes versions. var RESTMapper meta.RESTMapper // InterfacesFor returns the default Codec and ResourceVersioner for a given version // string, or an error if the version is not known. func InterfacesFor(version string) (*meta.VersionInterfaces, error) { switch version { case "v1beta1": return &meta.VersionInterfaces{ Codec: v1beta1.Codec, ObjectConvertor: api.Scheme, MetadataAccessor: accessor, }, nil