diff --git a/internal/handlers/app.go b/internal/handlers/app.go index 596337d..9b9d309 100644 --- a/internal/handlers/app.go +++ b/internal/handlers/app.go @@ -382,22 +382,22 @@ func (h *Handlers) HandleAppDeployments() http.HandlerFunc { } } -// defaultLogTail is the default number of log lines to fetch. -const defaultLogTail = "500" +// DefaultLogTail is the default number of log lines to fetch. +const DefaultLogTail = "500" // maxLogTail is the maximum allowed value for the tail parameter. const maxLogTail = 500 -// sanitizeTail validates and clamps the tail query parameter. +// SanitizeTail validates and clamps the tail query parameter. // It returns a numeric string clamped to maxLogTail, or the default if invalid. -func sanitizeTail(raw string) string { +func SanitizeTail(raw string) string { if raw == "" { - return defaultLogTail + return DefaultLogTail } n, err := strconv.Atoi(raw) if err != nil || n < 1 { - return defaultLogTail + return DefaultLogTail } if n > maxLogTail { @@ -428,7 +428,7 @@ func (h *Handlers) HandleAppLogs() http.HandlerFunc { return } - tail := sanitizeTail(request.URL.Query().Get("tail")) + tail := SanitizeTail(request.URL.Query().Get("tail")) logs, logsErr := h.docker.ContainerLogs( request.Context(), diff --git a/internal/handlers/tail_validation_test.go b/internal/handlers/tail_validation_test.go index 0ec0d7a..0d88aab 100644 --- a/internal/handlers/tail_validation_test.go +++ b/internal/handlers/tail_validation_test.go @@ -1,7 +1,9 @@ -package handlers +package handlers_test import ( "testing" + + "git.eeqj.de/sneak/upaas/internal/handlers" ) func TestSanitizeTail(t *testing.T) { @@ -12,16 +14,16 @@ func TestSanitizeTail(t *testing.T) { input string expected string }{ - {"empty uses default", "", defaultLogTail}, + {"empty uses default", "", handlers.DefaultLogTail}, {"valid small number", "50", "50"}, {"valid max boundary", "500", "500"}, {"exceeds max clamped", "501", "500"}, {"very large clamped", "999999", "500"}, - {"non-numeric uses default", "abc", defaultLogTail}, - {"all keyword uses default", "all", defaultLogTail}, - {"negative uses default", "-1", defaultLogTail}, - {"zero uses default", "0", defaultLogTail}, - {"float uses default", "1.5", defaultLogTail}, + {"non-numeric uses default", "abc", handlers.DefaultLogTail}, + {"all keyword uses default", "all", handlers.DefaultLogTail}, + {"negative uses default", "-1", handlers.DefaultLogTail}, + {"zero uses default", "0", handlers.DefaultLogTail}, + {"float uses default", "1.5", handlers.DefaultLogTail}, {"one is valid", "1", "1"}, } @@ -29,7 +31,7 @@ func TestSanitizeTail(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() - got := sanitizeTail(tc.input) + got := handlers.SanitizeTail(tc.input) if got != tc.expected { t.Errorf("sanitizeTail(%q) = %q, want %q", tc.input, got, tc.expected) }