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>process-exit-stdio-flushing
Santiago Gimeno
9 years ago
committed by
Jeremiah Senkpiel
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