solana/web3.js/test/websocket.test.ts

87 lines
2.8 KiB
TypeScript
Raw Normal View History

import bs58 from 'bs58';
2021-02-05 18:59:00 -08:00
import {Buffer} from 'buffer';
import {expect, use} from 'chai';
import chaiAsPromised from 'chai-as-promised';
import {Connection} from '../src';
import {url, wsUrl} from './url';
2022-08-11 02:10:11 -07:00
import {sleep} from '../src/utils/sleep';
2021-02-05 18:59:00 -08:00
use(chaiAsPromised);
2021-02-05 18:59:00 -08:00
if (process.env.TEST_LIVE) {
describe('websocket', () => {
const connection = new Connection(url);
2021-02-05 18:59:00 -08:00
it('connect and disconnect', async () => {
const testSignature = bs58.encode(Buffer.alloc(64));
const id = connection.onSignature(testSignature, () => {});
2021-02-05 18:59:00 -08:00
// wait for websocket to connect
await sleep(100);
expect(connection._rpcWebSocketConnected).to.be.true;
expect(connection._rpcWebSocketHeartbeat).not.to.eq(null);
2021-02-05 18:59:00 -08:00
// test if socket is open
await connection._rpcWebSocket.notify('ping');
2021-02-05 18:59:00 -08:00
await connection.removeSignatureListener(id);
expect(connection._rpcWebSocketConnected).to.eq(false);
expect(connection._rpcWebSocketHeartbeat).not.to.eq(null);
expect(connection._rpcWebSocketIdleTimeout).not.to.eq(null);
2021-02-05 18:59:00 -08:00
// wait for websocket to disconnect
await sleep(1100);
expect(connection._rpcWebSocketConnected).to.eq(false);
expect(connection._rpcWebSocketHeartbeat).to.eq(null);
expect(connection._rpcWebSocketIdleTimeout).to.eq(null);
2021-02-05 18:59:00 -08:00
// test if socket is closed
await expect(connection._rpcWebSocket.notify('ping')).to.be.rejectedWith(
'socket not ready',
);
});
2021-02-05 18:59:00 -08:00
it('idle timeout', async () => {
const testSignature = bs58.encode(Buffer.alloc(64));
const id = connection.onSignature(testSignature, () => {});
2021-02-05 18:59:00 -08:00
// wait for websocket to connect
await sleep(100);
expect(connection._rpcWebSocketIdleTimeout).to.eq(null);
2021-02-05 18:59:00 -08:00
await connection.removeSignatureListener(id);
expect(connection._rpcWebSocketIdleTimeout).not.to.eq(null);
2021-02-05 18:59:00 -08:00
const nextId = connection.onSignature(testSignature, () => {});
// wait for websocket to connect
await sleep(100);
2021-02-05 18:59:00 -08:00
expect(connection._rpcWebSocketIdleTimeout).to.eq(null);
2021-02-05 18:59:00 -08:00
await connection.removeSignatureListener(nextId);
expect(connection._rpcWebSocketIdleTimeout).not.to.eq(null);
2021-02-05 18:59:00 -08:00
// wait for websocket to disconnect
await sleep(1100);
expect(connection._rpcWebSocketIdleTimeout).to.eq(null);
});
it('connect by websocket endpoint from options', async () => {
let connection = new Connection('http://localhost', {
wsEndpoint: wsUrl,
});
const testSignature = bs58.encode(Buffer.alloc(64));
const id = connection.onSignature(testSignature, () => {});
// wait for websocket to connect
await sleep(100);
expect(connection._rpcWebSocketConnected).to.be.true;
expect(connection._rpcWebSocketHeartbeat).not.to.eq(null);
await connection.removeSignatureListener(id);
});
});
2021-02-05 18:59:00 -08:00
}