diff --git a/test/parallel/test-http-same-map.js b/test/parallel/test-http-same-map.js new file mode 100644 index 00000000000000..266a75fed8634b --- /dev/null +++ b/test/parallel/test-http-same-map.js @@ -0,0 +1,58 @@ +// Flags: --allow_natives_syntax +'use strict'; + +require('../common'); +const assert = require('assert'); +const http = require('http'); + +const server = + http.createServer(onrequest).listen(0, 9999, () => next(0)); + +function onrequest(req, res) { + res.end('ok'); + onrequest.requests.push(req); + onrequest.responses.push(res); +} +onrequest.requests = []; +onrequest.responses = []; + +function next(n) { + const s = server.address(); + const req = http.get({ + host: s.address, + port: s.port + }); + req.once('response', (res) => onresponse(n, req, res)); +} + +function onresponse(n, req, res) { + res.resume(); + + if (n < 3) { + res.once('end', () => next(n + 1)); + } else { + server.close(); + } + + onresponse.requests.push(req); + onresponse.responses.push(res); +} +onresponse.requests = []; +onresponse.responses = []; + +function allSame(list) { + assert(list.length >= 2); + // Use |elt| in no-op position to pacify eslint. + for (const elt of list) elt, eval('%DebugPrint(elt)'); + for (const elt of list) elt, assert(eval('%HaveSameMap(list[0], elt)')); +} + +process.on('exit', () => { + eval('%CollectGarbage(0)'); + // TODO(bnoordhuis) Investigate why the first IncomingMessage ends up + // with a deprecated map. The map is stable after the first request. + allSame(onrequest.requests.slice(1)); + allSame(onrequest.responses); + allSame(onresponse.requests); + allSame(onresponse.responses); +});