Change ConvertToVersion to use GroupVersion

Long delayed refactor, avoids a few more allocations.
This commit is contained in:
Clayton Coleman 2016-04-30 20:43:30 -04:00
parent a84e62d9e6
commit 51b624103f
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
20 changed files with 47 additions and 51 deletions

View File

@ -50,11 +50,11 @@ func BenchmarkPodConversion(b *testing.B) {
var result *api.Pod var result *api.Pod
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
pod := &items[i%width] pod := &items[i%width]
versionedObj, err := scheme.ConvertToVersion(pod, testapi.Default.GroupVersion().String()) versionedObj, err := scheme.ConvertToVersion(pod, *testapi.Default.GroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String()) obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
@ -76,11 +76,11 @@ func BenchmarkNodeConversion(b *testing.B) {
scheme := api.Scheme scheme := api.Scheme
var result *api.Node var result *api.Node
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
versionedObj, err := scheme.ConvertToVersion(&node, testapi.Default.GroupVersion().String()) versionedObj, err := scheme.ConvertToVersion(&node, *testapi.Default.GroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String()) obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
@ -104,11 +104,11 @@ func BenchmarkReplicationControllerConversion(b *testing.B) {
scheme := api.Scheme scheme := api.Scheme
var result *api.ReplicationController var result *api.ReplicationController
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
versionedObj, err := scheme.ConvertToVersion(&replicationController, testapi.Default.GroupVersion().String()) versionedObj, err := scheme.ConvertToVersion(&replicationController, *testapi.Default.GroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String()) obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }

View File

@ -32,7 +32,7 @@ func (fakeConvertor) Convert(in, out interface{}) error {
return nil return nil
} }
func (fakeConvertor) ConvertToVersion(in runtime.Object, _ string) (runtime.Object, error) { func (fakeConvertor) ConvertToVersion(in runtime.Object, _ unversioned.GroupVersion) (runtime.Object, error) {
return in, nil return in, nil
} }

View File

@ -281,7 +281,7 @@ func TestObjectWatchFraming(t *testing.T) {
secret.Data["binary"] = []byte{0x00, 0x10, 0x30, 0x55, 0xff, 0x00} secret.Data["binary"] = []byte{0x00, 0x10, 0x30, 0x55, 0xff, 0x00}
secret.Data["utf8"] = []byte("a string with \u0345 characters") secret.Data["utf8"] = []byte("a string with \u0345 characters")
secret.Data["long"] = bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x00}, 1000) secret.Data["long"] = bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x00}, 1000)
converted, _ := api.Scheme.ConvertToVersion(secret, "v1") converted, _ := api.Scheme.ConvertToVersion(secret, v1.SchemeGroupVersion)
v1secret := converted.(*v1.Secret) v1secret := converted.(*v1.Secret)
for _, streamingMediaType := range api.Codecs.SupportedStreamingMediaTypes() { for _, streamingMediaType := range api.Codecs.SupportedStreamingMediaTypes() {
s, _ := api.Codecs.StreamingSerializerForMediaType(streamingMediaType, nil) s, _ := api.Codecs.StreamingSerializerForMediaType(streamingMediaType, nil)
@ -358,7 +358,7 @@ func benchmarkItems() []v1.Pod {
for i := range items { for i := range items {
var pod api.Pod var pod api.Pod
apiObjectFuzzer.Fuzz(&pod) apiObjectFuzzer.Fuzz(&pod)
out, err := api.Scheme.ConvertToVersion(&pod, "v1") out, err := api.Scheme.ConvertToVersion(&pod, v1.SchemeGroupVersion)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -459,7 +459,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, typer runtime.ObjectTyper
ctx := scope.ContextFunc(req) ctx := scope.ContextFunc(req)
ctx = api.WithNamespace(ctx, namespace) ctx = api.WithNamespace(ctx, namespace)
versionedObj, err := converter.ConvertToVersion(r.New(), scope.Kind.GroupVersion().String()) versionedObj, err := converter.ConvertToVersion(r.New(), scope.Kind.GroupVersion())
if err != nil { if err != nil {
scope.err(err, res.ResponseWriter, req.Request) scope.err(err, res.ResponseWriter, req.Request)
return return

View File

@ -174,7 +174,7 @@ func (tc *patchTestCase) Run(t *testing.T) {
namer := &testNamer{namespace, name} namer := &testNamer{namespace, name}
versionedObj, err := api.Scheme.ConvertToVersion(&api.Pod{}, "v1") versionedObj, err := api.Scheme.ConvertToVersion(&api.Pod{}, unversioned.GroupVersion{Version: "v1"})
if err != nil { if err != nil {
t.Errorf("%s: unexpected error: %v", tc.name, err) t.Errorf("%s: unexpected error: %v", tc.name, err)
return return

View File

@ -221,7 +221,7 @@ func (o AnnotateOptions) RunAnnotate() error {
return err return err
} }
obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion().String()) obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
if err != nil { if err != nil {
return err return err
} }

View File

@ -167,7 +167,7 @@ func (o *ConvertOptions) RunConvert() error {
} }
infos := []*resource.Info{info} infos := []*resource.Info{info}
objects, err := resource.AsVersionedObject(infos, false, o.outputVersion.String(), o.encoder) objects, err := resource.AsVersionedObject(infos, false, o.outputVersion, o.encoder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -182,7 +182,7 @@ func RunEdit(f *cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
if err != nil { if err != nil {
return err return err
} }
objs, err := resource.AsVersionedObjects(infos, defaultVersion.String(), encoder) objs, err := resource.AsVersionedObjects(infos, defaultVersion, encoder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -246,7 +246,7 @@ func RunGet(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string
if err != nil { if err != nil {
return err return err
} }
obj, err := resource.AsVersionedObject(infos, !singular, version.String(), f.JSONEncoder()) obj, err := resource.AsVersionedObject(infos, !singular, version, f.JSONEncoder())
if err != nil { if err != nil {
return err return err
} }
@ -273,7 +273,7 @@ func RunGet(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string
} }
for ix := range infos { for ix := range infos {
objs[ix], err = infos[ix].Mapping.ConvertToVersion(infos[ix].Object, version.String()) objs[ix], err = infos[ix].Mapping.ConvertToVersion(infos[ix].Object, version)
if err != nil { if err != nil {
allErrs = append(allErrs, err) allErrs = append(allErrs, err)
continue continue

View File

@ -246,7 +246,7 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri
} }
outputObj = info.Object outputObj = info.Object
} else { } else {
obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion().String()) obj, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
if err != nil { if err != nil {
return err return err
} }

View File

@ -211,7 +211,7 @@ func (r *Result) Watch(resourceVersion string) (watch.Interface, error) {
// the objects as children, or if only a single Object is present, as that object. The provided // the objects as children, or if only a single Object is present, as that object. The provided
// version will be preferred as the conversion target, but the Object's mapping version will be // version will be preferred as the conversion target, but the Object's mapping version will be
// used if that version is not present. // used if that version is not present.
func AsVersionedObject(infos []*Info, forceList bool, version string, encoder runtime.Encoder) (runtime.Object, error) { func AsVersionedObject(infos []*Info, forceList bool, version unversioned.GroupVersion, encoder runtime.Encoder) (runtime.Object, error) {
objects, err := AsVersionedObjects(infos, version, encoder) objects, err := AsVersionedObjects(infos, version, encoder)
if err != nil { if err != nil {
return nil, err return nil, err
@ -222,7 +222,7 @@ func AsVersionedObject(infos []*Info, forceList bool, version string, encoder ru
object = objects[0] object = objects[0]
} else { } else {
object = &api.List{Items: objects} object = &api.List{Items: objects}
converted, err := tryConvert(api.Scheme, object, version, registered.GroupOrDie(api.GroupName).GroupVersion.Version) converted, err := tryConvert(api.Scheme, object, version, registered.GroupOrDie(api.GroupName).GroupVersion)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -234,7 +234,7 @@ func AsVersionedObject(infos []*Info, forceList bool, version string, encoder ru
// AsVersionedObjects converts a list of infos into versioned objects. The provided // AsVersionedObjects converts a list of infos into versioned objects. The provided
// version will be preferred as the conversion target, but the Object's mapping version will be // version will be preferred as the conversion target, but the Object's mapping version will be
// used if that version is not present. // used if that version is not present.
func AsVersionedObjects(infos []*Info, version string, encoder runtime.Encoder) ([]runtime.Object, error) { func AsVersionedObjects(infos []*Info, version unversioned.GroupVersion, encoder runtime.Encoder) ([]runtime.Object, error) {
objects := []runtime.Object{} objects := []runtime.Object{}
for _, info := range infos { for _, info := range infos {
if info.Object == nil { if info.Object == nil {
@ -250,7 +250,7 @@ func AsVersionedObjects(infos []*Info, version string, encoder runtime.Encoder)
// objects that are not part of api.Scheme must be converted to JSON // objects that are not part of api.Scheme must be converted to JSON
// TODO: convert to map[string]interface{}, attach to runtime.Unknown? // TODO: convert to map[string]interface{}, attach to runtime.Unknown?
if len(version) > 0 { if !version.IsEmpty() {
if _, err := api.Scheme.ObjectKind(info.Object); runtime.IsNotRegisteredError(err) { if _, err := api.Scheme.ObjectKind(info.Object); runtime.IsNotRegisteredError(err) {
// TODO: ideally this would encode to version, but we don't expose multiple codecs here. // TODO: ideally this would encode to version, but we don't expose multiple codecs here.
data, err := runtime.Encode(encoder, info.Object) data, err := runtime.Encode(encoder, info.Object)
@ -263,7 +263,7 @@ func AsVersionedObjects(infos []*Info, version string, encoder runtime.Encoder)
} }
} }
converted, err := tryConvert(info.Mapping.ObjectConvertor, info.Object, version, info.Mapping.GroupVersionKind.GroupVersion().String()) converted, err := tryConvert(info.Mapping.ObjectConvertor, info.Object, version, info.Mapping.GroupVersionKind.GroupVersion())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -274,10 +274,10 @@ func AsVersionedObjects(infos []*Info, version string, encoder runtime.Encoder)
// tryConvert attempts to convert the given object to the provided versions in order. This function assumes // tryConvert attempts to convert the given object to the provided versions in order. This function assumes
// the object is in internal version. // the object is in internal version.
func tryConvert(convertor runtime.ObjectConvertor, object runtime.Object, versions ...string) (runtime.Object, error) { func tryConvert(convertor runtime.ObjectConvertor, object runtime.Object, versions ...unversioned.GroupVersion) (runtime.Object, error) {
var last error var last error
for _, version := range versions { for _, version := range versions {
if len(version) == 0 { if version.IsEmpty() {
return object, nil return object, nil
} }
obj, err := convertor.ConvertToVersion(object, version) obj, err := convertor.ConvertToVersion(object, version)

View File

@ -182,7 +182,7 @@ func (p *VersionedPrinter) PrintObj(obj runtime.Object, w io.Writer) error {
if version.IsEmpty() { if version.IsEmpty() {
continue continue
} }
converted, err := p.convertor.ConvertToVersion(obj, version.String()) converted, err := p.convertor.ConvertToVersion(obj, version)
if runtime.IsNotRegisteredError(err) { if runtime.IsNotRegisteredError(err) {
continue continue
} }

View File

@ -105,7 +105,7 @@ func TestPrinter(t *testing.T) {
}, },
} }
emptyListTest := &api.PodList{} emptyListTest := &api.PodList{}
testapi, err := api.Scheme.ConvertToVersion(podTest, testapi.Default.GroupVersion().String()) testapi, err := api.Scheme.ConvertToVersion(podTest, *testapi.Default.GroupVersion())
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@ -40,7 +40,7 @@ type thirdPartyObjectConverter struct {
converter runtime.ObjectConvertor converter runtime.ObjectConvertor
} }
func (t *thirdPartyObjectConverter) ConvertToVersion(in runtime.Object, outVersion string) (out runtime.Object, err error) { func (t *thirdPartyObjectConverter) ConvertToVersion(in runtime.Object, outVersion unversioned.GroupVersion) (out runtime.Object, err error) {
switch in.(type) { switch in.(type) {
// This seems weird, but in this case the ThirdPartyResourceData is really just a wrapper on the raw 3rd party data. // This seems weird, but in this case the ThirdPartyResourceData is really just a wrapper on the raw 3rd party data.
// The actual thing printed/sent to server is the actual raw third party resource data, which only has one version. // The actual thing printed/sent to server is the actual raw third party resource data, which only has one version.

View File

@ -162,7 +162,7 @@ func (c *parameterCodec) EncodeParameters(obj Object, to unversioned.GroupVersio
return nil, err return nil, err
} }
if to != gvk.GroupVersion() { if to != gvk.GroupVersion() {
out, err := c.convertor.ConvertToVersion(obj, to.String()) out, err := c.convertor.ConvertToVersion(obj, to)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -161,7 +161,7 @@ type StorageSerializer interface {
// Non-codec interfaces // Non-codec interfaces
type ObjectVersioner interface { type ObjectVersioner interface {
ConvertToVersion(in Object, outVersion string) (out Object, err error) ConvertToVersion(in Object, outVersion unversioned.GroupVersion) (out Object, err error)
} }
// ObjectConvertor converts an object to a different version. // ObjectConvertor converts an object to a different version.
@ -171,7 +171,7 @@ type ObjectConvertor interface {
Convert(in, out interface{}) error Convert(in, out interface{}) error
// ConvertToVersion takes the provided object and converts it the provided version. This // ConvertToVersion takes the provided object and converts it the provided version. This
// method does not guarantee that the in object is not mutated. // method does not guarantee that the in object is not mutated.
ConvertToVersion(in Object, outVersion string) (out Object, err error) ConvertToVersion(in Object, outVersion unversioned.GroupVersion) (out Object, err error)
ConvertFieldLabel(version, kind, label, value string) (string, string, error) ConvertFieldLabel(version, kind, label, value string) (string, string, error)
} }

View File

@ -473,16 +473,12 @@ func (s *Scheme) ConvertFieldLabel(version, kind, label, value string) (string,
// contain the inKind (or a mapping by name defined with AddKnownTypeWithName). Will also // contain the inKind (or a mapping by name defined with AddKnownTypeWithName). Will also
// return an error if the conversion does not result in a valid Object being // return an error if the conversion does not result in a valid Object being
// returned. The serializer handles loading/serializing nested objects. // returned. The serializer handles loading/serializing nested objects.
func (s *Scheme) ConvertToVersion(in Object, outVersion string) (Object, error) { func (s *Scheme) ConvertToVersion(in Object, outVersion unversioned.GroupVersion) (Object, error) {
gv, err := unversioned.ParseGroupVersion(outVersion)
if err != nil {
return nil, err
}
switch in.(type) { switch in.(type) {
case *Unknown, *Unstructured, *UnstructuredList: case *Unknown, *Unstructured, *UnstructuredList:
old := in.GetObjectKind().GroupVersionKind() old := in.GetObjectKind().GroupVersionKind()
defer in.GetObjectKind().SetGroupVersionKind(old) defer in.GetObjectKind().SetGroupVersionKind(old)
setTargetVersion(in, s, gv) setTargetVersion(in, s, outVersion)
return in, nil return in, nil
} }
t := reflect.TypeOf(in) t := reflect.TypeOf(in)
@ -506,7 +502,7 @@ func (s *Scheme) ConvertToVersion(in Object, outVersion string) (Object, error)
kind = kinds[0] kind = kinds[0]
} }
outKind := gv.WithKind(kind.Kind) outKind := outVersion.WithKind(kind.Kind)
inKind, err := s.ObjectKind(in) inKind, err := s.ObjectKind(in)
if err != nil { if err != nil {
@ -518,12 +514,12 @@ func (s *Scheme) ConvertToVersion(in Object, outVersion string) (Object, error)
return nil, err return nil, err
} }
flags, meta := s.generateConvertMeta(inKind.GroupVersion(), gv, in) flags, meta := s.generateConvertMeta(inKind.GroupVersion(), outVersion, in)
if err := s.converter.Convert(in, out, flags, meta); err != nil { if err := s.converter.Convert(in, out, flags, meta); err != nil {
return nil, err return nil, err
} }
setTargetVersion(out, s, gv) setTargetVersion(out, s, outVersion)
return out, nil return out, nil
} }

View File

@ -530,7 +530,7 @@ func TestKnownTypes(t *testing.T) {
func TestConvertToVersion(t *testing.T) { func TestConvertToVersion(t *testing.T) {
s := GetTestScheme() s := GetTestScheme()
tt := &TestType1{A: "I'm not a pointer object"} tt := &TestType1{A: "I'm not a pointer object"}
other, err := s.ConvertToVersion(tt, "v1") other, err := s.ConvertToVersion(tt, unversioned.GroupVersion{Version: "v1"})
if err != nil { if err != nil {
t.Fatalf("Failure: %v", err) t.Fatalf("Failure: %v", err)
} }
@ -578,12 +578,12 @@ func TestMetaValues(t *testing.T) {
s.Log(t) s.Log(t)
out, err := s.ConvertToVersion(simple, externalGV.String()) out, err := s.ConvertToVersion(simple, externalGV)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }
internal, err := s.ConvertToVersion(out, internalGV.String()) internal, err := s.ConvertToVersion(out, internalGV)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@ -204,7 +204,7 @@ func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, in
} }
// Convert if needed. // Convert if needed.
out, err := c.convertor.ConvertToVersion(obj, targetGV.String()) out, err := c.convertor.ConvertToVersion(obj, targetGV)
if err != nil { if err != nil {
return nil, gvk, err return nil, gvk, err
} }
@ -264,7 +264,7 @@ func (c *codec) EncodeToStream(obj runtime.Object, w io.Writer, overrides ...unv
// Perform a conversion if necessary // Perform a conversion if necessary
if gvk.GroupVersion() != targetGV { if gvk.GroupVersion() != targetGV {
out, err := c.convertor.ConvertToVersion(obj, targetGV.String()) out, err := c.convertor.ConvertToVersion(obj, targetGV)
if err != nil { if err != nil {
if ok { if ok {
return err return err

View File

@ -65,12 +65,12 @@ func TestDecode(t *testing.T) {
}{ }{
{ {
serializer: &mockSerializer{actual: gvk1}, serializer: &mockSerializer{actual: gvk1},
convertor: &checkConvertor{groupVersion: "other/__internal"}, convertor: &checkConvertor{groupVersion: unversioned.GroupVersion{Group: "other", Version: "__internal"}},
expectedGVK: gvk1, expectedGVK: gvk1,
}, },
{ {
serializer: &mockSerializer{actual: gvk1, obj: decodable1}, serializer: &mockSerializer{actual: gvk1, obj: decodable1},
convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: "other/__internal"}, convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: unversioned.GroupVersion{Group: "other", Version: "__internal"}},
expectedGVK: gvk1, expectedGVK: gvk1,
sameObject: decodable2, sameObject: decodable2,
}, },
@ -78,7 +78,7 @@ func TestDecode(t *testing.T) {
{ {
serializer: &mockSerializer{actual: gvk1, obj: decodable1}, serializer: &mockSerializer{actual: gvk1, obj: decodable1},
defaultGVK: &unversioned.GroupVersionKind{Group: "force"}, defaultGVK: &unversioned.GroupVersionKind{Group: "force"},
convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: "force/__internal"}, convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: unversioned.GroupVersion{Group: "force", Version: "__internal"}},
expectedGVK: gvk1, expectedGVK: gvk1,
sameObject: decodable2, sameObject: decodable2,
}, },
@ -118,7 +118,7 @@ func TestDecode(t *testing.T) {
serializer: &mockSerializer{actual: gvk1, obj: decodable1}, serializer: &mockSerializer{actual: gvk1, obj: decodable1},
copier: &checkCopy{in: decodable1, obj: decodable1}, copier: &checkCopy{in: decodable1, obj: decodable1},
convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: "other/__internal"}, convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: unversioned.GroupVersion{Group: "other", Version: "__internal"}},
expectedGVK: gvk1, expectedGVK: gvk1,
expectedObject: &runtime.VersionedObjects{Objects: []runtime.Object{decodable1, decodable2}}, expectedObject: &runtime.VersionedObjects{Objects: []runtime.Object{decodable1, decodable2}},
}, },
@ -127,7 +127,7 @@ func TestDecode(t *testing.T) {
serializer: &mockSerializer{actual: gvk1, obj: decodable1}, serializer: &mockSerializer{actual: gvk1, obj: decodable1},
copier: &checkCopy{in: decodable1, obj: nil, err: fmt.Errorf("error on copy")}, copier: &checkCopy{in: decodable1, obj: nil, err: fmt.Errorf("error on copy")},
convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: "other/__internal"}, convertor: &checkConvertor{in: decodable1, obj: decodable2, groupVersion: unversioned.GroupVersion{Group: "other", Version: "__internal"}},
expectedGVK: gvk1, expectedGVK: gvk1,
expectedObject: &runtime.VersionedObjects{Objects: []runtime.Object{decodable1, decodable2}}, expectedObject: &runtime.VersionedObjects{Objects: []runtime.Object{decodable1, decodable2}},
}, },
@ -228,7 +228,7 @@ func (c *checkCopy) Copy(obj runtime.Object) (runtime.Object, error) {
type checkConvertor struct { type checkConvertor struct {
err error err error
in, obj runtime.Object in, obj runtime.Object
groupVersion string groupVersion unversioned.GroupVersion
directConvert bool directConvert bool
} }
@ -244,7 +244,7 @@ func (c *checkConvertor) Convert(in, out interface{}) error {
} }
return c.err return c.err
} }
func (c *checkConvertor) ConvertToVersion(in runtime.Object, outVersion string) (out runtime.Object, err error) { func (c *checkConvertor) ConvertToVersion(in runtime.Object, outVersion unversioned.GroupVersion) (out runtime.Object, err error) {
if c.directConvert { if c.directConvert {
return nil, fmt.Errorf("unexpected call to ConvertToVersion") return nil, fmt.Errorf("unexpected call to ConvertToVersion")
} }