From e0dc931e59ddab3741b4237bc669693c576fd578 Mon Sep 17 00:00:00 2001 From: Krishna Kalubandi Date: Wed, 1 Feb 2017 14:33:26 +0530 Subject: [PATCH] added tests --- package.json | 5 +++-- test/index.js | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8b5dc2f..5f29d3c 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,12 @@ "limiter", "limit" ], - "scripts" : { - "test" : "mocha" + "scripts": { + "test": "mocha" }, "dependencies": {}, "devDependencies": { + "async": "2.1.4", "ioredis": "1.15.1", "mocha": "*", "redis": "2.6.0-1", diff --git a/test/index.js b/test/index.js index 5419f81..bda3fc6 100644 --- a/test/index.js +++ b/test/index.js @@ -1,11 +1,12 @@ require('should'); -var Limiter = require('..'); +var Limiter = require('..'), + async = require('async'); // Uncomment the following line if you want to see // debug logs from the node-redis module. //redis.debug_mode = true; -['redis', 'ioredis'].forEach(function (redisModuleName) { +['redis', 'ioredis'].forEach(function(redisModuleName) { var redisModule = require(redisModuleName); var db = require(redisModuleName).createClient(); describe('Limiter with ' + redisModuleName, function() { @@ -146,7 +147,7 @@ var Limiter = require('..'); .pttl(['limit:something:count']) .pttl(['limit:something:limit']) .pttl(['limit:something:reset']) - .exec(function (err, res) { + .exec(function(err, res) { if (err) return done(err); var ttlCount = (typeof res[0] === 'number') ? res[0] : res[0][1]; var ttlLimit = (typeof res[1] === 'number') ? res[1] : res[1][1]; @@ -211,7 +212,8 @@ var Limiter = require('..'); if (err) { done(err); - } else { + } + else { responses.forEach(function(res) { res[1].remaining.should.equal(left < 0 ? 0 : left); left--; @@ -230,7 +232,8 @@ var Limiter = require('..'); limits[0].get(function(err, res) { if (err) { done(err); - } else { + } + else { res.remaining.should.equal(left--); // Simulate multiple concurrent requests. @@ -241,5 +244,31 @@ var Limiter = require('..'); }); }); }); + + describe('when limiter is called in parallel by multiple clients', function() { + var max = 6, + limiter; + + limiter = new Limiter({ + duration: 10000, + max: max, + id: 'asyncsomething', + db: redisModule.createClient() + }); + + it('should set the count properly without race conditions', function(done) { + async.times(max, function(n, next) { + limiter.get(next); + }, + function(errs, limits) { + + limits.forEach(function(limit) { + limit.remaining.should.equal(max--); + }); + done(); + + }); + }); + }) }); });