1'use strict';
2// Flags: --expose-gc
3// just like test-gc-http-client.js,
4// but with an on('error') handler that does nothing.
5
6const common = require('../common');
7const onGC = require('../common/ongc');
8
9const cpus = require('os').availableParallelism();
10
11function serverHandler(req, res) {
12  req.resume();
13  res.writeHead(200, { 'Content-Type': 'text/plain' });
14  res.end('Hello World\n');
15}
16
17const http = require('http');
18const numRequests = 36;
19let createClients = true;
20let done = 0;
21let count = 0;
22let countGC = 0;
23
24const server = http.createServer(serverHandler);
25server.listen(0, common.mustCall(() => {
26  for (let i = 0; i < cpus; i++)
27    getAll(numRequests);
28}));
29
30function getAll(requestsRemaining) {
31  if (!createClients)
32    return;
33
34  if (requestsRemaining <= 0)
35    return;
36
37  const req = http.get({
38    hostname: 'localhost',
39    pathname: '/',
40    port: server.address().port
41  }, cb).on('error', onerror);
42
43  count++;
44  onGC(req, { ongc });
45
46  setImmediate(getAll, requestsRemaining - 1);
47}
48
49function cb(res) {
50  res.resume();
51  done++;
52}
53
54function onerror(err) {
55  throw err;
56}
57
58function ongc() {
59  countGC++;
60}
61
62setImmediate(status);
63
64function status() {
65  if (done > 0) {
66    createClients = false;
67    global.gc();
68    console.log(`done/collected/total: ${done}/${countGC}/${count}`);
69    if (countGC === count) {
70      server.close();
71    } else {
72      setImmediate(status);
73    }
74  } else {
75    setImmediate(status);
76  }
77}
78