blob: d6198d50403a7a60c44447daccd5f383434ded0f [file] [edit]
// Flags: --experimental-quic --no-warnings
// Test: default transport parameter limits are reasonable.
// Verify that the default transport parameters have sane values:
// not zero (which would prevent streams), and not excessively large
// (which could waste resources).
import { hasQuic, skip, mustCall } from '../common/index.mjs';
import assert from 'node:assert';
const { ok } = assert;
if (!hasQuic) {
skip('QUIC is not enabled');
}
const { listen, connect } = await import('../common/quic.mjs');
const serverEndpoint = await listen(mustCall(async (serverSession) => {
const info = await serverSession.opened;
// The handshake info should be available.
ok(info, 'handshake info should be available');
await serverSession.closed;
}));
const clientSession = await connect(serverEndpoint.address, {
reuseEndpoint: false,
});
const info = await clientSession.opened;
// Verify the handshake completed and we can inspect the session.
ok(info, 'handshake info should be available');
// Check that the session has reasonable default stream limits by
// verifying we can create at least one bidirectional and one
// unidirectional stream.
const bidiStream = await clientSession.createBidirectionalStream();
ok(bidiStream, 'should be able to create a bidi stream');
bidiStream.destroy();
const uniStream = await clientSession.createUnidirectionalStream();
ok(uniStream, 'should be able to create a uni stream');
uniStream.destroy();
// Check the endpoint's maxConnectionsPerHost and maxConnectionsTotal
// defaults are either 0 (unlimited) or a reasonable positive number.
const maxPerHost = serverEndpoint.maxConnectionsPerHost;
const maxTotal = serverEndpoint.maxConnectionsTotal;
ok(maxPerHost >= 0, 'maxConnectionsPerHost should be non-negative');
ok(maxTotal >= 0, 'maxConnectionsTotal should be non-negative');
await clientSession.close();
await serverEndpoint.close();