
* refactor: take clients out of internal * refactor: move stdio to pkg * Move internal/api to api * refactor: final changes for Kapacitor to access shared functionality * chore: regenerate mocks * fix: bad automated refactor * chore: extra formatting not caught by make fmt
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package api_test
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/influxdata/influx-cli/v2/api"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var exampleResponse = `result,table,_start,_stop,_time,region,host,_value
|
|
mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
|
|
mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
|
|
mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62`
|
|
|
|
func setupServer(t *testing.T) (*httptest.Server, api.QueryApi) {
|
|
t.Helper()
|
|
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
isGzip := req.Header.Get("Accept-Encoding") == "gzip"
|
|
if isGzip {
|
|
rw.Header().Set("Content-Encoding", "gzip")
|
|
}
|
|
rw.WriteHeader(200)
|
|
|
|
if isGzip {
|
|
buf := bytes.Buffer{}
|
|
gzw := gzip.NewWriter(&buf)
|
|
if _, err := gzw.Write([]byte(exampleResponse)); err != nil {
|
|
_ = gzw.Close()
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
require.NoError(t, gzw.Close())
|
|
_, err := io.Copy(rw, &buf)
|
|
require.NoError(t, err)
|
|
} else {
|
|
_, err := rw.Write([]byte(exampleResponse))
|
|
require.NoError(t, err)
|
|
}
|
|
}))
|
|
|
|
config := api.NewConfiguration()
|
|
config.Scheme = "http"
|
|
config.Host = server.Listener.Addr().String()
|
|
client := api.NewAPIClient(config)
|
|
|
|
return server, client.QueryApi
|
|
}
|
|
|
|
func TestQuery_NoGzip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
server, client := setupServer(t)
|
|
defer server.Close()
|
|
|
|
resp, err := client.PostQuery(context.Background()).
|
|
AcceptEncoding("identity").
|
|
Query(api.Query{}).
|
|
Execute()
|
|
require.NoError(t, err)
|
|
defer resp.Close()
|
|
|
|
out := bytes.Buffer{}
|
|
_, err = io.Copy(&out, resp)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, exampleResponse, out.String())
|
|
}
|
|
|
|
func TestQuery_Gzip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
server, client := setupServer(t)
|
|
defer server.Close()
|
|
|
|
resp, err := client.PostQuery(context.Background()).
|
|
AcceptEncoding("gzip").
|
|
Query(api.Query{}).
|
|
Execute()
|
|
require.NoError(t, err)
|
|
defer resp.Close()
|
|
|
|
out := bytes.Buffer{}
|
|
_, err = io.Copy(&out, resp)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, exampleResponse, out.String())
|
|
}
|