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

193 lines
6.2 KiB
Markdown

# 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.disabled``body.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:
```bash
# 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.