Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: https://github.com/nodejs/node/pull/56328 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
192 lines
4.6 KiB
JavaScript
192 lines
4.6 KiB
JavaScript
// Flags: --experimental-quic --no-warnings
|
|
'use strict';
|
|
|
|
const { hasQuic } = require('../common');
|
|
|
|
const {
|
|
describe,
|
|
it,
|
|
} = require('node:test');
|
|
|
|
describe('quic internal endpoint options', { skip: !hasQuic }, async () => {
|
|
const {
|
|
strictEqual,
|
|
throws,
|
|
} = require('node:assert');
|
|
|
|
const {
|
|
QuicEndpoint,
|
|
} = require('node:quic');
|
|
|
|
const {
|
|
inspect,
|
|
} = require('util');
|
|
|
|
it('invalid options', async () => {
|
|
['a', null, false, NaN].forEach((i) => {
|
|
throws(() => new QuicEndpoint(i), {
|
|
code: 'ERR_INVALID_ARG_TYPE',
|
|
});
|
|
});
|
|
});
|
|
|
|
it('valid options', async () => {
|
|
// Just Works... using all defaults
|
|
new QuicEndpoint();
|
|
});
|
|
|
|
it('various cases', async () => {
|
|
const cases = [
|
|
{
|
|
key: 'retryTokenExpiration',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'tokenExpiration',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'maxConnectionsPerHost',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'maxConnectionsTotal',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'maxStatelessResetsPerHost',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'addressLRUSize',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'maxRetries',
|
|
valid: [
|
|
1, 10, 100, 1000, 10000, 10000n,
|
|
],
|
|
invalid: [-1, -1n, 'a', null, false, true, {}, [], () => {}]
|
|
},
|
|
{
|
|
key: 'validateAddress',
|
|
valid: [true, false, 0, 1, 'a'],
|
|
invalid: [],
|
|
},
|
|
{
|
|
key: 'disableStatelessReset',
|
|
valid: [true, false, 0, 1, 'a'],
|
|
invalid: [],
|
|
},
|
|
{
|
|
key: 'ipv6Only',
|
|
valid: [true, false, 0, 1, 'a'],
|
|
invalid: [],
|
|
},
|
|
{
|
|
key: 'udpReceiveBufferSize',
|
|
valid: [0, 1, 2, 3, 4, 1000],
|
|
invalid: [-1, 'a', null, false, true, {}, [], () => {}],
|
|
},
|
|
{
|
|
key: 'udpSendBufferSize',
|
|
valid: [0, 1, 2, 3, 4, 1000],
|
|
invalid: [-1, 'a', null, false, true, {}, [], () => {}],
|
|
},
|
|
{
|
|
key: 'udpTTL',
|
|
valid: [0, 1, 2, 3, 4, 255],
|
|
invalid: [-1, 256, 'a', null, false, true, {}, [], () => {}],
|
|
},
|
|
{
|
|
key: 'resetTokenSecret',
|
|
valid: [
|
|
new Uint8Array(16),
|
|
new Uint16Array(8),
|
|
new Uint32Array(4),
|
|
],
|
|
invalid: [
|
|
'a', null, false, true, {}, [], () => {},
|
|
new Uint8Array(15),
|
|
new Uint8Array(17),
|
|
new ArrayBuffer(16),
|
|
],
|
|
},
|
|
{
|
|
key: 'tokenSecret',
|
|
valid: [
|
|
new Uint8Array(16),
|
|
new Uint16Array(8),
|
|
new Uint32Array(4),
|
|
],
|
|
invalid: [
|
|
'a', null, false, true, {}, [], () => {},
|
|
new Uint8Array(15),
|
|
new Uint8Array(17),
|
|
new ArrayBuffer(16),
|
|
],
|
|
},
|
|
{
|
|
// Unknown options are ignored entirely for any value type
|
|
key: 'ignored',
|
|
valid: ['a', null, false, true, {}, [], () => {}],
|
|
invalid: [],
|
|
},
|
|
];
|
|
|
|
for (const { key, valid, invalid } of cases) {
|
|
for (const value of valid) {
|
|
const options = {};
|
|
options[key] = value;
|
|
new QuicEndpoint(options);
|
|
}
|
|
|
|
for (const value of invalid) {
|
|
const options = {};
|
|
options[key] = value;
|
|
throws(() => new QuicEndpoint(options), {
|
|
message: new RegExp(`${key}`),
|
|
}, value);
|
|
}
|
|
}
|
|
});
|
|
|
|
it('endpoint can be inspected', async () => {
|
|
const endpoint = new QuicEndpoint({});
|
|
strictEqual(typeof inspect(endpoint), 'string');
|
|
endpoint.close();
|
|
await endpoint.closed;
|
|
});
|
|
|
|
it('endpoint with object address', () => {
|
|
new QuicEndpoint({
|
|
address: { host: '127.0.0.1:0' },
|
|
});
|
|
new QuicEndpoint({
|
|
address: '127.0.0.1:0',
|
|
});
|
|
throws(() => new QuicEndpoint({ address: 123 }), {
|
|
code: 'ERR_INVALID_ARG_TYPE',
|
|
});
|
|
});
|
|
|
|
});
|