Browse Source

Add another http upgrade test

v0.7.4-release
Ryan Dahl 15 years ago
parent
commit
b5bdf9434b
  1. 5
      lib/http.js
  2. 53
      test/simple/test-http-upgrade2.js

5
lib/http.js

@ -569,10 +569,11 @@ function connectionListener (socket) {
// in the upgradeHead from the closing lines of the headers // in the upgradeHead from the closing lines of the headers
var upgradeHead = d.slice(start + bytesParsed + 1, end); var upgradeHead = d.slice(start + bytesParsed + 1, end);
if(self.listeners("upgrade").length > 0) { if (self.listeners("upgrade").length) {
self.emit('upgrade', req, req.socket, upgradeHead); self.emit('upgrade', req, req.socket, upgradeHead);
} else { } else {
socket.end(); // Got upgrade header, but have no handler.
socket.destroy();
} }
} }
}; };

53
test/simple/test-http-upgrade2.js

@ -0,0 +1,53 @@
require('../common');
http = require('http');
net = require('net');
server = http.createServer(function (req, res) {
error('got req');
throw new Error("This shouldn't happen.");
});
server.addListener('upgrade', function (req, socket, upgradeHead) {
error('got upgrade event');
// test that throwing an error from upgrade gets forworded
// to the server'server 'error' event.
throw new Error('upgrade error');
});
gotError = false;
server.addListener('clientError', function (e) {
error('got "clientError" event');
assert.equal('upgrade error', e.message);
gotError = true;
});
server.listen(PORT);
server.addListener('listening', function () {
var c = net.createConnection(PORT);
c.addListener('connect', function () {
error('client wrote message');
c.write( "GET /blah HTTP/1.1\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Connection: Upgrade\r\n"
+ "\r\n\r\nhello world"
);
});
c.addListener('end', function () {
c.end();
});
c.addListener('close', function () {
error('client close');
server.close();
});
});
process.addListener('exit', function () {
assert.ok(gotError);
});
Loading…
Cancel
Save