From abbd47e4a3774a0448dcc5ab36d2e9275c9ac805 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 14 Dec 2012 10:51:04 -0800 Subject: [PATCH] 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. --- test/simple/test-fs-read-stream-err.js | 40 ++++++++++++------ test/simple/test-fs-write-stream-err.js | 56 +++++++++++++++++-------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/test/simple/test-fs-read-stream-err.js b/test/simple/test-fs-read-stream-err.js index 2c285f183c..77960f06e0 100644 --- a/test/simple/test-fs-read-stream-err.js +++ b/test/simple/test-fs-read-stream-err.js @@ -23,28 +23,42 @@ var common = require('../common'); 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 }); diff --git a/test/simple/test-fs-write-stream-err.js b/test/simple/test-fs-write-stream-err.js index 94d249f896..a4d20200e5 100644 --- a/test/simple/test-fs-write-stream-err.js +++ b/test/simple/test-fs-write-stream-err.js @@ -23,30 +23,50 @@ var common = require('../common'); 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); })); });