Skip to content

Pre-Existing Test Failures #458

@github-actions

Description

@github-actions

Pre-Existing Test Failures

Discovery Date: December 23, 2025
Discovered During: CrowdSec Startup Fix QA Audit
Status: Open
Priority: Medium

Overview

During comprehensive QA audit of the CrowdSec startup fix (commit c71c996), two categories of pre-existing test failures were discovered. These failures are NOT related to the CrowdSec changes and exist on the base branch (feature/beta-release).

Issue 1: Handler Tests Timeout

Package: github.com/Wikid82/charon/backend/internal/api/handlers
Severity: Medium
Impact: CI/CD pipeline delays

Symptoms

FAIL: github.com/Wikid82/charon/backend/internal/api/handlers (timeout 441s)
  • Test suite takes 7.35 minutes (441 seconds)
  • Default timeout is 10 minutes, but this is too close
  • All tests eventually pass, but timing is concerning

Root Cause

  • Test suite contains numerous integration tests that make real HTTP requests
  • No apparent infinite loop or deadlock
  • Tests are comprehensive but slow

Affected Tests

All handler tests, including:

  • Access list handlers
  • Auth handlers
  • Backup handlers
  • CrowdSec handlers
  • Docker handlers
  • Import handlers
  • Notification handlers
  • Proxy host handlers
  • Security handlers
  • User handlers

Recommended Fix

Option 1: Increase Timeout

go test -timeout 15m ./internal/api/handlers/...

Option 2: Split Test Suite

# Fast unit tests
go test -short ./internal/api/handlers/...

# Slow integration tests (separate)
go test -run Integration ./internal/api/handlers/...

Option 3: Optimize Tests

  • Use mocks for external HTTP calls
  • Parallelize independent tests with t.Parallel()
  • Use table-driven tests to reduce setup/teardown overhead

Priority Justification

  • Medium because tests do eventually pass
  • Not a functional issue, timing concern only
  • Can workaround with increased timeout
  • Should be fixed to improve CI/CD performance

Issue 2: URL Connectivity Test Failures

Package: github.com/Wikid82/charon/backend/internal/utils
Severity: Medium
Impact: URL validation feature may not work correctly for localhost

Symptoms

FAIL: github.com/Wikid82/charon/backend/internal/utils
Coverage: 51.5% (below 85% threshold)

Failed Tests:
- TestTestURLConnectivity_Success
- TestTestURLConnectivity_Redirect
- TestTestURLConnectivity_TooManyRedirects
- TestTestURLConnectivity_StatusCodes/200_OK
- TestTestURLConnectivity_StatusCodes/201_Created
- TestTestURLConnectivity_StatusCodes/204_No_Content
- TestTestURLConnectivity_StatusCodes/301_Moved_Permanently
- TestTestURLConnectivity_StatusCodes/302_Found
- TestTestURLConnectivity_StatusCodes/400_Bad_Request
- TestTestURLConnectivity_StatusCodes/401_Unauthorized
- TestTestURLConnectivity_StatusCodes/403_Forbidden
- TestTestURLConnectivity_StatusCodes/404_Not_Found
- TestTestURLConnectivity_StatusCodes/500_Internal_Server_Error
- TestTestURLConnectivity_StatusCodes/503_Service_Unavailable
- TestTestURLConnectivity_InvalidURL/Empty_URL
- TestTestURLConnectivity_InvalidURL/Invalid_scheme
- TestTestURLConnectivity_InvalidURL/No_scheme
- TestTestURLConnectivity_Timeout

Root Cause

Error Pattern:

Error: "access to private IP addresses is blocked (resolved to 127.0.0.1)"
       does not contain "status 404"

Analysis:

  1. Tests use httptest.NewServer() which binds to 127.0.0.1 (localhost)
  2. URL validation code has private IP blocking for security
  3. Private IP check runs BEFORE HTTP request is made
  4. Tests expect HTTP status codes but get IP validation errors instead
  5. This creates a mismatch between expected and actual error messages

Code Location:

// File: backend/internal/utils/url_connectivity_test.go
// Lines: 103, 127-128, 156

// Test expects:
assert.Contains(t, err.Error(), "status 404")

// But gets:
"access to private IP addresses is blocked (resolved to 127.0.0.1)"

Recommended Fix

Option 1: Use Public Test Endpoints

func TestTestURLConnectivity_StatusCodes(t *testing.T) {
    tests := []struct {
        name       string
        statusCode int
        url        string
    }{
        {"200 OK", 200, "https://httpstat.us/200"},
        {"404 Not Found", 404, "https://httpstat.us/404"},
        // ... use public endpoints
    }
}

Option 2: Add Test-Only Bypass

// In url_connectivity.go
func TestURLConnectivity(url string) error {
    // Add env var to disable private IP check for tests
    if os.Getenv("CHARON_ALLOW_PRIVATE_IPS_FOR_TESTS") == "true" {
        // Skip private IP validation
    }

    // ... rest of validation
}

// In test setup:
func TestMain(m *testing.M) {
    os.Setenv("CHARON_ALLOW_PRIVATE_IPS_FOR_TESTS", "true")
    code := m.Run()
    os.Unsetenv("CHARON_ALLOW_PRIVATE_IPS_FOR_TESTS")
    os.Exit(code)
}

Option 3: Mock DNS Resolution

// Use custom dialer that returns public IPs for test domains
type testDialer struct {
    realDialer *net.Dialer
}

func (d *testDialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
    // Intercept localhost and return mock IP
    if strings.HasPrefix(addr, "127.0.0.1:") {
        // Return connection to test server but with public IP appearance
    }
    return d.realDialer.DialContext(ctx, network, addr)
}

Priority Justification

  • Medium because feature works in production
  • Tests are catching security feature (private IP blocking) working as intended
  • Need to fix test design, not the security feature
  • Affects coverage reporting (51.5% < 85% threshold)

Issue 3: Pre-commit Auto-Fix Required

Severity: Low
Impact: None (auto-fixed)

Symptoms

trim trailing whitespace.................................................Failed
- hook id: trailing-whitespace
- exit code: 1
- files were modified by this hook
Fixing backend/internal/services/crowdsec_startup.go
Fixing backend/cmd/api/main.go

Resolution

Pre-commit hook automatically removed trailing whitespace. Files have been fixed.

Action Required:NONE (auto-fixed)


Tracking

Issue 1: Handler Tests Timeout

  • Tracking Issue: [Create GitHub Issue]
  • Assignee: Backend Team
  • Target Fix Date: Next sprint
  • Workaround: go test -timeout 15m

Issue 2: URL Connectivity Tests

  • Tracking Issue: [Create GitHub Issue]
  • Assignee: Backend Team
  • Target Fix Date: Next sprint
  • Workaround: Skip tests with -short flag

Issue 3: Trailing Whitespace

  • Status:RESOLVED (auto-fixed)

References


Document Status: Active
Last Updated: December 23, 2025 01:25 UTC


Auto-created from pre-existing-test-failures.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions