UNPKG

guacamole-lite

Version:

Library to create servers compatible with the Guacamole protocol. Guacamole is a web client for RDP/VNC/SSH/Telnet

101 lines (85 loc) 2.95 kB
const {WebSocket} = require('ws'); const MockGuacdServer = require('./MockGuacdServer'); const {startServer, createWsClient, generateValidToken} = require('./testHelpers'); describe('WebSocket Server Tests', () => { let mockGuacdServer; let server; let wsPort; let guacdPort; beforeAll(() => { wsPort = 8080; guacdPort = 4822; mockGuacdServer = new MockGuacdServer(guacdPort); }); afterAll((done) => { mockGuacdServer.stop(done); }); beforeEach(() => { server = startServer({ wsPort: wsPort, guacdPort: guacdPort }); }); afterEach(() => { server.close(); }); test('Server Initialization', (done) => { const wsClient = createWsClient(wsPort, generateValidToken()); wsClient.on('open', () => { expect(wsClient.readyState).toBe(WebSocket.OPEN); wsClient.close(); done(); }); }); test('New Connection Handling', (done) => { const wsClient = createWsClient(wsPort, generateValidToken()); wsClient.on('open', () => { // Check if the server has registered the new connection expect(server.activeConnections.size).toBeGreaterThan(0); wsClient.close(); done(); }); }); test('Server Shutdown', (done) => { const wsClient = createWsClient(wsPort, generateValidToken()); wsClient.on('open', () => { server.close(); wsClient.on('close', () => { expect(wsClient.readyState).toBe(WebSocket.CLOSED); done(); }); }); }); test('Concurrent Connections', (done) => { const wsClient1 = createWsClient(wsPort, generateValidToken()); const wsClient2 = createWsClient(wsPort, generateValidToken()); let connectionsOpened = 0; const checkDone = () => { connectionsOpened++; if (connectionsOpened === 2) { expect(server.activeConnections.size).toBe(2); wsClient1.close(); wsClient2.close(); done(); } }; server.on('open', () => { checkDone(); }); }); // Additional test to ensure the server interacts with the mock guacd server test('Interaction with Mock Guacd Server', (done) => { const wsClient = createWsClient(wsPort, generateValidToken()); wsClient.on('open', () => { // Send a message to trigger interaction with the mock guacd server // wsClient.send('select'); }); mockGuacdServer.on('connect', (connection) => { connection.on('handshake-instruction', (instruction) => { expect(instruction).toContain('select'); wsClient.close(); done(); }); }); }); });