Skip to content

Commit f4f4cf5

Browse files
committed
feat: added helper function for creating mock redis client
Signed-off-by: Simeon Nakov <[email protected]>
1 parent 62ab4d8 commit f4f4cf5

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

packages/relay/tests/helpers.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { expect } from 'chai';
77
import crypto from 'crypto';
88
import { ethers } from 'ethers';
99
import { Logger } from 'pino';
10+
import * as sinon from 'sinon';
1011
import { v4 as uuid } from 'uuid';
1112

1213
import { ConfigServiceTestHelper } from '../../config-service/tests/configServiceTestHelper';
@@ -38,6 +39,23 @@ const expectUnsupportedMethod = (result) => {
3839
expect(result.message).to.be.equal('Unsupported JSON-RPC method');
3940
};
4041

42+
export const createMockRedisClient = (options: { connectRejects?: boolean; evalRejects?: boolean } = {}) => {
43+
const { connectRejects = false, evalRejects = false } = options;
44+
45+
const connectStub = connectRejects
46+
? sinon.stub().rejects(new Error('Redis connection failed'))
47+
: sinon.stub().resolves();
48+
49+
const evalStub = evalRejects ? sinon.stub().rejects(new Error('Redis operation failed')) : sinon.stub();
50+
51+
return {
52+
connect: connectStub,
53+
on: sinon.stub(),
54+
eval: evalStub,
55+
quit: sinon.stub(),
56+
};
57+
};
58+
4159
const expectedError = () => {
4260
expect(true).to.eq(false);
4361
};

packages/relay/tests/lib/services/rateLimiterService/rateLimiterService.spec.ts

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { IPRateLimiterService } from '../../../../src/lib/services/rateLimiterSe
1111
import { RedisRateLimitStore } from '../../../../src/lib/services/rateLimiterService/RedisRateLimitStore';
1212
import { RateLimitKey } from '../../../../src/lib/types/rateLimiter';
1313
import { RequestDetails } from '../../../../src/lib/types/RequestDetails';
14-
import { overrideEnvsInMochaDescribe, withOverriddenEnvsInMochaTest } from '../../../helpers';
14+
import { createMockRedisClient, overrideEnvsInMochaDescribe, withOverriddenEnvsInMochaTest } from '../../../helpers';
1515

1616
describe('IPRateLimiterService Test Suite', function () {
1717
this.timeout(10000);
@@ -251,12 +251,8 @@ describe('IPRateLimiterService Test Suite', function () {
251251
});
252252

253253
it('should handle Redis connection failures gracefully (fail-open behavior)', async () => {
254-
const createClientStub = sinon.stub().returns({
255-
connect: sinon.stub().rejects(new Error('Redis connection failed')),
256-
on: sinon.stub(),
257-
eval: sinon.stub(),
258-
quit: sinon.stub(),
259-
});
254+
const mockRedisClient = createMockRedisClient({ connectRejects: true });
255+
const createClientStub = sinon.stub().returns(mockRedisClient);
260256
sinon.replace(redis, 'createClient', createClientStub);
261257

262258
rateLimiterService = new IPRateLimiterService(logger, registry, duration);
@@ -270,12 +266,7 @@ describe('IPRateLimiterService Test Suite', function () {
270266
});
271267

272268
it('should handle Redis operation failures gracefully (fail-open behavior)', async () => {
273-
const mockRedisClient = {
274-
connect: sinon.stub().resolves(),
275-
on: sinon.stub(),
276-
eval: sinon.stub().rejects(new Error('Redis operation failed')),
277-
quit: sinon.stub(),
278-
};
269+
const mockRedisClient = createMockRedisClient({ evalRejects: true });
279270
const createClientStub = sinon.stub().returns(mockRedisClient);
280271
sinon.replace(redis, 'createClient', createClientStub);
281272

0 commit comments

Comments
 (0)