smartproxy/test/test.basic-forward.ts

87 lines
2.2 KiB
TypeScript
Raw Normal View History

2025-05-29 11:30:42 +00:00
import { tap, expect } from '@git.zone/tstest/tapbundle';
import { SmartProxy } from '../ts/index.js';
import * as net from 'net';
tap.test('basic forward action should work correctly', async (t) => {
t.timeout(10000);
// Create a simple echo server as the target
const targetServer = net.createServer((socket) => {
console.log('Target server: Client connected');
socket.write('Hello from target server\n');
socket.on('data', (data) => {
console.log(`Target server received: ${data.toString().trim()}`);
socket.write(`Echo: ${data}`);
});
socket.on('error', (err) => {
console.error('Target server socket error:', err);
});
});
await new Promise<void>((resolve) => {
targetServer.listen(7777, '127.0.0.1', () => {
console.log('Target server listening on port 7777');
resolve();
});
});
// Create SmartProxy with forward route
const proxy = new SmartProxy({
enableDetailedLogging: true,
routes: [{
name: 'test-forward',
match: { ports: 7778 },
action: {
type: 'forward',
target: { host: '127.0.0.1', port: 7777 }
}
}]
});
await proxy.start();
console.log('Proxy started on port 7778');
// Test the connection
const client = new net.Socket();
await new Promise<void>((resolve, reject) => {
let received = '';
2025-05-29 12:15:53 +00:00
let testMessageSent = false;
2025-05-29 11:30:42 +00:00
client.on('data', (data) => {
received += data.toString();
console.log('Client received:', data.toString().trim());
2025-05-29 12:15:53 +00:00
if (received.includes('Hello from target server') && !testMessageSent) {
// Send test data only once
testMessageSent = true;
2025-05-29 11:30:42 +00:00
client.write('Test message\n');
} else if (received.includes('Echo: Test message')) {
// Test successful
client.end();
resolve();
}
});
client.on('error', reject);
client.connect(7778, '127.0.0.1', () => {
console.log('Client connected to proxy');
});
// Add timeout
setTimeout(() => {
reject(new Error('Test timeout - no response received'));
}, 5000);
});
await proxy.stop();
targetServer.close();
console.log('Test completed successfully');
});
tap.start();