/test/lib-http-proxy-common-test.js
JavaScript | 241 lines | 215 code | 25 blank | 1 comment | 1 complexity | b505bd78a58fae950ba8f5bc797feed2 MD5 | raw file
- var common = require('../lib/http-proxy/common'),
- expect = require('expect.js');
- describe('lib/http-proxy/common.js', function () {
- describe('#setupOutgoing', function () {
- it('should setup the correct headers', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent : '?',
- target: {
- host : 'hey',
- hostname : 'how',
- socketPath: 'are',
- port : 'you',
- },
- headers: {'fizz': 'bang', 'overwritten':true},
- localAddress: 'local.address',
- },
- {
- method : 'i',
- url : 'am',
- headers : {'pro':'xy','overwritten':false}
- });
- expect(outgoing.host).to.eql('hey');
- expect(outgoing.hostname).to.eql('how');
- expect(outgoing.socketPath).to.eql('are');
- expect(outgoing.port).to.eql('you');
- expect(outgoing.agent).to.eql('?');
- expect(outgoing.method).to.eql('i');
- expect(outgoing.path).to.eql('am');
- expect(outgoing.headers.pro).to.eql('xy');
- expect(outgoing.headers.fizz).to.eql('bang');
- expect(outgoing.headers.overwritten).to.eql(true);
- expect(outgoing.localAddress).to.eql('local.address');
- });
- it('should not override agentless upgrade header', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent: undefined,
- target: {
- host : 'hey',
- hostname : 'how',
- socketPath: 'are',
- port : 'you',
- },
- headers: {'connection': 'upgrade'},
- },
- {
- method : 'i',
- url : 'am',
- headers : {'pro':'xy','overwritten':false}
- });
- expect(outgoing.headers.connection).to.eql('upgrade');
- });
- it('should not override agentless connection: contains upgrade', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent: undefined,
- target: {
- host : 'hey',
- hostname : 'how',
- socketPath: 'are',
- port : 'you',
- },
- headers: {'connection': 'keep-alive, upgrade'}, // this is what Firefox sets
- },
- {
- method : 'i',
- url : 'am',
- headers : {'pro':'xy','overwritten':false}
- });
- expect(outgoing.headers.connection).to.eql('keep-alive, upgrade');
- });
- it('should override agentless connection: contains improper upgrade', function () {
- // sanity check on upgrade regex
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent: undefined,
- target: {
- host : 'hey',
- hostname : 'how',
- socketPath: 'are',
- port : 'you',
- },
- headers: {'connection': 'keep-alive, not upgrade'},
- },
- {
- method : 'i',
- url : 'am',
- headers : {'pro':'xy','overwritten':false}
- });
- expect(outgoing.headers.connection).to.eql('close');
- });
- it('should override agentless non-upgrade header to close', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent: undefined,
- target: {
- host : 'hey',
- hostname : 'how',
- socketPath: 'are',
- port : 'you',
- },
- headers: {'connection': 'xyz'},
- },
- {
- method : 'i',
- url : 'am',
- headers : {'pro':'xy','overwritten':false}
- });
- expect(outgoing.headers.connection).to.eql('close');
- });
- it('should set the agent to false if none is given', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing, {target:
- 'http://localhost'
- }, { url: '/' });
- expect(outgoing.agent).to.eql(false);
- });
- it('set the port according to the protocol', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing,
- {
- agent : '?',
- target: {
- host : 'how',
- hostname : 'are',
- socketPath: 'you',
- protocol: 'https:'
- }
- },
- {
- method : 'i',
- url : 'am',
- headers : {pro:'xy'}
- });
- expect(outgoing.host).to.eql('how');
- expect(outgoing.hostname).to.eql('are');
- expect(outgoing.socketPath).to.eql('you');
- expect(outgoing.agent).to.eql('?');
- expect(outgoing.method).to.eql('i');
- expect(outgoing.path).to.eql('am');
- expect(outgoing.headers.pro).to.eql('xy');
- expect(outgoing.port).to.eql(443);
- });
- it('should keep the original target path in the outgoing path', function(){
- var outgoing = {};
- common.setupOutgoing(outgoing, {target:
- { path: 'some-path' }
- }, { url : 'am' });
- expect(outgoing.path).to.eql('some-path/am');
- });
- it('should keep the original forward path in the outgoing path', function(){
- var outgoing = {};
- common.setupOutgoing(outgoing, {
- target: {},
- forward: {
- path: 'some-path'
- }
- }, {
- url : 'am'
- }, 'forward');
- expect(outgoing.path).to.eql('some-path/am');
- });
- it('should not prepend the target path to the outgoing path with prependPath = false', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing, {
- target: { path: 'hellothere' },
- prependPath: false
- }, { url: 'hi' });
- expect(outgoing.path).to.eql('hi');
- })
- it('should properly join paths', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing, {
- target: { path: '/forward' },
- }, { url: '/static/path' });
- expect(outgoing.path).to.eql('/forward/static/path');
- })
- it('should not modify the query string', function () {
- var outgoing = {};
- common.setupOutgoing(outgoing, {
- target: { path: '/forward' },
- }, { url: '/?foo=bar//&target=http://foobar.com/' });
- expect(outgoing.path).to.eql('/forward/?foo=bar//&target=http://foobar.com/');
- })
- });
- describe('#setupSocket', function () {
- it('should setup a socket', function () {
- var socketConfig = {
- timeout: null,
- nodelay: false,
- keepalive: false
- },
- stubSocket = {
- setTimeout: function (num) {
- socketConfig.timeout = num;
- },
- setNoDelay: function (bol) {
- socketConfig.nodelay = bol;
- },
- setKeepAlive: function (bol) {
- socketConfig.keepalive = bol;
- }
- }
- returnValue = common.setupSocket(stubSocket);
- expect(socketConfig.timeout).to.eql(0);
- expect(socketConfig.nodelay).to.eql(true);
- expect(socketConfig.keepalive).to.eql(true);
- });
- });
- });