UNPKG

13.2 kBJavaScriptView Raw
1var should = require('should');
2var Token = require('../lib/index');
3var _store = {};
4var async = require('async');
5describe("Token", function() {
6 this.timeout(5000);
7 describe("data save in memory", function() {
8 var TokenInstance = new Token();
9 var token;
10 it("#issue()", function(done) {
11 TokenInstance.issue(10, 2, function(err, data) {
12 should.exists(data);
13 done(err);
14 });
15 });
16 it("#issue()", function(done) {
17 TokenInstance.issue(10, '2', function(err, data) {
18 data.should.be.equal('2');
19 done(err);
20 });
21 });
22 it("#issue()", function(done) {
23 TokenInstance.issue(10, 2, 'givenToken', function(err, data) {
24 data.should.be.equal('givenToken');
25 done(err);
26 });
27 });
28 it("#issue()", function() {
29 try {
30 TokenInstance.issue(10, 2, 'givenToken')
31 }catch(e){
32 should.exists(e);
33 }
34 });
35 it("#issue()", function(done) {
36 TokenInstance.issue(10, function(err, data) {
37 token = data;
38 should.exists(data);
39 done(err);
40 });
41 });
42 it("#issue()", function(done) {
43 TokenInstance.issue(function(err, data) {
44 should.exists(err);
45 done();
46 });
47 });
48 it('#verify()', function(done) {
49 TokenInstance.verify(token, function(err, data) {
50 data.should.be.equal(5);
51 done(err);
52 });
53 });
54 it('#decline()', function(done) {
55 TokenInstance.decline(token, function(err, data) {
56 data.should.be.equal(4);
57 done(err);
58 });
59 });
60 it('#remove()', function(done) {
61 TokenInstance.remove(token, function(err, data) {
62 done(err);
63 });
64 });
65 it('#verify()', function(done) {
66 TokenInstance.verify(token, function(err, data) {
67 should.exists(err);
68 done(null);
69 });
70 });
71 it('#issue()', function(done) {
72 TokenInstance.issue(3, 3, function(err, data) {
73 token = data;
74 should.exists(data);
75 done(err);
76 });
77 });
78 it('#decline()', function(done) {
79 TokenInstance.decline(token, function(err, data) {
80 data.should.be.equal(2);
81 done(err);
82 });
83 });
84 it('#verify()', function(done) {
85 TokenInstance.verify(token, function(err, data) {
86 data.should.be.equal(2);
87 done(err);
88 })
89 });
90 it('timeout', function(done) {
91 setTimeout(function() {
92 TokenInstance.verify(token, function(err, data) {
93 should.exists(err);
94 done(null);
95 })
96 }, 3000);
97 });
98 it('limit',function(done){
99 TokenInstance.limit(20, function(err) {
100 should.exists(err);
101 done(null);
102 })
103 });
104 it('limit',function(done){
105 var firstReturn,sencondReturn,thirdReturn;
106 async.waterfall([
107 function(cb){
108 TokenInstance.limit('test-limit', 5, 1, function(err) {
109 firstReturn = err;
110 cb(err);
111 })
112 },
113 function(cb){
114 TokenInstance.limit('test-limit', 5, 1, function(err) {
115 sencondReturn = err;
116 cb(err);
117 })
118 },
119 function(cb){
120 TokenInstance.limit('test-limit', 5, 1, function(err) {
121 thirdReturn = err;
122 cb(null);
123 })
124 }
125 ],function(err){
126 should.not.exists(firstReturn);
127 should.not.exists(sencondReturn);
128 should.exists(thirdReturn);
129 done(err);
130 });
131 })
132 });
133 describe('data in config with decline function', function() {
134 var config = {
135 set: function(key, data, ttl, callback) {
136 _store[key] = data;
137 callback(null, data);
138 },
139 get: function(key, callback) {
140 callback(null, _store[key]);
141 },
142 remove: function(key, callback) {
143 var data = _store[key]
144 delete _store[key];
145 callback(null, data);
146 },
147 decline: function(key, callback) {
148 var that = this.store;
149 that.get(key, function(err, data) {
150 if (!err && data) {
151 that.set(key, --data.data, function(err, data) {
152 if (!err && data) {
153 callback(null, data.data);
154 } else {
155 callback(err || 'can not decline token : ' + key + '.');
156 }
157 });
158 } else {
159 callback(err || 'not exists or expired token : ' + key + '.')
160 }
161 })
162 }
163 };
164 var TokenInstance = new Token({
165 storeConfig: config
166 });
167 var token;
168 it("#issue()", function(done) {
169 TokenInstance.issue(10, function(err, data) {
170 token = data;
171 should.exists(data);
172 done(err);
173 });
174 });
175 it('#verify()', function(done) {
176 TokenInstance.verify(token, function(err, data) {
177 data.should.be.equal(5);
178 done(err);
179 });
180 });
181 it('#decline()', function(done) {
182 TokenInstance.decline(token, function(err, data) {
183 data.should.be.equal(4);
184 done(err);
185 });
186 });
187 it('#pass() ok', function(done) {
188 TokenInstance.pass(token, function(err, data) {
189 should.not.exists(err);
190 data.code.should.be.equal(0);
191 data.passed.should.be.true();
192 data.count.should.be.equal(3);
193 done(err);
194 });
195 });
196 it('#remove()', function(done) {
197 TokenInstance.remove(token, function(err, data) {
198 done(err);
199 });
200 });
201 it('#pass() not ok', function(done) {
202 TokenInstance.pass(token, function(err, data) {
203 should.exists(err);
204 data.code.should.be.equal(-1);
205 done(null);
206 });
207 });
208 it('#verify()', function(done) {
209 TokenInstance.verify(token, function(err, data) {
210 should.exists(err);
211 done(null);
212 });
213 });
214 it('#issue()', function(done) {
215 TokenInstance.issue(3, 3, function(err, data) {
216 token = data;
217 should.exists(data);
218 done(err);
219 });
220 });
221 it('#decline()', function(done) {
222 TokenInstance.decline(token, function(err, data) {
223 data.should.be.equal(2);
224 done(err);
225 });
226 });
227 it('#verify()', function(done) {
228 TokenInstance.verify(token, function(err, data) {
229 data.should.be.equal(2);
230 done(err);
231 })
232 });
233 it('#webInject()', function(done) {
234 var html = '<html><head><title>test</title></head><body id="body"></body></html>';
235 TokenInstance.webInject(html, token, function(err, html) {
236 html.should.be.containEql('w.encrypt_api_tokenStr');
237 done(err);
238 })
239 });
240 it('#webInject() error', function(done) {
241 var html = '<html><head><title>test</title></head><body id="body"></body></html>';
242 TokenInstance.webInject(123, token, function(err, html) {
243 should.exists(err);
244 html.should.be.equal(123);
245 done(null);
246 })
247 });
248 it('timeout', function(done) {
249 setTimeout(function() {
250 TokenInstance.verify(token, function(err, data) {
251 should.exists(err);
252 done();
253 })
254 }, 3000);
255 });
256 });
257 describe('data in config without decline function', function() {
258 var config = {
259 set: function(key, data, ttl, callback) {
260 _store[key] = data;
261 callback(null, data);
262 },
263 get: function(key, callback) {
264 callback(null, _store[key]);
265 },
266 remove: function(key, callback) {
267 var data = _store[key]
268 delete _store[key];
269 callback(null, data);
270 },
271 webInject: function(html, token, callback) {
272 var htmlEndIndex = html.indexOf('</html>');
273 var tokenScript = '<script>window.' + this.config.webTokenVarName + '=' + token + '</script>';
274 var prevHtml = html.substring(0, htmlEndIndex);
275 var nextHtml = html.substr(htmlEndIndex);
276 prevHtml += tokenScript;
277 prevHtml += nextHtml;
278 callback(null, prevHtml);
279 }
280 };
281 var TokenInstance = new Token(config);
282 var token;
283 it("#issue()", function(done) {
284 TokenInstance.issue(10, function(err, data) {
285 token = data;
286 should.exists(data);
287 done(err);
288 });
289 });
290 it('#verify()', function(done) {
291 TokenInstance.verify(token, function(err, data) {
292 data.should.be.equal(5);
293 done(err);
294 });
295 });
296 it('#decline()', function(done) {
297 TokenInstance.decline(token, function(err, data) {
298 data.should.be.equal(4);
299 done(err);
300 });
301 });
302 it('#remove()', function(done) {
303 TokenInstance.remove(token, function(err, data) {
304 done(err);
305 });
306 });
307 it('#verify()', function(done) {
308 TokenInstance.verify(token, function(err, data) {
309 should.exists(err);
310 done(null);
311 });
312 });
313 it('#issue()', function(done) {
314 TokenInstance.issue(3, 3, function(err, data) {
315 token = data;
316 should.exists(data);
317 done(err);
318 });
319 });
320 it('#decline()', function(done) {
321 TokenInstance.decline(token, function(err, data) {
322 data.should.be.equal(2);
323 done(err);
324 });
325 });
326 it('#verify()', function(done) {
327 TokenInstance.verify(token, function(err, data) {
328 data.should.be.equal(2);
329 done(err);
330 })
331 });
332 it('#webInject()', function(done) {
333 var html = '<html><head><title>test</title></head><body id="body"></body></html>';
334 TokenInstance.webInject(html, token, function(err, html) {
335 html.should.be.containEql('window.encrypt_api_tokenStr');
336 done(err);
337 })
338 });
339 it('timeout', function(done) {
340 setTimeout(function() {
341 TokenInstance.verify(token, function(err, data) {
342 should.exists(err);
343 done(null);
344 })
345 }, 3000);
346 });
347 });
348 describe('data in redis', function() {
349 var redis = require("redis"),
350 client = redis.createClient(6379, 'localhost');
351 var TokenInstance = new Token({
352 storeConfig: {
353 get: function(key, callback) {
354 client.GET(key, function(err, reply) {
355 callback(err, reply);
356 });
357 },
358 set: function(key, data, ttl, callback) {
359 client.PSETEX(key, ttl, data, function(err, reply) {
360 callback(err, reply);
361 });
362 },
363 remove: function(key, callback) {
364 client.DEL(key, function(err, data) {
365 callback(err);
366 });
367 }
368 }
369 });
370 var token;
371 it("#issue()", function(done) {
372 TokenInstance.issue(10, function(err, data) {
373 token = data;
374 should.exists(data);
375 done(err);
376 });
377 });
378 it('#verify()', function(done) {
379 TokenInstance.verify(token, function(err, data) {
380 data.should.be.equal(5);
381 done(err);
382 });
383 });
384 it('#decline()', function(done) {
385 TokenInstance.decline(token, function(err, data) {
386 data.should.be.equal(4);
387 done(err);
388 });
389 });
390 it('#remove()', function(done) {
391 TokenInstance.remove(token, function(err, data) {
392 done(err);
393 });
394 });
395 it('#verify()', function(done) {
396 TokenInstance.verify(token, function(err, data) {
397 should.exists(err);
398 done(null);
399 });
400 });
401 it('#issue()', function(done) {
402 TokenInstance.issue(3, 3, function(err, data) {
403 token = data;
404 should.exists(data);
405 done(err);
406 });
407 });
408 it('#decline()', function(done) {
409 TokenInstance.decline(token, function(err, data) {
410 data.should.be.equal(2);
411 done(err);
412 });
413 });
414 it('#verify()', function(done) {
415 TokenInstance.verify(token, function(err, data) {
416 data.should.be.equal(2);
417 done(err);
418 })
419 });
420 it('#pass()', function(done) {
421 TokenInstance.pass(token, function(err, data) {
422 should.not.exists(err);
423 data.code.should.be.equal(0);
424 data.count.should.be.equal(1);
425 data.passed.should.be.true();
426 done(err);
427 });
428 });
429 it('#pass()', function(done) {
430 TokenInstance.pass(token, function(err, data) {
431 should.not.exists(err);
432 data.code.should.be.equal(0);
433 data.count.should.be.equal(0);
434 data.passed.should.be.true();
435 done(err);
436 });
437 });
438 it('#pass() not ok', function(done) {
439 TokenInstance.pass(token, function(err, data) {
440 should.not.exists(err);
441 data.code.should.be.equal(1);
442 data.count.should.be.equal(0);
443 data.passed.should.be.false();
444 done(err);
445 });
446 });
447 it('#webInject()', function(done) {
448 var html = '<html><head><title>test</title></head><body id="body"></body></html>';
449 TokenInstance.webInject(html, token, function(err, html) {
450 html.should.be.containEql('w.encrypt_api_tokenStr');
451 done(err);
452 })
453 });
454 it('timeout', function(done) {
455 setTimeout(function() {
456 TokenInstance.verify(token, function(err, data) {
457 should.exists(err);
458 done();
459 })
460 }, 3000);
461 });
462 });
463})
\No newline at end of file