mirror of https://github.com/status-im/consul.git
parent
72f92ae7ca
commit
c7e6c9ebec
|
@ -4451,6 +4451,43 @@ func TestAgent_Monitor(t *testing.T) {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("stream compressed unstructured logs", func(t *testing.T) {
|
||||||
|
// The only purpose of this test is to see something being
|
||||||
|
// logged. Because /v1/agent/monitor is streaming the response
|
||||||
|
// it needs special handling with the compression.
|
||||||
|
retry.Run(t, func(r *retry.R) {
|
||||||
|
req, _ := http.NewRequest("GET", "/v1/agent/monitor?loglevel=debug", nil)
|
||||||
|
// Usually this would be automatically set by transport content
|
||||||
|
// negotiation, but since this call doesn't go through a real
|
||||||
|
// transport, the header has to be set manually
|
||||||
|
req.Header["Accept-Encoding"] = []string{"gzip"}
|
||||||
|
cancelCtx, cancelFunc := context.WithCancel(context.Background())
|
||||||
|
req = req.WithContext(cancelCtx)
|
||||||
|
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
go a.srv.Handler.ServeHTTP(resp, req)
|
||||||
|
|
||||||
|
args := &structs.ServiceDefinition{
|
||||||
|
Name: "monitor",
|
||||||
|
Port: 8000,
|
||||||
|
Check: structs.CheckType{
|
||||||
|
TTL: 15 * time.Second,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
registerReq, _ := http.NewRequest("PUT", "/v1/agent/service/register", jsonReader(args))
|
||||||
|
if _, err := a.srv.AgentRegisterService(nil, registerReq); err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait until we have received some type of logging output
|
||||||
|
require.Eventually(t, func() bool {
|
||||||
|
return len(resp.Body.Bytes()) > 0
|
||||||
|
}, 3*time.Second, 100*time.Millisecond)
|
||||||
|
cancelFunc()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("stream JSON logs", func(t *testing.T) {
|
t.Run("stream JSON logs", func(t *testing.T) {
|
||||||
// Try to stream logs until we see the expected log line
|
// Try to stream logs until we see the expected log line
|
||||||
retry.Run(t, func(r *retry.R) {
|
retry.Run(t, func(r *retry.R) {
|
||||||
|
|
|
@ -258,8 +258,17 @@ func (s *HTTPServer) handler(enableDebug bool) http.Handler {
|
||||||
metrics.MeasureSince(key, start)
|
metrics.MeasureSince(key, start)
|
||||||
}
|
}
|
||||||
|
|
||||||
gzipWrapper, _ := gziphandler.GzipHandlerWithOpts(gziphandler.MinSize(0))
|
var gzipHandler http.Handler
|
||||||
gzipHandler := gzipWrapper(http.HandlerFunc(wrapper))
|
minSize := gziphandler.DefaultMinSize
|
||||||
|
if pattern == "/v1/agent/monitor" {
|
||||||
|
minSize = 0
|
||||||
|
}
|
||||||
|
gzipWrapper, err := gziphandler.GzipHandlerWithOpts(gziphandler.MinSize(minSize))
|
||||||
|
if err == nil {
|
||||||
|
gzipHandler = gzipWrapper(http.HandlerFunc(wrapper))
|
||||||
|
} else {
|
||||||
|
gzipHandler = gziphandler.GzipHandler(http.HandlerFunc(wrapper))
|
||||||
|
}
|
||||||
mux.Handle(pattern, gzipHandler)
|
mux.Handle(pattern, gzipHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/NYTimes/gziphandler"
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
tokenStore "github.com/hashicorp/consul/agent/token"
|
tokenStore "github.com/hashicorp/consul/agent/token"
|
||||||
"github.com/hashicorp/consul/api"
|
"github.com/hashicorp/consul/api"
|
||||||
|
@ -462,6 +463,45 @@ func TestUIResponseHeaders(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAcceptEncodingGzip(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
a := NewTestAgent(t, "")
|
||||||
|
defer a.Shutdown()
|
||||||
|
|
||||||
|
// Setting up the KV to store a short and a long value
|
||||||
|
buf := bytes.NewBuffer([]byte("short"))
|
||||||
|
req, _ := http.NewRequest("PUT", "/v1/kv/short", buf)
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
_, err := a.srv.KVSEndpoint(resp, req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// this generates a string which is longer than
|
||||||
|
// gziphandler.DefaultMinSize to trigger compression.
|
||||||
|
long := fmt.Sprintf(fmt.Sprintf("%%0%dd", gziphandler.DefaultMinSize+1), 1)
|
||||||
|
buf = bytes.NewBuffer([]byte(long))
|
||||||
|
req, _ = http.NewRequest("PUT", "/v1/kv/long", buf)
|
||||||
|
resp = httptest.NewRecorder()
|
||||||
|
_, err = a.srv.KVSEndpoint(resp, req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
resp = httptest.NewRecorder()
|
||||||
|
req, _ = http.NewRequest("GET", "/v1/kv/short", nil)
|
||||||
|
// Usually this would be automatically set by transport content
|
||||||
|
// negotiation, but since this call doesn't go through a real
|
||||||
|
// transport, the header has to be set manually
|
||||||
|
req.Header["Accept-Encoding"] = []string{"gzip"}
|
||||||
|
a.srv.Handler.ServeHTTP(resp, req)
|
||||||
|
require.Equal(t, 200, resp.Code)
|
||||||
|
require.Equal(t, "", resp.Header().Get("Content-Encoding"))
|
||||||
|
|
||||||
|
resp = httptest.NewRecorder()
|
||||||
|
req, _ = http.NewRequest("GET", "/v1/kv/long", nil)
|
||||||
|
req.Header["Accept-Encoding"] = []string{"gzip"}
|
||||||
|
a.srv.Handler.ServeHTTP(resp, req)
|
||||||
|
require.Equal(t, 200, resp.Code)
|
||||||
|
require.Equal(t, "gzip", resp.Header().Get("Content-Encoding"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestContentTypeIsJSON(t *testing.T) {
|
func TestContentTypeIsJSON(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
a := NewTestAgent(t, "")
|
a := NewTestAgent(t, "")
|
||||||
|
|
Loading…
Reference in New Issue