You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					150 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					150 lines
				
				4.1 KiB
			| 
											3 years ago
										 | // 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(); | ||
|  |         }); | ||
|  |     }); | ||
|  | }); |