summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-writable-true-after-close.js
blob: c0db7c3449276257745e3bdc25e713f521e29f96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'use strict';

const common = require('../common');
const assert = require('assert');
const { get, createServer } = require('http');

// res.writable should not be set to false after it has finished sending
// Ref: https://github.com/nodejs/node/issues/15029

let internal;
let external;

// Proxy server
const server = createServer(common.mustCall((req, res) => {
  const listener = common.mustCall(() => {
    assert.strictEqual(res.writable, true);
  });

  // on CentOS 5, 'finish' is emitted
  res.on('finish', listener);
  // Everywhere else, 'close' is emitted
  res.on('close', listener);

  get(`http://127.0.0.1:${internal.address().port}`, common.mustCall((inner) => {
    inner.pipe(res);
  }));
})).listen(0, () => {
  // Http server
  internal = createServer((req, res) => {
    res.writeHead(200);
    setImmediate(common.mustCall(() => {
      external.abort();
      res.end('Hello World\n');
    }));
  }).listen(0, () => {
    external = get(`http://127.0.0.1:${server.address().port}`);
    external.on('error', common.mustCall(() => {
      server.close();
      internal.close();
    }));
  });
});