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") } }) }