123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- // 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();
- });
- });
- });
|