Skip to content

Commit d3a1d93

Browse files
committed
fix: fixed event target handler leak warning
[ci skip]
1 parent 4642fd9 commit d3a1d93

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/QUICClient.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import { clientDefault, minIdleTimeout } from './config';
2828
import * as utils from './utils';
2929
import * as events from './events';
3030
import * as errors from './errors';
31+
import nodeEvents from 'events';
32+
nodeEvents.setMaxListeners(1000000);
3133

3234
interface QUICClient extends CreateDestroy {}
3335
@CreateDestroy({

tests/QUICClient.test.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1880,4 +1880,63 @@ describe(QUICClient.name, () => {
18801880
await client.destroy({ force: true });
18811881
await server.stop({ force: true });
18821882
});
1883+
test('handles many connections', async () => {
1884+
const connNum = 100;
1885+
const tlsConfigServer = await testsUtils.generateTLSConfig(defaultType);
1886+
const connectionEventProm = promise<events.EventQUICServerConnection>();
1887+
const server = new QUICServer({
1888+
crypto: {
1889+
key,
1890+
ops: serverCryptoOps,
1891+
},
1892+
logger: logger.getChild(QUICServer.name),
1893+
config: {
1894+
key: tlsConfigServer.leafKeyPairPEM.privateKey,
1895+
cert: tlsConfigServer.leafCertPEM,
1896+
verifyPeer: false,
1897+
},
1898+
});
1899+
socketCleanMethods.extractSocket(server);
1900+
let connCount = 0;
1901+
server.addEventListener(
1902+
events.EventQUICServerConnection.name,
1903+
(e: events.EventQUICServerConnection) => {
1904+
connCount++;
1905+
if (connCount === connNum) connectionEventProm.resolveP(e);
1906+
},
1907+
);
1908+
await server.start({
1909+
host: localhost,
1910+
});
1911+
const sharedSocket = new QUICSocket({
1912+
logger: logger.getChild(QUICSocket.name),
1913+
});
1914+
await sharedSocket.start({
1915+
host: localhost,
1916+
});
1917+
const clientPs: Array<Promise<QUICClient>> = [];
1918+
for (let i = 0; i < connNum; i++) {
1919+
const clientP = QUICClient.createQUICClient(
1920+
{
1921+
socket: sharedSocket,
1922+
host: localhost,
1923+
port: server.port,
1924+
crypto: {
1925+
ops: clientCryptoOps,
1926+
},
1927+
logger: logger.getChild(QUICClient.name),
1928+
config: {
1929+
verifyPeer: false,
1930+
},
1931+
},
1932+
{ timer: 2000 },
1933+
);
1934+
clientPs.push(clientP);
1935+
}
1936+
const clients = await Promise.all(clientPs);
1937+
await connectionEventProm.p;
1938+
await Promise.all(clients.map(client => client.destroy({ force: true })));
1939+
await sharedSocket.stop({ force: true });
1940+
await server.stop({ force: true });
1941+
});
18831942
});

0 commit comments

Comments
 (0)