mirror of
https://github.com/nodejs/node.git
synced 2024-11-30 07:27:22 +01:00
3e1b1dd4a9
The copyright and license notice is already in the LICENSE file. There is no justifiable reason to also require that it be included in every file, since the individual files are not individually distributed except as part of the entire package.
137 lines
2.7 KiB
JavaScript
137 lines
2.7 KiB
JavaScript
// 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);
|
|
});
|