Spaces:
Building
Building
| /* jshint mocha:true */ | |
| ; | |
| var assert = require('assert'); | |
| var getProxyForUrl = require('./').getProxyForUrl; | |
| describe('getProxyForUrl', function() { | |
| beforeEach(function() { | |
| // Remove all proxy-related environment variables. | |
| Object.keys(process.env).forEach(function(key) { | |
| if (/proxy/i.test(key)) { | |
| delete process.env[key]; | |
| } | |
| }); | |
| }); | |
| it('No proxy variables', function() { | |
| assert.strictEqual('', getProxyForUrl('http://example.com')); | |
| assert.strictEqual('', getProxyForUrl('https://example.com')); | |
| assert.strictEqual('', getProxyForUrl('ftp://example.com')); | |
| }); | |
| it('Invalid URLs', function() { | |
| process.env.ALL_PROXY = 'http://unexpected.proxy'; | |
| assert.strictEqual('', getProxyForUrl('bogus')); | |
| assert.strictEqual('', getProxyForUrl('//example.com')); | |
| assert.strictEqual('', getProxyForUrl('/path')); | |
| assert.strictEqual('', getProxyForUrl('')); | |
| assert.throws(function() { | |
| getProxyForUrl(); | |
| }, TypeError); // "Parameter 'url' must be a string, not undefined" | |
| assert.throws(function() { | |
| getProxyForUrl({}); | |
| }, TypeError); // "Parameter 'url' must be a string, not object" | |
| }); | |
| it('http_proxy and HTTP_PROXY', function() { | |
| process.env.HTTP_PROXY = 'http://http-proxy'; | |
| assert.strictEqual('', getProxyForUrl('https://example')); | |
| assert.strictEqual('http://http-proxy', getProxyForUrl('http://example')); | |
| process.env.http_proxy = 'http://priority'; | |
| assert.strictEqual('http://priority', getProxyForUrl('http://example')); | |
| }); | |
| it('http_proxy with non-sensical value', function() { | |
| // Crazy values should be passed as-is. It is the responsibility of the | |
| // one who launches the application that the value makes sense. | |
| // TODO: Should we be stricter and perform validation? | |
| process.env.http_proxy = 'Crazy \n!() { :: }'; | |
| assert.strictEqual('Crazy \n!() { :: }', getProxyForUrl('http://wow')); | |
| }); | |
| it('https_proxy and HTTPS_PROXY', function() { | |
| // Assert that there is no fall back to http_proxy | |
| process.env.HTTP_PROXY = 'http://unexpected.proxy'; | |
| assert.strictEqual('', getProxyForUrl('https://example')); | |
| process.env.HTTPS_PROXY = 'http://https-proxy'; | |
| assert.strictEqual('http://https-proxy', getProxyForUrl('https://example')); | |
| process.env.https_proxy = 'http://priority'; | |
| assert.strictEqual('http://priority', getProxyForUrl('https://example')); | |
| }); | |
| it('ftp_proxy', function() { | |
| // Something else than http_proxy / https, as a sanity check. | |
| process.env.ftp_proxy = 'http://ftp-proxy'; | |
| assert.strictEqual('http://ftp-proxy', getProxyForUrl('ftp://example')); | |
| assert.strictEqual('', getProxyForUrl('ftps://example')); | |
| }); | |
| it('all_proxy', function() { | |
| process.env.ALL_PROXY = 'http://catch-all'; | |
| assert.strictEqual('http://catch-all', getProxyForUrl('https://example')); | |
| process.env.all_proxy = 'http://priority'; | |
| assert.strictEqual('http://priority', getProxyForUrl('https://example')); | |
| }); | |
| it('no_proxy empty', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| // NO_PROXY set but empty. | |
| process.env.NO_PROXY = ''; | |
| assert.strictEqual('http://proxy', getProxyForUrl('https://example')); | |
| // No entries in NO_PROXY (comma). | |
| process.env.NO_PROXY = ','; | |
| assert.strictEqual('http://proxy', getProxyForUrl('https://example')); | |
| // No entries in NO_PROXY (whitespace). | |
| process.env.NO_PROXY = ' '; | |
| assert.strictEqual('http://proxy', getProxyForUrl('https://example')); | |
| // No entries in NO_PROXY (multiple whitespace / commas). | |
| process.env.NO_PROXY = ',\t,,,\n, ,\r'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('https://example')); | |
| }); | |
| it('no_proxy=example (single host)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = 'example'; | |
| assert.strictEqual('', getProxyForUrl('http://example')); | |
| assert.strictEqual('', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://example:0')); | |
| assert.strictEqual('', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.no')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://a.b.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://host/example')); | |
| }); | |
| it('no_proxy=sub.example (subdomain)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = 'sub.example'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:0')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://no.sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://sub-example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.sub')); | |
| }); | |
| it('no_proxy=example:80 (host + port)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = 'example:80'; | |
| assert.strictEqual('', getProxyForUrl('http://example')); | |
| assert.strictEqual('', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://example:0')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.no')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://a.b.example')); | |
| }); | |
| it('no_proxy=.example (host suffix)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '.example'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:1337')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.no')); | |
| assert.strictEqual('', getProxyForUrl('http://a.b.example')); | |
| }); | |
| it('no_proxy=*.example (host suffix with *.)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '*.example'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:1337')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.no')); | |
| assert.strictEqual('', getProxyForUrl('http://a.b.example')); | |
| }); | |
| it('no_proxy=*example (substring suffix)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '*example'; | |
| assert.strictEqual('', getProxyForUrl('http://example')); | |
| assert.strictEqual('', getProxyForUrl('http://example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://example:1337')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:80')); | |
| assert.strictEqual('', getProxyForUrl('http://sub.example:1337')); | |
| assert.strictEqual('', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('', getProxyForUrl('http://a.b.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example.no')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://host/example')); | |
| }); | |
| it('no_proxy=.*example (arbitrary wildcards are NOT supported)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '.*example'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://sub.example')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://x.prefexample')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://a.b.example')); | |
| }); | |
| it('no_proxy=[::1],[::2]:80,10.0.0.1,10.0.0.2:80 (IP addresses)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '[::1],[::2]:80,10.0.0.1,10.0.0.2:80'; | |
| assert.strictEqual('', getProxyForUrl('http://[::1]/')); | |
| assert.strictEqual('', getProxyForUrl('http://[::1]:80/')); | |
| assert.strictEqual('', getProxyForUrl('http://[::1]:1337/')); | |
| assert.strictEqual('', getProxyForUrl('http://[::2]/')); | |
| assert.strictEqual('', getProxyForUrl('http://[::2]:80/')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://[::2]:1337/')); | |
| assert.strictEqual('', getProxyForUrl('http://10.0.0.1/')); | |
| assert.strictEqual('', getProxyForUrl('http://10.0.0.1:80/')); | |
| assert.strictEqual('', getProxyForUrl('http://10.0.0.1:1337/')); | |
| assert.strictEqual('', getProxyForUrl('http://10.0.0.2/')); | |
| assert.strictEqual('', getProxyForUrl('http://10.0.0.2:80/')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://10.0.0.2:1337/')); | |
| }); | |
| it('no_proxy=127.0.0.1/32 (CIDR is NOT supported)', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '127.0.0.1/32'; | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://127.0.0.1')); | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://127.0.0.1/32')); | |
| }); | |
| it('no_proxy=127.0.0.1 does NOT match localhost', function() { | |
| process.env.ALL_PROXY = 'http://proxy'; | |
| process.env.NO_PROXY = '127.0.0.1'; | |
| assert.strictEqual('', getProxyForUrl('http://127.0.0.1')); | |
| // We're not performing DNS queries, so this shouldn't match. | |
| assert.strictEqual('http://proxy', getProxyForUrl('http://localhost')); | |
| }); | |
| it('no_proxy with protocols that have a default port', function() { | |
| process.env.WS_PROXY = 'http://ws'; | |
| process.env.WSS_PROXY = 'http://wss'; | |
| process.env.HTTP_PROXY = 'http://http'; | |
| process.env.HTTPS_PROXY = 'http://https'; | |
| process.env.GOPHER_PROXY = 'http://gopher'; | |
| process.env.FTP_PROXY = 'http://ftp'; | |
| process.env.ALL_PROXY = 'http://all'; | |
| process.env.NO_PROXY = 'xxx:21,xxx:70,xxx:80,xxx:443'; | |
| assert.strictEqual('', getProxyForUrl('http://xxx')); | |
| assert.strictEqual('', getProxyForUrl('http://xxx:80')); | |
| assert.strictEqual('http://http', getProxyForUrl('http://xxx:1337')); | |
| assert.strictEqual('', getProxyForUrl('ws://xxx')); | |
| assert.strictEqual('', getProxyForUrl('ws://xxx:80')); | |
| assert.strictEqual('http://ws', getProxyForUrl('ws://xxx:1337')); | |
| assert.strictEqual('', getProxyForUrl('https://xxx')); | |
| assert.strictEqual('', getProxyForUrl('https://xxx:443')); | |
| assert.strictEqual('http://https', getProxyForUrl('https://xxx:1337')); | |
| assert.strictEqual('', getProxyForUrl('wss://xxx')); | |
| assert.strictEqual('', getProxyForUrl('wss://xxx:443')); | |
| assert.strictEqual('http://wss', getProxyForUrl('wss://xxx:1337')); | |
| assert.strictEqual('', getProxyForUrl('gopher://xxx')); | |
| assert.strictEqual('', getProxyForUrl('gopher://xxx:70')); | |
| assert.strictEqual('http://gopher', getProxyForUrl('gopher://xxx:1337')); | |
| assert.strictEqual('', getProxyForUrl('ftp://xxx')); | |
| assert.strictEqual('', getProxyForUrl('ftp://xxx:21')); | |
| assert.strictEqual('http://ftp', getProxyForUrl('ftp://xxx:1337')); | |
| }); | |
| }); | |