3.6 KiB
3.6 KiB
DCRouter Test Configuration
Running Tests
Run All Tests
cd dcrouter
pnpm test
Run Specific Category
# Run all connection tests
tsx test/run-category.ts connection
# Run all security tests
tsx test/run-category.ts security
# Run all performance tests
tsx test/run-category.ts performance
Run Individual Test File
# Run TLS connection test
tsx test/suite/connection/test.tls-connection.ts
# Run authentication test
tsx test/suite/security/test.authentication.ts
Run Tests with Verbose Output
# All tests with verbose logging
pnpm test -- --verbose
# Individual test with verbose
tsx test/suite/connection/test.tls-connection.ts --verbose
Test Server Configuration
Each test file starts its own SMTP server with specific configuration. Common configurations:
Basic Server
const testServer = await startTestServer({
port: 2525,
hostname: 'localhost'
});
TLS-Enabled Server
const testServer = await startTestServer({
port: 2525,
hostname: 'localhost',
tlsEnabled: true
});
Authenticated Server
const testServer = await startTestServer({
port: 2525,
hostname: 'localhost',
authRequired: true
});
High-Performance Server
const testServer = await startTestServer({
port: 2525,
hostname: 'localhost',
maxConnections: 1000,
size: 50 * 1024 * 1024 // 50MB
});
Port Allocation
Tests use different ports to avoid conflicts:
- Connection tests: 2525-2530
- Command tests: 2531-2540
- Email processing: 2541-2550
- Security tests: 2551-2560
- Performance tests: 2561-2570
- Edge cases: 2571-2580
- RFC compliance: 2581-2590
Test Utilities
Server Lifecycle
All tests follow this pattern:
import { tap, expect } from '@git.zone/tstest/tapbundle';
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
let testServer;
tap.test('setup', async () => {
testServer = await startTestServer({ port: 2525 });
});
// Your tests here...
tap.test('cleanup', async () => {
await stopTestServer(testServer);
});
tap.start();
SMTP Client Testing
import { createTestSmtpClient } from '../../helpers/smtp.client.js';
const client = createTestSmtpClient({
host: 'localhost',
port: 2525
});
Low-Level SMTP Testing
import { connectToSmtp, sendSmtpCommand } from '../../helpers/test.utils.js';
const socket = await connectToSmtp('localhost', 2525);
const response = await sendSmtpCommand(socket, 'EHLO test.example.com', '250');
Performance Benchmarks
Expected minimums for production:
- Throughput: >10 emails/second
- Concurrent connections: >100
- Memory increase: <2% under load
- Connection time: <5000ms
- Error rate: <5%
Debugging Failed Tests
Enable Verbose Logging
DEBUG=* tsx test/suite/connection/test.tls-connection.ts
Check Server Logs
Tests output server logs to console. Look for:
- 🚀 Server start messages
- 📧 Email processing logs
- ❌ Error messages
- ✅ Success confirmations
Common Issues
-
Port Already in Use
- Tests use unique ports
- Check for orphaned processes:
lsof -i :2525
- Kill process:
kill -9 <PID>
-
TLS Certificate Errors
- Tests use self-signed certificates
- Production should use real certificates
-
Timeout Errors
- Increase timeout in test configuration
- Check network connectivity
- Verify server started successfully
-
Authentication Failures
- Test servers may not validate credentials
- Check authRequired configuration
- Verify AUTH mechanisms supported