var assert = require('assert');
var fs = require('fs');
-var stream = fs.createReadStream(__filename, { bufferSize: 64 });
+var stream = fs.createReadStream(__filename, {
+ bufferSize: 64,
+ lowWaterMark: 0
+});
var err = new Error('BAM');
-stream.on('data', function(buf) {
- var fd = stream.fd;
+stream.on('error', common.mustCall(function errorHandler(err_) {
+ console.error('error event');
+ process.nextTick(function() {
+ assert.equal(stream.fd, null);
+ assert.equal(err_, err);
+ });
+}));
+
+fs.close = common.mustCall(function(fd_, cb) {
+ assert.equal(fd_, stream.fd);
+ process.nextTick(cb);
+});
+var read = fs.read;
+fs.read = function() {
+ // first time is ok.
+ read.apply(fs, arguments);
+ // then it breaks
fs.read = function() {
var cb = arguments[arguments.length - 1];
process.nextTick(function() {
cb(err);
});
+ // and should not be called again!
+ fs.read = function() {
+ throw new Error('BOOM!');
+ };
};
+};
- fs.close = common.mustCall(function(fd_, cb) {
- assert.equal(fd_, fd);
- process.nextTick(cb);
- });
-
- stream.on('error', common.mustCall(function(err_) {
- assert.equal(stream.fd, null);
- assert.equal(err_, err);
- }));
-
+stream.on('data', function(buf) {
stream.on('data', assert.fail); // no more 'data' events should follow
});
var assert = require('assert');
var fs = require('fs');
-var stream = fs.createWriteStream(common.tmpDir + '/out');
+var stream = fs.createWriteStream(common.tmpDir + '/out', {
+ lowWaterMark: 0,
+ highWaterMark: 10
+});
var err = new Error('BAM');
-stream.write(new Buffer(256), function() {
- var fd = stream.fd;
+var write = fs.write;
+var writeCalls = 0;
+fs.write = function() {
+ switch (writeCalls++) {
+ case 0:
+ console.error('first write');
+ // first time is ok.
+ return write.apply(fs, arguments);
+ case 1:
+ // then it breaks
+ console.error('second write');
+ var cb = arguments[arguments.length - 1];
+ return process.nextTick(function() {
+ cb(err);
+ });
+ default:
+ // and should not be called again!
+ throw new Error('BOOM!');
+ }
+};
- fs.write = function() {
- var cb = arguments[arguments.length - 1];
- process.nextTick(function() {
- cb(err);
- });
- };
+fs.close = common.mustCall(function(fd_, cb) {
+ console.error('fs.close', fd_, stream.fd);
+ assert.equal(fd_, stream.fd);
+ process.nextTick(cb);
+});
- fs.close = function(fd_, cb) {
- assert.equal(fd_, fd);
- process.nextTick(cb);
- };
+stream.on('error', common.mustCall(function(err_) {
+ console.error('error handler');
+ assert.equal(stream.fd, null);
+ assert.equal(err_, err);
+}));
- stream.write(new Buffer(256), common.mustCall(function(err_) {
- assert.equal(err_, err);
- }));
- stream.on('error', common.mustCall(function(err_) {
- assert.equal(stream.fd, null);
+stream.write(new Buffer(256), function() {
+ console.error('first cb');
+ stream.write(new Buffer(256), common.mustCall(function(err_) {
+ console.error('second cb');
assert.equal(err_, err);
}));
});