93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package http
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/influxdata/influxdb/v2/kit/prom"
|
|
"github.com/influxdata/influxdb/v2/kit/prom/promtest"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zaptest"
|
|
)
|
|
|
|
func TestHandler_ServeHTTP(t *testing.T) {
|
|
type fields struct {
|
|
name string
|
|
handler http.Handler
|
|
handlerHidden bool
|
|
log *zap.Logger
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
}{
|
|
{
|
|
name: "should record metrics when http handling",
|
|
fields: fields{
|
|
name: "test",
|
|
handler: http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}),
|
|
log: zaptest.NewLogger(t),
|
|
},
|
|
},
|
|
{
|
|
name: "should record metrics even when not exposed over HTTP",
|
|
fields: fields{
|
|
name: "test",
|
|
handler: http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}),
|
|
handlerHidden: true,
|
|
log: zaptest.NewLogger(t),
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
reg := prom.NewRegistry(zaptest.NewLogger(t))
|
|
h := NewRootHandler(
|
|
tt.fields.name,
|
|
WithLog(tt.fields.log),
|
|
WithAPIHandler(tt.fields.handler),
|
|
WithMetrics(reg, !tt.fields.handlerHidden),
|
|
)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
req.Header.Set("User-Agent", "ua1")
|
|
h.ServeHTTP(httptest.NewRecorder(), req)
|
|
|
|
mfs, err := reg.Gather()
|
|
require.NoError(t, err)
|
|
|
|
c := promtest.MustFindMetric(t, mfs, "http_api_requests_total", map[string]string{
|
|
"handler": "test",
|
|
"method": "GET",
|
|
"path": "/",
|
|
"status": "2XX",
|
|
"user_agent": "ua1",
|
|
"response_code": "200",
|
|
})
|
|
require.Equal(t, 1, int(c.GetCounter().GetValue()))
|
|
|
|
g := promtest.MustFindMetric(t, mfs, "http_api_request_duration_seconds", map[string]string{
|
|
"handler": "test",
|
|
"method": "GET",
|
|
"path": "/",
|
|
"status": "2XX",
|
|
"user_agent": "ua1",
|
|
"response_code": "200",
|
|
})
|
|
require.Equal(t, 1, int(g.GetHistogram().GetSampleCount()))
|
|
|
|
req = httptest.NewRequest(http.MethodGet, "/metrics", nil)
|
|
recorder := httptest.NewRecorder()
|
|
h.ServeHTTP(recorder, req)
|
|
|
|
if tt.fields.handlerHidden {
|
|
require.Equal(t, http.StatusForbidden, recorder.Code)
|
|
} else {
|
|
require.Equal(t, http.StatusOK, recorder.Code)
|
|
}
|
|
})
|
|
}
|
|
}
|