1 | var should = require('should');
|
2 | var Token = require('../lib/index');
|
3 | var _store = {};
|
4 | var async = require('async');
|
5 | describe("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 |