summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-writable-true-after-close.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-http-writable-true-after-close.js')
-rw-r--r--test/parallel/test-http-writable-true-after-close.js42
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();
+ }));
+ });
+});