This commit is contained in:
2025-05-24 14:50:24 +00:00
parent 6e19e30f87
commit 3d669ed9dd
2 changed files with 363 additions and 303 deletions

View File

@@ -1,49 +1,33 @@
# DCRouter SMTP Test Suite # DCRouter SMTP Test Suite
This comprehensive test suite validates the production readiness of the dcrouter SMTP implementation. All tests are built using TypeScript with tstest/tapbundle/smartexpect for consistent test patterns across the codebase.
## 📊 Test Status Legend
**Test Result Status**:
| Status | Symbol | Meaning | Description |
|--------|--------|---------|-------------|
| **✅ PASSED** | ✅ | Test executed and passed | Test ran successfully and all assertions passed |
| **❌ FAILED** | ❌ | Test executed but failed | Test ran but assertions failed or errors occurred |
| **⚠️ TIMEOUT** | ⚠️ | Test execution timed out | Test exceeded maximum execution time limit |
| **🔧 VALIDATION** | 🔧 | Expected validation passed | Test confirmed proper error handling/validation works |
## 📈 Production Readiness Levels
| Level | Symbol | Criteria | Description |
|-------|--------|----------|-------------|
| **🟢 PRODUCTION READY** | 🟢 | ≥80% success rate | Component validated for production deployment |
| **🟡 NEAR READY** | 🟡 | 60-79% success rate | Component needs minor fixes before production |
| **🟠 DEVELOPMENT** | 🟠 | 40-59% success rate | Component in active development, not production ready |
| **🔴 NOT READY** | 🔴 | <40% success rate | Component requires significant work before production |
## Test Organization
Tests are organized into logical categories within the `suite/` directory:
``` ```
test/ test/
├── readme.md # This file ├── readme.md # This file
├── helpers/ ├── helpers/
│ ├── server.loader.ts # SMTP server lifecycle management │ ├── server.loader.ts # SMTP server lifecycle management
│ ├── utils.ts # Common test utilities │ ├── utils.ts # Common test utilities
│ └── smtp.client.ts # Test SMTP client utilities │ └── smtp.client.ts # Test SMTP client utilities
└── suite/ └── suite/
├── connection/ # Connection management tests (CM) ├── smtpserver_commands/ # SMTP command tests (CMD)
├── commands/ # SMTP command tests (CMD) ├── smtpserver_connection/ # Connection management tests (CM)
├── email-processing/ # Email processing tests (EP) ├── smtpserver_edge-cases/ # Edge case tests (EDGE)
├── security/ # Security tests (SEC) ├── smtpserver_email-processing/ # Email processing tests (EP)
├── error-handling/ # Error handling tests (ERR) ├── smtpserver_error-handling/ # Error handling tests (ERR)
├── performance/ # Performance tests (PERF) ├── smtpserver_performance/ # Performance tests (PERF)
├── reliability/ # Reliability tests (REL) ├── smtpserver_reliability/ # Reliability tests (REL)
├── edge-cases/ # Edge case tests (EDGE) ├── smtpserver_rfc-compliance/ # RFC compliance tests (RFC)
└── rfc-compliance/ # RFC compliance tests (RFC) └── smtpserver_security/ # Security tests (SEC)
``` ```
## Test ID Convention
All test files follow a strict naming convention: `test.<category-id>.<description>.ts`
Examples:
- `test.cmd-01.ehlo-command.ts` - EHLO command test
- `test.cm-01.tls-connection.ts` - TLS connection test
- `test.sec-01.authentication.ts` - Authentication test
## Test Categories ## Test Categories
### 1. Connection Management (CM) ### 1. Connection Management (CM)
@@ -52,17 +36,17 @@ Tests for validating SMTP connection handling, TLS support, and connection lifec
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|-------|-------------------------------------------|----------|----------------| |-------|-------------------------------------------|----------|----------------|
| CM-01 | TLS Connection Test | High | `suite/connection/test.tls-connection.ts` | | CM-01 | TLS Connection Test | High | `suite/smtpserver_connection/test.cm-01.tls-connection.ts` |
| CM-02 | Multiple Simultaneous Connections | High | `suite/connection/test.multiple-connections.ts` | | CM-02 | Multiple Simultaneous Connections | High | `suite/smtpserver_connection/test.cm-02.multiple-connections.ts` |
| CM-03 | Connection Timeout | High | `suite/connection/test.connection-timeout.ts` | | CM-03 | Connection Timeout | High | `suite/smtpserver_connection/test.cm-03.connection-timeout.ts` |
| CM-04 | Connection Limits | Medium | `suite/connection/test.connection-limits.ts` | | CM-04 | Connection Limits | Medium | `suite/smtpserver_connection/test.cm-04.connection-limits.ts` |
| CM-05 | Connection Rejection | Medium | `suite/connection/test.connection-rejection.ts` | | CM-05 | Connection Rejection | Medium | `suite/smtpserver_connection/test.cm-05.connection-rejection.ts` |
| CM-06 | STARTTLS Connection Upgrade | High | `suite/connection/test.starttls-upgrade.ts` | | CM-06 | STARTTLS Connection Upgrade | High | `suite/smtpserver_connection/test.cm-06.starttls-upgrade.ts` |
| CM-07 | Abrupt Client Disconnection | Medium | `suite/connection/test.abrupt-disconnection.ts` | | CM-07 | Abrupt Client Disconnection | Medium | `suite/smtpserver_connection/test.cm-07.abrupt-disconnection.ts` |
| CM-08 | TLS Version Compatibility | Medium | `suite/connection/test.tls-versions.ts` | | CM-08 | TLS Version Compatibility | Medium | `suite/smtpserver_connection/test.cm-08.tls-versions.ts` |
| CM-09 | TLS Cipher Configuration | Medium | `suite/connection/test.tls-ciphers.ts` | | CM-09 | TLS Cipher Configuration | Medium | `suite/smtpserver_connection/test.cm-09.tls-ciphers.ts` |
| CM-10 | Plain Connection Test | Low | `suite/connection/test.plain-connection.ts` | | CM-10 | Plain Connection Test | Low | `suite/smtpserver_connection/test.cm-10.plain-connection.ts` |
| CM-11 | TCP Keep-Alive Test | Low | `suite/connection/test.keepalive.ts` | | CM-11 | TCP Keep-Alive Test | Low | `suite/smtpserver_connection/test.cm-11.keepalive.ts` |
### 2. SMTP Commands (CMD) ### 2. SMTP Commands (CMD)
@@ -70,19 +54,19 @@ Tests for validating proper SMTP protocol command implementation.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------| |--------|-------------------------------------------|----------|----------------|
| CMD-01 | EHLO Command | High | `suite/commands/test.ehlo-command.ts` | | CMD-01 | EHLO Command | High | `suite/smtpserver_commands/test.cmd-01.ehlo-command.ts` |
| CMD-02 | MAIL FROM Command | High | `suite/commands/test.mail-from.ts` | | CMD-02 | MAIL FROM Command | High | `suite/smtpserver_commands/test.cmd-02.mail-from.ts` |
| CMD-03 | RCPT TO Command | High | `suite/commands/test.rcpt-to.ts` | | CMD-03 | RCPT TO Command | High | `suite/smtpserver_commands/test.cmd-03.rcpt-to.ts` |
| CMD-04 | DATA Command | High | `suite/commands/test.data-command.ts` | | CMD-04 | DATA Command | High | `suite/smtpserver_commands/test.cmd-04.data-command.ts` |
| CMD-05 | NOOP Command | Medium | `suite/commands/test.noop-command.ts` | | CMD-05 | NOOP Command | Medium | `suite/smtpserver_commands/test.cmd-05.noop-command.ts` |
| CMD-06 | RSET Command | Medium | `suite/commands/test.rset-command.ts` | | CMD-06 | RSET Command | Medium | `suite/smtpserver_commands/test.cmd-06.rset-command.ts` |
| CMD-07 | VRFY Command | Low | `suite/commands/test.vrfy-command.ts` | | CMD-07 | VRFY Command | Low | `suite/smtpserver_commands/test.cmd-07.vrfy-command.ts` |
| CMD-08 | EXPN Command | Low | `suite/commands/test.expn-command.ts` | | CMD-08 | EXPN Command | Low | `suite/smtpserver_commands/test.cmd-08.expn-command.ts` |
| CMD-09 | SIZE Extension | Medium | `suite/commands/test.size-extension.ts` | | CMD-09 | SIZE Extension | Medium | `suite/smtpserver_commands/test.cmd-09.size-extension.ts` |
| CMD-10 | HELP Command | Low | `suite/commands/test.help-command.ts` | | CMD-10 | HELP Command | Low | `suite/smtpserver_commands/test.cmd-10.help-command.ts` |
| CMD-11 | Command Pipelining | Medium | `suite/commands/test.command-pipelining.ts` | | CMD-11 | Command Pipelining | Medium | `suite/smtpserver_commands/test.cmd-11.command-pipelining.ts` |
| CMD-12 | HELO Command | Low | `suite/commands/test.helo-command.ts` | | CMD-12 | HELO Command | Low | `suite/smtpserver_commands/test.cmd-12.helo-command.ts` |
| CMD-13 | QUIT Command | High | `suite/commands/test.quit-command.ts` | | CMD-13 | QUIT Command | High | `suite/smtpserver_commands/test.cmd-13.quit-command.ts` |
### 3. Email Processing (EP) ### 3. Email Processing (EP)
@@ -90,15 +74,15 @@ Tests for validating email content handling, parsing, and delivery.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|-------|-------------------------------------------|----------|----------------| |-------|-------------------------------------------|----------|----------------|
| EP-01 | Basic Email Sending | High | `suite/email-processing/test.basic-email.ts` | | EP-01 | Basic Email Sending | High | `suite/smtpserver_email-processing/test.ep-01.basic-email-sending.ts` |
| EP-02 | Invalid Email Address Handling | High | `suite/email-processing/test.invalid-addresses.ts` | | EP-02 | Invalid Email Address Handling | High | `suite/smtpserver_email-processing/test.ep-02.invalid-email-addresses.ts` |
| EP-03 | Multiple Recipients | Medium | `suite/email-processing/test.multiple-recipients.ts` | | EP-03 | Multiple Recipients | Medium | `suite/smtpserver_email-processing/test.ep-03.multiple-recipients.ts` |
| EP-04 | Large Email Handling | High | `suite/email-processing/test.large-email.ts` | | EP-04 | Large Email Handling | High | `suite/smtpserver_email-processing/test.ep-04.large-email.ts` |
| EP-05 | MIME Handling | High | `suite/email-processing/test.mime-handling.ts` | | EP-05 | MIME Handling | High | `suite/smtpserver_email-processing/test.ep-05.mime-handling.ts` |
| EP-06 | Attachment Handling | Medium | `suite/email-processing/test.attachments.ts` | | EP-06 | Attachment Handling | Medium | `suite/smtpserver_email-processing/test.ep-06.attachment-handling.ts` |
| EP-07 | Special Character Handling | Medium | `suite/email-processing/test.special-chars.ts` | | EP-07 | Special Character Handling | Medium | `suite/smtpserver_email-processing/test.ep-07.special-character-handling.ts` |
| EP-08 | Email Routing | High | `suite/email-processing/test.email-routing.ts` | | EP-08 | Email Routing | High | `suite/smtpserver_email-processing/test.ep-08.email-routing.ts` |
| EP-09 | Delivery Status Notifications | Medium | `suite/email-processing/test.dsn.ts` | | EP-09 | Delivery Status Notifications | Medium | `suite/smtpserver_email-processing/test.ep-09.delivery-status-notifications.ts` |
### 4. Security (SEC) ### 4. Security (SEC)
@@ -106,17 +90,17 @@ Tests for validating security features and protections.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------| |--------|-------------------------------------------|----------|----------------|
| SEC-01 | Authentication | High | `suite/security/test.authentication.ts` | | SEC-01 | Authentication | High | `suite/smtpserver_security/test.sec-01.authentication.ts` |
| SEC-02 | Authorization | High | `suite/security/test.authorization.ts` | | SEC-02 | Authorization | High | `suite/smtpserver_security/test.sec-02.authorization.ts` |
| SEC-03 | DKIM Processing | High | `suite/security/test.dkim.ts` | | SEC-03 | DKIM Processing | High | `suite/smtpserver_security/test.sec-03.dkim-processing.ts` |
| SEC-04 | SPF Checking | High | `suite/security/test.spf.ts` | | SEC-04 | SPF Checking | High | `suite/smtpserver_security/test.sec-04.spf-checking.ts` |
| SEC-05 | DMARC Policy Enforcement | Medium | `suite/security/test.dmarc.ts` | | SEC-05 | DMARC Policy Enforcement | Medium | `suite/smtpserver_security/test.sec-05.dmarc-policy.ts` |
| SEC-06 | IP Reputation Checking | High | `suite/security/test.ip-reputation.ts` | | SEC-06 | IP Reputation Checking | High | `suite/smtpserver_security/test.sec-06.ip-reputation.ts` |
| SEC-07 | Content Scanning | Medium | `suite/security/test.content-scanning.ts` | | SEC-07 | Content Scanning | Medium | `suite/smtpserver_security/test.sec-07.content-scanning.ts` |
| SEC-08 | Rate Limiting | High | `suite/security/test.rate-limiting.ts` | | SEC-08 | Rate Limiting | High | `suite/smtpserver_security/test.sec-08.rate-limiting.ts` |
| SEC-09 | TLS Certificate Validation | High | `suite/security/test.tls-validation.ts` | | SEC-09 | TLS Certificate Validation | High | `suite/smtpserver_security/test.sec-09.tls-certificate-validation.ts` |
| SEC-10 | Header Injection Prevention | High | `suite/security/test.header-injection.ts` | | SEC-10 | Header Injection Prevention | High | `suite/smtpserver_security/test.sec-10.header-injection-prevention.ts` |
| SEC-11 | Bounce Management | Medium | `suite/security/test.bounce-management.ts` | | SEC-11 | Bounce Management | Medium | `suite/smtpserver_security/test.sec-11.bounce-management.ts` |
### 5. Error Handling (ERR) ### 5. Error Handling (ERR)
@@ -124,14 +108,14 @@ Tests for validating proper error handling and recovery.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------| |--------|-------------------------------------------|----------|----------------|
| ERR-01 | Syntax Error Handling | High | `suite/error-handling/test.syntax-errors.ts` | | ERR-01 | Syntax Error Handling | High | `suite/smtpserver_error-handling/test.err-01.syntax-errors.ts` |
| ERR-02 | Invalid Sequence Handling | High | `suite/error-handling/test.invalid-sequence.ts` | | ERR-02 | Invalid Sequence Handling | High | `suite/smtpserver_error-handling/test.err-02.invalid-sequence.ts` |
| ERR-03 | Temporary Failure Handling | Medium | `suite/error-handling/test.temp-failures.ts` | | ERR-03 | Temporary Failure Handling | Medium | `suite/smtpserver_error-handling/test.err-03.temporary-failures.ts` |
| ERR-04 | Permanent Failure Handling | Medium | `suite/error-handling/test.perm-failures.ts` | | ERR-04 | Permanent Failure Handling | Medium | `suite/smtpserver_error-handling/test.err-04.permanent-failures.ts` |
| ERR-05 | Resource Exhaustion Handling | High | `suite/error-handling/test.resource-exhaustion.ts` | | ERR-05 | Resource Exhaustion Handling | High | `suite/smtpserver_error-handling/test.err-05.resource-exhaustion.ts` |
| ERR-06 | Malformed MIME Handling | Medium | `suite/error-handling/test.malformed-mime.ts` | | ERR-06 | Malformed MIME Handling | Medium | `suite/smtpserver_error-handling/test.err-06.malformed-mime.ts` |
| ERR-07 | Exception Handling | High | `suite/error-handling/test.exceptions.ts` | | ERR-07 | Exception Handling | High | `suite/smtpserver_error-handling/test.err-07.exception-handling.ts` |
| ERR-08 | Error Logging | Medium | `suite/error-handling/test.error-logging.ts` | | ERR-08 | Error Logging | Medium | `suite/smtpserver_error-handling/test.err-08.error-logging.ts` |
### 6. Performance (PERF) ### 6. Performance (PERF)
@@ -139,13 +123,13 @@ Tests for validating performance characteristics and benchmarks.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|---------|------------------------------------------|----------|----------------| |---------|------------------------------------------|----------|----------------|
| PERF-01 | Throughput Testing | Medium | `suite/performance/test.throughput.ts` | | PERF-01 | Throughput Testing | Medium | `suite/smtpserver_performance/test.perf-01.throughput.ts` |
| PERF-02 | Concurrency Testing | High | `suite/performance/test.concurrency.ts` | | PERF-02 | Concurrency Testing | High | `suite/smtpserver_performance/test.perf-02.concurrency.ts` |
| PERF-03 | CPU Utilization | Medium | `suite/performance/test.cpu-usage.ts` | | PERF-03 | CPU Utilization | Medium | `suite/smtpserver_performance/test.perf-03.cpu-utilization.ts` |
| PERF-04 | Memory Usage | Medium | `suite/performance/test.memory-usage.ts` | | PERF-04 | Memory Usage | Medium | `suite/smtpserver_performance/test.perf-04.memory-usage.ts` |
| PERF-05 | Connection Processing Time | Medium | `suite/performance/test.connection-time.ts` | | PERF-05 | Connection Processing Time | Medium | `suite/smtpserver_performance/test.perf-05.connection-processing-time.ts` |
| PERF-06 | Message Processing Time | Medium | `suite/performance/test.message-time.ts` | | PERF-06 | Message Processing Time | Medium | `suite/smtpserver_performance/test.perf-06.message-processing-time.ts` |
| PERF-07 | Resource Cleanup | High | `suite/performance/test.resource-cleanup.ts` | | PERF-07 | Resource Cleanup | High | `suite/smtpserver_performance/test.perf-07.resource-cleanup.ts` |
### 7. Reliability (REL) ### 7. Reliability (REL)
@@ -153,12 +137,12 @@ Tests for validating system reliability and stability.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------| |--------|-------------------------------------------|----------|----------------|
| REL-01 | Long-Running Operation | High | `suite/reliability/test.long-running.ts` | | REL-01 | Long-Running Operation | High | `suite/smtpserver_reliability/test.rel-01.long-running-operation.ts` |
| REL-02 | Restart Recovery | High | `suite/reliability/test.restart-recovery.ts` | | REL-02 | Restart Recovery | High | `suite/smtpserver_reliability/test.rel-02.restart-recovery.ts` |
| REL-03 | Resource Leak Detection | High | `suite/reliability/test.resource-leaks.ts` | | REL-03 | Resource Leak Detection | High | `suite/smtpserver_reliability/test.rel-03.resource-leak-detection.ts` |
| REL-04 | Error Recovery | High | `suite/reliability/test.error-recovery.ts` | | REL-04 | Error Recovery | High | `suite/smtpserver_reliability/test.rel-04.error-recovery.ts` |
| REL-05 | DNS Resolution Failure Handling | Medium | `suite/reliability/test.dns-failures.ts` | | REL-05 | DNS Resolution Failure Handling | Medium | `suite/smtpserver_reliability/test.rel-05.dns-resolution-failure.ts` |
| REL-06 | Network Interruption Handling | Medium | `suite/reliability/test.network-interruptions.ts` | | REL-06 | Network Interruption Handling | Medium | `suite/smtpserver_reliability/test.rel-06.network-interruption.ts` |
### 8. Edge Cases (EDGE) ### 8. Edge Cases (EDGE)
@@ -166,14 +150,14 @@ Tests for validating handling of unusual or extreme scenarios.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------| |---------|-------------------------------------------|----------|----------------|
| EDGE-01 | Very Large Email | Low | `suite/edge-cases/test.very-large-email.ts` | | EDGE-01 | Very Large Email | Low | `suite/smtpserver_edge-cases/test.edge-01.very-large-email.ts` |
| EDGE-02 | Very Small Email | Low | `suite/edge-cases/test.very-small-email.ts` | | EDGE-02 | Very Small Email | Low | `suite/smtpserver_edge-cases/test.edge-02.very-small-email.ts` |
| EDGE-03 | Invalid Character Handling | Medium | `suite/edge-cases/test.invalid-chars.ts` | | EDGE-03 | Invalid Character Handling | Medium | `suite/smtpserver_edge-cases/test.edge-03.invalid-character-handling.ts` |
| EDGE-04 | Empty Commands | Low | `suite/edge-cases/test.empty-commands.ts` | | EDGE-04 | Empty Commands | Low | `suite/smtpserver_edge-cases/test.edge-04.empty-commands.ts` |
| EDGE-05 | Extremely Long Lines | Medium | `suite/edge-cases/test.long-lines.ts` | | EDGE-05 | Extremely Long Lines | Medium | `suite/smtpserver_edge-cases/test.edge-05.extremely-long-lines.ts` |
| EDGE-06 | Extremely Long Headers | Medium | `suite/edge-cases/test.long-headers.ts` | | EDGE-06 | Extremely Long Headers | Medium | `suite/smtpserver_edge-cases/test.edge-06.extremely-long-headers.ts` |
| EDGE-07 | Unusual MIME Types | Low | `suite/edge-cases/test.unusual-mime.ts` | | EDGE-07 | Unusual MIME Types | Low | `suite/smtpserver_edge-cases/test.edge-07.unusual-mime-types.ts` |
| EDGE-08 | Nested MIME Structures | Low | `suite/edge-cases/test.nested-mime.ts` | | EDGE-08 | Nested MIME Structures | Low | `suite/smtpserver_edge-cases/test.edge-08.nested-mime-structures.ts` |
### 9. RFC Compliance (RFC) ### 9. RFC Compliance (RFC)
@@ -181,223 +165,279 @@ Tests for validating compliance with SMTP-related RFCs.
| ID | Test Description | Priority | Implementation | | ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------| |--------|-------------------------------------------|----------|----------------|
| RFC-01 | RFC 5321 Compliance | High | `suite/rfc-compliance/test.rfc5321.ts` | | RFC-01 | RFC 5321 Compliance | High | `suite/smtpserver_rfc-compliance/test.rfc-01.rfc5321-compliance.ts` |
| RFC-02 | RFC 5322 Compliance | High | `suite/rfc-compliance/test.rfc5322.ts` | | RFC-02 | RFC 5322 Compliance | High | `suite/smtpserver_rfc-compliance/test.rfc-02.rfc5322-compliance.ts` |
| RFC-03 | RFC 7208 SPF Compliance | Medium | `suite/rfc-compliance/test.rfc7208-spf.ts` | | RFC-03 | RFC 7208 SPF Compliance | Medium | `suite/smtpserver_rfc-compliance/test.rfc-03.rfc7208-spf-compliance.ts` |
| RFC-04 | RFC 6376 DKIM Compliance | Medium | `suite/rfc-compliance/test.rfc6376-dkim.ts` | | RFC-04 | RFC 6376 DKIM Compliance | Medium | `suite/smtpserver_rfc-compliance/test.rfc-04.rfc6376-dkim-compliance.ts` |
| RFC-05 | RFC 7489 DMARC Compliance | Medium | `suite/rfc-compliance/test.rfc7489-dmarc.ts` | | RFC-05 | RFC 7489 DMARC Compliance | Medium | `suite/smtpserver_rfc-compliance/test.rfc-05.rfc7489-dmarc-compliance.ts` |
| RFC-06 | RFC 8314 TLS Compliance | Medium | `suite/rfc-compliance/test.rfc8314-tls.ts` | | RFC-06 | RFC 8314 TLS Compliance | Medium | `suite/smtpserver_rfc-compliance/test.rfc-06.rfc8314-tls-compliance.ts` |
| RFC-07 | RFC 3461 DSN Compliance | Low | `suite/rfc-compliance/test.rfc3461-dsn.ts` | | RFC-07 | RFC 3461 DSN Compliance | Low | `suite/smtpserver_rfc-compliance/test.rfc-07.rfc3461-dsn-compliance.ts` |
## Running Tests ## SMTP Client Test Suite
### Run All Tests The following test categories ensure our SMTP client is production-ready, RFC-compliant, and handles all real-world scenarios properly.
### Client Test Organization
```
test/
└── suite/
├── smtpclient_connection/ # Client connection management tests (CCM)
├── smtpclient_commands/ # Client command execution tests (CCMD)
├── smtpclient_email-composition/ # Email composition tests (CEP)
├── smtpclient_security/ # Client security tests (CSEC)
├── smtpclient_error-handling/ # Client error handling tests (CERR)
├── smtpclient_performance/ # Client performance tests (CPERF)
├── smtpclient_reliability/ # Client reliability tests (CREL)
├── smtpclient_edge-cases/ # Client edge case tests (CEDGE)
└── smtpclient_rfc-compliance/ # Client RFC compliance tests (CRFC)
```
### 10. Client Connection Management (CCM)
Tests for validating how the SMTP client establishes and manages connections to servers.
| ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------|
| CCM-01 | Basic TCP Connection | High | `suite/smtpclient_connection/test.ccm-01.basic-tcp-connection.ts` |
| CCM-02 | TLS Connection Establishment | High | `suite/smtpclient_connection/test.ccm-02.tls-connection.ts` |
| CCM-03 | STARTTLS Upgrade | High | `suite/smtpclient_connection/test.ccm-03.starttls-upgrade.ts` |
| CCM-04 | Connection Pooling | High | `suite/smtpclient_connection/test.ccm-04.connection-pooling.ts` |
| CCM-05 | Connection Reuse | Medium | `suite/smtpclient_connection/test.ccm-05.connection-reuse.ts` |
| CCM-06 | Connection Timeout Handling | High | `suite/smtpclient_connection/test.ccm-06.connection-timeout.ts` |
| CCM-07 | Automatic Reconnection | High | `suite/smtpclient_connection/test.ccm-07.automatic-reconnection.ts` |
| CCM-08 | DNS Resolution & MX Records | High | `suite/smtpclient_connection/test.ccm-08.dns-mx-resolution.ts` |
| CCM-09 | IPv4/IPv6 Dual Stack Support | Medium | `suite/smtpclient_connection/test.ccm-09.dual-stack-support.ts` |
| CCM-10 | Proxy Support (SOCKS/HTTP) | Low | `suite/smtpclient_connection/test.ccm-10.proxy-support.ts` |
| CCM-11 | Keep-Alive Management | Medium | `suite/smtpclient_connection/test.ccm-11.keepalive-management.ts` |
### 11. Client Command Execution (CCMD)
Tests for validating how the client sends SMTP commands and processes responses.
| ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------|
| CCMD-01 | EHLO/HELO Command Sending | High | `suite/smtpclient_commands/test.ccmd-01.ehlo-helo-sending.ts` |
| CCMD-02 | MAIL FROM Command with Parameters | High | `suite/smtpclient_commands/test.ccmd-02.mail-from-parameters.ts` |
| CCMD-03 | RCPT TO Command with Multiple Recipients | High | `suite/smtpclient_commands/test.ccmd-03.rcpt-to-multiple.ts` |
| CCMD-04 | DATA Command and Content Transmission | High | `suite/smtpclient_commands/test.ccmd-04.data-transmission.ts` |
| CCMD-05 | AUTH Command (LOGIN, PLAIN, CRAM-MD5) | High | `suite/smtpclient_commands/test.ccmd-05.auth-mechanisms.ts` |
| CCMD-06 | Command Pipelining | Medium | `suite/smtpclient_commands/test.ccmd-06.command-pipelining.ts` |
| CCMD-07 | Response Code Parsing | High | `suite/smtpclient_commands/test.ccmd-07.response-parsing.ts` |
| CCMD-08 | Extended Response Handling | Medium | `suite/smtpclient_commands/test.ccmd-08.extended-responses.ts` |
| CCMD-09 | QUIT Command and Graceful Disconnect | High | `suite/smtpclient_commands/test.ccmd-09.quit-disconnect.ts` |
| CCMD-10 | RSET Command Usage | Medium | `suite/smtpclient_commands/test.ccmd-10.rset-usage.ts` |
| CCMD-11 | NOOP Keep-Alive | Low | `suite/smtpclient_commands/test.ccmd-11.noop-keepalive.ts` |
### 12. Client Email Composition (CEP)
Tests for validating email composition, formatting, and encoding.
| ID | Test Description | Priority | Implementation |
|--------|-------------------------------------------|----------|----------------|
| CEP-01 | Basic Email Headers | High | `suite/smtpclient_email-composition/test.cep-01.basic-headers.ts` |
| CEP-02 | MIME Multipart Messages | High | `suite/smtpclient_email-composition/test.cep-02.mime-multipart.ts` |
| CEP-03 | Attachment Encoding | High | `suite/smtpclient_email-composition/test.cep-03.attachment-encoding.ts` |
| CEP-04 | UTF-8 and International Characters | High | `suite/smtpclient_email-composition/test.cep-04.utf8-international.ts` |
| CEP-05 | Base64 and Quoted-Printable Encoding | Medium | `suite/smtpclient_email-composition/test.cep-05.content-encoding.ts` |
| CEP-06 | HTML Email with Inline Images | Medium | `suite/smtpclient_email-composition/test.cep-06.html-inline-images.ts` |
| CEP-07 | Custom Headers | Low | `suite/smtpclient_email-composition/test.cep-07.custom-headers.ts` |
| CEP-08 | Message-ID Generation | Medium | `suite/smtpclient_email-composition/test.cep-08.message-id.ts` |
| CEP-09 | Date Header Formatting | Medium | `suite/smtpclient_email-composition/test.cep-09.date-formatting.ts` |
| CEP-10 | Line Length Limits (RFC 5322) | High | `suite/smtpclient_email-composition/test.cep-10.line-length-limits.ts` |
### 13. Client Security (CSEC)
Tests for client-side security features and protections.
| ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------|
| CSEC-01 | TLS Certificate Verification | High | `suite/smtpclient_security/test.csec-01.tls-verification.ts` |
| CSEC-02 | Authentication Mechanisms | High | `suite/smtpclient_security/test.csec-02.auth-mechanisms.ts` |
| CSEC-03 | OAuth2 Support | Medium | `suite/smtpclient_security/test.csec-03.oauth2-support.ts` |
| CSEC-04 | Password Security (No Plaintext) | High | `suite/smtpclient_security/test.csec-04.password-security.ts` |
| CSEC-05 | DKIM Signing | High | `suite/smtpclient_security/test.csec-05.dkim-signing.ts` |
| CSEC-06 | SPF Record Compliance | Medium | `suite/smtpclient_security/test.csec-06.spf-compliance.ts` |
| CSEC-07 | Secure Credential Storage | High | `suite/smtpclient_security/test.csec-07.credential-storage.ts` |
| CSEC-08 | TLS Version Enforcement | High | `suite/smtpclient_security/test.csec-08.tls-version-enforcement.ts` |
| CSEC-09 | Certificate Pinning | Low | `suite/smtpclient_security/test.csec-09.certificate-pinning.ts` |
| CSEC-10 | Injection Attack Prevention | High | `suite/smtpclient_security/test.csec-10.injection-prevention.ts` |
### 14. Client Error Handling (CERR)
Tests for how the client handles various error conditions.
| ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------|
| CERR-01 | 4xx Error Response Handling | High | `suite/smtpclient_error-handling/test.cerr-01.4xx-errors.ts` |
| CERR-02 | 5xx Error Response Handling | High | `suite/smtpclient_error-handling/test.cerr-02.5xx-errors.ts` |
| CERR-03 | Network Failure Recovery | High | `suite/smtpclient_error-handling/test.cerr-03.network-failures.ts` |
| CERR-04 | Timeout Recovery | High | `suite/smtpclient_error-handling/test.cerr-04.timeout-recovery.ts` |
| CERR-05 | Retry Logic with Backoff | High | `suite/smtpclient_error-handling/test.cerr-05.retry-backoff.ts` |
| CERR-06 | Greylisting Handling | Medium | `suite/smtpclient_error-handling/test.cerr-06.greylisting.ts` |
| CERR-07 | Rate Limit Response Handling | High | `suite/smtpclient_error-handling/test.cerr-07.rate-limits.ts` |
| CERR-08 | Malformed Server Response | Medium | `suite/smtpclient_error-handling/test.cerr-08.malformed-responses.ts` |
| CERR-09 | Connection Drop During Transfer | High | `suite/smtpclient_error-handling/test.cerr-09.connection-drops.ts` |
| CERR-10 | Authentication Failure Handling | High | `suite/smtpclient_error-handling/test.cerr-10.auth-failures.ts` |
### 15. Client Performance (CPERF)
Tests for client performance characteristics and optimization.
| ID | Test Description | Priority | Implementation |
|----------|-------------------------------------------|----------|----------------|
| CPERF-01 | Bulk Email Sending | High | `suite/smtpclient_performance/test.cperf-01.bulk-sending.ts` |
| CPERF-02 | Connection Pool Efficiency | High | `suite/smtpclient_performance/test.cperf-02.pool-efficiency.ts` |
| CPERF-03 | Memory Usage Under Load | High | `suite/smtpclient_performance/test.cperf-03.memory-usage.ts` |
| CPERF-04 | CPU Usage Optimization | Medium | `suite/smtpclient_performance/test.cperf-04.cpu-optimization.ts` |
| CPERF-05 | Parallel Sending Performance | High | `suite/smtpclient_performance/test.cperf-05.parallel-sending.ts` |
| CPERF-06 | Large Attachment Handling | Medium | `suite/smtpclient_performance/test.cperf-06.large-attachments.ts` |
| CPERF-07 | Queue Management | High | `suite/smtpclient_performance/test.cperf-07.queue-management.ts` |
| CPERF-08 | DNS Caching Efficiency | Medium | `suite/smtpclient_performance/test.cperf-08.dns-caching.ts` |
### 16. Client Reliability (CREL)
Tests for client reliability and resilience.
| ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------|
| CREL-01 | Long Running Stability | High | `suite/smtpclient_reliability/test.crel-01.long-running.ts` |
| CREL-02 | Failover to Backup MX | High | `suite/smtpclient_reliability/test.crel-02.mx-failover.ts` |
| CREL-03 | Queue Persistence | High | `suite/smtpclient_reliability/test.crel-03.queue-persistence.ts` |
| CREL-04 | Crash Recovery | High | `suite/smtpclient_reliability/test.crel-04.crash-recovery.ts` |
| CREL-05 | Memory Leak Prevention | High | `suite/smtpclient_reliability/test.crel-05.memory-leaks.ts` |
| CREL-06 | Concurrent Operation Safety | High | `suite/smtpclient_reliability/test.crel-06.concurrency-safety.ts` |
| CREL-07 | Resource Cleanup | Medium | `suite/smtpclient_reliability/test.crel-07.resource-cleanup.ts` |
### 17. Client Edge Cases (CEDGE)
Tests for unusual scenarios and edge cases.
| ID | Test Description | Priority | Implementation |
|----------|-------------------------------------------|----------|----------------|
| CEDGE-01 | Extremely Slow Server Response | Medium | `suite/smtpclient_edge-cases/test.cedge-01.slow-server.ts` |
| CEDGE-02 | Server Sending Invalid UTF-8 | Low | `suite/smtpclient_edge-cases/test.cedge-02.invalid-utf8.ts` |
| CEDGE-03 | Extremely Large Recipients List | Medium | `suite/smtpclient_edge-cases/test.cedge-03.large-recipient-list.ts` |
| CEDGE-04 | Zero-Byte Attachments | Low | `suite/smtpclient_edge-cases/test.cedge-04.zero-byte-attachments.ts` |
| CEDGE-05 | Server Disconnect Mid-Command | High | `suite/smtpclient_edge-cases/test.cedge-05.mid-command-disconnect.ts` |
| CEDGE-06 | Unusual Server Banners | Low | `suite/smtpclient_edge-cases/test.cedge-06.unusual-banners.ts` |
| CEDGE-07 | Non-Standard Port Connections | Medium | `suite/smtpclient_edge-cases/test.cedge-07.non-standard-ports.ts` |
### 18. Client RFC Compliance (CRFC)
Tests for RFC compliance from the client perspective.
| ID | Test Description | Priority | Implementation |
|---------|-------------------------------------------|----------|----------------|
| CRFC-01 | RFC 5321 Client Requirements | High | `suite/smtpclient_rfc-compliance/test.crfc-01.rfc5321-client.ts` |
| CRFC-02 | RFC 5322 Message Format | High | `suite/smtpclient_rfc-compliance/test.crfc-02.rfc5322-format.ts` |
| CRFC-03 | RFC 2045-2049 MIME Compliance | High | `suite/smtpclient_rfc-compliance/test.crfc-03.mime-compliance.ts` |
| CRFC-04 | RFC 4954 AUTH Extension | High | `suite/smtpclient_rfc-compliance/test.crfc-04.auth-extension.ts` |
| CRFC-05 | RFC 3207 STARTTLS | High | `suite/smtpclient_rfc-compliance/test.crfc-05.starttls.ts` |
| CRFC-06 | RFC 1870 SIZE Extension | Medium | `suite/smtpclient_rfc-compliance/test.crfc-06.size-extension.ts` |
| CRFC-07 | RFC 6152 8BITMIME Extension | Medium | `suite/smtpclient_rfc-compliance/test.crfc-07.8bitmime.ts` |
| CRFC-08 | RFC 2920 Command Pipelining | Medium | `suite/smtpclient_rfc-compliance/test.crfc-08.pipelining.ts` |
## Running SMTP Client Tests
### Run All Client Tests
```bash ```bash
cd dcrouter cd dcrouter
pnpm test pnpm test test/suite/smtpclient_*
``` ```
### Run Specific Test Category ### Run Specific Client Test Category
```bash ```bash
# Run all connection tests # Run all client connection tests
pnpm test test/suite/connection pnpm test test/suite/smtpclient_connection
# Run all security tests # Run all client security tests
pnpm test test/suite/security pnpm test test/suite/smtpclient_security
``` ```
### Run Single Test File ### Run Single Client Test File
```bash ```bash
# Run TLS connection test # Run basic TCP connection test
tsx test/suite/connection/test.tls-connection.ts tsx test/suite/smtpclient_connection/test.ccm-01.basic-tcp-connection.ts
# Run AUTH mechanisms test
tsx test/suite/smtpclient_commands/test.ccmd-05.auth-mechanisms.ts
``` ```
### Run Tests with Verbose Output ## Client Performance Benchmarks
```bash
# Run with detailed logging
pnpm test -- --verbose
```
## Test Infrastructure Expected performance metrics for production-ready SMTP client:
- **Sending Rate**: >100 emails per second (with connection pooling)
- **Connection Pool Size**: 10-50 concurrent connections efficiently managed
- **Memory Usage**: <500MB for 1000 concurrent email operations
- **DNS Cache Hit Rate**: >90% for repeated domains
- **Retry Success Rate**: >95% for temporary failures
- **Large Attachment Support**: Files up to 25MB without performance degradation
- **Queue Processing**: >1000 emails/minute with persistent queue
### Server Loader Module ## Client Security Requirements
All test files import the server loader module which provides: All client security tests must pass for production deployment:
- Automatic SMTP server lifecycle management - **TLS Support**: TLS 1.2+ required, TLS 1.3 preferred
- Server starts before test execution - **Authentication**: Support for LOGIN, PLAIN, CRAM-MD5, OAuth2
- Server stops after test completion - **Certificate Validation**: Proper certificate chain validation
- Port allocation and cleanup - **DKIM Signing**: Automatic DKIM signature generation
- Resource tracking and cleanup - **Credential Security**: No plaintext password storage
- **Injection Prevention**: Protection against header/command injection
Example test structure: ## Client Production Readiness Criteria
```typescript
import { tap, expect } from '@git.zone/tstest/tapbundle';
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
let testServer: any; ### Production Gate 1: Core Functionality (>95% tests passing)
- Basic connection establishment
- Command execution and response parsing
- Email composition and sending
- Error handling and recovery
tap.test('setup - start SMTP server', async () => { ### Production Gate 2: Advanced Features (>90% tests passing)
testServer = await startTestServer({ - Connection pooling and reuse
port: 2525, - Authentication mechanisms
tlsEnabled: true - TLS/STARTTLS support
}); - Retry logic and resilience
expect(testServer).toBeInstanceOf(Object);
});
// Your tests here... ### Production Gate 3: Enterprise Ready (>85% tests passing)
- High-volume sending capabilities
- Advanced security features
- Full RFC compliance
- Performance under load
tap.test('cleanup - stop SMTP server', async () => { ## Key Differences: Server vs Client Tests
await stopTestServer(testServer);
});
tap.start(); | Aspect | Server Tests | Client Tests |
``` |--------|--------------|--------------|
| **Focus** | Accepting connections, processing commands | Making connections, sending commands |
| **Security** | Validating incoming data, enforcing policies | Protecting credentials, validating servers |
| **Performance** | Handling many clients concurrently | Efficient bulk sending, connection reuse |
| **Reliability** | Staying up under attack/load | Retrying failures, handling timeouts |
| **RFC Compliance** | Server MUST requirements | Client MUST requirements |
## Performance Benchmarks ## Test Implementation Priority
Expected performance metrics for production deployment: 1. **Critical** (implement first):
- **Throughput**: >90 operations per second - Basic connection and command sending
- **Memory Efficiency**: <2% memory increase under load - Authentication mechanisms
- **Concurrent Connections**: >1000 simultaneous connections - Error handling and retry logic
- **Connection Time**: <5000ms for TLS connections - TLS/Security features
- **Resource Cleanup**: <100ms average cleanup time
## Security Requirements 2. **High Priority** (implement second):
- Connection pooling
- Email composition and MIME
- Performance optimization
- RFC compliance
All security tests must pass for production deployment: 3. **Medium Priority** (implement third):
- TLS 1.2+ support required - Advanced features (OAuth2, etc.)
- Strong cipher suites only - Edge case handling
- DKIM signature verification - Extended performance tests
- SPF record checking - Additional RFC extensions
- DMARC policy enforcement
- Rate limiting active
- Header injection prevention
## Production Readiness Gates 4. **Low Priority** (implement last):
- Proxy support
- Certificate pinning
- Unusual scenarios
- Optional RFC features
### Gate 1: Server Production Ready (Target: >95% tests passing)
- All critical connection tests passing
- All SMTP command tests passing
- Security vulnerabilities addressed
- Performance benchmarks met
### Gate 2: Client Production Ready (Target: >90% tests passing)
- Client authentication working
- Connection pooling efficient
- Error handling comprehensive
- Performance targets achieved
### Gate 3: Integration Validated (Target: >80% tests passing)
- End-to-end email flow working
- Client-server communication stable
- Security policies enforced
- Performance maintained under load
## Certification
Upon successful completion of all test categories with required pass rates:
- **🟢 PRODUCTION READY**: Component certified for production deployment
- **🟡 NEAR READY**: Minor fixes required before production
- **🟠 DEVELOPMENT**: Significant work needed
- **🔴 NOT READY**: Major issues requiring resolution
## Contributing
When adding new tests:
1. Follow the existing test structure
2. Use descriptive test names
3. Include proper setup and cleanup
4. Add test to appropriate category
5. Update this README with test details
6. Ensure tests use tstest/tapbundle/smartexpect
## Migration Status
### Current Progress
**Last Updated**: 2025-05-23
**Overall Migration Progress**: 23 tests migrated from production test suite
#### Migration Summary by Category:
| Category | Tests Migrated | Total Tests | Status |
|----------|---------------|-------------|---------|
| Connection Management (CM) | 4 | 11 | 🟠 36% |
| SMTP Commands (CMD) | 10 | 13 | 🟢 77% |
| Email Processing (EP) | 4 | 9 | 🟠 44% |
| Error Handling (ERR) | 2 | 8 | 🟠 25% |
| Security (SEC) | 1 | 11 | 🔴 9% |
| Performance (PERF) | 1 | 7 | 🔴 14% |
| Reliability (REL) | 0 | 6 | 🔴 0% |
| Edge Cases (EDGE) | 1 | 8 | 🔴 13% |
| RFC Compliance (RFC) | 0 | 7 | 🔴 0% |
#### Recently Migrated Tests:
- `test.tls-connection.ts` - TLS connection handling
- `test.multiple-connections.ts` - Multiple simultaneous connections
- `test.connection-timeout.ts` - Connection timeout handling
- `test.starttls-upgrade.ts` - STARTTLS connection upgrade (NEW)
- `test.ehlo-command.ts` - EHLO command validation
- `test.mail-from.ts` - MAIL FROM command validation
- `test.rcpt-to.ts` - RCPT TO command validation
- `test.data-command.ts` - DATA command and email content handling
- `test.noop-command.ts` - NOOP command functionality
- `test.rset-command.ts` - RSET command functionality
- `test.quit-command.ts` - QUIT command handling
- `test.size-extension.ts` - SIZE extension support (NEW)
- `test.vrfy-command.ts` - VRFY command functionality (NEW)
- `test.helo-command.ts` - HELO command validation (NEW)
- `test.basic-email-sending.ts` - Basic email sending flow
- `test.invalid-email-addresses.ts` - Invalid email address validation
- `test.multiple-recipients.ts` - Multiple recipients handling
- `test.syntax-errors.ts` - Syntax error handling
- `test.invalid-sequence.ts` - Invalid command sequence handling
- `test.authentication.ts` - SMTP authentication
- `test.throughput.ts` - Throughput performance testing
- `test.very-large-email.ts` - Large email handling
- `test.basic-email.ts` - Basic email processing
#### Next Priority Tests to Migrate:
1. **High Priority** (All completed ✅):
- RSET command (CMD-06)
- QUIT command (CMD-13)
- Invalid sequence handling (ERR-02)
- Multiple recipients (EP-03)
2. **Medium Priority**:
- STARTTLS upgrade (CM-06)
- SIZE extension (CMD-09)
- Large email handling (EP-04)
- Rate limiting (SEC-08)
- VRFY command (CMD-07)
- HELO command (CMD-12)
- Connection limits (CM-04)
- Temporary failure handling (ERR-03)
3. **Lower Priority**:
- EXPN command (CMD-08)
- HELP command (CMD-10)
- Long running operation (REL-01)
- RFC compliance tests (RFC-01 to RFC-07)
### Migration Notes:
- All tests have been converted to use `@git.zone/tstest/tapbundle` framework
- Each test file is self-contained with its own server lifecycle management
- Test files follow the naming pattern `test.*.ts` for automatic discovery
- Helper modules provide consistent server management across all tests
### Session Progress (2025-05-23):
**First Session**:
- Migrated 4 additional tests, bringing total from 15 to 19
- Completed all high priority tests
- SMTP Commands category reached 54% completion (7/13 tests)
- Email Processing category reached 44% completion (4/9 tests)
- Error Handling category reached 25% completion (2/8 tests)
**Second Session**:
- Migrated 4 more tests, bringing total from 19 to 23
- Completed 3 more SMTP command tests (SIZE, VRFY, HELO)
- Added STARTTLS upgrade test for connection management
- SMTP Commands category now at 77% completion (10/13 tests)
- Connection Management category now at 36% completion (4/11 tests)
- Overall test migration progress: 27.4% (23/84 total tests)

