Files
Charon/docs/implementation/FRONTEND_TEST_HANG_FIX.md
GitHub Actions b86aa3921b feat(dns): add custom DNS provider plugin system
- Add plugin interface with lifecycle hooks (Init/Cleanup)
- Implement thread-safe provider registry
- Add plugin loader with SHA-256 signature verification
- Migrate 10 built-in providers to registry pattern
- Add multi-credential support to plugin interface
- Create plugin management UI with enable/disable controls
- Add dynamic credential fields based on provider metadata
- Include PowerDNS example plugin
- Add comprehensive user & developer documentation
- Fix frontend test hang (33min → 1.5min, 22x faster)

Platform: Linux/macOS only (Go plugin limitation)
Security: Signature verification, directory permission checks

Backend coverage: 85.1%
Frontend coverage: 85.31%

Closes: DNS Challenge Future Features - Phase 5
2026-01-07 02:54:01 +00:00

2.7 KiB

Frontend Test Hang Fix

Problem

Frontend tests took 1972 seconds (33 minutes) instead of the expected 2-3 minutes.

Root Cause

  1. Missing frontend/src/setupTests.ts file that was referenced in vite.config.ts
  2. No test timeout configuration in Vitest
  3. Outdated backend tests referencing non-existent functions

Solutions Applied

1. Created Missing Setup File

File: frontend/src/setupTests.ts

import '@testing-library/jest-dom'

// Setup for vitest testing environment

2. Added Test Timeouts

File: frontend/vite.config.ts

test: {
  globals: true,
  environment: 'jsdom',
  setupFiles: './src/setupTests.ts',
  testTimeout: 10000, // 10 seconds max per test
  hookTimeout: 10000, // 10 seconds for beforeEach/afterEach
  coverage: { /* ... */ }
}

3. Fixed Backend Test Issues

  • Fixed: backend/internal/api/handlers/dns_provider_handler_test.go

    • Updated MockDNSProviderService.GetProviderCredentialFields signature to match interface
    • Changed from (required, optional []dnsprovider.CredentialFieldSpec, err error) to ([]dnsprovider.CredentialFieldSpec, error)
  • Removed: Outdated test files and functions:

    • backend/internal/services/plugin_loader_test.go (referenced non-existent NewPluginLoader)
    • TestValidateCredentials_AllRequiredFields (referenced non-existent ProviderCredentialFields)
    • TestValidateCredentials_MissingEachField (referenced non-existent constants)
    • TestSupportedProviderTypes (referenced non-existent SupportedProviderTypes)

Results

Before Fix

  • Frontend tests: 1972 seconds (33 minutes)
  • Status: Hanging, eventually passing

After Fix

  • Frontend tests: 88 seconds (1.5 minutes)
  • Speed improvement: 22x faster
  • Status: Passing reliably

QA Suite Status

All QA checks now passing:

  • Backend coverage: 85.1% (threshold: 85%)
  • Frontend coverage: 85.31% (threshold: 85%)
  • TypeScript check: Passed
  • Pre-commit hooks: Passed
  • Go vet: Passed
  • CodeQL scans (Go + JS): Completed

Prevention

To prevent similar issues in the future:

  1. Always create setup files referenced in config before running tests
  2. Set reasonable test timeouts to catch hanging tests early
  3. Keep tests in sync with code - remove/update tests when refactoring
  4. Run go vet locally before committing to catch type mismatches

Files Modified

  1. /frontend/src/setupTests.ts (created)
  2. /frontend/vite.config.ts (added timeouts)
  3. /backend/internal/api/handlers/dns_provider_handler_test.go (fixed mock signature)
  4. /backend/internal/services/plugin_loader_test.go (deleted)
  5. /backend/internal/services/dns_provider_service_test.go (removed outdated tests)