update
This commit is contained in:
@ -1,14 +1,15 @@
|
||||
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||
import * as plugins from '../plugins.js';
|
||||
import * as plugins from '../../../ts/plugins.js';
|
||||
import * as net from 'net';
|
||||
import { startTestServer, stopTestServer, TEST_PORT, sendEmailWithRawSocket } from '../../helpers/server.loader.js';
|
||||
import { startTestServer, stopTestServer } from '../../helpers/server.loader.js';
|
||||
import type { SmtpServer } from '../../../ts/mail/delivery/smtpserver/index.js';
|
||||
|
||||
let testServer: SmtpServer;
|
||||
const TEST_PORT = 2525;
|
||||
|
||||
tap.test('setup - start test server', async () => {
|
||||
testServer = await startTestServer();
|
||||
await plugins.smartdelay.delayFor(1000);
|
||||
testServer = await startTestServer({ port: TEST_PORT });
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
});
|
||||
|
||||
tap.test('Nested MIME Structures - should handle deeply nested multipart structure', async (tools) => {
|
||||
@ -21,27 +22,33 @@ tap.test('Nested MIME Structures - should handle deeply nested multipart structu
|
||||
});
|
||||
|
||||
let dataBuffer = '';
|
||||
let state = 'initial';
|
||||
|
||||
socket.on('data', (data) => {
|
||||
dataBuffer += data.toString();
|
||||
console.log('Server response:', data.toString());
|
||||
|
||||
if (dataBuffer.includes('220 ')) {
|
||||
if (dataBuffer.includes('220 ') && state === 'initial') {
|
||||
// Send EHLO
|
||||
socket.write('EHLO testclient\r\n');
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('EHLO')) {
|
||||
state = 'ehlo_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && state === 'ehlo_sent') {
|
||||
// Send MAIL FROM
|
||||
socket.write('MAIL FROM:<sender@example.com>\r\n');
|
||||
state = 'mail_from_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('sender accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'mail_from_sent') {
|
||||
// Send RCPT TO
|
||||
socket.write('RCPT TO:<recipient@example.com>\r\n');
|
||||
state = 'rcpt_to_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('recipient accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'rcpt_to_sent') {
|
||||
// Send DATA
|
||||
socket.write('DATA\r\n');
|
||||
state = 'data_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('354 ')) {
|
||||
} else if (dataBuffer.includes('354 ') && state === 'data_sent') {
|
||||
// Create deeply nested MIME structure (4 levels)
|
||||
const outerBoundary = '----=_Outer_Boundary_' + Date.now();
|
||||
const middleBoundary = '----=_Middle_Boundary_' + Date.now();
|
||||
@ -126,8 +133,9 @@ tap.test('Nested MIME Structures - should handle deeply nested multipart structu
|
||||
|
||||
console.log('Sending email with 4-level nested MIME structure');
|
||||
socket.write(emailContent);
|
||||
state = 'email_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('Message accepted') ||
|
||||
} else if ((dataBuffer.includes('250 OK') && state === 'email_sent') ||
|
||||
dataBuffer.includes('552 ') ||
|
||||
dataBuffer.includes('554 ') ||
|
||||
dataBuffer.includes('500 ')) {
|
||||
@ -165,23 +173,29 @@ tap.test('Nested MIME Structures - should handle circular references in multipar
|
||||
});
|
||||
|
||||
let dataBuffer = '';
|
||||
let state = 'initial';
|
||||
|
||||
socket.on('data', (data) => {
|
||||
dataBuffer += data.toString();
|
||||
console.log('Server response:', data.toString());
|
||||
|
||||
if (dataBuffer.includes('220 ')) {
|
||||
if (dataBuffer.includes('220 ') && state === 'initial') {
|
||||
socket.write('EHLO testclient\r\n');
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('EHLO')) {
|
||||
state = 'ehlo_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && state === 'ehlo_sent') {
|
||||
socket.write('MAIL FROM:<sender@example.com>\r\n');
|
||||
state = 'mail_from_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('sender accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'mail_from_sent') {
|
||||
socket.write('RCPT TO:<recipient@example.com>\r\n');
|
||||
state = 'rcpt_to_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('recipient accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'rcpt_to_sent') {
|
||||
socket.write('DATA\r\n');
|
||||
state = 'data_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('354 ')) {
|
||||
} else if (dataBuffer.includes('354 ') && state === 'data_sent') {
|
||||
// Create structure with references between parts
|
||||
const boundary1 = '----=_Boundary1_' + Date.now();
|
||||
const boundary2 = '----=_Boundary2_' + Date.now();
|
||||
@ -221,8 +235,9 @@ tap.test('Nested MIME Structures - should handle circular references in multipar
|
||||
].join('\r\n');
|
||||
|
||||
socket.write(emailContent);
|
||||
state = 'email_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('Message accepted') ||
|
||||
} else if ((dataBuffer.includes('250 OK') && state === 'email_sent') ||
|
||||
dataBuffer.includes('552 ') ||
|
||||
dataBuffer.includes('554 ') ||
|
||||
dataBuffer.includes('500 ')) {
|
||||
@ -259,23 +274,29 @@ tap.test('Nested MIME Structures - should handle mixed nesting with various enco
|
||||
});
|
||||
|
||||
let dataBuffer = '';
|
||||
let state = 'initial';
|
||||
|
||||
socket.on('data', (data) => {
|
||||
dataBuffer += data.toString();
|
||||
console.log('Server response:', data.toString());
|
||||
|
||||
if (dataBuffer.includes('220 ')) {
|
||||
if (dataBuffer.includes('220 ') && state === 'initial') {
|
||||
socket.write('EHLO testclient\r\n');
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('EHLO')) {
|
||||
state = 'ehlo_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && state === 'ehlo_sent') {
|
||||
socket.write('MAIL FROM:<sender@example.com>\r\n');
|
||||
state = 'mail_from_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('sender accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'mail_from_sent') {
|
||||
socket.write('RCPT TO:<recipient@example.com>\r\n');
|
||||
state = 'rcpt_to_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('recipient accepted')) {
|
||||
} else if (dataBuffer.includes('250 ') && state === 'rcpt_to_sent') {
|
||||
socket.write('DATA\r\n');
|
||||
state = 'data_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('354 ')) {
|
||||
} else if (dataBuffer.includes('354 ') && state === 'data_sent') {
|
||||
// Create structure with various encodings
|
||||
const boundary1 = '----=_Encoding_Outer_' + Date.now();
|
||||
const boundary2 = '----=_Encoding_Inner_' + Date.now();
|
||||
@ -323,8 +344,9 @@ tap.test('Nested MIME Structures - should handle mixed nesting with various enco
|
||||
].join('\r\n');
|
||||
|
||||
socket.write(emailContent);
|
||||
state = 'email_sent';
|
||||
dataBuffer = '';
|
||||
} else if (dataBuffer.includes('250 ') && dataBuffer.includes('Message accepted') ||
|
||||
} else if ((dataBuffer.includes('250 OK') && state === 'email_sent') ||
|
||||
dataBuffer.includes('552 ') ||
|
||||
dataBuffer.includes('554 ') ||
|
||||
dataBuffer.includes('500 ')) {
|
||||
|
Reference in New Issue
Block a user