mirror of https://github.com/lukechilds/node.git
Browse Source
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 <info@bnoordhuis.nl> Reviewed-By: Johan Bergström <bugs@bergstroem.nu> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>v4.x
committed by
Myles Borins
3 changed files with 93 additions and 89 deletions
@ -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(); |
|
||||
}); |
|
||||
}); |
|
@ -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()); |
||||
|
}); |
||||
|
}); |
@ -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'); |
|
Loading…
Reference in new issue