From da50f7a342f9b78928cfc2b9ca88cdd62208e77c Mon Sep 17 00:00:00 2001 From: Chengxuan Xing Date: Tue, 10 Dec 2024 07:17:34 +0000 Subject: [PATCH] adding test to ensure ffresty client handles gzip by default Signed-off-by: Chengxuan Xing --- pkg/ffresty/ffresty_test.go | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/pkg/ffresty/ffresty_test.go b/pkg/ffresty/ffresty_test.go index b7028fd..aedf9ab 100644 --- a/pkg/ffresty/ffresty_test.go +++ b/pkg/ffresty/ffresty_test.go @@ -17,6 +17,8 @@ package ffresty import ( + "bytes" + "compress/gzip" "context" "crypto/rand" "crypto/rsa" @@ -27,6 +29,7 @@ import ( "encoding/pem" "errors" "fmt" + "io" "log" "math/big" "net" @@ -91,6 +94,51 @@ func TestRequestOK(t *testing.T) { assert.Equal(t, 1, httpmock.GetTotalCallCount()) } +func TestRequestOKForGzip(t *testing.T) { + + customClient := &http.Client{} + + resetConf() + utConf.Set(HTTPConfigURL, "http://localhost:12345") + utConf.Set(HTTPConfigHeaders, map[string]interface{}{ + "someheader": "headervalue", + }) + utConf.Set(HTTPConfigAuthUsername, "user") + utConf.Set(HTTPConfigAuthPassword, "pass") + utConf.Set(HTTPConfigRetryEnabled, true) + utConf.Set(HTTPCustomClient, customClient) + + c, err := New(context.Background(), utConf) + assert.Nil(t, err) + httpmock.ActivateNonDefault(customClient) + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder("GET", "http://localhost:12345/test", + func(req *http.Request) (*http.Response, error) { + assert.Equal(t, "headervalue", req.Header.Get("someheader")) + assert.Equal(t, "Basic dXNlcjpwYXNz", req.Header.Get("Authorization")) + resp := httpmock.NewStringResponse(200, `{"some": "data"}`) + resp.Header.Set("Content-Encoding", "gzip") + var b bytes.Buffer + gz := gzip.NewWriter(&b) + if _, err := gz.Write([]byte(`{"some": "data"}`)); err != nil { + return nil, err + } + if err := gz.Close(); err != nil { + return nil, err + } + resp.Body = io.NopCloser(&b) + return resp, nil + }) + + resp, err := c.R().Get("/test") + assert.NoError(t, err) + assert.Equal(t, 200, resp.StatusCode()) + assert.Equal(t, `{"some": "data"}`, resp.String()) + + assert.Equal(t, 1, httpmock.GetTotalCallCount()) +} + func TestRequestWithRateLimiter(t *testing.T) { rps := 5 expectedNumberOfRequest := 20 // should take longer than 3 seconds less than 4 seconds