39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
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();
|