// TestAcceptEncoding hits the health endpoint while explicitly // disabling decompression on a custom client's Transport and setting // it conditionally via the request's Accept-Encoding headers. func TestAcceptEncoding(t *testing.T) { defer leaktest.AfterTest(t) s := StartTestServer(t) defer s.Stop() client, err := testContext.GetHTTPClient() if err != nil { t.Fatal(err) } testData := []struct { acceptEncoding string newReader func(io.Reader) io.Reader }{ {"", func(b io.Reader) io.Reader { return b }, }, {util.GzipEncoding, func(b io.Reader) io.Reader { r, err := gzip.NewReader(b) if err != nil { t.Fatalf("could not create new gzip reader: %s", err) } return r }, }, {util.SnappyEncoding, func(b io.Reader) io.Reader { return snappy.NewReader(b) }, }, } for _, d := range testData { req, err := http.NewRequest("GET", testContext.HTTPRequestScheme()+"://"+s.ServingAddr()+healthPath, nil) if err != nil { t.Fatalf("could not create request: %s", err) } if d.acceptEncoding != "" { req.Header.Set(util.AcceptEncodingHeader, d.acceptEncoding) } resp, err := client.Do(req) if err != nil { t.Fatalf("could not make request to %s: %s", req.URL, err) } defer resp.Body.Close() if ce := resp.Header.Get(util.ContentEncodingHeader); ce != d.acceptEncoding { t.Fatalf("unexpected content encoding: '%s' != '%s'", ce, d.acceptEncoding) } r := d.newReader(resp.Body) b, err := ioutil.ReadAll(r) if err != nil { t.Fatalf("could not read '%s' response body: %s", d.acceptEncoding, err) } expected := "ok" if !strings.Contains(string(b), expected) { t.Errorf("expected body to contain %q, got %q", expected, b) } } }
func (s *snappyReader) Read(p []byte) (n int, err error) { if s.sr == nil { s.sr = snappy.NewReader(s.body) } return s.sr.Read(p) }
// TestAcceptEncoding hits the health endpoint while explicitly // disabling decompression on a custom client's Transport and setting // it conditionally via the request's Accept-Encoding headers. func TestAcceptEncoding(t *testing.T) { defer leaktest.AfterTest(t) s := StartTestServer(t) defer s.Stop() // We can't use the standard test client. Create our own. tlsConfig, err := testContext.GetClientTLSConfig() if err != nil { t.Fatal(err) } client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: tlsConfig, Proxy: http.ProxyFromEnvironment, DisableCompression: true, }, } testData := []struct { acceptEncoding string newReader func(io.Reader) io.Reader }{ {"", func(b io.Reader) io.Reader { return b }, }, {util.GzipEncoding, func(b io.Reader) io.Reader { r, err := gzip.NewReader(b) if err != nil { t.Fatalf("could not create new gzip reader: %s", err) } return r }, }, {util.SnappyEncoding, func(b io.Reader) io.Reader { return snappy.NewReader(b) }, }, } for _, d := range testData { req, err := http.NewRequest("GET", testContext.RequestScheme()+"://"+s.ServingAddr()+healthPath, nil) if err != nil { t.Fatalf("could not create request: %s", err) } if d.acceptEncoding != "" { req.Header.Set(util.AcceptEncodingHeader, d.acceptEncoding) } resp, err := client.Do(req) if err != nil { t.Fatalf("could not make request to %s: %s", req.URL, err) } defer resp.Body.Close() if ce := resp.Header.Get(util.ContentEncodingHeader); ce != d.acceptEncoding { t.Fatalf("unexpected content encoding: '%s' != '%s'", ce, d.acceptEncoding) } r := d.newReader(resp.Body) b, err := ioutil.ReadAll(r) if err != nil { t.Fatalf("could not read '%s' response body: %s", d.acceptEncoding, err) } expected := "ok" if !strings.Contains(string(b), expected) { t.Errorf("expected body to contain %q, got %q", expected, b) } } }