Browse Source

test: Update simple/test-fs-{write,read}-stream-err for streams2

Streams2 style streams might have already kicked off a read() or write()
before emitting 'data' events.  Make the test less dependent on ordering
of when data events occur.
v0.9.4-release
isaacs 12 years ago
parent
commit
abbd47e4a3
  1. 40
      test/simple/test-fs-read-stream-err.js
  2. 56
      test/simple/test-fs-write-stream-err.js

40
test/simple/test-fs-read-stream-err.js

@ -23,28 +23,42 @@ var common = require('../common');
var assert = require('assert'); var assert = require('assert');
var fs = require('fs'); 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'); var err = new Error('BAM');
stream.on('data', function(buf) { stream.on('error', common.mustCall(function errorHandler(err_) {
var fd = stream.fd; 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() { fs.read = function() {
var cb = arguments[arguments.length - 1]; var cb = arguments[arguments.length - 1];
process.nextTick(function() { process.nextTick(function() {
cb(err); cb(err);
}); });
// and should not be called again!
fs.read = function() {
throw new Error('BOOM!');
};
}; };
};
fs.close = common.mustCall(function(fd_, cb) { stream.on('data', function(buf) {
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', assert.fail); // no more 'data' events should follow stream.on('data', assert.fail); // no more 'data' events should follow
}); });

56
test/simple/test-fs-write-stream-err.js

@ -23,30 +23,50 @@ var common = require('../common');
var assert = require('assert'); var assert = require('assert');
var fs = require('fs'); 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'); var err = new Error('BAM');
stream.write(new Buffer(256), function() { var write = fs.write;
var fd = stream.fd; 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() { fs.close = common.mustCall(function(fd_, cb) {
var cb = arguments[arguments.length - 1]; console.error('fs.close', fd_, stream.fd);
process.nextTick(function() { assert.equal(fd_, stream.fd);
cb(err); process.nextTick(cb);
}); });
};
fs.close = function(fd_, cb) { stream.on('error', common.mustCall(function(err_) {
assert.equal(fd_, fd); console.error('error handler');
process.nextTick(cb); 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_) { stream.write(new Buffer(256), function() {
assert.equal(stream.fd, null); console.error('first cb');
stream.write(new Buffer(256), common.mustCall(function(err_) {
console.error('second cb');
assert.equal(err_, err); assert.equal(err_, err);
})); }));
}); });

Loading…
Cancel
Save