%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict'; const common = require('../common'); const assert = require('assert'); const { createHook } = require('async_hooks'); const http = require('http'); // Verify that resource emitted for an HTTPParser is not reused. // Verify that correct create/destroy events are emitted. const reused = Symbol('reused'); const reusedParser = []; const incomingMessageParser = []; const clientRequestParser = []; const dupDestroys = []; const destroyed = []; createHook({ init(asyncId, type, triggerAsyncId, resource) { switch (type) { case 'HTTPINCOMINGMESSAGE': incomingMessageParser.push(asyncId); break; case 'HTTPCLIENTREQUEST': clientRequestParser.push(asyncId); break; } if (resource[reused]) { reusedParser.push( `resource reused: ${asyncId}, ${triggerAsyncId}, ${type}` ); } resource[reused] = true; }, destroy(asyncId) { if (destroyed.includes(asyncId)) { dupDestroys.push(asyncId); } else { destroyed.push(asyncId); } } }).enable(); const server = http.createServer((req, res) => { res.end(); }); server.listen(0, common.mustCall(() => { const PORT = server.address().port; const url = `http://127.0.0.1:${PORT}`; http.get(url, common.mustCall(() => { server.close(common.mustCall(() => { server.listen(PORT, common.mustCall(() => { http.get(url, common.mustCall(() => { server.close(common.mustCall(() => { setTimeout(common.mustCall(verify), 200); })); })); })); })); })); })); function verify() { assert.strictEqual(reusedParser.length, 0); assert.strictEqual(incomingMessageParser.length, 2); assert.strictEqual(clientRequestParser.length, 2); assert.strictEqual(dupDestroys.length, 0); incomingMessageParser.forEach((id) => assert.ok(destroyed.includes(id))); clientRequestParser.forEach((id) => assert.ok(destroyed.includes(id))); }