mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
Pass an error to the sys.pump callback if one occurs
- Add test case for pumping from unreadable stream. - Document the sys.pump error handling behavior
This commit is contained in:
parent
57642e2349
commit
37b6e10684
@ -860,8 +860,9 @@ Experimental
|
||||
|
||||
Read the data from `readableStream` and send it to the `writableStream`.
|
||||
When `writeableStream.write(data)` returns `false` `readableStream` will be
|
||||
paused until the `drain` event occurs on the `writableStream`. `callback` is
|
||||
called when `writableStream` is closed.
|
||||
paused until the `drain` event occurs on the `writableStream`. `callback` gets
|
||||
an error as its only argument and is called when `writableStream` is closed or
|
||||
when an error occurs.
|
||||
|
||||
|
||||
## Timers
|
||||
|
@ -309,6 +309,11 @@ exports.pump = function (readStream, writeStream, callback) {
|
||||
readStream.addListener("close", function () {
|
||||
if (callback) callback();
|
||||
});
|
||||
|
||||
readStream.addListener("error", function(err) {
|
||||
writeStream.end();
|
||||
if (callback) callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
52
test/simple/test-pump-file2tcp-noexist.js
Normal file
52
test/simple/test-pump-file2tcp-noexist.js
Normal file
@ -0,0 +1,52 @@
|
||||
common = require("../common");
|
||||
assert = common.assert
|
||||
net = require("net");
|
||||
fs = require("fs");
|
||||
sys = require("sys");
|
||||
path = require("path");
|
||||
fn = path.join(common.fixturesDir, 'does_not_exist.txt');
|
||||
|
||||
var got_error = false;
|
||||
var conn_closed = false;
|
||||
|
||||
server = net.createServer(function (stream) {
|
||||
common.error('pump!');
|
||||
sys.pump(fs.createReadStream(fn), stream, function (err) {
|
||||
common.error("sys.pump's callback fired");
|
||||
if (err) {
|
||||
got_error = true;
|
||||
} else {
|
||||
common.debug("sys.pump's callback fired with no error");
|
||||
common.debug("this shouldn't happen as the file doesn't exist...");
|
||||
assert.equal(true, false);
|
||||
}
|
||||
server.close();
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
conn = net.createConnection(common.PORT);
|
||||
conn.setEncoding('utf8');
|
||||
conn.addListener("data", function (chunk) {
|
||||
common.error('recv data! nchars = ' + chunk.length);
|
||||
buffer += chunk;
|
||||
});
|
||||
|
||||
conn.addListener("end", function () {
|
||||
conn.end();
|
||||
});
|
||||
|
||||
conn.addListener("close", function () {
|
||||
common.error('client connection close');
|
||||
conn_closed = true;
|
||||
});
|
||||
});
|
||||
|
||||
var buffer = '';
|
||||
count = 0;
|
||||
|
||||
process.addListener('exit', function () {
|
||||
assert.equal(true, got_error);
|
||||
assert.equal(true, conn_closed);
|
||||
console.log("exiting");
|
||||
});
|
Loading…
Reference in New Issue
Block a user