mirror of https://github.com/lukechilds/node.git
Browse Source
Setting writable = false in IncomingMessage.end made some errors being swallowed in some very popular OSS libraries that we must support. This commit add some of those use cases to the tests, so we avoid further regressions. We should reevaluate how to set writable = false in IncomingMessage in a way that does not break the ecosystem. See: https://github.com/nodejs/node/pull/14024 Fixes: https://github.com/nodejs/node/issues/15029 PR-URL: https://github.com/nodejs/node/pull/15404 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>canary-base
4 changed files with 50 additions and 8 deletions
@ -0,0 +1,35 @@ |
|||
'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 external; |
|||
|
|||
// Http server
|
|||
const internal = createServer((req, res) => { |
|||
res.writeHead(200); |
|||
setImmediate(common.mustCall(() => { |
|||
external.abort(); |
|||
res.end('Hello World\n'); |
|||
})); |
|||
}).listen(0); |
|||
|
|||
// Proxy server
|
|||
const server = createServer(common.mustCall((req, res) => { |
|||
get(`http://127.0.0.1:${internal.address().port}`, common.mustCall((inner) => { |
|||
res.on('close', common.mustCall(() => { |
|||
assert.strictEqual(res.writable, true); |
|||
})); |
|||
inner.pipe(res); |
|||
})); |
|||
})).listen(0, () => { |
|||
external = get(`http://127.0.0.1:${server.address().port}`); |
|||
external.on('error', common.mustCall((err) => { |
|||
server.close(); |
|||
internal.close(); |
|||
})); |
|||
}); |
Loading…
Reference in new issue