mirror of https://github.com/lukechilds/node.git
Browse Source
Thanks to Stéphan Kochen for the fix and Maurice Fonk for reproducing the bug. Closes GH-784. Closes GH-803.v0.7.4-release
Ryan Dahl
14 years ago
2 changed files with 136 additions and 1 deletions
@ -0,0 +1,136 @@ |
|||
// Regression test for GH-784
|
|||
// https://github.com/joyent/node/issues/784
|
|||
//
|
|||
// The test works by making a total of 8 requests to the server. The first
|
|||
// two are made with the server off - they should come back as ECONNREFUSED.
|
|||
// The next two are made with server on - they should come back successful.
|
|||
// The next two are made with the server off - and so on. Without the fix
|
|||
// we were experiencing parse errors and instead of ECONNREFUSED.
|
|||
var common = require('../common'); |
|||
var http = require('http'); |
|||
var assert = require('assert'); |
|||
|
|||
|
|||
var server = http.createServer(function(req, res) { |
|||
var body = ''; |
|||
|
|||
req.setEncoding('utf8'); |
|||
req.on('data', function(chunk) { |
|||
body += chunk; |
|||
}); |
|||
|
|||
req.on('end', function() { |
|||
assert.equal('PING', body); |
|||
res.writeHead(200); |
|||
res.end('PONG'); |
|||
}); |
|||
}); |
|||
|
|||
|
|||
server.on('listening', pingping); |
|||
|
|||
|
|||
function serverOn() { |
|||
console.error("Server ON"); |
|||
server.listen(common.PORT); |
|||
} |
|||
|
|||
|
|||
function serverOff() { |
|||
console.error("Server OFF"); |
|||
server.close(); |
|||
pingping(); |
|||
} |
|||
|
|||
var responses = [] |
|||
|
|||
|
|||
function afterPing(result) { |
|||
responses.push(result); |
|||
console.error('afterPing. responses.length = ' + responses.length); |
|||
switch (responses.length) { |
|||
case 2: |
|||
assert.ok(/ECONNREFUSED/.test(responses[0])); |
|||
assert.ok(/ECONNREFUSED/.test(responses[1])); |
|||
serverOn(); |
|||
break; |
|||
|
|||
case 4: |
|||
assert.ok(/success/.test(responses[2])); |
|||
assert.ok(/success/.test(responses[3])); |
|||
serverOff(); |
|||
break; |
|||
|
|||
case 6: |
|||
assert.ok(/ECONNREFUSED/.test(responses[4])); |
|||
assert.ok(/ECONNREFUSED/.test(responses[5])); |
|||
serverOn(); |
|||
break; |
|||
|
|||
case 8: |
|||
assert.ok(/success/.test(responses[6])); |
|||
assert.ok(/success/.test(responses[7])); |
|||
server.close(); |
|||
// we should go to process.on('exit') from here.
|
|||
break; |
|||
} |
|||
} |
|||
|
|||
|
|||
function ping() { |
|||
console.error("making req"); |
|||
|
|||
var opt = { |
|||
port: common.PORT, |
|||
path: '/ping', |
|||
method: 'POST' |
|||
}; |
|||
|
|||
var req = http.request(opt, function(res) { |
|||
var body = ''; |
|||
|
|||
res.setEncoding('utf8'); |
|||
res.on('data', function(chunk) { |
|||
body += chunk; |
|||
}); |
|||
|
|||
res.on('end', function() { |
|||
assert.equal('PONG', body); |
|||
assert.ok(!hadError); |
|||
gotEnd = true; |
|||
afterPing("success"); |
|||
}); |
|||
}); |
|||
|
|||
req.end('PING'); |
|||
|
|||
var gotEnd = false; |
|||
var hadError = false; |
|||
|
|||
req.on('error', function(error) { |
|||
console.log("Error making ping req: " + error); |
|||
hadError = true; |
|||
assert.ok(!gotEnd); |
|||
afterPing(error.message); |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
function pingping() { |
|||
ping(); |
|||
ping(); |
|||
} |
|||
|
|||
|
|||
pingping(); |
|||
|
|||
|
|||
|
|||
|
|||
process.on('exit', function() { |
|||
console.error("process.on('exit')"); |
|||
console.error(responses); |
|||
|
|||
assert.equal(8, responses.length); |
|||
}); |
Loading…
Reference in new issue