diff --git a/state/remote/http.go b/state/remote/http.go index 0aa1b9201..8b410fb3d 100644 --- a/state/remote/http.go +++ b/state/remote/http.go @@ -70,6 +70,11 @@ func (c *HTTPClient) Get() (*Payload, error) { Data: buf.Bytes(), } + // If there was no data, then return nil + if len(payload.Data) == 0 { + return nil, nil + } + // Check for the MD5 if raw := resp.Header.Get("Content-MD5"); raw != "" { md5, err := base64.StdEncoding.DecodeString(raw) diff --git a/state/remote/http_test.go b/state/remote/http_test.go index 3b06bd9a5..e5cdbed88 100644 --- a/state/remote/http_test.go +++ b/state/remote/http_test.go @@ -1,6 +1,12 @@ package remote import ( + "bytes" + "fmt" + "io" + "net/http" + "net/http/httptest" + "net/url" "testing" ) @@ -9,6 +15,39 @@ func TestHTTPClient_impl(t *testing.T) { } func TestHTTPClient(t *testing.T) { - // TODO - //testClient(t, client) + handler := new(testHTTPHandler) + ts := httptest.NewServer(http.HandlerFunc(handler.Handle)) + defer ts.Close() + + url, err := url.Parse(ts.URL) + if err != nil { + t.Fatalf("err: %s", err) + } + + client := &HTTPClient{URL: url} + testClient(t, client) +} + +type testHTTPHandler struct { + Data []byte +} + +func (h *testHTTPHandler) Handle(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case "GET": + w.Write(h.Data) + case "POST": + buf := new(bytes.Buffer) + if _, err := io.Copy(buf, r.Body); err != nil { + w.WriteHeader(500) + } + + h.Data = buf.Bytes() + case "DELETE": + h.Data = nil + w.WriteHeader(200) + default: + w.WriteHeader(500) + w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method))) + } }