mirror of
https://github.com/nodejs/node.git
synced 2025-05-07 15:35:41 +00:00

Make stream.finished callback invoked if stream is already closed/destroyed. PR-URL: https://github.com/nodejs/node/pull/28748 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
134 lines
2.8 KiB
JavaScript
134 lines
2.8 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const http = require('http');
|
|
const { finished } = require('stream');
|
|
|
|
{
|
|
// Test abort before finished.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
res.write('asd');
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
http.request({
|
|
port: this.address().port
|
|
})
|
|
.on('response', (res) => {
|
|
res.on('readable', () => {
|
|
res.destroy();
|
|
});
|
|
finished(res, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
})
|
|
.end();
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Test abort before finished.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
const req = http.request({
|
|
port: this.address().port
|
|
}, common.mustNotCall());
|
|
req.abort();
|
|
finished(req, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Test abort after request.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
const req = http.request({
|
|
port: this.address().port
|
|
}).end();
|
|
finished(req, (err) => {
|
|
common.expectsError({
|
|
type: Error,
|
|
code: 'ERR_STREAM_PREMATURE_CLOSE'
|
|
})(err);
|
|
finished(req, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
});
|
|
req.abort();
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Test abort before end.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
res.write('test');
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
const req = http.request({
|
|
port: this.address().port
|
|
}).on('response', common.mustCall((res) => {
|
|
req.abort();
|
|
finished(res, common.mustCall(() => {
|
|
finished(res, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
}));
|
|
})).end();
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Test destroy before end.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
res.write('test');
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
http.request({
|
|
port: this.address().port
|
|
}).on('response', common.mustCall((res) => {
|
|
// TODO(ronag): Bug? Won't emit 'close' unless read.
|
|
res.on('data', () => {});
|
|
res.destroy();
|
|
finished(res, common.mustCall(() => {
|
|
finished(res, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
}));
|
|
})).end();
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Test finish after end.
|
|
|
|
const server = http.createServer(function(req, res) {
|
|
res.end('asd');
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
http.request({
|
|
port: this.address().port
|
|
}).on('response', common.mustCall((res) => {
|
|
// TODO(ronag): Bug? Won't emit 'close' unless read.
|
|
res.on('data', () => {});
|
|
finished(res, common.mustCall(() => {
|
|
finished(res, common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
}));
|
|
})).end();
|
|
}));
|
|
}
|