Add a method for getting supported resources on a server

This commit is contained in:
Brendan Burns
2015-10-12 14:23:35 -07:00
parent b9c7cf43b2
commit 5afbf578b0
3 changed files with 173 additions and 0 deletions

View File

@@ -271,6 +271,105 @@ func TestGetServerVersion(t *testing.T) {
}
}
func TestGetServerResources(t *testing.T) {
stable := api.APIResourceList{
GroupVersion: "v1",
APIResources: []api.APIResource{
{"pods", true},
{"services", true},
{"namespaces", false},
},
}
beta := api.APIResourceList{
GroupVersion: "extensions/v1",
APIResources: []api.APIResource{
{"deployments", true},
{"ingress", true},
{"jobs", true},
},
}
tests := []struct {
resourcesList *api.APIResourceList
path string
request string
expectErr bool
}{
{
resourcesList: &stable,
path: "/api/v1",
request: "v1",
expectErr: false,
},
{
resourcesList: &beta,
path: "/apis/extensions/v1beta1",
request: "extensions/v1beta1",
expectErr: false,
},
{
resourcesList: &stable,
path: "/api/v1",
request: "foobar",
expectErr: true,
},
}
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
var list interface{}
switch req.URL.Path {
case "/api/v1":
list = &stable
case "/apis/extensions/v1beta1":
list = &beta
case "/api":
list = &api.APIVersions{
Versions: []string{
"v1",
"extensions/v1beta1",
},
}
default:
t.Logf("unexpected request: %s", req.URL.Path)
w.WriteHeader(http.StatusNotFound)
return
}
output, err := json.Marshal(list)
if err != nil {
t.Errorf("unexpected encoding error: %v", err)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(output)
}))
client := NewOrDie(&Config{Host: server.URL})
for _, test := range tests {
got, err := client.SupportedResourcesForGroupVersion(test.request)
if test.expectErr {
if err == nil {
t.Error("unexpected non-error")
}
continue
}
if err != nil {
t.Errorf("unexpected error: %v", err)
continue
}
if !reflect.DeepEqual(got, test.resourcesList) {
t.Errorf("expected:\n%v\ngot:\n%v\n", test.resourcesList, got)
}
}
resourceMap, err := client.SupportedResources()
if err != nil {
t.Errorf("unexpected error: %v", err)
}
for _, api := range []string{"v1", "extensions/v1beta1"} {
if _, found := resourceMap[api]; !found {
t.Errorf("missing expected api: %s", api)
}
}
}
func TestGetServerAPIVersions(t *testing.T) {
versions := []string{"v1", "v2", "v3"}
expect := unversioned.APIVersions{Versions: versions}