log_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package internal
  2. import (
  3. "bytes"
  4. "log"
  5. "log/slog"
  6. "net/http"
  7. "strings"
  8. "testing"
  9. )
  10. func TestErrorLogFilter(t *testing.T) {
  11. var buf bytes.Buffer
  12. destLogger := log.New(&buf, "", 0)
  13. errorFilterWriter := &ErrorLogFilter{Unwrap: destLogger}
  14. testErrorLogger := log.New(errorFilterWriter, "", 0)
  15. // Test Case 1: Suppressed message
  16. suppressedMessage := "http: proxy error: context canceled"
  17. testErrorLogger.Println(suppressedMessage)
  18. if buf.Len() != 0 {
  19. t.Errorf("Suppressed message was written to output. Output: %q", buf.String())
  20. }
  21. buf.Reset()
  22. // Test Case 2: Allowed message
  23. allowedMessage := "http: another error occurred"
  24. testErrorLogger.Println(allowedMessage)
  25. output := buf.String()
  26. if !strings.Contains(output, allowedMessage) {
  27. t.Errorf("Allowed message was not written to output. Output: %q", output)
  28. }
  29. if !strings.HasSuffix(output, "\n") {
  30. t.Errorf("Allowed message output is missing newline. Output: %q", output)
  31. }
  32. buf.Reset()
  33. // Test Case 3: Partially matching message (should be suppressed)
  34. partiallyMatchingMessage := "Some other log before http: proxy error: context canceled and after"
  35. testErrorLogger.Println(partiallyMatchingMessage)
  36. if buf.Len() != 0 {
  37. t.Errorf("Partially matching message was written to output. Output: %q", buf.String())
  38. }
  39. buf.Reset()
  40. }
  41. func TestGetRequestLogger(t *testing.T) {
  42. // Test case 1: Normal request with Host header
  43. req1, _ := http.NewRequest("GET", "http://example.com/test", nil)
  44. req1.Host = "example.com"
  45. logger := slog.Default()
  46. reqLogger := GetRequestLogger(logger, req1)
  47. // We can't easily test the actual log output without setting up a test handler,
  48. // but we can verify the function doesn't panic and returns a logger
  49. if reqLogger == nil {
  50. t.Error("GetRequestLogger returned nil")
  51. }
  52. // Test case 2: Subrequest auth mode with X-Forwarded-Host
  53. req2, _ := http.NewRequest("GET", "http://test.com/auth", nil)
  54. req2.Host = ""
  55. req2.Header.Set("X-Forwarded-Host", "original-site.com")
  56. reqLogger2 := GetRequestLogger(logger, req2)
  57. if reqLogger2 == nil {
  58. t.Error("GetRequestLogger returned nil for X-Forwarded-Host case")
  59. }
  60. // Test case 3: No host information available
  61. req3, _ := http.NewRequest("GET", "http://test.com/nohost", nil)
  62. req3.Host = ""
  63. reqLogger3 := GetRequestLogger(logger, req3)
  64. if reqLogger3 == nil {
  65. t.Error("GetRequestLogger returned nil for no host case")
  66. }
  67. }