From e2bffac2851b0d8b18e3e18750a27c5119c7fcc4 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Wed, 3 Feb 2016 22:39:18 -0800 Subject: [PATCH] Moving installing swagger spec to generic api server --- examples/apiserver/apiserver.go | 9 +++--- examples/apiserver/apiserver_test.go | 36 ++++++++++++++++++++++++ pkg/genericapiserver/genericapiserver.go | 5 +++- pkg/master/master.go | 5 ---- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/examples/apiserver/apiserver.go b/examples/apiserver/apiserver.go index e515f349b55..f83c4c9f1cd 100644 --- a/examples/apiserver/apiserver.go +++ b/examples/apiserver/apiserver.go @@ -48,10 +48,11 @@ func newStorageDestinations(groupName string, groupMeta *apimachinery.GroupMeta) func Run() error { config := genericapiserver.Config{ - EnableIndex: true, - APIPrefix: "/api", - APIGroupPrefix: "/apis", - Serializer: api.Codecs, + EnableIndex: true, + EnableSwaggerSupport: true, + APIPrefix: "/api", + APIGroupPrefix: "/apis", + Serializer: api.Codecs, } s, err := genericapiserver.New(&config) if err != nil { diff --git a/examples/apiserver/apiserver_test.go b/examples/apiserver/apiserver_test.go index 6f74dedd397..4d9971dd7be 100644 --- a/examples/apiserver/apiserver_test.go +++ b/examples/apiserver/apiserver_test.go @@ -34,6 +34,11 @@ var serverIP = "http://localhost:8080" var groupVersion = v1.SchemeGroupVersion +var groupVersionForDiscovery = unversioned.GroupVersionForDiscovery{ + GroupVersion: groupVersion.String(), + Version: groupVersion.Version, +} + func TestRun(t *testing.T) { go func() { if err := Run(); err != nil { @@ -43,6 +48,8 @@ func TestRun(t *testing.T) { if err := waitForApiserverUp(); err != nil { t.Fatalf("%v", err) } + testSwaggerSpec(t) + testAPIGroupList(t) testAPIGroup(t) testAPIResourceList(t) } @@ -63,6 +70,9 @@ func readResponse(serverURL string) ([]byte, error) { return nil, fmt.Errorf("Error in fetching %s: %v", serverURL, err) } defer response.Body.Close() + if response.StatusCode != http.StatusOK { + return nil, fmt.Errorf("unexpected status: %d for URL: %s, expected status: %d", response.StatusCode, serverURL, http.StatusOK) + } contents, err := ioutil.ReadAll(response.Body) if err != nil { return nil, fmt.Errorf("Error reading response from %s: %v", serverURL, err) @@ -70,6 +80,32 @@ func readResponse(serverURL string) ([]byte, error) { return contents, nil } +func testSwaggerSpec(t *testing.T) { + serverURL := serverIP + "/swaggerapi" + _, err := readResponse(serverURL) + if err != nil { + t.Fatalf("%v", err) + } +} + +func testAPIGroupList(t *testing.T) { + serverURL := serverIP + "/apis" + contents, err := readResponse(serverURL) + if err != nil { + t.Fatalf("%v", err) + } + var apiGroupList unversioned.APIGroupList + err = json.Unmarshal(contents, &apiGroupList) + if err != nil { + t.Fatalf("Error in unmarshalling response from server %s: %v", serverURL, err) + } + assert.Equal(t, 1, len(apiGroupList.Groups)) + assert.Equal(t, apiGroupList.Groups[0].Name, groupVersion.Group) + assert.Equal(t, 1, len(apiGroupList.Groups[0].Versions)) + assert.Equal(t, apiGroupList.Groups[0].Versions[0], groupVersionForDiscovery) + assert.Equal(t, apiGroupList.Groups[0].PreferredVersion, groupVersionForDiscovery) +} + func testAPIGroup(t *testing.T) { serverURL := serverIP + "/apis/testgroup" contents, err := readResponse(serverURL) diff --git a/pkg/genericapiserver/genericapiserver.go b/pkg/genericapiserver/genericapiserver.go index d48942c02ca..2c3560c2019 100644 --- a/pkg/genericapiserver/genericapiserver.go +++ b/pkg/genericapiserver/genericapiserver.go @@ -563,6 +563,9 @@ func (s *GenericAPIServer) InstallAPIGroups(groupsInfo []APIGroupInfo) error { return err } } + if s.enableSwaggerSupport { + s.InstallSwaggerAPI() + } return nil } @@ -778,7 +781,7 @@ func (s *GenericAPIServer) newAPIGroupVersion(groupMeta apimachinery.GroupMeta, } // InstallSwaggerAPI installs the /swaggerapi/ endpoint to allow schema discovery -// and traversal. It is optional to allow consumers of the Kubernetes GenericAPIServer to +// and traversal. It is optional to allow consumers of the Kubernetes GenericAPIServer to // register their own web services into the Kubernetes mux prior to initialization // of swagger, so that other resource types show up in the documentation. func (s *GenericAPIServer) InstallSwaggerAPI() { diff --git a/pkg/master/master.go b/pkg/master/master.go index 74843e87691..0b36fd4ce64 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -153,11 +153,6 @@ func New(c *Config) (*Master, error) { } m.InstallAPIs(c) - // TODO: Move this to generic api server. - if c.EnableSwaggerSupport { - m.InstallSwaggerAPI() - } - // TODO: Attempt clean shutdown? if m.enableCoreControllers { m.NewBootstrapController().Start()