3 var Code = require('code');
4 var Hawk = require('../lib');
5 var Lab = require('lab');
6 var Package = require('../package.json');
16 var lab = exports.lab = Lab.script();
17 var describe = lab.experiment;
19 var expect = Code.expect;
22 describe('Utils', function () {
24 describe('parseHost()', function () {
26 it('returns port 80 for non tls node request', function (done) {
30 url: '/resource/4?filter=a',
33 'content-type': 'text/plain;x=y'
37 expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80);
41 it('returns port 443 for non tls node request', function (done) {
45 url: '/resource/4?filter=a',
48 'content-type': 'text/plain;x=y'
55 expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);
59 it('returns port 443 for non tls node request (IPv6)', function (done) {
63 url: '/resource/4?filter=a',
65 host: '[123:123:123]',
66 'content-type': 'text/plain;x=y'
73 expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);
77 it('parses IPv6 headers', function (done) {
81 url: '/resource/4?filter=a',
83 host: '[123:123:123]:8000',
84 'content-type': 'text/plain;x=y'
91 var host = Hawk.utils.parseHost(req, 'Host');
92 expect(host.port).to.equal('8000');
93 expect(host.name).to.equal('[123:123:123]');
97 it('errors on header too long', function (done) {
100 for (var i = 0; i < 5000; ++i) {
104 expect(Hawk.utils.parseHost({ headers: { host: long } })).to.be.null();
109 describe('parseAuthorizationHeader()', function () {
111 it('errors on header too long', function (done) {
113 var long = 'Scheme a="';
114 for (var i = 0; i < 5000; ++i) {
119 var err = Hawk.utils.parseAuthorizationHeader(long, ['a']);
120 expect(err).to.be.instanceof(Error);
121 expect(err.message).to.equal('Header length too long');
126 describe('version()', function () {
128 it('returns the correct package version number', function (done) {
130 expect(Hawk.utils.version()).to.equal(Package.version);
135 describe('unauthorized()', function () {
137 it('returns a hawk 401', function (done) {
139 expect(Hawk.utils.unauthorized('kaboom').output.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"');
143 it('supports attributes', function (done) {
145 expect(Hawk.utils.unauthorized('kaboom', { a: 'b' }).output.headers['WWW-Authenticate']).to.equal('Hawk a="b", error="kaboom"');