// Flags: --allow_natives_syntax 'use strict'; const common = require('../common'); const assert = require('assert'); const http = require('http'); const server = http.createServer(onrequest).listen(0, common.localhostIPv4, () => 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 { address: host, port } = server.address(); const req = http.get({ host, 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); });