package policyapi import ( "net/http" "net/http/httptest" "testing" ) // TestRequireServiceToken_MissingOrWrongTokenReturns401 ist die // Pflichtpruefung: Aufruf ohne gueltige Service-Credentials wird // abgewiesen, nicht mit einer Policy-Entscheidung beantwortet. func TestRequireServiceToken_MissingOrWrongTokenReturns401(t *testing.T) { called := false handler := RequireServiceToken("richtiges-token", func(w http.ResponseWriter, r *http.Request) { called = true w.WriteHeader(http.StatusOK) }) server := httptest.NewServer(handler) defer server.Close() resp, err := http.Get(server.URL) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusUnauthorized { t.Fatalf("ohne token: status = %d, want 401", resp.StatusCode) } if called { t.Fatal("handler haette bei fehlendem token nie erreicht werden duerfen") } req, _ := http.NewRequest(http.MethodGet, server.URL, nil) req.Header.Set("X-Service-Token", "falsches-token") resp2, err := http.DefaultClient.Do(req) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp2.Body.Close() }() if resp2.StatusCode != http.StatusUnauthorized { t.Fatalf("mit falschem token: status = %d, want 401", resp2.StatusCode) } } // TestRequireServiceToken_CorrectTokenAllowsAccess ist der Gegentest. func TestRequireServiceToken_CorrectTokenAllowsAccess(t *testing.T) { handler := RequireServiceToken("richtiges-token", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) server := httptest.NewServer(handler) defer server.Close() req, _ := http.NewRequest(http.MethodGet, server.URL, nil) req.Header.Set("X-Service-Token", "richtiges-token") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { t.Fatalf("mit korrektem token: status = %d, want 200", resp.StatusCode) } }