1'use strict';
2// Flags: --expose-gc
3// Like test-gc-http-client.js, but with a timeout set.
4
5const common = require('../common');
6const onGC = require('../common/ongc');
7const http = require('http');
8
9function serverHandler(req, res) {
10  setTimeout(function() {
11    req.resume();
12    res.writeHead(200);
13    res.end('hello\n');
14  }, 100);
15}
16
17const numRequests = 128;
18let done = 0;
19let countGC = 0;
20
21const server = http.createServer(serverHandler);
22server.listen(0, common.mustCall(() => {
23  getAll(numRequests);
24}));
25
26function getAll(requestsRemaining) {
27  if (requestsRemaining <= 0)
28    return;
29
30  const req = http.get({
31    hostname: 'localhost',
32    pathname: '/',
33    port: server.address().port
34  }, cb);
35
36  req.setTimeout(10, common.mustCall());
37
38  onGC(req, { ongc });
39
40  setImmediate(getAll, requestsRemaining - 1);
41}
42
43function cb(res) {
44  res.resume();
45  done += 1;
46}
47
48function ongc() {
49  countGC++;
50}
51
52setImmediate(status);
53
54function status() {
55  if (done > 0) {
56    global.gc();
57    console.log(`done/collected/total: ${done}/${countGC}/${numRequests}`);
58    if (countGC === numRequests) {
59      server.close();
60      return;
61    }
62  }
63
64  setImmediate(status);
65}
66