From b5bdf9434bfa77c284678ef6ae043a8e205e8d65 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 3 May 2010 11:23:36 -0700 Subject: [PATCH] Add another http upgrade test --- lib/http.js | 5 ++-- test/simple/test-http-upgrade2.js | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 test/simple/test-http-upgrade2.js diff --git a/lib/http.js b/lib/http.js index fd00910..3cfe75b 100644 --- a/lib/http.js +++ b/lib/http.js @@ -569,10 +569,11 @@ function connectionListener (socket) { // in the upgradeHead from the closing lines of the headers 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); } else { - socket.end(); + // Got upgrade header, but have no handler. + socket.destroy(); } } }; diff --git a/test/simple/test-http-upgrade2.js b/test/simple/test-http-upgrade2.js new file mode 100644 index 0000000..4fed20b --- /dev/null +++ b/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); +}); -- 2.7.4