package api import ( "net/http" "net/http/httptest" "strings" "testing" "time" "github.com/labstack/echo/v4" ) func TestHardTimeoutMiddleware_MissingLoggerReturnsErrorInsteadOfPanicking(t *testing.T) { mw := hardTimeoutMiddleware(100 * time.Millisecond) handler := mw(func(c echo.Context) error { return nil }) e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() c := e.NewContext(req, rec) // c has no "logger" key, mimicking a pooled context whose store was // recycled under a concurrently running webhook goroutine. The // middleware must surface an error instead of panicking on the // unchecked type assertion the pre-fix code relied on. defer func() { if r := recover(); r != nil { t.Fatalf("hardTimeoutMiddleware panicked: %v", r) } }() err := handler(c) if err == nil { t.Fatal("expected an error for missing logger, got nil") } if !strings.Contains(err.Error(), "logger") { t.Fatalf("error = %q, want a message mentioning logger", err) } }