update
This commit is contained in:
@@ -1,19 +1,16 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
import type { ITestServer } from '../../helpers/server.loader.js';
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
const TEST_PORT = 30029;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 30000;
|
const TEST_TIMEOUT = 30000;
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start SMTP server for abrupt disconnection tests', async () => {
|
tap.test('setup - start SMTP server for abrupt disconnection tests', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: TEST_PORT,
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
hostname: 'localhost'
|
|
||||||
});
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('Abrupt Disconnection - should handle socket destruction without QUIT', async (tools) => {
|
tap.test('Abrupt Disconnection - should handle socket destruction without QUIT', async (tools) => {
|
||||||
@@ -318,7 +315,7 @@ tap.test('Abrupt Disconnection - should timeout idle connections', async (tools)
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP server', async () => {
|
tap.test('cleanup - stop SMTP server', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,25 +1,19 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as path from 'path';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
import type { ITestServer } from '../../helpers/server.loader.js';
|
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 5000;
|
const TEST_TIMEOUT = 5000;
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: TEST_PORT,
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
tlsEnabled: false,
|
|
||||||
hostname: 'localhost'
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(testServer).toBeTypeofObject();
|
|
||||||
expect(testServer.port).toEqual(TEST_PORT);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Test: Basic connection limit enforcement
|
// Test: Basic connection limit enforcement
|
||||||
@@ -374,9 +368,7 @@ tap.test('Connection Limits - should provide meaningful error when limit reached
|
|||||||
|
|
||||||
// Teardown
|
// Teardown
|
||||||
tap.test('teardown - stop SMTP server', async () => {
|
tap.test('teardown - stop SMTP server', async () => {
|
||||||
if (testServer) {
|
await stopTestServer();
|
||||||
await stopTestServer(testServer);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Start the test
|
// Start the test
|
||||||
|
@@ -1,19 +1,16 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
import type { ITestServer } from '../../helpers/server.loader.js';
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
const TEST_PORT = 30027;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 30000;
|
const TEST_TIMEOUT = 30000;
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start SMTP server for connection rejection tests', async () => {
|
tap.test('setup - start SMTP server for connection rejection tests', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: TEST_PORT,
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
hostname: 'localhost'
|
|
||||||
});
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('Connection Rejection - should handle suspicious domains', async (tools) => {
|
tap.test('Connection Rejection - should handle suspicious domains', async (tools) => {
|
||||||
@@ -293,7 +290,7 @@ tap.test('Connection Rejection - should handle invalid commands gracefully', asy
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP server', async () => {
|
tap.test('cleanup - stop SMTP server', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -2,15 +2,12 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import { startTestServer, stopTestServer, type ITestServer } from './helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from './helpers/server.loader.js';
|
||||||
import * as plugins from '../ts/plugins.js';
|
import * as plugins from '../ts/plugins.js';
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start SMTP server with short timeout', async () => {
|
tap.test('setup - start SMTP server with short timeout', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: 2533,
|
|
||||||
hostname: 'localhost',
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
timeout: 5000 // 5 second timeout for testing
|
|
||||||
});
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('CM-03: Connection Timeout - idle connections are closed after timeout', async (tools) => {
|
tap.test('CM-03: Connection Timeout - idle connections are closed after timeout', async (tools) => {
|
||||||
@@ -127,7 +124,7 @@ tap.test('CM-03: Active connection should not timeout', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP server', async () => {
|
tap.test('cleanup - stop SMTP server', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.start();
|
tap.start();
|
@@ -1,17 +1,18 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from '../server.loader.js';
|
||||||
|
|
||||||
const TEST_PORT = 30033;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 60000; // Longer timeout for keepalive tests
|
const TEST_TIMEOUT = 60000; // Longer timeout for keepalive tests
|
||||||
|
|
||||||
tap.test('Keepalive - should maintain TCP keepalive', async (tools) => {
|
tap.test('Keepalive - should maintain TCP keepalive', async (tools) => {
|
||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -71,7 +72,7 @@ tap.test('Keepalive - should maintain TCP keepalive', async (tools) => {
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -80,9 +81,10 @@ tap.test('Keepalive - should maintain idle connection for extended period', asyn
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -142,7 +144,7 @@ tap.test('Keepalive - should maintain idle connection for extended period', asyn
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -151,9 +153,10 @@ tap.test('Keepalive - should detect connection loss', async (tools) => {
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -202,7 +205,7 @@ tap.test('Keepalive - should detect connection loss', async (tools) => {
|
|||||||
console.log('Connection established, now simulating server shutdown...');
|
console.log('Connection established, now simulating server shutdown...');
|
||||||
|
|
||||||
// Shutdown server to simulate connection loss
|
// Shutdown server to simulate connection loss
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
|
|
||||||
// Wait for keepalive to detect connection loss
|
// Wait for keepalive to detect connection loss
|
||||||
await new Promise(resolve => setTimeout(resolve, 10000));
|
await new Promise(resolve => setTimeout(resolve, 10000));
|
||||||
@@ -221,9 +224,10 @@ tap.test('Keepalive - should handle long-running SMTP session', async (tools) =>
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -294,7 +298,7 @@ tap.test('Keepalive - should handle long-running SMTP session', async (tools) =>
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -303,9 +307,10 @@ tap.test('Keepalive - should handle NOOP as keepalive mechanism', async (tools)
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -362,7 +367,7 @@ tap.test('Keepalive - should handle NOOP as keepalive mechanism', async (tools)
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -1,16 +1,15 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
import { createConcurrentConnections, performSmtpHandshake, closeSmtpConnection } from '../../helpers/test.utils.js';
|
import { createConcurrentConnections, performSmtpHandshake, closeSmtpConnection } from '../../helpers/test.utils.js';
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
const CONCURRENT_COUNT = 10;
|
const CONCURRENT_COUNT = 10;
|
||||||
|
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: 2526,
|
|
||||||
maxConnections: 100
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
});
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
|
||||||
expect(testServer.port).toEqual(2526);
|
expect(testServer.port).toEqual(2526);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -69,12 +68,10 @@ tap.test('CM-02: Connection limit enforcement - verify max connections', async (
|
|||||||
const maxConnections = 5;
|
const maxConnections = 5;
|
||||||
|
|
||||||
// Start a new server with lower connection limit
|
// Start a new server with lower connection limit
|
||||||
const limitedServer = await startTestServer({
|
const limitedServer = await startTestServer();
|
||||||
port: 2527,
|
|
||||||
maxConnections: maxConnections
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
// Try to create more connections than allowed
|
// Try to create more connections than allowed
|
||||||
const attemptCount = maxConnections + 5;
|
const attemptCount = maxConnections + 5;
|
||||||
console.log(`🔄 Attempting ${attemptCount} connections (limit: ${maxConnections})...`);
|
console.log(`🔄 Attempting ${attemptCount} connections (limit: ${maxConnections})...`);
|
||||||
@@ -104,7 +101,7 @@ tap.test('CM-02: Connection limit enforcement - verify max connections', async (
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP server', async () => {
|
tap.test('cleanup - stop SMTP server', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
console.log('✅ Test server stopped');
|
console.log('✅ Test server stopped');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,17 +1,18 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from '../server.loader.js';
|
||||||
|
|
||||||
const TEST_PORT = 30032;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 30000;
|
const TEST_TIMEOUT = 30000;
|
||||||
|
|
||||||
tap.test('Plain Connection - should establish basic TCP connection', async (tools) => {
|
tap.test('Plain Connection - should establish basic TCP connection', async (tools) => {
|
||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -36,7 +37,7 @@ tap.test('Plain Connection - should establish basic TCP connection', async (tool
|
|||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -45,9 +46,10 @@ tap.test('Plain Connection - should receive SMTP banner on plain connection', as
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -74,7 +76,7 @@ tap.test('Plain Connection - should receive SMTP banner on plain connection', as
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -83,9 +85,10 @@ tap.test('Plain Connection - should complete full SMTP transaction on plain conn
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -176,7 +179,7 @@ tap.test('Plain Connection - should complete full SMTP transaction on plain conn
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -185,9 +188,10 @@ tap.test('Plain Connection - should handle multiple plain connections', async (t
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const connectionCount = 3;
|
const connectionCount = 3;
|
||||||
const connections: net.Socket[] = [];
|
const connections: net.Socket[] = [];
|
||||||
|
|
||||||
@@ -226,7 +230,7 @@ tap.test('Plain Connection - should handle multiple plain connections', async (t
|
|||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -2,25 +2,20 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as tls from 'tls';
|
import * as tls from 'tls';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
import type { ITestServer } from '../../helpers/server.loader.js';
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 30000; // Increased timeout for TLS handshake
|
const TEST_TIMEOUT = 30000; // Increased timeout for TLS handshake
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server with STARTTLS support', async () => {
|
tap.test('setup - start SMTP server with STARTTLS support', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: TEST_PORT,
|
|
||||||
tlsEnabled: false, // Start with plain connection, upgrade via STARTTLS
|
|
||||||
hostname: 'localhost',
|
|
||||||
allowStartTLS: true
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(testServer).toBeTypeofObject();
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
expect(testServer.port).toEqual(TEST_PORT);
|
expect(testServer.port).toEqual(TEST_PORT);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -446,7 +441,7 @@ tap.test('STARTTLS - should use secure TLS version and ciphers', async (tools) =
|
|||||||
// Teardown
|
// Teardown
|
||||||
tap.test('teardown - stop SMTP server', async () => {
|
tap.test('teardown - stop SMTP server', async () => {
|
||||||
if (testServer) {
|
if (testServer) {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as tls from 'tls';
|
import * as tls from 'tls';
|
||||||
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from '../server.loader.js';
|
||||||
|
|
||||||
const TEST_PORT = 30031;
|
const TEST_PORT = 2525;
|
||||||
const TEST_PORT_TLS = 30466;
|
const TEST_PORT_TLS = 30466;
|
||||||
const TEST_TIMEOUT = 30000;
|
const TEST_TIMEOUT = 30000;
|
||||||
|
|
||||||
@@ -11,9 +11,10 @@ tap.test('TLS Ciphers - should advertise STARTTLS for cipher negotiation', async
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server
|
// Start test server
|
||||||
const testServer = await startTestServer({ port: TEST_PORT });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const socket = net.createConnection({
|
const socket = net.createConnection({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT,
|
port: TEST_PORT,
|
||||||
@@ -63,7 +64,7 @@ tap.test('TLS Ciphers - should advertise STARTTLS for cipher negotiation', async
|
|||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -72,9 +73,10 @@ tap.test('TLS Ciphers - should negotiate secure cipher suites', async (tools) =>
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server on TLS port
|
// Start test server on TLS port
|
||||||
const testServer = await startTestServer({ port: TEST_PORT_TLS, tlsEnabled: true });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
const tlsOptions = {
|
const tlsOptions = {
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
port: TEST_PORT_TLS,
|
port: TEST_PORT_TLS,
|
||||||
@@ -118,7 +120,7 @@ tap.test('TLS Ciphers - should negotiate secure cipher suites', async (tools) =>
|
|||||||
socket.end();
|
socket.end();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -127,9 +129,10 @@ tap.test('TLS Ciphers - should reject weak cipher suites', async (tools) => {
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server on TLS port
|
// Start test server on TLS port
|
||||||
const testServer = await startTestServer({ port: TEST_PORT_TLS, tlsEnabled: true });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
// Try to connect with weak ciphers only
|
// Try to connect with weak ciphers only
|
||||||
const weakCiphers = [
|
const weakCiphers = [
|
||||||
'DES-CBC3-SHA',
|
'DES-CBC3-SHA',
|
||||||
@@ -187,7 +190,7 @@ tap.test('TLS Ciphers - should reject weak cipher suites', async (tools) => {
|
|||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -196,9 +199,10 @@ tap.test('TLS Ciphers - should support forward secrecy', async (tools) => {
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server on TLS port
|
// Start test server on TLS port
|
||||||
const testServer = await startTestServer({ port: TEST_PORT_TLS, tlsEnabled: true });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
// Prefer ciphers with forward secrecy (ECDHE, DHE)
|
// Prefer ciphers with forward secrecy (ECDHE, DHE)
|
||||||
const forwardSecrecyCiphers = [
|
const forwardSecrecyCiphers = [
|
||||||
'ECDHE-RSA-AES128-GCM-SHA256',
|
'ECDHE-RSA-AES128-GCM-SHA256',
|
||||||
@@ -248,7 +252,7 @@ tap.test('TLS Ciphers - should support forward secrecy', async (tools) => {
|
|||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -257,9 +261,10 @@ tap.test('TLS Ciphers - should list all supported ciphers', async (tools) => {
|
|||||||
const done = tools.defer();
|
const done = tools.defer();
|
||||||
|
|
||||||
// Start test server on TLS port
|
// Start test server on TLS port
|
||||||
const testServer = await startTestServer({ port: TEST_PORT_TLS, tlsEnabled: true });
|
const testServer = await startTestServer();
|
||||||
|
|
||||||
try {
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));try {
|
||||||
// Get list of ciphers supported by Node.js
|
// Get list of ciphers supported by Node.js
|
||||||
const supportedCiphers = tls.getCiphers();
|
const supportedCiphers = tls.getCiphers();
|
||||||
console.log(`Node.js supports ${supportedCiphers.length} cipher suites`);
|
console.log(`Node.js supports ${supportedCiphers.length} cipher suites`);
|
||||||
@@ -303,7 +308,7 @@ tap.test('TLS Ciphers - should list all supported ciphers', async (tools) => {
|
|||||||
expect(negotiatedCipher.name).toBeDefined();
|
expect(negotiatedCipher.name).toBeDefined();
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
done.resolve();
|
done.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -1,16 +1,14 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer, type ITestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
import { connectToSmtp, performSmtpHandshake, closeSmtpConnection } from '../../helpers/test.utils.js';
|
import { connectToSmtp, performSmtpHandshake, closeSmtpConnection } from '../../helpers/test.utils.js';
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start SMTP server with TLS support', async () => {
|
tap.test('setup - start SMTP server with TLS support', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: 2525,
|
|
||||||
tlsEnabled: true,
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
hostname: 'localhost'
|
|
||||||
});
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
|
||||||
expect(testServer.port).toEqual(2525);
|
expect(testServer.port).toEqual(2525);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -54,7 +52,7 @@ tap.test('CM-01: TLS Connection Test - verify TLS certificate configuration', as
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP server', async () => {
|
tap.test('cleanup - stop SMTP server', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
console.log('✅ Test server stopped');
|
console.log('✅ Test server stopped');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,29 +1,23 @@
|
|||||||
import { tap, expect } from '@git.zone/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as tls from 'tls';
|
import * as tls from 'tls';
|
||||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
import type { ITestServer } from '../../helpers/server.loader.js';
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
const TEST_PORT = 2525;
|
||||||
const TEST_PORT = 30030;
|
|
||||||
const TEST_PORT_TLS = 30465;
|
const TEST_PORT_TLS = 30465;
|
||||||
const TEST_TIMEOUT = 30000;
|
const TEST_TIMEOUT = 30000;
|
||||||
|
|
||||||
let testServer: ITestServer;
|
let testServer: SmtpServer;
|
||||||
let testServerTls: ITestServer;
|
let testServerTls: ITestServer;
|
||||||
|
|
||||||
tap.test('setup - start SMTP servers for TLS version tests', async () => {
|
tap.test('setup - start SMTP servers for TLS version tests', async () => {
|
||||||
testServer = await startTestServer({
|
testServer = await startTestServer();
|
||||||
port: TEST_PORT,
|
|
||||||
hostname: 'localhost'
|
|
||||||
});
|
|
||||||
|
|
||||||
testServerTls = await startTestServer({
|
|
||||||
port: TEST_PORT_TLS,
|
|
||||||
hostname: 'localhost',
|
|
||||||
tlsEnabled: true
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(testServer).toBeInstanceOf(Object);
|
await new Promise(resolve => setTimeout(resolve, 1000));testServerTls = await startTestServer();
|
||||||
|
|
||||||
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
expect(testServerTls).toBeInstanceOf(Object);
|
expect(testServerTls).toBeInstanceOf(Object);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -265,7 +259,7 @@ async function testTlsVersion(version: string, port: number): Promise<{success:
|
|||||||
}
|
}
|
||||||
|
|
||||||
tap.test('cleanup - stop SMTP servers', async () => {
|
tap.test('cleanup - stop SMTP servers', async () => {
|
||||||
await stopTestServer(testServer);
|
await stopTestServer();
|
||||||
await stopTestServer(testServerTls);
|
await stopTestServer(testServerTls);
|
||||||
expect(true).toBeTrue();
|
expect(true).toBeTrue();
|
||||||
});
|
});
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 15000;
|
const TEST_TIMEOUT = 15000;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 20000;
|
const TEST_TIMEOUT = 20000;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
|
@@ -2,12 +2,13 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 60000; // Increased for large email handling
|
const TEST_TIMEOUT = 60000; // Increased for large email handling
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,12 +2,13 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { startTestServer, stopTestServer } from '../server.loader.js';
|
import { startTestServer, stopTestServer } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
// Test configuration
|
// Test configuration
|
||||||
const TEST_PORT = 2525;
|
const TEST_PORT = 2525;
|
||||||
const TEST_TIMEOUT = 15000;
|
const TEST_TIMEOUT = 15000;
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
tap.test('setup - start SMTP server', async () => {
|
tap.test('setup - start SMTP server', async () => {
|
||||||
|
@@ -18,7 +18,7 @@ tap.test('setup - start SMTP server', async () => {
|
|||||||
hostname: 'localhost'
|
hostname: 'localhost'
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(testServer).toBeTypeofObject();
|
expect(testServer).toBeTypeOf('object');
|
||||||
expect(testServer.port).toEqual(TEST_PORT);
|
expect(testServer.port).toEqual(TEST_PORT);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -3,8 +3,9 @@ import * as plugins from '../plugins.js';
|
|||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as tls from 'tls';
|
import * as tls from 'tls';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -2,8 +2,9 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -3,8 +3,9 @@ import * as plugins from '../plugins.js';
|
|||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import * as tls from 'tls';
|
import * as tls from 'tls';
|
||||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../server.loader.js';
|
||||||
|
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||||
|
|
||||||
let testServer: any;
|
let testServer: SmtpServer;
|
||||||
|
|
||||||
tap.test('setup - start test server', async () => {
|
tap.test('setup - start test server', async () => {
|
||||||
testServer = await startTestServer();
|
testServer = await startTestServer();
|
||||||
|
@@ -27,11 +27,11 @@ async function startTestServer(port = 2525) {
|
|||||||
try {
|
try {
|
||||||
// Create a minimal email server for testing
|
// Create a minimal email server for testing
|
||||||
const mockEmailServer = {
|
const mockEmailServer = {
|
||||||
processEmailByMode: async (emailData) => {
|
processEmailByMode: async (emailData: any) => {
|
||||||
console.log('📧 Processed test email:', emailData.subject || 'No subject');
|
console.log('📧 Processed test email:', emailData.subject || 'No subject');
|
||||||
return emailData;
|
return emailData;
|
||||||
}
|
}
|
||||||
};
|
} as any; // Type assertion for test purposes
|
||||||
|
|
||||||
// Load test certificates if available
|
// Load test certificates if available
|
||||||
let key = '';
|
let key = '';
|
||||||
@@ -56,7 +56,10 @@ async function startTestServer(port = 2525) {
|
|||||||
socketTimeout: 30000,
|
socketTimeout: 30000,
|
||||||
connectionTimeout: 60000,
|
connectionTimeout: 60000,
|
||||||
cleanupInterval: 300000,
|
cleanupInterval: 300000,
|
||||||
auth: false
|
auth: {
|
||||||
|
required: false,
|
||||||
|
methods: [] as ('PLAIN' | 'LOGIN' | 'OAUTH2')[]
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Create and start SMTP server
|
// Create and start SMTP server
|
||||||
@@ -137,7 +140,7 @@ async function waitForServerReady(hostname, port, timeout) {
|
|||||||
|
|
||||||
socket.on('connect', () => {
|
socket.on('connect', () => {
|
||||||
socket.end();
|
socket.end();
|
||||||
resolve();
|
resolve(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('error', (error) => {
|
socket.on('error', (error) => {
|
||||||
|
Reference in New Issue
Block a user