Initial commit
[yaffs-website] / node_modules / hawk / test / utils.js
1 // Load modules\r
2 \r
3 var Code = require('code');\r
4 var Hawk = require('../lib');\r
5 var Lab = require('lab');\r
6 var Package = require('../package.json');\r
7 \r
8 \r
9 // Declare internals\r
10 \r
11 var internals = {};\r
12 \r
13 \r
14 // Test shortcuts\r
15 \r
16 var lab = exports.lab = Lab.script();\r
17 var describe = lab.experiment;\r
18 var it = lab.test;\r
19 var expect = Code.expect;\r
20 \r
21 \r
22 describe('Utils', function () {\r
23 \r
24     describe('parseHost()', function () {\r
25 \r
26         it('returns port 80 for non tls node request', function (done) {\r
27 \r
28             var req = {\r
29                 method: 'POST',\r
30                 url: '/resource/4?filter=a',\r
31                 headers: {\r
32                     host: 'example.com',\r
33                     'content-type': 'text/plain;x=y'\r
34                 }\r
35             };\r
36 \r
37             expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80);\r
38             done();\r
39         });\r
40 \r
41         it('returns port 443 for non tls node request', function (done) {\r
42 \r
43             var req = {\r
44                 method: 'POST',\r
45                 url: '/resource/4?filter=a',\r
46                 headers: {\r
47                     host: 'example.com',\r
48                     'content-type': 'text/plain;x=y'\r
49                 },\r
50                 connection: {\r
51                     encrypted: true\r
52                 }\r
53             };\r
54 \r
55             expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);\r
56             done();\r
57         });\r
58 \r
59         it('returns port 443 for non tls node request (IPv6)', function (done) {\r
60 \r
61             var req = {\r
62                 method: 'POST',\r
63                 url: '/resource/4?filter=a',\r
64                 headers: {\r
65                     host: '[123:123:123]',\r
66                     'content-type': 'text/plain;x=y'\r
67                 },\r
68                 connection: {\r
69                     encrypted: true\r
70                 }\r
71             };\r
72 \r
73             expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);\r
74             done();\r
75         });\r
76 \r
77         it('parses IPv6 headers', function (done) {\r
78 \r
79             var req = {\r
80                 method: 'POST',\r
81                 url: '/resource/4?filter=a',\r
82                 headers: {\r
83                     host: '[123:123:123]:8000',\r
84                     'content-type': 'text/plain;x=y'\r
85                 },\r
86                 connection: {\r
87                     encrypted: true\r
88                 }\r
89             };\r
90 \r
91             var host = Hawk.utils.parseHost(req, 'Host');\r
92             expect(host.port).to.equal('8000');\r
93             expect(host.name).to.equal('[123:123:123]');\r
94             done();\r
95         });\r
96 \r
97         it('errors on header too long', function (done) {\r
98 \r
99             var long = '';\r
100             for (var i = 0; i < 5000; ++i) {\r
101                 long += 'x';\r
102             }\r
103 \r
104             expect(Hawk.utils.parseHost({ headers: { host: long } })).to.be.null();\r
105             done();\r
106         });\r
107     });\r
108 \r
109     describe('parseAuthorizationHeader()', function () {\r
110 \r
111         it('errors on header too long', function (done) {\r
112 \r
113             var long = 'Scheme a="';\r
114             for (var i = 0; i < 5000; ++i) {\r
115                 long += 'x';\r
116             }\r
117             long += '"';\r
118 \r
119             var err = Hawk.utils.parseAuthorizationHeader(long, ['a']);\r
120             expect(err).to.be.instanceof(Error);\r
121             expect(err.message).to.equal('Header length too long');\r
122             done();\r
123         });\r
124     });\r
125 \r
126     describe('version()', function () {\r
127 \r
128         it('returns the correct package version number', function (done) {\r
129 \r
130             expect(Hawk.utils.version()).to.equal(Package.version);\r
131             done();\r
132         });\r
133     });\r
134 \r
135     describe('unauthorized()', function () {\r
136 \r
137         it('returns a hawk 401', function (done) {\r
138 \r
139             expect(Hawk.utils.unauthorized('kaboom').output.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"');\r
140             done();\r
141         });\r
142 \r
143         it('supports attributes', function (done) {\r
144 \r
145             expect(Hawk.utils.unauthorized('kaboom', { a: 'b' }).output.headers['WWW-Authenticate']).to.equal('Hawk a="b", error="kaboom"');\r
146             done();\r
147         });\r
148     });\r
149 });\r