feat(transport): implement WebSocket-based isotransport client and server API with typed events and end-to-end tests
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as isotransport from '../ts/index.js';
|
||||
|
||||
tap.test('should exchange messages over a WebSocket transport', async () => {
|
||||
const port = 32000 + Math.floor(Math.random() * 10000);
|
||||
const server = new isotransport.IsotransportServer({ port, host: '127.0.0.1' });
|
||||
|
||||
const serverMessagePromise = new Promise<isotransport.TIsotransportMessage>((resolve) => {
|
||||
server.on('connection', (connectionArg) => {
|
||||
connectionArg.on('message', (messageArg) => {
|
||||
resolve(messageArg);
|
||||
connectionArg.send('pong');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
await server.listen();
|
||||
|
||||
const client = new isotransport.IsotransportClient({
|
||||
url: `ws://127.0.0.1:${port}`,
|
||||
});
|
||||
try {
|
||||
const clientMessagePromise = new Promise<isotransport.TIsotransportMessage>((resolve) => {
|
||||
client.on('message', resolve);
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
client.send('ping');
|
||||
|
||||
expect(await serverMessagePromise).toEqual('ping');
|
||||
expect(await clientMessagePromise).toEqual('pong');
|
||||
} finally {
|
||||
client.close();
|
||||
await server.close();
|
||||
}
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
Reference in New Issue
Block a user