Skip to content

Commit abcf30c

Browse files
committed
trying to configure redis-mock to connect and read/write for the tests
1 parent 5832d86 commit abcf30c

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/rateLimiters/tokenBucket.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,10 @@ class TokenBucket implements RateLimiter {
3434
timestamp: number,
3535
tokens = 1
3636
): Promise<RateLimiterResponse> {
37-
// set an expiry for key-pairs in redis to 24 hours
38-
const bucketExpiry = 86400000;
39-
4037
// attempt to get the value for the uuid from the redis cache
41-
const bucketJSON = await this.client.get('uuid');
42-
38+
const bucketJSON = await this.client.get(uuid);
4339
// if the response is null, we need to create bucket for the user
44-
if (bucketJSON === null) {
40+
if (bucketJSON === undefined || bucketJSON === null) {
4541
if (tokens > this.capacity) {
4642
// reject the request, not enough tokens in bucket
4743
return {
@@ -53,7 +49,7 @@ class TokenBucket implements RateLimiter {
5349
tokens: this.capacity - tokens,
5450
timestamp,
5551
};
56-
await this.client.setEx(uuid, bucketExpiry, JSON.stringify(newUserBucket));
52+
await this.client.set(uuid, JSON.stringify(newUserBucket));
5753
return {
5854
success: true,
5955
tokens: newUserBucket.tokens,
@@ -78,7 +74,7 @@ class TokenBucket implements RateLimiter {
7874
tokens: bucket.tokens - tokens,
7975
timestamp,
8076
};
81-
await this.client.setEx(uuid, bucketExpiry, JSON.stringify(updatedUserBucket));
77+
await this.client.set(uuid, JSON.stringify(updatedUserBucket));
8278
return {
8379
success: true,
8480
tokens: updatedUserBucket.tokens,

test/rateLimiters/tokenBucket.test.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ async function getBucketFromClient(
1818
redisClient: RedisClientType,
1919
uuid: string
2020
): Promise<RedisBucket> {
21-
return redisClient.get(uuid).then((res) => JSON.parse(res || '{}'));
21+
const res = await redisClient.get(uuid);
22+
if (res === undefined || res === null) return { tokens: -1, timestamp: -1 };
23+
return JSON.parse(res!);
2224
}
2325

2426
async function setTokenCountInClient(
@@ -31,7 +33,7 @@ async function setTokenCountInClient(
3133
await redisClient.set(uuid, JSON.stringify(value));
3234
}
3335

34-
xdescribe('Test TokenBucket Rate Limiter', () => {
36+
describe('Test TokenBucket Rate Limiter', () => {
3537
beforeEach(async () => {
3638
// Initialize a new token bucket before each test
3739
// create a mock user
@@ -50,7 +52,7 @@ xdescribe('Test TokenBucket Rate Limiter', () => {
5052
CAPACITY - withdraw5
5153
);
5254
const tokenCountFull = await getBucketFromClient(client, user1);
53-
expect(tokenCountFull).toBe(CAPACITY - withdraw5);
55+
expect(tokenCountFull.tokens).toBe(CAPACITY - withdraw5);
5456
});
5557

5658
test('bucket is partially full and request has leftover tokens', async () => {
@@ -69,7 +71,7 @@ xdescribe('Test TokenBucket Rate Limiter', () => {
6971
).tokens
7072
).toBe(CAPACITY - (initial + partialWithdraw));
7173
const tokenCountPartial = await getBucketFromClient(client, user2);
72-
expect(tokenCountPartial).toBe(CAPACITY - (initial + partialWithdraw));
74+
expect(tokenCountPartial.tokens).toBe(CAPACITY - (initial + partialWithdraw));
7375
});
7476

7577
// Bucket partially full and no leftover tokens after reqeust
@@ -78,15 +80,15 @@ xdescribe('Test TokenBucket Rate Limiter', () => {
7880
await setTokenCountInClient(client, user2, initial, timestamp);
7981
expect((await limiter.processRequest(user2, timestamp, initial)).tokens).toBe(0);
8082
const tokenCountPartialToEmpty = await getBucketFromClient(client, user2);
81-
expect(tokenCountPartialToEmpty).toBe(0);
83+
expect(tokenCountPartialToEmpty.tokens).toBe(0);
8284
});
8385

8486
// Bucket initially empty but enough time elapsed to paritally fill bucket since last request
8587
test('bucket is initially empty but enough time has elapsed to partially fill the bucket', async () => {
8688
await setTokenCountInClient(client, user4, 0, timestamp);
8789
expect((await limiter.processRequest(user4, timestamp + 6000, 4)).tokens).toBe(2);
8890
const count = await getBucketFromClient(client, user4);
89-
expect(count).toBe(2);
91+
expect(count.tokens).toBe(2);
9092
});
9193
});
9294

0 commit comments

Comments
 (0)