84 lines
2.1 KiB
TypeScript
84 lines
2.1 KiB
TypeScript
|
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 = '';
|
||
|
|
||
|
client.on('data', (data) => {
|
||
|
received += data.toString();
|
||
|
console.log('Client received:', data.toString().trim());
|
||
|
|
||
|
if (received.includes('Hello from target server')) {
|
||
|
// Send test data
|
||
|
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();
|