mirror of
https://github.com/nodejs/node.git
synced 2025-04-30 07:19:19 +00:00
test: test case for multiple res.writeHead and res.getHeader
PR-URL: https://github.com/nodejs/node/pull/45508 Fixes: https://github.com/nodejs/node/issues/36721 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
be9cd3ecb0
commit
c03354d3e0
@ -331,6 +331,11 @@ ServerResponse.prototype._implicitHeader = function _implicitHeader() {
|
||||
|
||||
ServerResponse.prototype.writeHead = writeHead;
|
||||
function writeHead(statusCode, reason, obj) {
|
||||
|
||||
if (this._header) {
|
||||
throw new ERR_HTTP_HEADERS_SENT('write');
|
||||
}
|
||||
|
||||
const originalStatusCode = statusCode;
|
||||
|
||||
statusCode |= 0;
|
||||
|
@ -46,8 +46,9 @@ const server = http.createServer((req, res) => {
|
||||
|
||||
b.on('error', common.mustCall((er) => {
|
||||
if (res) {
|
||||
res.writeHead(500);
|
||||
res.end('An error occurred');
|
||||
// Introduce an error on the client by writing unexpected data.
|
||||
// The client is now expecting a chunk header so any letter will have the parser throw an error.
|
||||
res.socket.write('H');
|
||||
}
|
||||
// res.writeHead(500), res.destroy, etc.
|
||||
server.close();
|
||||
|
@ -58,7 +58,6 @@ const s = http.createServer(common.mustCall((req, res) => {
|
||||
}, {
|
||||
code: 'ERR_HTTP_HEADERS_SENT',
|
||||
name: 'Error',
|
||||
message: 'Cannot render headers after they are sent to the client'
|
||||
});
|
||||
|
||||
res.end();
|
||||
@ -76,3 +75,24 @@ function runTest() {
|
||||
response.resume();
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
const server = http.createServer(common.mustCall((req, res) => {
|
||||
res.writeHead(200, [ 'test', '1' ]);
|
||||
assert.throws(() => res.writeHead(200, [ 'test2', '2' ]), {
|
||||
code: 'ERR_HTTP_HEADERS_SENT',
|
||||
name: 'Error',
|
||||
});
|
||||
res.end();
|
||||
}));
|
||||
|
||||
server.listen(0, common.mustCall(() => {
|
||||
http.get({ port: server.address().port }, (res) => {
|
||||
assert.strictEqual(res.headers.test, '1');
|
||||
assert.strictEqual('test2' in res.headers, false);
|
||||
res.resume().on('end', common.mustCall(() => {
|
||||
server.close();
|
||||
}));
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user