2019-10-04 07:29:51 +00:00
|
|
|
package http
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/armon/go-metrics"
|
|
|
|
"github.com/hashicorp/vault/helper/metricsutil"
|
|
|
|
"github.com/hashicorp/vault/vault"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestSysMetricsUnauthenticated(t *testing.T) {
|
|
|
|
inm := metrics.NewInmemSink(10*time.Second, time.Minute)
|
|
|
|
metrics.DefaultInmemSignal(inm)
|
|
|
|
conf := &vault.CoreConfig{
|
|
|
|
BuiltinRegistry: vault.NewMockBuiltinRegistry(),
|
2019-10-08 12:55:25 +00:00
|
|
|
MetricsHelper: metricsutil.NewMetricsHelper(inm, true),
|
2019-10-04 07:29:51 +00:00
|
|
|
}
|
|
|
|
core, _, token := vault.TestCoreUnsealedWithConfig(t, conf)
|
|
|
|
ln, addr := TestServer(t, core)
|
|
|
|
TestServerAuth(t, addr, token)
|
|
|
|
|
|
|
|
// Default: Only authenticated access
|
|
|
|
resp := testHttpGet(t, "", addr+"/v1/sys/metrics")
|
|
|
|
testResponseStatus(t, resp, 400)
|
|
|
|
resp = testHttpGet(t, token, addr+"/v1/sys/metrics")
|
|
|
|
testResponseStatus(t, resp, 200)
|
|
|
|
|
|
|
|
// Close listener
|
|
|
|
ln.Close()
|
|
|
|
|
|
|
|
// Setup new custom listener with unauthenticated metrics access
|
|
|
|
ln, addr = TestListener(t)
|
|
|
|
props := &vault.HandlerProperties{
|
|
|
|
Core: core,
|
|
|
|
MaxRequestSize: DefaultMaxRequestSize,
|
|
|
|
UnauthenticatedMetricsAccess: true,
|
|
|
|
}
|
|
|
|
TestServerWithListenerAndProperties(t, ln, addr, core, props)
|
|
|
|
defer ln.Close()
|
|
|
|
TestServerAuth(t, addr, token)
|
|
|
|
|
|
|
|
// Test without token
|
|
|
|
resp = testHttpGet(t, "", addr+"/v1/sys/metrics")
|
|
|
|
testResponseStatus(t, resp, 200)
|
|
|
|
|
|
|
|
// Should also work with token
|
|
|
|
resp = testHttpGet(t, token, addr+"/v1/sys/metrics")
|
|
|
|
testResponseStatus(t, resp, 200)
|
2019-10-08 12:55:25 +00:00
|
|
|
|
|
|
|
// Test if prometheus response is correct
|
|
|
|
resp = testHttpGet(t, "", addr+"/v1/sys/metrics?format=prometheus")
|
|
|
|
testResponseStatus(t, resp, 200)
|
2019-10-04 07:29:51 +00:00
|
|
|
}
|