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();
|