// Load modules var Code = require('code'); var Hawk = require('../lib'); var Lab = require('lab'); var Package = require('../package.json'); // Declare internals var internals = {}; // Test shortcuts var lab = exports.lab = Lab.script(); var describe = lab.experiment; var it = lab.test; var expect = Code.expect; describe('Utils', function () { describe('parseHost()', function () { it('returns port 80 for non tls node request', function (done) { var req = { method: 'POST', url: '/resource/4?filter=a', headers: { host: 'example.com', 'content-type': 'text/plain;x=y' } }; expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80); done(); }); it('returns port 443 for non tls node request', function (done) { var req = { method: 'POST', url: '/resource/4?filter=a', headers: { host: 'example.com', 'content-type': 'text/plain;x=y' }, connection: { encrypted: true } }; expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); done(); }); it('returns port 443 for non tls node request (IPv6)', function (done) { var req = { method: 'POST', url: '/resource/4?filter=a', headers: { host: '[123:123:123]', 'content-type': 'text/plain;x=y' }, connection: { encrypted: true } }; expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); done(); }); it('parses IPv6 headers', function (done) { var req = { method: 'POST', url: '/resource/4?filter=a', headers: { host: '[123:123:123]:8000', 'content-type': 'text/plain;x=y' }, connection: { encrypted: true } }; var host = Hawk.utils.parseHost(req, 'Host'); expect(host.port).to.equal('8000'); expect(host.name).to.equal('[123:123:123]'); done(); }); it('errors on header too long', function (done) { var long = ''; for (var i = 0; i < 5000; ++i) { long += 'x'; } expect(Hawk.utils.parseHost({ headers: { host: long } })).to.be.null(); done(); }); }); describe('parseAuthorizationHeader()', function () { it('errors on header too long', function (done) { var long = 'Scheme a="'; for (var i = 0; i < 5000; ++i) { long += 'x'; } long += '"'; var err = Hawk.utils.parseAuthorizationHeader(long, ['a']); expect(err).to.be.instanceof(Error); expect(err.message).to.equal('Header length too long'); done(); }); }); describe('version()', function () { it('returns the correct package version number', function (done) { expect(Hawk.utils.version()).to.equal(Package.version); done(); }); }); describe('unauthorized()', function () { it('returns a hawk 401', function (done) { expect(Hawk.utils.unauthorized('kaboom').output.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"'); done(); }); it('supports attributes', function (done) { expect(Hawk.utils.unauthorized('kaboom', { a: 'b' }).output.headers['WWW-Authenticate']).to.equal('Hawk a="b", error="kaboom"'); done(); }); }); });