github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/testhelper/http_responses.go (about) 1 package testhelper 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "net/http" 7 "net/http/httptest" 8 "net/url" 9 "reflect" 10 "testing" 11 ) 12 13 var ( 14 // Mux is a multiplexer that can be used to register handlers. 15 Mux *http.ServeMux 16 17 // Server is an in-memory HTTP server for testing. 18 Server *httptest.Server 19 ) 20 21 // SetupHTTP prepares the Mux and Server. 22 func SetupHTTP() { 23 Mux = http.NewServeMux() 24 Server = httptest.NewServer(Mux) 25 } 26 27 // TeardownHTTP releases HTTP-related resources. 28 func TeardownHTTP() { 29 Server.Close() 30 } 31 32 // Endpoint returns a fake endpoint that will actually target the Mux. 33 func Endpoint() string { 34 return Server.URL + "/" 35 } 36 37 // TestFormValues ensures that all the URL parameters given to the http.Request are the same as values. 38 func TestFormValues(t *testing.T, r *http.Request, values map[string]string) { 39 want := url.Values{} 40 for k, v := range values { 41 want.Add(k, v) 42 } 43 44 r.ParseForm() 45 if !reflect.DeepEqual(want, r.Form) { 46 t.Errorf("Request parameters = %v, want %v", r.Form, want) 47 } 48 } 49 50 // TestMethod checks that the Request has the expected method (e.g. GET, POST). 51 func TestMethod(t *testing.T, r *http.Request, expected string) { 52 if expected != r.Method { 53 t.Errorf("Request method = %v, expected %v", r.Method, expected) 54 } 55 } 56 57 // TestHeader checks that the header on the http.Request matches the expected value. 58 func TestHeader(t *testing.T, r *http.Request, header string, expected string) { 59 if actual := r.Header.Get(header); expected != actual { 60 t.Errorf("Header %s = %s, expected %s", header, actual, expected) 61 } 62 } 63 64 // TestBody verifies that the request body matches an expected body. 65 func TestBody(t *testing.T, r *http.Request, expected string) { 66 b, err := ioutil.ReadAll(r.Body) 67 if err != nil { 68 t.Errorf("Unable to read body: %v", err) 69 } 70 str := string(b) 71 if expected != str { 72 t.Errorf("Body = %s, expected %s", str, expected) 73 } 74 } 75 76 // TestJSONRequest verifies that the JSON payload of a request matches an expected structure, without asserting things about 77 // whitespace or ordering. 78 func TestJSONRequest(t *testing.T, r *http.Request, expected string) { 79 b, err := ioutil.ReadAll(r.Body) 80 if err != nil { 81 t.Errorf("Unable to read request body: %v", err) 82 } 83 84 var actualJSON interface{} 85 err = json.Unmarshal(b, &actualJSON) 86 if err != nil { 87 t.Errorf("Unable to parse request body as JSON: %v", err) 88 } 89 90 CheckJSONEquals(t, expected, actualJSON) 91 }