diff --git a/test/parallel/test-async-hooks-http-parser-destroy.js b/test/parallel/test-async-hooks-http-parser-destroy.js index 8e92f6359c6e72..22b5a0ff11b889 100644 --- a/test/parallel/test-async-hooks-http-parser-destroy.js +++ b/test/parallel/test-async-hooks-http-parser-destroy.js @@ -11,19 +11,34 @@ const http = require('http'); const N = 50; const KEEP_ALIVE = 100; -const createdIds = []; -const destroyedIds = []; +const createdIdsIncomingMessage = []; +const createdIdsClientRequest = []; +const destroyedIdsIncomingMessage = []; +const destroyedIdsClientRequest = []; + async_hooks.createHook({ init: (asyncId, type) => { - if (type === 'HTTPINCOMINGMESSAGE' || type === 'HTTPCLIENTREQUEST') { - createdIds.push(asyncId); + if (type === 'HTTPINCOMINGMESSAGE') { + createdIdsIncomingMessage.push(asyncId); + } + if (type === 'HTTPCLIENTREQUEST') { + createdIdsClientRequest.push(asyncId); } }, destroy: (asyncId) => { - if (createdIds.includes(asyncId)) { - destroyedIds.push(asyncId); + if (createdIdsIncomingMessage.includes(asyncId)) { + destroyedIdsIncomingMessage.push(asyncId); } - if (destroyedIds.length === 2 * N) { + if (createdIdsClientRequest.includes(asyncId)) { + destroyedIdsClientRequest.push(asyncId); + } + + if (destroyedIdsClientRequest.length === N && keepAliveAgent) { + keepAliveAgent.destroy(); + keepAliveAgent = undefined; + } + + if (destroyedIdsIncomingMessage.length === N && server.listening) { server.close(); } } @@ -33,18 +48,18 @@ const server = http.createServer((req, res) => { res.end('Hello'); }); -const keepAliveAgent = new http.Agent({ +let keepAliveAgent = new http.Agent({ keepAlive: true, keepAliveMsecs: KEEP_ALIVE, }); -server.listen(0, function() { +server.listen(0, () => { for (let i = 0; i < N; ++i) { (function makeRequest() { http.get({ port: server.address().port, agent: keepAliveAgent - }, function(res) { + }, (res) => { res.resume(); }); })(); @@ -52,9 +67,15 @@ server.listen(0, function() { }); function checkOnExit() { - assert.deepStrictEqual(destroyedIds.sort(), createdIds.sort()); - // There should be two IDs for each request. - assert.strictEqual(createdIds.length, N * 2); + assert.strictEqual(createdIdsIncomingMessage.length, N); + assert.strictEqual(createdIdsClientRequest.length, N); + assert.strictEqual(destroyedIdsIncomingMessage.length, N); + assert.strictEqual(destroyedIdsClientRequest.length, N); + + assert.deepStrictEqual(destroyedIdsIncomingMessage.sort(), + createdIdsIncomingMessage.sort()); + assert.deepStrictEqual(destroyedIdsClientRequest.sort(), + createdIdsClientRequest.sort()); } process.on('SIGTERM', () => {