From 75aa364b3cda39c14c4ac05cab05c43a3f601413 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 3 Aug 2014 19:35:17 -0400 Subject: [PATCH] /api/v1beta1/operations was returning Not Found Splitting an empty string returns []string{""}, not []string{} --- pkg/apiserver/operation.go | 3 +++ pkg/apiserver/operation_test.go | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/pkg/apiserver/operation.go b/pkg/apiserver/operation.go index 90474adeb7..99489d9adf 100644 --- a/pkg/apiserver/operation.go +++ b/pkg/apiserver/operation.go @@ -42,6 +42,9 @@ func (s *APIServer) handleOperation(w http.ResponseWriter, req *http.Request) { } trimmed := strings.TrimLeft(req.URL.Path[len(opPrefix):], "/") parts := strings.Split(trimmed, "/") + if trimmed == "" { + parts = []string{} + } if len(parts) > 1 { notFound(w, req) return diff --git a/pkg/apiserver/operation_test.go b/pkg/apiserver/operation_test.go index 2f7b1895d0..9c51c69c08 100644 --- a/pkg/apiserver/operation_test.go +++ b/pkg/apiserver/operation_test.go @@ -18,6 +18,7 @@ package apiserver import ( "bytes" + "io/ioutil" "net/http" "net/http/httptest" "sync/atomic" @@ -90,6 +91,44 @@ func TestOperation(t *testing.T) { } } +func TestOperationsList(t *testing.T) { + simpleStorage := &SimpleRESTStorage{} + handler := New(map[string]RESTStorage{ + "foo": simpleStorage, + }, "/prefix/version") + handler.asyncOpWait = 0 + server := httptest.NewServer(handler) + client := http.Client{} + + simple := Simple{ + Name: "foo", + } + data, err := api.Encode(simple) + expectNoError(t, err) + response, err := client.Post(server.URL+"/prefix/version/foo", "application/json", bytes.NewBuffer(data)) + expectNoError(t, err) + if response.StatusCode != http.StatusAccepted { + t.Errorf("Unexpected response %#v", response) + } + + response, err = client.Get(server.URL + "/prefix/version/operations") + expectNoError(t, err) + if response.StatusCode != http.StatusOK { + t.Fatalf("unexpected status code %#v", response) + } + body, err := ioutil.ReadAll(response.Body) + expectNoError(t, err) + obj, err := api.Decode(body) + expectNoError(t, err) + oplist, ok := obj.(*api.ServerOpList) + if !ok { + t.Fatalf("expected ServerOpList, got %#v", obj) + } + if len(oplist.Items) != 1 { + t.Errorf("expected 1 operation, got %#v", obj) + } +} + func TestOpGet(t *testing.T) { simpleStorage := &SimpleRESTStorage{} handler := New(map[string]RESTStorage{