// When calling .end(buffer) right away, this triggers a "hot path"
// optimization in http.js, to avoid an extra write call.
//
// However, the overhead of copying a large buffer is higher than
// the overhead of an extra write() call, so the hot path was not
// always as hot as it could be.
//
// Verify that our assumptions are valid.
'use strict';

const common = require('../common.js');

const bench = common.createBenchmark(main, {
  n: [1, 4, 8, 16],
  len: [1, 64, 256],
  c: [100]
});

function main({ len, n, c }) {
  const http = require('http');
  const chunk = Buffer.alloc(len, '8');

  const server = http.createServer((req, res) => {
    function send(left) {
      if (left === 0) return res.end();
      res.write(chunk);
      setTimeout(() => {
        send(left - 1);
      }, 0);
    }
    send(n);
  });

  server.listen(common.PORT, () => {
    bench.http({
      connections: c
    }, () => {
      server.close();
    });
  });
}
