Skip to content

Commit 52a833c

Browse files
authored
Add test to verify query response compression (#6849) (#6877)
* Add test to verify query response compression (#6849) Signed-off-by: Siddarth Gundu <[email protected]> * Remove store Gateway Signed-off-by: Siddarth Gundu <[email protected]> --------- Signed-off-by: Siddarth Gundu <[email protected]>
1 parent dd7f16b commit 52a833c

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
//go:build requires_docker
2+
// +build requires_docker
3+
4+
package integration
5+
6+
import (
7+
"compress/gzip"
8+
"fmt"
9+
"net/http"
10+
"testing"
11+
"time"
12+
13+
"github.com/stretchr/testify/require"
14+
15+
"github.com/cortexproject/cortex/integration/e2e"
16+
e2edb "github.com/cortexproject/cortex/integration/e2e/db"
17+
"github.com/cortexproject/cortex/integration/e2ecortex"
18+
)
19+
20+
func TestQueryResponseCompression(t *testing.T) {
21+
s, err := e2e.NewScenario(networkName)
22+
require.NoError(t, err)
23+
defer s.Close()
24+
25+
// Start dependencies.
26+
consul := e2edb.NewConsul()
27+
minio := e2edb.NewMinio(9000, bucketName)
28+
require.NoError(t, s.StartAndWaitReady(consul, minio))
29+
30+
flags := mergeFlags(BlocksStorageFlags(), map[string]string{
31+
"-api.response-compression-enabled": "true",
32+
})
33+
34+
distributor := e2ecortex.NewDistributor("distributor", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "")
35+
ingester := e2ecortex.NewIngester("ingester", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "")
36+
require.NoError(t, s.StartAndWaitReady(distributor, ingester))
37+
38+
// Wait until the distributor has updated the ring.
39+
require.NoError(t, distributor.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total"))
40+
41+
// Push series to Cortex.
42+
now := time.Now()
43+
c, err := e2ecortex.NewClient(distributor.HTTPEndpoint(), "", "", "", "user-1")
44+
require.NoError(t, err)
45+
46+
series, _ := generateSeries("series_1", now)
47+
res, err := c.Push(series)
48+
require.NoError(t, err)
49+
require.Equal(t, 200, res.StatusCode)
50+
51+
querier := e2ecortex.NewQuerier("querier", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "")
52+
require.NoError(t, s.StartAndWaitReady(querier))
53+
54+
// Wait until the querier has updated the ring.
55+
require.NoError(t, querier.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total"))
56+
57+
endpoint := fmt.Sprintf("http://%s/api/prom/api/v1/query?query=series_1", querier.HTTPEndpoint())
58+
59+
t.Run("Compressed", func(t *testing.T) {
60+
req, err := http.NewRequest("GET", endpoint, nil)
61+
require.NoError(t, err)
62+
req.Header.Set("X-Scope-OrgID", "user-1")
63+
req.Header.Set("Accept-Encoding", "gzip")
64+
65+
resp, err := http.DefaultClient.Do(req)
66+
require.NoError(t, err)
67+
defer resp.Body.Close()
68+
69+
require.Equal(t, http.StatusOK, resp.StatusCode)
70+
require.Equal(t, "gzip", resp.Header.Get("Content-Encoding"))
71+
72+
gzipReader, err := gzip.NewReader(resp.Body)
73+
require.NoError(t, err)
74+
defer gzipReader.Close()
75+
})
76+
77+
t.Run("Uncompressed", func(t *testing.T) {
78+
req, err := http.NewRequest("GET", endpoint, nil)
79+
require.NoError(t, err)
80+
req.Header.Set("X-Scope-OrgID", "user-1")
81+
82+
resp, err := http.DefaultClient.Do(req)
83+
require.NoError(t, err)
84+
defer resp.Body.Close()
85+
86+
require.Equal(t, http.StatusOK, resp.StatusCode)
87+
require.Empty(t, resp.Header.Get("Content-Encoding"))
88+
})
89+
}

0 commit comments

Comments
 (0)