From 5ecdc0314d87354166b282501435b2f6fd2248ab Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Fri, 6 Mar 2015 14:08:29 +0100 Subject: [PATCH] test: add test for reading a large file through a pipe PR-URL: https://github.com/iojs/io.js/pull/1074 Reviewed-By: Bert Belder --- test/parallel/test-fs-readfile-pipe-large.js | 41 +++++++++++++++++++ .../test-fs-readfilesync-pipe-large.js | 38 +++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 test/parallel/test-fs-readfile-pipe-large.js create mode 100644 test/parallel/test-fs-readfilesync-pipe-large.js diff --git a/test/parallel/test-fs-readfile-pipe-large.js b/test/parallel/test-fs-readfile-pipe-large.js new file mode 100644 index 00000000000..3502cdd5f48 --- /dev/null +++ b/test/parallel/test-fs-readfile-pipe-large.js @@ -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 index 00000000000..e62d541a680 --- /dev/null +++ b/test/parallel/test-fs-readfilesync-pipe-large.js @@ -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); +});