1// Flags: --allow_natives_syntax 2'use strict'; 3 4const common = require('../common'); 5const assert = require('assert'); 6const http = require('http'); 7 8const server = 9 http.createServer(onrequest).listen(0, common.localhostIPv4, () => next(0)); 10 11function onrequest(req, res) { 12 res.end('ok'); 13 onrequest.requests.push(req); 14 onrequest.responses.push(res); 15} 16onrequest.requests = []; 17onrequest.responses = []; 18 19function next(n) { 20 const { address: host, port } = server.address(); 21 const req = http.get({ host, port }); 22 req.once('response', (res) => onresponse(n, req, res)); 23} 24 25function onresponse(n, req, res) { 26 res.resume(); 27 28 if (n < 3) { 29 res.once('end', () => next(n + 1)); 30 } else { 31 server.close(); 32 } 33 34 onresponse.requests.push(req); 35 onresponse.responses.push(res); 36} 37onresponse.requests = []; 38onresponse.responses = []; 39 40function allSame(list) { 41 assert(list.length >= 2); 42 // eslint-disable-next-line no-unused-vars 43 for (const elt of list) eval('%DebugPrint(elt)'); 44 // eslint-disable-next-line no-unused-vars 45 for (const elt of list) assert(eval('%HaveSameMap(list[0], elt)')); 46} 47 48process.on('exit', () => { 49 eval('%CollectGarbage(0)'); 50 // TODO(bnoordhuis) Investigate why the first IncomingMessage ends up 51 // with a deprecated map. The map is stable after the first request. 52 allSame(onrequest.requests.slice(1)); 53 allSame(onrequest.responses); 54 allSame(onresponse.requests); 55 allSame(onresponse.responses); 56}); 57