nodejs/test/parallel/test-quic-internal-endpoint-listen-defaults.js
James M Snell 062ae6f3cb src, quic: refine more of the quic implementation
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>
2025-01-06 10:47:36 -08:00

88 lines
2.1 KiB
JavaScript

// Flags: --expose-internals --no-warnings
'use strict';
const { hasQuic } = require('../common');
const {
describe,
it,
} = require('node:test');
describe('quic internal endpoint listen defaults', { skip: !hasQuic }, async () => {
const {
ok,
rejects,
strictEqual,
throws,
} = require('node:assert');
const {
kState,
} = require('internal/quic/symbols');
const { createPrivateKey } = require('node:crypto');
const fixtures = require('../common/fixtures');
const keys = createPrivateKey(fixtures.readKey('agent1-key.pem'));
const certs = fixtures.readKey('agent1-cert.pem');
const {
SocketAddress,
} = require('net');
const {
QuicEndpoint,
listen,
} = require('internal/quic/quic');
it('are reasonable and work as expected', async () => {
const endpoint = new QuicEndpoint();
ok(!endpoint[kState].isBound);
ok(!endpoint[kState].isReceiving);
ok(!endpoint[kState].isListening);
strictEqual(endpoint.address, undefined);
await rejects(listen(123, { keys, certs, endpoint }), {
code: 'ERR_INVALID_ARG_TYPE',
});
await rejects(listen(() => {}, 123), {
code: 'ERR_INVALID_ARG_TYPE',
});
await listen(() => {}, { keys, certs, endpoint });
await rejects(listen(() => {}, { keys, certs, endpoint }), {
code: 'ERR_INVALID_STATE',
});
ok(endpoint[kState].isBound);
ok(endpoint[kState].isReceiving);
ok(endpoint[kState].isListening);
const address = endpoint.address;
ok(address instanceof SocketAddress);
strictEqual(address.address, '127.0.0.1');
strictEqual(address.family, 'ipv4');
strictEqual(address.flowlabel, 0);
ok(address.port !== 0);
ok(!endpoint.destroyed);
endpoint.destroy();
strictEqual(endpoint.closed, endpoint.close());
await endpoint.closed;
ok(endpoint.destroyed);
await rejects(listen(() => {}, { keys, certs, endpoint }), {
code: 'ERR_INVALID_STATE',
});
throws(() => { endpoint.busy = true; }, {
code: 'ERR_INVALID_STATE',
});
await endpoint[Symbol.asyncDispose]();
strictEqual(endpoint.address, undefined);
});
});