mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
test(node): add http writable after close test
This commit is contained in:
@@ -166,6 +166,9 @@ function callCloseCallback(self) {
|
||||
}
|
||||
function emitCloseNT(self) {
|
||||
if (!self._closed) {
|
||||
if (self._ended !== undefined) {
|
||||
self._ended = true;
|
||||
}
|
||||
self.destroyed = true;
|
||||
self._closed = true;
|
||||
callCloseCallback(self);
|
||||
|
||||
@@ -272,9 +272,7 @@ const ServerResponsePrototype = {
|
||||
}
|
||||
this.detachSocket(socket);
|
||||
this.finished = true;
|
||||
process.nextTick(self => {
|
||||
self._ended = true;
|
||||
}, this);
|
||||
// Marking _ended happens on 'close' to align with Node.js behavior
|
||||
this.emit("prefinish");
|
||||
this._callPendingCallbacks();
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
'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();
|
||||
}));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user