diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index 132f45caac..0772ef88ed 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -918,3 +918,54 @@ func testInstallThirdPartyResourceRemove(t *testing.T, version string) { } } } + +func TestThirdPartyDiscovery(t *testing.T) { + for _, version := range versionsToTest { + testThirdPartyDiscovery(t, version) + } +} + +func testThirdPartyDiscovery(t *testing.T, version string) { + _, etcdserver, server, assert := initThirdParty(t, version) + // TODO: Uncomment when fix #19254 + // defer server.Close() + defer etcdserver.Terminate(t) + + resp, err := http.Get(server.URL + "/apis/company.com/") + if !assert.NoError(err) { + return + } + assert.Equal(http.StatusOK, resp.StatusCode) + + group := unversioned.APIGroup{} + assert.NoError(decodeResponse(resp, &group)) + assert.Equal(group.APIVersion, "v1") + assert.Equal(group.Kind, "APIGroup") + assert.Equal(group.Name, "company.com") + assert.Equal(group.Versions, []unversioned.GroupVersionForDiscovery{ + { + GroupVersion: "company.com/" + version, + Version: version, + }, + }) + assert.Equal(group.PreferredVersion, unversioned.GroupVersionForDiscovery{}) + + resp, err = http.Get(server.URL + "/apis/company.com/" + version) + if !assert.NoError(err) { + return + } + assert.Equal(http.StatusOK, resp.StatusCode) + + resourceList := unversioned.APIResourceList{} + assert.NoError(decodeResponse(resp, &resourceList)) + assert.Equal(resourceList.APIVersion, "v1") + assert.Equal(resourceList.Kind, "APIResourceList") + assert.Equal(resourceList.GroupVersion, "company.com/"+version) + assert.Equal(resourceList.APIResources, []unversioned.APIResource{ + { + Name: "foos", + Namespaced: true, + Kind: "Foo", + }, + }) +} diff --git a/pkg/registry/thirdpartyresourcedata/codec.go b/pkg/registry/thirdpartyresourcedata/codec.go index 5ca3943d38..bbc99ee8f9 100644 --- a/pkg/registry/thirdpartyresourcedata/codec.go +++ b/pkg/registry/thirdpartyresourcedata/codec.go @@ -324,7 +324,7 @@ func (t *thirdPartyResourceDataCodec) EncodeToStream(obj runtime.Object, stream } fmt.Fprintf(stream, template, t.kind+"List", strings.Join(dataStrings, ",")) return nil - case *unversioned.Status: + case *unversioned.Status, *unversioned.APIResourceList: return t.delegate.EncodeToStream(obj, stream, overrides...) default: return fmt.Errorf("unexpected object to encode: %#v", obj)