Commit b83015ca authored by Leo Iannacone's avatar Leo Iannacone

update proxy libraries

parent f0bedb18
...@@ -58,7 +58,7 @@ http.createServer(function (req, res) { ...@@ -58,7 +58,7 @@ http.createServer(function (req, res) {
// //
// ...and then the server you just used becomes the last item in the list. // ...and then the server you just used becomes the last item in the list.
// //
addresses.push(target); addresses.push(target.target);
}).listen(8021); }).listen(8021);
// Rinse; repeat; enjoy. // Rinse; repeat; enjoy.
\ No newline at end of file
...@@ -109,6 +109,14 @@ web_o = Object.keys(web_o).map(function(pass) { ...@@ -109,6 +109,14 @@ web_o = Object.keys(web_o).map(function(pass) {
common.setupOutgoing(options.ssl || {}, options, req) common.setupOutgoing(options.ssl || {}, options, req)
); );
// allow outgoing socket to timeout so that we could
// show an error page at the initial request
if(options.proxyTimeout) {
proxyReq.setTimeout(options.proxyTimeout, function() {
proxyReq.abort();
});
}
// Ensure we abort proxy if request is aborted // Ensure we abort proxy if request is aborted
req.on('aborted', function () { req.on('aborted', function () {
proxyReq.abort(); proxyReq.abort();
...@@ -122,9 +130,9 @@ web_o = Object.keys(web_o).map(function(pass) { ...@@ -122,9 +130,9 @@ web_o = Object.keys(web_o).map(function(pass) {
function proxyError (err){ function proxyError (err){
if (clb) { if (clb) {
clb(err, req, res); clb(err, req, res, options.target);
} else { } else {
server.emit('error', err, req, res); server.emit('error', err, req, res, options.target);
} }
} }
......
{ {
"name": "http-proxy", "name": "http-proxy",
"version": "1.1.4", "version": "1.1.5",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/nodejitsu/node-http-proxy.git" "url": "https://github.com/nodejitsu/node-http-proxy.git"
...@@ -50,6 +50,10 @@ ...@@ -50,6 +50,10 @@
"bugs": { "bugs": {
"url": "https://github.com/nodejitsu/node-http-proxy/issues" "url": "https://github.com/nodejitsu/node-http-proxy/issues"
}, },
"_id": "http-proxy@1.1.4", "_id": "http-proxy@1.1.5",
"_from": "http-proxy@*" "dist": {
"shasum": "918a323d1f14677976670f557add4d00b43f2214"
},
"_from": "http-proxy@*",
"_resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.1.5.tgz"
} }
...@@ -128,6 +128,87 @@ describe('#createProxyServer.web() using own http server', function () { ...@@ -128,6 +128,87 @@ describe('#createProxyServer.web() using own http server', function () {
}, function() {}).end(); }, function() {}).end();
}); });
it('should proxy the request and handle timeout error (proxyTimeout)', function(done) {
var proxy = httpProxy.createProxyServer({
target: 'http://127.0.0.1:45000',
proxyTimeout: 100
});
require('net').createServer().listen(45000);
var proxyServer = http.createServer(requestHandler);
var started = new Date().getTime();
function requestHandler(req, res) {
proxy.once('error', function (err, errReq, errRes) {
proxyServer.close();
expect(err).to.be.an(Error);
expect(errReq).to.be.equal(req);
expect(errRes).to.be.equal(res);
expect(new Date().getTime() - started).to.be.greaterThan(99);
expect(err.code).to.be('ECONNRESET');
done();
});
proxy.web(req, res);
}
proxyServer.listen('8084');
http.request({
hostname: '127.0.0.1',
port: '8084',
method: 'GET',
}, function() {}).end();
});
it('should proxy the request and handle timeout error', function(done) {
var proxy = httpProxy.createProxyServer({
target: 'http://127.0.0.1:45001',
timeout: 100
});
require('net').createServer().listen(45001);
var proxyServer = http.createServer(requestHandler);
var cnt = 0;
var doneOne = function() {
cnt += 1;
if(cnt === 2) done();
}
var started = new Date().getTime();
function requestHandler(req, res) {
proxy.once('error', function (err, errReq, errRes) {
proxyServer.close();
expect(err).to.be.an(Error);
expect(errReq).to.be.equal(req);
expect(errRes).to.be.equal(res);
expect(err.code).to.be('ECONNRESET');
doneOne();
});
proxy.web(req, res);
}
proxyServer.listen('8085');
var req = http.request({
hostname: '127.0.0.1',
port: '8085',
method: 'GET',
}, function() {});
req.on('error', function(err) {
expect(err).to.be.an(Error);
expect(err.code).to.be('ECONNRESET');
expect(new Date().getTime() - started).to.be.greaterThan(99);
doneOne();
});
req.end();
});
it('should proxy the request and provide a proxyRes event with the request and response parameters', function(done) { it('should proxy the request and provide a proxyRes event with the request and response parameters', function(done) {
var proxy = httpProxy.createProxyServer({ var proxy = httpProxy.createProxyServer({
target: 'http://127.0.0.1:8080' target: 'http://127.0.0.1:8080'
...@@ -151,8 +232,8 @@ describe('#createProxyServer.web() using own http server', function () { ...@@ -151,8 +232,8 @@ describe('#createProxyServer.web() using own http server', function () {
res.end('Response'); res.end('Response');
}); });
proxyServer.listen('8084'); proxyServer.listen('8086');
source.listen('8080'); source.listen('8080');
http.request('http://127.0.0.1:8084', function() {}).end(); http.request('http://127.0.0.1:8086', function() {}).end();
}); });
}); });
\ No newline at end of file
...@@ -294,9 +294,11 @@ describe('lib/http-proxy.js', function() { ...@@ -294,9 +294,11 @@ describe('lib/http-proxy.js', function() {
var proxy = httpProxy.createProxyServer({ var proxy = httpProxy.createProxyServer({
target: 'ws://127.0.0.1:' + ports.source, target: 'ws://127.0.0.1:' + ports.source,
ws: true ws: true
}), });
proxyServer = proxy.listen(ports.proxy), proxyServer = proxy.listen(ports.proxy);
destiny = io.listen(ports.source, function () { var server = http.createServer();
destiny = io.listen(server);
function startSocketIo() {
var client = ioClient.connect('ws://127.0.0.1:' + ports.proxy); var client = ioClient.connect('ws://127.0.0.1:' + ports.proxy);
client.on('connect', function () { client.on('connect', function () {
...@@ -306,10 +308,12 @@ describe('lib/http-proxy.js', function() { ...@@ -306,10 +308,12 @@ describe('lib/http-proxy.js', function() {
client.on('outgoing', function (data) { client.on('outgoing', function (data) {
expect(data).to.be('Hello over websockets'); expect(data).to.be('Hello over websockets');
proxyServer._server.close(); proxyServer._server.close();
destiny.server.close(); server.close();
done(); done();
}); });
}); }
server.listen(ports.source);
server.on('listening', startSocketIo);
destiny.sockets.on('connection', function (socket) { destiny.sockets.on('connection', function (socket) {
socket.on('incoming', function (msg) { socket.on('incoming', function (msg) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment