test: add test for reading a large file through a pipe
authorSantiago Gimeno <santiago.gimeno@gmail.com>
Fri, 6 Mar 2015 13:08:29 +0000 (14:08 +0100)
committerBert Belder <bertbelder@gmail.com>
Thu, 12 Mar 2015 23:40:35 +0000 (16:40 -0700)
PR-URL: https://github.com/iojs/io.js/pull/1074
Reviewed-By: Bert Belder <bertbelder@gmail.com>
test/parallel/test-fs-readfile-pipe-large.js [new file with mode: 0644]
test/parallel/test-fs-readfilesync-pipe-large.js [new file with mode: 0644]

diff --git a/test/parallel/test-fs-readfile-pipe-large.js b/test/parallel/test-fs-readfile-pipe-large.js
new file mode 100644 (file)
index 0000000..3502cdd
--- /dev/null
@@ -0,0 +1,41 @@
+var common = require('../common');
+var assert = require('assert');
+var path = require('path');
+
+// simulate `cat readfile.js | node readfile.js`
+
+// TODO: Have some way to make this work on windows.
+if (process.platform === 'win32') {
+  console.error('No /dev/stdin on windows.  Skipping test.');
+  process.exit();
+}
+
+var fs = require('fs');
+
+var filename = path.join(common.tmpDir, '/readfile_pipe_large_test.txt');
+var dataExpected = new Array(1000000).join('a');
+fs.writeFileSync(filename, dataExpected);
+
+if (process.argv[2] === 'child') {
+  fs.readFile('/dev/stdin', function(er, data) {
+    if (er) throw er;
+    process.stdout.write(data);
+  });
+  return;
+}
+
+var exec = require('child_process').exec;
+var f = JSON.stringify(__filename);
+var node = JSON.stringify(process.execPath);
+var cmd = 'cat ' + filename + ' | ' + node + ' ' + f + ' child';
+exec(cmd, { maxBuffer: 1000000 }, function(err, stdout, stderr) {
+  if (err) console.error(err);
+  assert(!err, 'it exits normally');
+  assert(stdout === dataExpected, 'it reads the file and outputs it');
+  assert(stderr === '', 'it does not write to stderr');
+  console.log('ok');
+});
+
+process.on('exit', function() {
+  fs.unlinkSync(filename);
+});
diff --git a/test/parallel/test-fs-readfilesync-pipe-large.js b/test/parallel/test-fs-readfilesync-pipe-large.js
new file mode 100644 (file)
index 0000000..e62d541
--- /dev/null
@@ -0,0 +1,38 @@
+var common = require('../common');
+var assert = require('assert');
+var path = require('path');
+
+// simulate `cat readfile.js | node readfile.js`
+
+// TODO: Have some way to make this work on windows.
+if (process.platform === 'win32') {
+  console.error('No /dev/stdin on windows.  Skipping test.');
+  process.exit();
+}
+
+var fs = require('fs');
+
+var filename = path.join(common.tmpDir, '/readfilesync_pipe_large_test.txt');
+var dataExpected = new Array(1000000).join('a');
+fs.writeFileSync(filename, dataExpected);
+
+if (process.argv[2] === 'child') {
+  process.stdout.write(fs.readFileSync('/dev/stdin', 'utf8'));
+  return;
+}
+
+var exec = require('child_process').exec;
+var f = JSON.stringify(__filename);
+var node = JSON.stringify(process.execPath);
+var cmd = 'cat ' + filename + ' | ' + node + ' ' + f + ' child';
+exec(cmd, { maxBuffer: 1000000 }, function(err, stdout, stderr) {
+  if (err) console.error(err);
+  assert(!err, 'it exits normally');
+  assert(stdout === dataExpected, 'it reads the file and outputs it');
+  assert(stderr === '', 'it does not write to stderr');
+  console.log('ok');
+});
+
+process.on('exit', function() {
+  fs.unlinkSync(filename);
+});