Skip to content

Commit b5bdf94

Browse files
committed
Add another http upgrade test
1 parent f0fec73 commit b5bdf94

2 files changed

Lines changed: 56 additions & 2 deletions

File tree

lib/http.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,11 @@ function connectionListener (socket) {
569569
// in the upgradeHead from the closing lines of the headers
570570
var upgradeHead = d.slice(start + bytesParsed + 1, end);
571571

572-
if(self.listeners("upgrade").length > 0) {
572+
if (self.listeners("upgrade").length) {
573573
self.emit('upgrade', req, req.socket, upgradeHead);
574574
} else {
575-
socket.end();
575+
// Got upgrade header, but have no handler.
576+
socket.destroy();
576577
}
577578
}
578579
};

test/simple/test-http-upgrade2.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
require('../common');
2+
3+
http = require('http');
4+
net = require('net');
5+
6+
server = http.createServer(function (req, res) {
7+
error('got req');
8+
throw new Error("This shouldn't happen.");
9+
});
10+
11+
server.addListener('upgrade', function (req, socket, upgradeHead) {
12+
error('got upgrade event');
13+
// test that throwing an error from upgrade gets forworded
14+
// to the server'server 'error' event.
15+
throw new Error('upgrade error');
16+
});
17+
18+
gotError = false;
19+
20+
server.addListener('clientError', function (e) {
21+
error('got "clientError" event');
22+
assert.equal('upgrade error', e.message);
23+
gotError = true;
24+
});
25+
26+
server.listen(PORT);
27+
28+
29+
server.addListener('listening', function () {
30+
var c = net.createConnection(PORT);
31+
32+
c.addListener('connect', function () {
33+
error('client wrote message');
34+
c.write( "GET /blah HTTP/1.1\r\n"
35+
+ "Upgrade: WebSocket\r\n"
36+
+ "Connection: Upgrade\r\n"
37+
+ "\r\n\r\nhello world"
38+
);
39+
});
40+
41+
c.addListener('end', function () {
42+
c.end();
43+
});
44+
45+
c.addListener('close', function () {
46+
error('client close');
47+
server.close();
48+
});
49+
});
50+
51+
process.addListener('exit', function () {
52+
assert.ok(gotError);
53+
});

0 commit comments

Comments
 (0)