test: Update simple/test-fs-{write,read}-stream-err for streams2
authorisaacs <i@izs.me>
Fri, 14 Dec 2012 18:51:04 +0000 (10:51 -0800)
committerisaacs <i@izs.me>
Sat, 15 Dec 2012 01:46:23 +0000 (17:46 -0800)
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
test/simple/test-fs-write-stream-err.js

index 2c285f1..77960f0 100644 (file)
@@ -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
 });
index 94d249f..a4d2020 100644 (file)
@@ -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);
   }));
 });