123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
-
- /**
- * Module dependencies.
- */
-
- var pac = require('../');
- var assert = require('assert');
-
- describe('FindProxyForURL', function () {
-
- it('should return `undefined` by default', function (done) {
- var FindProxyForURL = pac(
- 'function FindProxyForURL (url, host) {' +
- ' /* noop */' +
- '}'
- );
- FindProxyForURL('http://foo.com/', 'foo.com', function (err, res) {
- if (err) return done(err);
- assert.strictEqual(undefined, res);
- done();
- });
- });
-
- it('should return the value that gets returned', function (done) {
- var FindProxyForURL = pac(
- 'function FindProxyForURL (url, host) {' +
- ' return { foo: "bar" };' +
- '}'
- );
- FindProxyForURL('http://foo.com/', 'foo.com', function (err, res) {
- if (err) return done(err);
- assert.deepEqual({ foo: 'bar' }, res);
- done();
- });
- });
-
- describe('official docs Example #1', function () {
- var FindProxyForURL = pac(
- 'function FindProxyForURL(url, host) {' +
- ' if (isPlainHostName(host) ||' +
- ' dnsDomainIs(host, ".netscape.com"))' +
- ' return "DIRECT";' +
- ' else' +
- ' return "PROXY w3proxy.netscape.com:8080; DIRECT";' +
- '}'
- );
-
- it('should return "DIRECT" for "localhost"', function (done) {
- FindProxyForURL('http://localhost/hello', 'localhost', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- it('should return "DIRECT" for "foo.netscape.com"', function (done) {
- FindProxyForURL('http://foo.netscape.com/', 'foo.netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- it('should return "PROXY …" for "google.com"', function (done) {
- FindProxyForURL('http://google.com/t', 'google.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY w3proxy.netscape.com:8080; DIRECT', res);
- done();
- });
- });
-
- });
-
- describe('official docs Example #1b', function () {
- var FindProxyForURL = pac(
- 'function FindProxyForURL(url, host)' +
- '{' +
- ' if ((isPlainHostName(host) ||' +
- ' dnsDomainIs(host, ".netscape.com")) &&' +
- ' !localHostOrDomainIs(host, "www.netscape.com") &&' +
- ' !localHostOrDomainIs(host, "merchant.netscape.com"))' +
- ' return "DIRECT";' +
- ' else' +
- ' return "PROXY w3proxy.netscape.com:8080; DIRECT";' +
- '}'
- );
-
- it('should return "DIRECT" for "localhost"', function (done) {
- FindProxyForURL('http://localhost/hello', 'localhost', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- it('should return "DIRECT" for "foo.netscape.com"', function (done) {
- FindProxyForURL('http://foo.netscape.com/', 'foo.netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- it('should return "PROXY …" for "www.netscape.com"', function (done) {
- FindProxyForURL('http://www.netscape.com/', 'www.netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY w3proxy.netscape.com:8080; DIRECT', res);
- done();
- });
- });
-
- it('should return "PROXY …" for "merchant.netscape.com"', function (done) {
- FindProxyForURL('http://merchant.netscape.com/', 'merchant.netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY w3proxy.netscape.com:8080; DIRECT', res);
- done();
- });
- });
-
- });
-
- describe('official docs Example #5', function () {
- var FindProxyForURL = pac(
- 'function FindProxyForURL(url, host)' +
- '{' +
- ' if (url.substring(0, 5) == "http:") {' +
- ' return "PROXY http-proxy.mydomain.com:8080";' +
- ' }' +
- ' else if (url.substring(0, 4) == "ftp:") {' +
- ' return "PROXY ftp-proxy.mydomain.com:8080";' +
- ' }' +
- ' else if (url.substring(0, 7) == "gopher:") {' +
- ' return "PROXY gopher-proxy.mydomain.com:8080";' +
- ' }' +
- ' else if (url.substring(0, 6) == "https:" ||' +
- ' url.substring(0, 6) == "snews:") {' +
- ' return "PROXY security-proxy.mydomain.com:8080";' +
- ' }' +
- ' else {' +
- ' return "DIRECT";' +
- ' }' +
- '}'
- );
-
- it('should return "DIRECT" for "foo://netscape.com"', function (done) {
- FindProxyForURL('foo://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- it('should return "PROXY http…" for "http://netscape.com"', function (done) {
- FindProxyForURL('http://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY http-proxy.mydomain.com:8080', res);
- done();
- });
- });
-
- it('should return "PROXY ftp…" for "ftp://netscape.com"', function (done) {
- FindProxyForURL('ftp://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY ftp-proxy.mydomain.com:8080', res);
- done();
- });
- });
-
- it('should return "PROXY gopher…" for "gopher://netscape.com"', function (done) {
- FindProxyForURL('gopher://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY gopher-proxy.mydomain.com:8080', res);
- done();
- });
- });
-
- it('should return "PROXY security…" for "https://netscape.com"', function (done) {
- FindProxyForURL('https://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY security-proxy.mydomain.com:8080', res);
- done();
- });
- });
-
- it('should return "PROXY security…" for "snews://netscape.com"', function (done) {
- FindProxyForURL('snews://netscape.com/hello', 'netscape.com', function (err, res) {
- if (err) return done(err);
- assert.equal('PROXY security-proxy.mydomain.com:8080', res);
- done();
- });
- });
-
- });
-
- describe('GitHub issue #3', function () {
- var FindProxyForURL = pac(
- 'function FindProxyForURL(url, host) {\n' +
- ' if (isHostInAnySubnet(host, ["10.1.2.0", "10.1.3.0"], "255.255.255.0")) {\n' +
- ' return "HTTPS proxy.example.com";\n' +
- ' }\n' +
- '\n' +
- ' if (isHostInAnySubnet(host, ["10.2.2.0", "10.2.3.0"], "255.255.255.0")) {\n' +
- ' return "HTTPS proxy.example.com";\n' +
- ' }\n' +
- '\n' +
- ' // Everything else, go direct:\n' +
- ' return "DIRECT";\n' +
- '}\n' +
- '\n' +
- '// Checks if the single host is within a list of subnets using the single mask.\n' +
- 'function isHostInAnySubnet(host, subnets, mask) {\n' +
- ' var subnets_length = subnets.length;\n' +
- ' for (i = 0; i < subnets_length; i++) {\n' +
- ' if (isInNet(host, subnets[i], mask)) {\n' +
- ' return true;\n' +
- ' }\n' +
- ' }\n' +
- '}\n'
- );
-
- it('should return "HTTPS proxy.example.com" for "http://10.1.2.3/bar.html"', function (done) {
- FindProxyForURL('http://10.1.2.3/bar.html', '10.1.2.3', function (err, res) {
- if (err) return done(err);
- assert.equal('HTTPS proxy.example.com', res);
- done();
- });
- });
-
- it('should return "DIRECT" for "http://foo.com/bar.html"', function (done) {
- FindProxyForURL('http://foo.com/bar.html', 'foo.com', function (err, res) {
- if (err) return done(err);
- assert.equal('DIRECT', res);
- done();
- });
- });
-
- });
-
- });
|