github.com/jpmicrosoft/grab/v3@v3.0.2/pkg/grabtest/assert.go (about) 1 package grabtest 2 3 import ( 4 "bytes" 5 "crypto/sha256" 6 "fmt" 7 "io" 8 "io/ioutil" 9 "net/http" 10 "testing" 11 ) 12 13 func AssertHTTPResponseStatusCode(t *testing.T, resp *http.Response, expect int) (ok bool) { 14 if resp.StatusCode != expect { 15 t.Errorf("expected status code: %d, got: %d", expect, resp.StatusCode) 16 return 17 } 18 ok = true 19 return true 20 } 21 22 func AssertHTTPResponseHeader(t *testing.T, resp *http.Response, key, format string, a ...interface{}) (ok bool) { 23 expect := fmt.Sprintf(format, a...) 24 actual := resp.Header.Get(key) 25 if actual != expect { 26 t.Errorf("expected header %s: %s, got: %s", key, expect, actual) 27 return 28 } 29 ok = true 30 return 31 } 32 33 func AssertHTTPResponseContentLength(t *testing.T, resp *http.Response, n int64) (ok bool) { 34 ok = true 35 if resp.ContentLength != n { 36 ok = false 37 t.Errorf("expected header Content-Length: %d, got: %d", n, resp.ContentLength) 38 } 39 if !AssertHTTPResponseBodyLength(t, resp, n) { 40 ok = false 41 } 42 return 43 } 44 45 func AssertHTTPResponseBodyLength(t *testing.T, resp *http.Response, n int64) (ok bool) { 46 defer func() { 47 if err := resp.Body.Close(); err != nil { 48 panic(err) 49 } 50 }() 51 b, err := ioutil.ReadAll(resp.Body) 52 if err != nil { 53 panic(err) 54 } 55 if int64(len(b)) != n { 56 ok = false 57 t.Errorf("expected body length: %d, got: %d", n, len(b)) 58 } 59 return 60 } 61 62 func MustHTTPNewRequest(method, url string, body io.Reader) *http.Request { 63 req, err := http.NewRequest(method, url, body) 64 if err != nil { 65 panic(err) 66 } 67 return req 68 } 69 70 func MustHTTPDo(req *http.Request) *http.Response { 71 resp, err := http.DefaultClient.Do(req) 72 if err != nil { 73 panic(err) 74 } 75 return resp 76 } 77 78 func MustHTTPDoWithClose(req *http.Request) *http.Response { 79 resp := MustHTTPDo(req) 80 if _, err := io.Copy(ioutil.Discard, resp.Body); err != nil { 81 panic(err) 82 } 83 if err := resp.Body.Close(); err != nil { 84 panic(err) 85 } 86 return resp 87 } 88 89 func AssertSHA256Sum(t *testing.T, sum []byte, r io.Reader) (ok bool) { 90 h := sha256.New() 91 if _, err := io.Copy(h, r); err != nil { 92 panic(err) 93 } 94 computed := h.Sum(nil) 95 ok = bytes.Equal(sum, computed) 96 if !ok { 97 t.Errorf( 98 "expected checksum: %s, got: %s", 99 MustHexEncodeString(sum), 100 MustHexEncodeString(computed), 101 ) 102 } 103 return 104 }