Files
Charon/docs/reports/e2e_validation_report.md
GitHub Actions 0da6f7620c fix: restore PATCH endpoints used by E2E + emergency-token fallback
register PATCH /api/v1/settings and PATCH /api/v1/security/acl (E2E expectations)
add emergency-token-aware shortcut handlers (validate X-Emergency-Token → set admin context → invoke handler)
preserve existing POST handlers and backward compatibility
rebuild & redeploy E2E image, verified backend build success
Why: unblocked failing Playwright E2E tests that returned 404s and were blocking the hotfix release
2026-01-27 22:43:33 +00:00

6.2 KiB

E2E Test Validation Report

Date: 2026-01-27 Objective: Validate 99% pass rate (157/159 tests) after emergency reset fixes Status: FAIL


Executive Summary

Current Status: 110/159 tests passing (69% - BELOW TARGET) Target: 157/159 (99%) Gap: 47 tests

Critical Finding

Emergency token configuration issues prevented proper test setup, causing cascading failures across security enforcement test suites.


Root Cause Analysis

Issue 1: Emergency Token Mismatch (RESOLVED)

  • .env token: 7b3b8a36...40e2
  • Container token: f51dedd6...346b
  • Resolution: Updated .env to match container configuration

Issue 2: Emergency Reset Endpoint Configuration (PARTIALLY RESOLVED)

Problems identified:

  1. Wrong API path: /api/v1/emergency/security-reset/emergency/security-reset
  2. Missing basic auth credentials (admin:changeme)
  3. Wrong response field access: body.disabledbody.disabled_modules
  4. Emergency server runs on port 2020, not 8080

Files Fixed:

  • tests/security-teardown.setup.ts - Fixed and validated
  • tests/global-setup.ts - Fixed but not taking effect

Issue 3: Test Execution Timing

Security tests fail because ACL is already enabled when they start, suggesting global-setup emergency reset is not executing successfully.


Test Results Breakdown

Overall Metrics

Total Tests:    159
✅ Passed:      110 (69%)
❌ Failed:      20
⏭️ Skipped:     29

By Category

Passing Categories

Category Status Count
Security Teardown PASS 1/1
Emergency Reset (Break-Glass) PASS 4/5
Security Headers PASS 4/4
Browser Tests PASS ~100

Failing Categories (ACL Blocking)

Category Expected Actual Root Cause
ACL Enforcement 5/5 0/5 ACL enabled, blocking test setup
Combined Enforcement 5/5 0/5 ACL blocking module enable calls
CrowdSec Enforcement 3/3 0/3 ACL blocking beforeAll setup
Emergency Token Protocol 8/8 0/7 (7 skipped) Suite setup fails with 404
Rate Limit Enforcement 3/3 0/3 ACL blocking test setup
WAF Enforcement 4/4 0/4 ACL blocking test setup

Specific Failure Examples

Security Teardown (RESOLVED )

Test: disable-all-security-modules
Status: ✅ PASS (was failing with TypeError)
Fix: Corrected emergency endpoint, auth, and response handling
Output: "Emergency reset successful: feature.cerberus.enabled, security.acl.enabled..."

ACL Enforcement Tests (BLOCKED )

Error: Failed to get security status: 403 {"error":"Blocked by access control list"}
Impact: All 5 ACL tests fail
Cause: Tests can't capture initial state because ACL is already enabled

Emergency Token Protocol (SETUP FAILURE )

Error: Failed to enable ACL for test suite: 404
Impact: Test suite setup fails, 7 tests skipped
Cause: Endpoint /api/v1/security/acl not found (correct path unknown)

Comparison: Before vs After

Metric Before (Baseline) After Fix Target Gap
Pass Rate 116/159 (73%) 110/159 (69%) 157/159 (99%) -47 tests
Security Teardown FAIL (TypeError) PASS PASS
ACL Tests Status unknown 0/5 5/5 -5
Emergency Token Status unknown 1/8 7/8 -6

Note: Pass rate decreased slightly because previously-passing tests are now correctly detecting ACL blocking issues.


Recommendations

Immediate Actions (Required for 99% Target)

  1. Ensure Global Setup Emergency Reset Works

    • Verify global-setup.ts changes are loaded (no caching)
    • Test emergency reset manually: curl -u admin:changeme -X POST http://localhost:2020/emergency/security-reset ...
    • Add debug logging to confirm global-setup execution path
  2. Fix Emergency Token Test Suite Setup

    • Identify correct endpoint for enabling ACL programmatically
    • Option 1: Use /api/v1/settings with {"key":"security.acl.enabled", "value":"true"}
    • Option 2: Use emergency token to bypass, then enable ACL
    • Add retry logic with emergency reset fallback
  3. Verify Container State

    • Containers may need restart to pick up environment changes
    • Confirm .env token matches all running containers
    • Check if ACL is enabled by default in container startup

Testing Protocol

Before next test run:

# 1. Verify emergency token
grep CHARON_EMERGENCY_TOKEN .env

# 2. Test emergency reset manually
curl -u admin:changeme \
  -H "X-Emergency-Token: f51dedd6a4f2eaa200dcbf4feecae78ff926e06d9094d726f3613729b66d346b" \
  -X POST http://localhost:2020/emergency/security-reset \
  -H "Content-Type: application/json" \
  -d '{"reason":"Manual validation"}'

# 3. Verify security modules disabled
curl -u admin:changeme http://localhost:8080/api/v1/security/status

# 4. Run targeted test
npx playwright test tests/security-teardown.setup.ts

# 5. Run full suite
npx playwright test --project=chromium

Next Steps

Priority: Return to Backend_Dev

Required Fixes:

  1. Investigate why global-setup emergency reset returns 401 despite correct configuration
  2. Identify correct API endpoint for programmatically enabling/disabling ACL
  3. Consider adding container restart to test setup if environment changes require it

Alternative Approach (if current method continues to fail):

  • Disable ACL in container by default
  • Have security tests explicitly enable ACL before running
  • Use emergency reset only as fallback/cleanup

Sign-Off

Validation Status: FAIL Pass Rate: 69% (110/159) Target: 99% (157/159) Gap: 47 tests (30% shortfall)

Blocking Issues:

  1. Global-setup emergency reset not disabling ACL before tests start
  2. Emergency token test suite setup failing with 404 error
  3. All security enforcement tests blocked by ACL (403 errors)

Successful Fixes:

  • Security teardown emergency reset now works correctly
  • Emergency reset endpoint configuration corrected
  • Emergency token matching container configuration

Recommendation: Return to Backend_Dev for remaining fixes before attempting validation again.