Merge pull request #708 from minrk/close-closes

close websocket if proxyReq is closed before upgrade
This commit is contained in:
Jarrett Cruger 2014-09-30 20:55:38 -04:00
commit b065d92908
2 changed files with 44 additions and 0 deletions

View File

@ -89,6 +89,10 @@ var passes = exports;
);
// Error Handler
proxyReq.on('error', onOutgoingError);
proxyReq.on('response', function (res) {
// if upgrade event isn't going to happen, close the socket
if (!res.upgrade) socket.end();
});
proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {
proxySocket.on('error', onOutgoingError);

View File

@ -281,6 +281,11 @@ describe('lib/http-proxy.js', function() {
client.send('hello there');
});
client.on('error', function (err) {
expect(err).to.be.an(Error);
expect(err.code).to.be('ECONNRESET');
});
proxy.on('error', function (err) {
expect(err).to.be.an(Error);
expect(err.code).to.be('ECONNREFUSED');
@ -289,6 +294,41 @@ describe('lib/http-proxy.js', function() {
});
});
it('should close client socket if upstream is closed before upgrade', function (done) {
var ports = { source: gen.port, proxy: gen.port };
var server = http.createServer();
server.on('upgrade', function (req, socket, head) {
var response = [
'HTTP/1.1 404 Not Found',
'Content-type: text/html',
'',
''
];
socket.write(response.join('\r\n'));
socket.end();
});
server.listen(ports.source);
var proxy = httpProxy.createProxyServer({
// note: we don't ever listen on this port
target: 'ws://127.0.0.1:' + ports.source,
ws: true
}),
proxyServer = proxy.listen(ports.proxy),
client = new ws('ws://127.0.0.1:' + ports.proxy);
client.on('open', function () {
client.send('hello there');
});
client.on('error', function (err) {
expect(err).to.be.an(Error);
expect(err.code).to.be('ECONNRESET');
proxyServer.close();
done();
});
});
it('should proxy a socket.io stream', function (done) {
var ports = { source: gen.port, proxy: gen.port };
var proxy = httpProxy.createProxyServer({