diff --git a/cmd/libs/go2idl/client-gen/generators/generator-for-group.go b/cmd/libs/go2idl/client-gen/generators/generator-for-group.go index 22a4ed18c2f..75b3edc51ea 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator-for-group.go +++ b/cmd/libs/go2idl/client-gen/generators/generator-for-group.go @@ -48,13 +48,14 @@ func (g *genGroup) Namers(c *generator.Context) namer.NameSystems { } func (g *genGroup) Imports(c *generator.Context) (imports []string) { - return append(g.imports.ImportLines(), "fmt") + return g.imports.ImportLines() } func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { sw := generator.NewSnippetWriter(w, c, "$", "$") const pkgUnversioned = "k8s.io/kubernetes/pkg/client/unversioned" const pkgRegistered = "k8s.io/kubernetes/pkg/apimachinery/registered" + const pkgAPI = "k8s.io/kubernetes/pkg/api" apiPath := func(group string) string { if group == "legacy" { return `"/api"` @@ -81,6 +82,7 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer "latestGroup": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "Group"}), "GroupOrDie": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "GroupOrDie"}), "apiPath": apiPath(g.group), + "latestCodecs": c.Universe.Variable(types.Name{Package: pkgAPI, Name: "Codecs"}), } sw.Do(groupInterfaceTemplate, m) sw.Do(groupClientTemplate, m) @@ -181,12 +183,7 @@ func setConfigDefaults(config *$.Config|raw$) error { config.GroupVersion = ©GroupVersion //} - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("$.Group$ API version '%s' is not recognized (valid values: %s)", - config.GroupVersion, g.GroupVersions) - } - config.Codec = versionInterfaces.Codec + config.Codec = $.latestCodecs|raw$.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } diff --git a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go index b011ed8a668..a80e27299f3 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go +++ b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go @@ -17,7 +17,7 @@ limitations under the License. package unversioned import ( - "fmt" + api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" unversioned "k8s.io/kubernetes/pkg/client/unversioned" ) @@ -79,12 +79,7 @@ func setConfigDefaults(config *unversioned.Config) error { config.GroupVersion = ©GroupVersion //} - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("Testgroup API version '%s' is not recognized (valid values: %s)", - config.GroupVersion, g.GroupVersions) - } - config.Codec = versionInterfaces.Codec + config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } diff --git a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go index fbb577e89f3..af504efad1d 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go +++ b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go @@ -40,7 +40,7 @@ func init() { return } testapi.Groups[testgroup.SchemeGroupVersion.Group] = testapi.NewTestGroup( - unversioned.GroupVersion{Group: testgroup.SchemeGroupVersion.Group, Version: registered.GroupOrDie(testgroup.SchemeGroupVersion.Group).GroupVersion.Version}, + registered.GroupOrDie(testgroup.SchemeGroupVersion.Group).GroupVersion, testgroup.SchemeGroupVersion) testHelper = testapi.Groups[testgroup.SchemeGroupVersion.Group] } diff --git a/pkg/client/testing/core/fixture.go b/pkg/client/testing/core/fixture.go index 19824aa453a..6bac2b337b8 100644 --- a/pkg/client/testing/core/fixture.go +++ b/pkg/client/testing/core/fixture.go @@ -128,7 +128,7 @@ type objects struct { types map[string][]runtime.Object last map[string]int scheme ObjectScheme - decoder runtime.ObjectDecoder + decoder runtime.Decoder } var _ ObjectRetriever = &objects{} @@ -143,7 +143,7 @@ var _ ObjectRetriever = &objects{} // as a runtime.Object if Status == Success). If multiple PodLists are provided, they // will be returned in order by the Kind call, and the last PodList will be reused for // subsequent calls. -func NewObjects(scheme ObjectScheme, decoder runtime.ObjectDecoder) ObjectRetriever { +func NewObjects(scheme ObjectScheme, decoder runtime.Decoder) ObjectRetriever { return objects{ types: make(map[string][]runtime.Object), last: make(map[string]int), diff --git a/pkg/client/testing/fake/clientset.go b/pkg/client/testing/fake/clientset.go index 3ddacfea171..e14b0dc08bd 100644 --- a/pkg/client/testing/fake/clientset.go +++ b/pkg/client/testing/fake/clientset.go @@ -30,7 +30,7 @@ import ( // Clientset returns a clientset that will respond with the provided objects func NewSimpleClientset(objects ...runtime.Object) *Clientset { - o := core.NewObjects(api.Scheme, api.Scheme) + o := core.NewObjects(api.Scheme, api.Codecs.UniversalDecoder()) for _, obj := range objects { if err := o.Add(obj); err != nil { panic(err) diff --git a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go index bfbf8aefd30..e4db05c0f52 100644 --- a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go +++ b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go @@ -18,6 +18,7 @@ package unversioned import ( "fmt" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" unversioned "k8s.io/kubernetes/pkg/client/unversioned" ) @@ -109,12 +110,7 @@ func setConfigDefaults(config *unversioned.Config) error { config.GroupVersion = ©GroupVersion //} - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("Extensions API version '%s' is not recognized (valid values: %s)", - config.GroupVersion, g.GroupVersions) - } - config.Codec = versionInterfaces.Codec + config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } diff --git a/pkg/client/typed/generated/legacy/unversioned/legacy_client.go b/pkg/client/typed/generated/legacy/unversioned/legacy_client.go index afeedab1789..6c4cd5a93d1 100644 --- a/pkg/client/typed/generated/legacy/unversioned/legacy_client.go +++ b/pkg/client/typed/generated/legacy/unversioned/legacy_client.go @@ -18,6 +18,7 @@ package unversioned import ( "fmt" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" unversioned "k8s.io/kubernetes/pkg/client/unversioned" ) @@ -149,12 +150,7 @@ func setConfigDefaults(config *unversioned.Config) error { config.GroupVersion = ©GroupVersion //} - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("Legacy API version '%s' is not recognized (valid values: %s)", - config.GroupVersion, g.GroupVersions) - } - config.Codec = versionInterfaces.Codec + config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } diff --git a/pkg/client/unversioned/client_test.go b/pkg/client/unversioned/client_test.go index 64bf256aade..9ee779a0d2c 100644 --- a/pkg/client/unversioned/client_test.go +++ b/pkg/client/unversioned/client_test.go @@ -30,6 +30,8 @@ import ( "k8s.io/kubernetes/pkg/version" ) +const nameRequiredError = "resource name may not be empty" + func TestGetServerVersion(t *testing.T) { expect := version.Info{ Major: "foo", @@ -75,7 +77,7 @@ func TestGetServerGroupsWithV1Server(t *testing.T) { } output, err := json.Marshal(obj) if err != nil { - t.Errorf("unexpected encoding error: %v", err) + t.Fatalf("unexpected encoding error: %v", err) return } w.Header().Set("Content-Type", "application/json") @@ -88,7 +90,7 @@ func TestGetServerGroupsWithV1Server(t *testing.T) { // ServerGroups should not return an error even if server returns error at /api and /apis apiGroupList, err := client.Discovery().ServerGroups() if err != nil { - t.Errorf("unexpected error: %v", err) + t.Fatalf("unexpected error: %v", err) } groupVersions := ExtractGroupVersions(apiGroupList) if !reflect.DeepEqual(groupVersions, []string{"v1"}) { diff --git a/pkg/client/unversioned/discovery_client.go b/pkg/client/unversioned/discovery_client.go index dc0167e20e2..ccc1c1ce8bd 100644 --- a/pkg/client/unversioned/discovery_client.go +++ b/pkg/client/unversioned/discovery_client.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/version" ) @@ -209,8 +210,7 @@ func (d *DiscoveryClient) SwaggerSchema(version unversioned.GroupVersion) (*swag func setDiscoveryDefaults(config *Config) error { config.APIPath = "" config.GroupVersion = nil - // Discovery client deals with unversioned objects, so we use api.Codec. - config.Codec = api.Codec + config.Codec = runtime.NoopEncoder{api.Codecs.UniversalDecoder()} return nil } diff --git a/pkg/client/unversioned/extensions.go b/pkg/client/unversioned/extensions.go index e6be5415ee5..fe041bc987e 100644 --- a/pkg/client/unversioned/extensions.go +++ b/pkg/client/unversioned/extensions.go @@ -17,8 +17,7 @@ limitations under the License. package unversioned import ( - "fmt" - + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/extensions" ) @@ -121,12 +120,7 @@ func setExtensionsDefaults(config *Config) error { config.GroupVersion = ©GroupVersion //} - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("Extensions API group/version '%v' is not recognized (valid values: %v)", - config.GroupVersion, registered.GroupOrDie(extensions.GroupName).GroupVersions) - } - config.Codec = versionInterfaces.Codec + config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go index ea315c2008d..fad07b60a76 100644 --- a/pkg/client/unversioned/helper.go +++ b/pkg/client/unversioned/helper.go @@ -378,12 +378,8 @@ func SetKubernetesDefaults(config *Config) error { // TODO: Unconditionally set the config.Version, until we fix the config. copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion - versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) - if err != nil { - return fmt.Errorf("API version '%v' is not recognized (valid values: %v)", *config.GroupVersion, registered.GroupOrDie(api.GroupName).GroupVersions) - } if config.Codec == nil { - config.Codec = versionInterfaces.Codec + config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) } if config.QPS == 0.0 { config.QPS = 5.0 diff --git a/pkg/client/unversioned/helper_blackbox_test.go b/pkg/client/unversioned/helper_blackbox_test.go index a913886488f..de2df14fbb1 100644 --- a/pkg/client/unversioned/helper_blackbox_test.go +++ b/pkg/client/unversioned/helper_blackbox_test.go @@ -56,7 +56,7 @@ func TestNegotiateVersion(t *testing.T) { name: "server supports client default", version: &uapi.GroupVersion{Version: "version1"}, config: &unversioned.Config{}, - serverVersions: []string{"/version1", testapi.Default.GroupVersion().String()}, + serverVersions: []string{"version1", testapi.Default.GroupVersion().String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, }, @@ -64,28 +64,28 @@ func TestNegotiateVersion(t *testing.T) { name: "server falls back to client supported", version: testapi.Default.GroupVersion(), config: &unversioned.Config{}, - serverVersions: []string{"/version1"}, + serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, }, { name: "explicit version supported", config: &unversioned.Config{GroupVersion: testapi.Default.GroupVersion()}, - serverVersions: []string{"/version1", testapi.Default.GroupVersion().String()}, + serverVersions: []string{"/ersion1", testapi.Default.GroupVersion().String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: testapi.Default.GroupVersion(), }, { name: "explicit version not supported", config: &unversioned.Config{GroupVersion: testapi.Default.GroupVersion()}, - serverVersions: []string{"/version1"}, + serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectErr: func(err error) bool { return strings.Contains(err.Error(), `server does not support API version "v1"`) }, }, { name: "connection refused error", config: &unversioned.Config{GroupVersion: testapi.Default.GroupVersion()}, - serverVersions: []string{"/version1"}, + serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, sendErr: errors.New("connection refused"), expectErr: func(err error) bool { return strings.Contains(err.Error(), "connection refused") }, diff --git a/pkg/client/unversioned/helper_test.go b/pkg/client/unversioned/helper_test.go index 8921bd04358..8f9b6b3e7b2 100644 --- a/pkg/client/unversioned/helper_test.go +++ b/pkg/client/unversioned/helper_test.go @@ -222,7 +222,7 @@ func TestSetsCodec(t *testing.T) { if e, a := expected.Prefix, client.RESTClient.versionedAPIPath; e != a { t.Errorf("expected %#v, got %#v", e, a) } - if e, a := expected.Codec, client.RESTClient.Codec; e != a { + if e, a := expected.Codec, client.RESTClient.Codec; !reflect.DeepEqual(e, a) { t.Errorf("expected %#v, got %#v", e, a) } } diff --git a/pkg/client/unversioned/request.go b/pkg/client/unversioned/request.go index 371afe3817a..2bcb38fa581 100644 --- a/pkg/client/unversioned/request.go +++ b/pkg/client/unversioned/request.go @@ -452,7 +452,7 @@ func (r *Request) VersionedParams(obj runtime.Object, convertor runtime.ObjectCo continue } if k == unversioned.FieldSelectorQueryParam(r.groupVersion.String()) { - if value == "" { + if len(value) == 0 { // Don't set an empty selector for backward compatibility. // Since there is no way to get the difference between empty // and unspecified string, we don't set it to avoid having @@ -717,7 +717,7 @@ func (r *Request) Stream() (io.ReadCloser, error) { return nil, fmt.Errorf("%v while accessing %v", resp.Status, url) } - if runtimeObject, err := r.codec.Decode(bodyBytes); err == nil { + if runtimeObject, err := runtime.Decode(r.codec, bodyBytes); err == nil { statusError := errors.FromObject(runtimeObject) if _, ok := statusError.(errors.APIStatus); ok { @@ -846,8 +846,10 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu // Did the server give us a status response? isStatusResponse := false - var status unversioned.Status - if err := r.codec.DecodeInto(body, &status); err == nil && status.Status != "" { + var status *unversioned.Status + result, err := runtime.Decode(r.codec, body) + if out, ok := result.(*unversioned.Status); err == nil && ok && len(out.Status) > 0 { + status = out isStatusResponse = true } @@ -858,14 +860,14 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu if !isStatusResponse { return Result{err: r.transformUnstructuredResponseError(resp, req, body)} } - return Result{err: errors.FromObject(&status)} + return Result{err: errors.FromObject(status)} } // If the server gave us a status back, look at what it was. success := resp.StatusCode >= http.StatusOK && resp.StatusCode <= http.StatusPartialContent if isStatusResponse && (status.Status != unversioned.StatusSuccess && !success) { // "Failed" requests are clearly just an error and it makes sense to return them as such. - return Result{err: errors.FromObject(&status)} + return Result{err: errors.FromObject(status)} } return Result{ @@ -965,7 +967,8 @@ func (r Result) Get() (runtime.Object, error) { if r.err != nil { return nil, r.err } - return r.codec.Decode(r.body) + obj, err := runtime.Decode(r.codec, r.body) + return obj, err } // StatusCode returns the HTTP status code of the request. (Only valid if no @@ -975,12 +978,12 @@ func (r Result) StatusCode(statusCode *int) Result { return r } -// Into stores the result into obj, if possible. +// Into stores the result into obj, if possible. If obj is nil it is ignored. func (r Result) Into(obj runtime.Object) error { if r.err != nil { return r.err } - return r.codec.DecodeInto(r.body, obj) + return runtime.DecodeInto(r.codec, r.body, obj) } // WasCreated updates the provided bool pointer to whether the server returned diff --git a/pkg/client/unversioned/request_test.go b/pkg/client/unversioned/request_test.go index 77d71e8170a..52203af9ad5 100644 --- a/pkg/client/unversioned/request_test.go +++ b/pkg/client/unversioned/request_test.go @@ -698,7 +698,7 @@ func TestDoRequestNewWay(t *testing.T) { Port: 12345, TargetPort: intstr.FromInt(12345), }}}} - expectedBody, _ := testapi.Default.Codec().Encode(expectedObj) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), expectedObj) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(expectedBody), @@ -861,13 +861,13 @@ func BenchmarkCheckRetryClosesBody(b *testing.B) { func TestDoRequestNewWayReader(t *testing.T) { reqObj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - reqBodyExpected, _ := testapi.Default.Codec().Encode(reqObj) + reqBodyExpected, _ := runtime.Encode(testapi.Default.Codec(), reqObj) expectedObj := &api.Service{Spec: api.ServiceSpec{Ports: []api.ServicePort{{ Protocol: "TCP", Port: 12345, TargetPort: intstr.FromInt(12345), }}}} - expectedBody, _ := testapi.Default.Codec().Encode(expectedObj) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), expectedObj) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(expectedBody), @@ -902,13 +902,13 @@ func TestDoRequestNewWayReader(t *testing.T) { func TestDoRequestNewWayObj(t *testing.T) { reqObj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - reqBodyExpected, _ := testapi.Default.Codec().Encode(reqObj) + reqBodyExpected, _ := runtime.Encode(testapi.Default.Codec(), reqObj) expectedObj := &api.Service{Spec: api.ServiceSpec{Ports: []api.ServicePort{{ Protocol: "TCP", Port: 12345, TargetPort: intstr.FromInt(12345), }}}} - expectedBody, _ := testapi.Default.Codec().Encode(expectedObj) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), expectedObj) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(expectedBody), @@ -943,7 +943,7 @@ func TestDoRequestNewWayObj(t *testing.T) { func TestDoRequestNewWayFile(t *testing.T) { reqObj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - reqBodyExpected, err := testapi.Default.Codec().Encode(reqObj) + reqBodyExpected, err := runtime.Encode(testapi.Default.Codec(), reqObj) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -964,7 +964,7 @@ func TestDoRequestNewWayFile(t *testing.T) { Port: 12345, TargetPort: intstr.FromInt(12345), }}}} - expectedBody, _ := testapi.Default.Codec().Encode(expectedObj) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), expectedObj) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(expectedBody), @@ -1000,7 +1000,7 @@ func TestDoRequestNewWayFile(t *testing.T) { func TestWasCreated(t *testing.T) { reqObj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - reqBodyExpected, err := testapi.Default.Codec().Encode(reqObj) + reqBodyExpected, err := runtime.Encode(testapi.Default.Codec(), reqObj) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -1010,7 +1010,7 @@ func TestWasCreated(t *testing.T) { Port: 12345, TargetPort: intstr.FromInt(12345), }}}} - expectedBody, _ := testapi.Default.Codec().Encode(expectedObj) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), expectedObj) fakeHandler := utiltesting.FakeHandler{ StatusCode: 201, ResponseBody: string(expectedBody), @@ -1138,7 +1138,7 @@ func TestBody(t *testing.T) { const data = "test payload" obj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - bodyExpected, _ := testapi.Default.Codec().Encode(obj) + bodyExpected, _ := runtime.Encode(testapi.Default.Codec(), obj) f, err := ioutil.TempFile("", "test_body") if err != nil { diff --git a/pkg/client/unversioned/restclient_test.go b/pkg/client/unversioned/restclient_test.go index 69884d86a8a..b59da0fe7ac 100644 --- a/pkg/client/unversioned/restclient_test.go +++ b/pkg/client/unversioned/restclient_test.go @@ -28,13 +28,14 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util" utiltesting "k8s.io/kubernetes/pkg/util/testing" ) func TestDoRequestSuccess(t *testing.T) { status := &unversioned.Status{Status: unversioned.StatusSuccess} - expectedBody, _ := testapi.Default.Codec().Encode(status) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), status) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(expectedBody), @@ -60,7 +61,7 @@ func TestDoRequestSuccess(t *testing.T) { if fakeHandler.RequestReceived.Header["Authorization"] == nil { t.Errorf("Request is missing authorization header: %#v", fakeHandler.RequestReceived) } - statusOut, err := testapi.Default.Codec().Decode(body) + statusOut, err := runtime.Decode(testapi.Default.Codec(), body) if err != nil { t.Errorf("Unexpected error %#v", err) } @@ -78,7 +79,7 @@ func TestDoRequestFailed(t *testing.T) { Message: " \"\" not found", Details: &unversioned.StatusDetails{}, } - expectedBody, _ := testapi.Default.Codec().Encode(status) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), status) fakeHandler := utiltesting.FakeHandler{ StatusCode: 404, ResponseBody: string(expectedBody), @@ -111,7 +112,7 @@ func TestDoRequestFailed(t *testing.T) { func TestDoRequestCreated(t *testing.T) { status := &unversioned.Status{Status: unversioned.StatusSuccess} - expectedBody, _ := testapi.Default.Codec().Encode(status) + expectedBody, _ := runtime.Encode(testapi.Default.Codec(), status) fakeHandler := utiltesting.FakeHandler{ StatusCode: 201, ResponseBody: string(expectedBody), @@ -138,7 +139,7 @@ func TestDoRequestCreated(t *testing.T) { if !created { t.Errorf("Expected object to be created") } - statusOut, err := testapi.Default.Codec().Decode(body) + statusOut, err := runtime.Decode(testapi.Default.Codec(), body) if err != nil { t.Errorf("Unexpected error %#v", err) } diff --git a/pkg/client/unversioned/testclient/fixture.go b/pkg/client/unversioned/testclient/fixture.go index fad088e99de..64388fb6381 100644 --- a/pkg/client/unversioned/testclient/fixture.go +++ b/pkg/client/unversioned/testclient/fixture.go @@ -128,7 +128,7 @@ type objects struct { types map[string][]runtime.Object last map[string]int scheme ObjectScheme - decoder runtime.ObjectDecoder + decoder runtime.Decoder } var _ ObjectRetriever = &objects{} @@ -143,7 +143,7 @@ var _ ObjectRetriever = &objects{} // as a runtime.Object if Status == Success). If multiple PodLists are provided, they // will be returned in order by the Kind call, and the last PodList will be reused for // subsequent calls. -func NewObjects(scheme ObjectScheme, decoder runtime.ObjectDecoder) ObjectRetriever { +func NewObjects(scheme ObjectScheme, decoder runtime.Decoder) ObjectRetriever { return objects{ types: make(map[string][]runtime.Object), last: make(map[string]int), @@ -153,10 +153,7 @@ func NewObjects(scheme ObjectScheme, decoder runtime.ObjectDecoder) ObjectRetrie } func (o objects) Kind(kind unversioned.GroupVersionKind, name string) (runtime.Object, error) { - // TODO our test clients deal in internal versions. We need to plumb that knowledge down here - // we might do this via an extra function to the scheme to allow getting internal group versions - // I'm punting for now - kind.Version = "" + kind.Version = runtime.APIVersionInternal empty, _ := o.scheme.New(kind) nilValue := reflect.Zero(reflect.TypeOf(empty)).Interface().(runtime.Object) diff --git a/pkg/client/unversioned/testclient/simple/simple_testclient.go b/pkg/client/unversioned/testclient/simple/simple_testclient.go index ec1bc0bc78c..60a74963d1a 100644 --- a/pkg/client/unversioned/testclient/simple/simple_testclient.go +++ b/pkg/client/unversioned/testclient/simple/simple_testclient.go @@ -213,7 +213,7 @@ func body(t *testing.T, obj runtime.Object, raw *string) *string { if !found { t.Errorf("Group %s is not registered in testapi", fqKind.GroupVersion().Group) } - bs, err = g.Codec().Encode(obj) + bs, err = runtime.Encode(g.Codec(), obj) if err != nil { t.Errorf("unexpected encoding error: %v", err) } diff --git a/pkg/client/unversioned/testclient/testclient.go b/pkg/client/unversioned/testclient/testclient.go index 8d8d1e92d71..34c2dfb1cb2 100644 --- a/pkg/client/unversioned/testclient/testclient.go +++ b/pkg/client/unversioned/testclient/testclient.go @@ -33,7 +33,7 @@ import ( // NewSimpleFake returns a client that will respond with the provided objects func NewSimpleFake(objects ...runtime.Object) *Fake { - o := NewObjects(api.Scheme, api.Scheme) + o := NewObjects(api.Scheme, api.Codecs.UniversalDecoder()) for _, obj := range objects { if err := o.Add(obj); err != nil { panic(err) diff --git a/pkg/client/unversioned/testclient/testclient_test.go b/pkg/client/unversioned/testclient/testclient_test.go index 6c7075e2846..b31bdc213ee 100644 --- a/pkg/client/unversioned/testclient/testclient_test.go +++ b/pkg/client/unversioned/testclient/testclient_test.go @@ -26,8 +26,8 @@ import ( ) func TestNewClient(t *testing.T) { - o := NewObjects(api.Scheme, api.Scheme) - if err := AddObjectsFromPath("../../../../examples/guestbook/frontend-service.yaml", o, api.Scheme); err != nil { + o := NewObjects(api.Scheme, api.Codecs.UniversalDecoder()) + if err := AddObjectsFromPath("../../../../examples/guestbook/frontend-service.yaml", o, api.Codecs.UniversalDecoder()); err != nil { t.Fatal(err) } client := &Fake{} @@ -52,7 +52,7 @@ func TestNewClient(t *testing.T) { } func TestErrors(t *testing.T) { - o := NewObjects(api.Scheme, api.Scheme) + o := NewObjects(api.Scheme, api.Codecs.UniversalDecoder()) o.Add(&api.List{ Items: []runtime.Object{ // This first call to List will return this error