feat: 实现管理后台 A3 注册群消息概览与 metrics 门禁
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package httpx_test
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"git.asio.asia/nixevol/NixMsg/internal/httpx"
|
||||
"git.asio.asia/nixevol/NixMsg/internal/listener"
|
||||
"git.asio.asia/nixevol/NixMsg/internal/metrics"
|
||||
)
|
||||
|
||||
func TestMetricsGateSharedPort(t *testing.T) {
|
||||
reg := metrics.New()
|
||||
okHandler := reg.Handler()
|
||||
|
||||
t.Run("empty token 404", func(t *testing.T) {
|
||||
mux := listener.NewMux(listener.RoleShared, listener.Handlers{
|
||||
Metrics: okHandler,
|
||||
MetricsToken: "",
|
||||
})
|
||||
res := httptest.NewRecorder()
|
||||
mux.ServeHTTP(res, httptest.NewRequest(http.MethodGet, "/metrics", nil))
|
||||
if res.Code != http.StatusNotFound {
|
||||
t.Fatalf("want 404 got %d", res.Code)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("wrong token 401", func(t *testing.T) {
|
||||
mux := listener.NewMux(listener.RoleShared, listener.Handlers{
|
||||
Metrics: okHandler,
|
||||
MetricsToken: "secret-token",
|
||||
})
|
||||
req := httptest.NewRequest(http.MethodGet, "/metrics", nil)
|
||||
req.Header.Set("Authorization", "Bearer wrong")
|
||||
res := httptest.NewRecorder()
|
||||
mux.ServeHTTP(res, req)
|
||||
if res.Code != http.StatusUnauthorized {
|
||||
t.Fatalf("want 401 got %d", res.Code)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("no auth 401", func(t *testing.T) {
|
||||
mux := listener.NewMux(listener.RoleShared, listener.Handlers{
|
||||
Metrics: okHandler,
|
||||
MetricsToken: "secret-token",
|
||||
})
|
||||
res := httptest.NewRecorder()
|
||||
mux.ServeHTTP(res, httptest.NewRequest(http.MethodGet, "/metrics", nil))
|
||||
if res.Code != http.StatusUnauthorized {
|
||||
t.Fatalf("want 401 got %d", res.Code)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("good token 200", func(t *testing.T) {
|
||||
mux := listener.NewMux(listener.RoleShared, listener.Handlers{
|
||||
Metrics: okHandler,
|
||||
MetricsToken: "secret-token",
|
||||
})
|
||||
req := httptest.NewRequest(http.MethodGet, "/metrics", nil)
|
||||
req.Header.Set("Authorization", "Bearer secret-token")
|
||||
res := httptest.NewRecorder()
|
||||
mux.ServeHTTP(res, req)
|
||||
if res.Code != http.StatusOK {
|
||||
t.Fatalf("want 200 got %d", res.Code)
|
||||
}
|
||||
body, _ := io.ReadAll(res.Body)
|
||||
if len(body) == 0 {
|
||||
t.Fatal("empty metrics body")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("admin role no auth", func(t *testing.T) {
|
||||
mux := listener.NewMux(listener.RoleAdmin, listener.Handlers{
|
||||
Metrics: okHandler,
|
||||
})
|
||||
res := httptest.NewRecorder()
|
||||
mux.ServeHTTP(res, httptest.NewRequest(http.MethodGet, "/metrics", nil))
|
||||
if res.Code != http.StatusOK {
|
||||
t.Fatalf("admin metrics want 200 got %d", res.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestMetricsGateDirect(t *testing.T) {
|
||||
h := httpx.MetricsGate("tok", http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte("ok"))
|
||||
}))
|
||||
res := httptest.NewRecorder()
|
||||
req := httptest.NewRequest(http.MethodGet, "/metrics", nil)
|
||||
req.Header.Set("Authorization", "Bearer tok")
|
||||
h.ServeHTTP(res, req)
|
||||
if res.Code != 200 || res.Body.String() != "ok" {
|
||||
t.Fatalf("got %d %q", res.Code, res.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user