network/pkg/gateway/middleware_test.go
2026-01-22 14:39:50 +02:00

136 lines
3.5 KiB
Go

package gateway
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestExtractAPIKey(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, "/", nil)
r.Header.Set("Authorization", "Bearer ak_foo:ns")
if got := extractAPIKey(r); got != "ak_foo:ns" {
t.Fatalf("got %q", got)
}
r.Header.Set("Authorization", "ApiKey ak2")
if got := extractAPIKey(r); got != "ak2" {
t.Fatalf("got %q", got)
}
r.Header.Set("Authorization", "ak3raw")
if got := extractAPIKey(r); got != "ak3raw" {
t.Fatalf("got %q", got)
}
r.Header = http.Header{}
r.Header.Set("X-API-Key", "xkey")
if got := extractAPIKey(r); got != "xkey" {
t.Fatalf("got %q", got)
}
}
// TestDomainRoutingMiddleware_NonDebrosNetwork tests that non-debros domains pass through
func TestDomainRoutingMiddleware_NonDebrosNetwork(t *testing.T) {
nextCalled := false
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
nextCalled = true
w.WriteHeader(http.StatusOK)
})
g := &Gateway{}
middleware := g.domainRoutingMiddleware(next)
req := httptest.NewRequest("GET", "/", nil)
req.Host = "example.com"
rr := httptest.NewRecorder()
middleware.ServeHTTP(rr, req)
if !nextCalled {
t.Error("Expected next handler to be called for non-debros domain")
}
if rr.Code != http.StatusOK {
t.Errorf("Expected status 200, got %d", rr.Code)
}
}
// TestDomainRoutingMiddleware_APIPathBypass tests that /v1/ paths bypass routing
func TestDomainRoutingMiddleware_APIPathBypass(t *testing.T) {
nextCalled := false
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
nextCalled = true
w.WriteHeader(http.StatusOK)
})
g := &Gateway{}
middleware := g.domainRoutingMiddleware(next)
req := httptest.NewRequest("GET", "/v1/deployments/list", nil)
req.Host = "myapp.orama.network"
rr := httptest.NewRecorder()
middleware.ServeHTTP(rr, req)
if !nextCalled {
t.Error("Expected next handler to be called for /v1/ path")
}
if rr.Code != http.StatusOK {
t.Errorf("Expected status 200, got %d", rr.Code)
}
}
// TestDomainRoutingMiddleware_WellKnownBypass tests that /.well-known/ paths bypass routing
func TestDomainRoutingMiddleware_WellKnownBypass(t *testing.T) {
nextCalled := false
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
nextCalled = true
w.WriteHeader(http.StatusOK)
})
g := &Gateway{}
middleware := g.domainRoutingMiddleware(next)
req := httptest.NewRequest("GET", "/.well-known/acme-challenge/test", nil)
req.Host = "myapp.orama.network"
rr := httptest.NewRecorder()
middleware.ServeHTTP(rr, req)
if !nextCalled {
t.Error("Expected next handler to be called for /.well-known/ path")
}
if rr.Code != http.StatusOK {
t.Errorf("Expected status 200, got %d", rr.Code)
}
}
// TestDomainRoutingMiddleware_NoDeploymentService tests graceful handling when deployment service is nil
func TestDomainRoutingMiddleware_NoDeploymentService(t *testing.T) {
nextCalled := false
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
nextCalled = true
w.WriteHeader(http.StatusOK)
})
g := &Gateway{
// deploymentService is nil
staticHandler: nil,
}
middleware := g.domainRoutingMiddleware(next)
req := httptest.NewRequest("GET", "/", nil)
req.Host = "myapp.orama.network"
rr := httptest.NewRecorder()
middleware.ServeHTTP(rr, req)
if !nextCalled {
t.Error("Expected next handler to be called when deployment service is nil")
}
if rr.Code != http.StatusOK {
t.Errorf("Expected status 200, got %d", rr.Code)
}
}