Merge pull request #20674 from caesarxuchao/decode-status

To be compatible with release 1.1, decode Status even if the APIVersion is not set in the response
This commit is contained in:
Daniel Smith 2016-02-04 23:27:47 -08:00
commit 2e7993e057
2 changed files with 12 additions and 5 deletions

View File

@ -841,10 +841,13 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu
// Did the server give us a status response? // Did the server give us a status response?
isStatusResponse := false isStatusResponse := false
var status *unversioned.Status // Because release-1.1 server returns Status with empty APIVersion at paths
result, err := runtime.Decode(r.content.Codec, body) // to the Extensions resources, we need to use DecodeInto here to provide
if out, ok := result.(*unversioned.Status); err == nil && ok && len(out.Status) > 0 { // default groupVersion, otherwise a status response won't be correctly
status = out // decoded.
status := &unversioned.Status{}
err := runtime.DecodeInto(r.content.Codec, body, status)
if err == nil && len(status.Status) > 0 {
isStatusResponse = true isStatusResponse = true
} }

View File

@ -109,7 +109,11 @@ func TestDoRequestFailed(t *testing.T) {
t.Errorf("unexpected error type %v", err) t.Errorf("unexpected error type %v", err)
} }
actual := ss.Status() actual := ss.Status()
if !reflect.DeepEqual(status, &actual) { expected := *status
// The decoder will apply the default Version and Kind to the Status.
expected.APIVersion = "v1"
expected.Kind = "Status"
if !reflect.DeepEqual(&expected, &actual) {
t.Errorf("Unexpected mis-match: %s", util.ObjectDiff(status, &actual)) t.Errorf("Unexpected mis-match: %s", util.ObjectDiff(status, &actual))
} }
} }