a27ddc79e8
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwxdSt4reTm7Dj1oxRvpP3
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestIsAPIPath(t *testing.T) {
|
|
cases := []struct {
|
|
path string
|
|
want bool
|
|
}{
|
|
{"/api", true},
|
|
{"/api/", true},
|
|
{"/api/domains", true},
|
|
{"/", false},
|
|
{"/domains/xyz", false},
|
|
{"/apix", false},
|
|
}
|
|
for _, c := range cases {
|
|
if got := isAPIPath(c.path); got != c.want {
|
|
t.Errorf("isAPIPath(%q) = %v, want %v", c.path, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBuildMux(t *testing.T) {
|
|
var metricsHit, apiHit, webHit bool
|
|
|
|
metricsHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
metricsHit = true
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
apiRouter := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
apiHit = true
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
webHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
webHit = true
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
|
|
mux := buildMux(metricsHandler, apiRouter, webHandler)
|
|
|
|
t.Run("healthz returns 200 ok", func(t *testing.T) {
|
|
metricsHit, apiHit, webHit = false, false, false
|
|
rr := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/healthz", nil)
|
|
mux.ServeHTTP(rr, req)
|
|
if rr.Code != http.StatusOK {
|
|
t.Fatalf("status = %d, want %d", rr.Code, http.StatusOK)
|
|
}
|
|
if rr.Body.String() != "ok" {
|
|
t.Fatalf("body = %q, want %q", rr.Body.String(), "ok")
|
|
}
|
|
if metricsHit || apiHit || webHit {
|
|
t.Fatalf("healthz must not fall through to other handlers")
|
|
}
|
|
})
|
|
|
|
t.Run("metrics routed to metrics handler", func(t *testing.T) {
|
|
metricsHit, apiHit, webHit = false, false, false
|
|
rr := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/metrics", nil)
|
|
mux.ServeHTTP(rr, req)
|
|
if !metricsHit {
|
|
t.Fatalf("expected metrics handler to be hit")
|
|
}
|
|
})
|
|
|
|
t.Run("api path routed to api router", func(t *testing.T) {
|
|
metricsHit, apiHit, webHit = false, false, false
|
|
rr := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/api/domains", nil)
|
|
mux.ServeHTTP(rr, req)
|
|
if !apiHit {
|
|
t.Fatalf("expected api router to be hit")
|
|
}
|
|
})
|
|
|
|
t.Run("other path routed to web handler", func(t *testing.T) {
|
|
metricsHit, apiHit, webHit = false, false, false
|
|
rr := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/domains/xyz", nil)
|
|
mux.ServeHTTP(rr, req)
|
|
if !webHit {
|
|
t.Fatalf("expected web handler to be hit")
|
|
}
|
|
})
|
|
}
|