View File

@@ -6,6 +6,7 @@ import { startTestServer, stopTestServer } from '../../helpers/server.loader.js'
const TEST_PORT = 2525; const TEST_PORT = 2525;
let testServer; let testServer;
const activeSockets = new Set<net.Socket>();
tap.test('prepare server', async () => { tap.test('prepare server', async () => {
testServer = await startTestServer({ port: TEST_PORT }); testServer = await startTestServer({ port: TEST_PORT });
@@ -19,6 +20,9 @@ tap.test('ERR-07: Exception handling - Invalid commands', async (tools) => {
port: TEST_PORT, port: TEST_PORT,
timeout: 30000 timeout: 30000
}); });
activeSockets.add(socket);
socket.on('close', () => activeSockets.delete(socket));
socket.on('connect', async () => { socket.on('connect', async () => {
try { try {
@@ -147,6 +151,9 @@ tap.test('ERR-07: Exception handling - Malformed protocol', async (tools) => {
port: TEST_PORT, port: TEST_PORT,
timeout: 30000 timeout: 30000
}); });
activeSockets.add(socket);
socket.on('close', () => activeSockets.delete(socket));
socket.on('connect', async () => { socket.on('connect', async () => {
try { try {
@@ -224,6 +231,9 @@ tap.test('ERR-07: Exception handling - Recovery after errors', async (tools) =>
port: TEST_PORT, port: TEST_PORT,
timeout: 30000 timeout: 30000
}); });
activeSockets.add(socket);
socket.on('close', () => activeSockets.delete(socket));
socket.on('connect', async () => { socket.on('connect', async () => {
try { try {
@@ -307,6 +317,16 @@ tap.test('ERR-07: Exception handling - Recovery after errors', async (tools) =>
}); });
tap.test('cleanup server', async () => { tap.test('cleanup server', async () => {
// Close any remaining sockets
for (const socket of activeSockets) {
if (!socket.destroyed) {
socket.destroy();
}
}
// Wait for all sockets to be fully closed
await new Promise(resolve => setTimeout(resolve, 500));
await stopTestServer(testServer); await stopTestServer(testServer);
}); });