From a19de97d2faa28a724a8f1843fc0dd87f01f3ced Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Wed, 16 Mar 2016 23:21:11 +0100 Subject: [PATCH] test: remove the use of curl in the test suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There were 2 tests using curl: `test-http-304.js` is removed because it was initially included to test that the 304 response does not contain a body, and this is already covered by `test-http-chunked-304.js`. `test-http-curl-chunk-problem` has been renamed and refactored so instead of using curl, it uses 2 child node processes: one for sending the HTTP request and the other to calculate the sha1sum. Originally, this test was introduced to fix a bug in `nodejs@0.2.x`, and it was not fixed until `nodejs@0.2.5`. A modified version of this test has been run with `nodejs@0.2.0` and reproduces the problem. This same test has been run with `nodejs@0.2.6` and runs correctly. Fixes: https://github.com/nodejs/node/issues/5174 PR-URL: https://github.com/nodejs/node/pull/5750 Reviewed-By: Ben Noordhuis Reviewed-By: Johan Bergström Reviewed-By: Rich Trott Reviewed-By: Jeremiah Senkpiel --- test/parallel/test-http-304.js | 18 ---- test/parallel/test-http-chunk-problem.js | 93 +++++++++++++++++++ test/parallel/test-http-curl-chunk-problem.js | 71 -------------- 3 files changed, 93 insertions(+), 89 deletions(-) delete mode 100644 test/parallel/test-http-304.js create mode 100644 test/parallel/test-http-chunk-problem.js delete mode 100644 test/parallel/test-http-curl-chunk-problem.js diff --git a/test/parallel/test-http-304.js b/test/parallel/test-http-304.js deleted file mode 100644 index 6ac1c68d0d3665..00000000000000 --- a/test/parallel/test-http-304.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; -var common = require('../common'); - -var http = require('http'); -var childProcess = require('child_process'); - -var s = http.createServer(function(request, response) { - response.writeHead(304); - response.end(); -}); - -s.listen(common.PORT, function() { - childProcess.exec('curl -i http://127.0.0.1:' + common.PORT + '/', - function(err, stdout, stderr) { - if (err) throw err; - s.close(); - }); -}); diff --git a/test/parallel/test-http-chunk-problem.js b/test/parallel/test-http-chunk-problem.js new file mode 100644 index 00000000000000..6a5710e38e9f1b --- /dev/null +++ b/test/parallel/test-http-chunk-problem.js @@ -0,0 +1,93 @@ +'use strict'; +// http://groups.google.com/group/nodejs/browse_thread/thread/f66cd3c960406919 +const common = require('../common'); +const assert = require('assert'); +if (!common.hasCrypto) { + console.log('1..0 # Skipped: missing crypto'); + return; +} + +if (process.argv[2] === 'request') { + const http = require('http'); + const options = { + port: common.PORT, + path : '/' + }; + + http.get(options, (res) => { + res.pipe(process.stdout); + }); + + return; +} + +if (process.argv[2] === 'shasum') { + const crypto = require('crypto'); + const shasum = crypto.createHash('sha1'); + process.stdin.on('data', (d) => { + shasum.update(d); + }); + + process.stdin.on('close', () => { + process.stdout.write(shasum.digest('hex')); + }); + + return; +} + +const http = require('http'); +const cp = require('child_process'); + +const filename = require('path').join(common.tmpDir, 'big'); + +function executeRequest(cb) { + cp.exec([process.execPath, + __filename, + 'request', + '|', + process.execPath, + __filename, + 'shasum' ].join(' '), + (err, stdout, stderr) => { + if (err) throw err; + assert.equal('8c206a1a87599f532ce68675536f0b1546900d7a', + stdout.slice(0, 40)); + cb(); + } + ); +} + + +common.refreshTmpDir(); + +const ddcmd = common.ddCommand(filename, 10240); + +cp.exec(ddcmd, function(err, stdout, stderr) { + if (err) throw err; + const server = http.createServer(function(req, res) { + res.writeHead(200); + + // Create the subprocess + const cat = cp.spawn('cat', [filename]); + + // Stream the data through to the response as binary chunks + cat.stdout.on('data', (data) => { + res.write(data); + }); + + cat.stdout.on('end', () => res.end()); + + // End the response on exit (and log errors) + cat.on('exit', (code) => { + if (code !== 0) { + console.error('subprocess exited with code ' + code); + process.exit(1); + } + }); + + }); + + server.listen(common.PORT, () => { + executeRequest(() => server.close()); + }); +}); diff --git a/test/parallel/test-http-curl-chunk-problem.js b/test/parallel/test-http-curl-chunk-problem.js deleted file mode 100644 index f3e3a243287ce1..00000000000000 --- a/test/parallel/test-http-curl-chunk-problem.js +++ /dev/null @@ -1,71 +0,0 @@ -'use strict'; -var common = require('../common'); -var assert = require('assert'); -if (!common.opensslCli) { - console.log('1..0 # Skipped: node compiled without OpenSSL CLI.'); - return; -} - -// http://groups.google.com/group/nodejs/browse_thread/thread/f66cd3c960406919 -var http = require('http'); -var cp = require('child_process'); -var fs = require('fs'); - -var filename = require('path').join(common.tmpDir, 'big'); - -var count = 0; -function maybeMakeRequest() { - if (++count < 2) return; - console.log('making curl request'); - var cmd = 'curl http://127.0.0.1:' + common.PORT + '/ | ' + - '"' + common.opensslCli + '" sha1'; - cp.exec(cmd, function(err, stdout, stderr) { - if (err) throw err; - var hex = stdout.match(/([A-Fa-f0-9]{40})/)[0]; - assert.equal('8c206a1a87599f532ce68675536f0b1546900d7a', hex); - console.log('got the correct response'); - fs.unlink(filename); - server.close(); - }); -} - - -common.refreshTmpDir(); - -var ddcmd = common.ddCommand(filename, 10240); -console.log('dd command: ', ddcmd); - -cp.exec(ddcmd, function(err, stdout, stderr) { - if (err) throw err; - maybeMakeRequest(); -}); - - -var server = http.createServer(function(req, res) { - res.writeHead(200); - - // Create the subprocess - var cat = cp.spawn('cat', [filename]); - - // Stream the data through to the response as binary chunks - cat.stdout.on('data', function(data) { - res.write(data); - }); - - cat.stdout.on('end', function onStdoutEnd() { - res.end(); - }); - - // End the response on exit (and log errors) - cat.on('exit', function(code) { - if (code !== 0) { - console.error('subprocess exited with code ' + code); - process.exit(1); - } - }); - -}); - -server.listen(common.PORT, maybeMakeRequest); - -console.log('Server running at http://localhost:8080');