github.com/ojiry/terraform@v0.8.2-0.20161218223921-e50cec712c4a/state/remote/http_test.go (about) 1 package remote 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "net/http" 8 "net/http/httptest" 9 "net/url" 10 "testing" 11 12 "github.com/hashicorp/go-cleanhttp" 13 ) 14 15 func TestHTTPClient_impl(t *testing.T) { 16 var _ Client = new(HTTPClient) 17 } 18 19 func TestHTTPClient(t *testing.T) { 20 handler := new(testHTTPHandler) 21 ts := httptest.NewServer(http.HandlerFunc(handler.Handle)) 22 defer ts.Close() 23 24 url, err := url.Parse(ts.URL) 25 if err != nil { 26 t.Fatalf("err: %s", err) 27 } 28 29 client := &HTTPClient{URL: url, Client: cleanhttp.DefaultClient()} 30 testClient(t, client) 31 } 32 33 type testHTTPHandler struct { 34 Data []byte 35 } 36 37 func (h *testHTTPHandler) Handle(w http.ResponseWriter, r *http.Request) { 38 switch r.Method { 39 case "GET": 40 w.Write(h.Data) 41 case "POST": 42 buf := new(bytes.Buffer) 43 if _, err := io.Copy(buf, r.Body); err != nil { 44 w.WriteHeader(500) 45 } 46 47 h.Data = buf.Bytes() 48 case "DELETE": 49 h.Data = nil 50 w.WriteHeader(200) 51 default: 52 w.WriteHeader(500) 53 w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method))) 54 } 55 }