diff options
Diffstat (limited to 'test/parallel/test-http-writable-true-after-close.js')
-rw-r--r-- | test/parallel/test-http-writable-true-after-close.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/parallel/test-http-writable-true-after-close.js b/test/parallel/test-http-writable-true-after-close.js new file mode 100644 index 0000000000..a1915dd69c --- /dev/null +++ b/test/parallel/test-http-writable-true-after-close.js @@ -0,0 +1,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(); + })); + }); +}); |