From 7716ea29884876f1d951be2ef279081e2e5300bd Mon Sep 17 00:00:00 2001 From: Ciro Spaciari Date: Tue, 22 Apr 2025 21:06:48 -0700 Subject: [PATCH] passing --- .../test-http2-server-close-callback.js | 27 +++++++++ .../test/parallel/test-http2-session-unref.js | 58 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 test/js/node/test/parallel/test-http2-server-close-callback.js create mode 100644 test/js/node/test/parallel/test-http2-session-unref.js diff --git a/test/js/node/test/parallel/test-http2-server-close-callback.js b/test/js/node/test/parallel/test-http2-server-close-callback.js new file mode 100644 index 0000000000..e4cd24ce20 --- /dev/null +++ b/test/js/node/test/parallel/test-http2-server-close-callback.js @@ -0,0 +1,27 @@ +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const Countdown = require('../common/countdown'); +const http2 = require('http2'); + +const server = http2.createServer(); + +let session; + +const countdown = new Countdown(2, () => { + server.close(common.mustSucceed()); + session.close(); +}); + +server.listen(0, common.mustCall(() => { + const client = http2.connect(`http://localhost:${server.address().port}`); + client.on('connect', common.mustCall(() => countdown.dec())); +})); + +server.on('session', common.mustCall((s) => { + session = s; + countdown.dec(); +})); diff --git a/test/js/node/test/parallel/test-http2-session-unref.js b/test/js/node/test/parallel/test-http2-session-unref.js new file mode 100644 index 0000000000..4b41d5cbc2 --- /dev/null +++ b/test/js/node/test/parallel/test-http2-session-unref.js @@ -0,0 +1,58 @@ +'use strict'; +// Tests that calling unref() on Http2Session: +// (1) Prevents it from keeping the process alive +// (2) Doesn't crash + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const http2 = require('http2'); +const Countdown = require('../common/countdown'); +const { duplexPair } = require('stream'); + +const server = http2.createServer(); +const [ clientSide, serverSide ] = duplexPair(); + +const counter = new Countdown(3, () => server.unref()); + +// 'session' event should be emitted 3 times: +// - the vanilla client +// - the destroyed client +// - manual 'connection' event emission with generic Duplex stream +server.on('session', common.mustCallAtLeast((session) => { + counter.dec(); + session.unref(); +}, 3)); + +server.listen(0, common.mustCall(() => { + const port = server.address().port; + + // unref new client + { + const client = http2.connect(`http://localhost:${port}`); + client.unref(); + } + + // Unref destroyed client + { + const client = http2.connect(`http://localhost:${port}`); + + client.on('connect', common.mustCall(() => { + client.destroy(); + client.unref(); + })); + } + + // Unref destroyed client + { + const client = http2.connect(`http://localhost:${port}`, { + createConnection: common.mustCall(() => clientSide) + }); + + client.on('connect', common.mustCall(() => { + client.destroy(); + client.unref(); + })); + } +})); +server.emit('connection', serverSide);