Skip to content

Commit 52e8c50

Browse files
committed
add testWithClientPool and first pool test
1 parent f8c24c0 commit 52e8c50

File tree

2 files changed

+77
-6
lines changed

2 files changed

+77
-6
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { strict as assert } from 'node:assert';
2+
import testUtils, { GLOBAL } from '../test-utils';
3+
4+
describe.only('RedisClientPool', () => {
5+
testUtils.testWithClientPool('sendCommand', async pool => {
6+
assert.equal(
7+
await pool.sendCommand(['PING']),
8+
'PONG'
9+
);
10+
}, GLOBAL.SERVERS.OPEN);
11+
});

packages/test-utils/lib/index.ts

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import {
88
createClient,
99
RedisClientOptions,
1010
RedisClientType,
11+
RedisPoolOptions,
12+
RedisClientPoolType,
13+
createClientPool,
1114
createCluster,
1215
RedisClusterOptions,
1316
RedisClusterType
@@ -23,6 +26,7 @@ interface TestUtilsConfig {
2326
}
2427

2528
interface CommonTestOptions {
29+
serverArguments: Array<string>;
2630
minimumDockerVersion?: Array<number>;
2731
}
2832

@@ -33,11 +37,21 @@ interface ClientTestOptions<
3337
RESP extends RespVersions,
3438
TYPE_MAPPING extends TypeMapping
3539
> extends CommonTestOptions {
36-
serverArguments: Array<string>;
3740
clientOptions?: Partial<RedisClientOptions<M, F, S, RESP, TYPE_MAPPING>>;
3841
disableClientSetup?: boolean;
3942
}
4043

44+
interface ClientPoolTestOptions<
45+
M extends RedisModules,
46+
F extends RedisFunctions,
47+
S extends RedisScripts,
48+
RESP extends RespVersions,
49+
TYPE_MAPPING extends TypeMapping
50+
> extends CommonTestOptions {
51+
clientOptions?: Partial<RedisClientOptions<M, F, S, RESP, TYPE_MAPPING>>;
52+
poolOptions?: RedisPoolOptions;
53+
}
54+
4155
interface ClusterTestOptions<
4256
M extends RedisModules,
4357
F extends RedisFunctions,
@@ -46,7 +60,6 @@ interface ClusterTestOptions<
4660
TYPE_MAPPING extends TypeMapping
4761
// POLICIES extends CommandPolicies
4862
> extends CommonTestOptions {
49-
serverArguments: Array<string>;
5063
clusterConfiguration?: Partial<RedisClusterOptions<M, F, S, RESP, TYPE_MAPPING/*, POLICIES*/>>;
5164
numberOfMasters?: number;
5265
numberOfReplicas?: number;
@@ -164,9 +177,9 @@ export default class TestUtils {
164177
if (!dockerPromise) return this.skip();
165178

166179
const client = createClient({
167-
...options?.clientOptions,
180+
...options.clientOptions,
168181
socket: {
169-
...options?.clientOptions?.socket,
182+
...options.clientOptions?.socket,
170183
// TODO
171184
// @ts-ignore
172185
port: (await dockerPromise).port
@@ -191,6 +204,53 @@ export default class TestUtils {
191204
});
192205
}
193206

207+
testWithClientPool<
208+
M extends RedisModules = {},
209+
F extends RedisFunctions = {},
210+
S extends RedisScripts = {},
211+
RESP extends RespVersions = 2,
212+
TYPE_MAPPING extends TypeMapping = {}
213+
>(
214+
title: string,
215+
fn: (client: RedisClientPoolType<M, F, S, RESP, TYPE_MAPPING>) => unknown,
216+
options: ClientPoolTestOptions<M, F, S, RESP, TYPE_MAPPING>
217+
): void {
218+
let dockerPromise: ReturnType<typeof spawnRedisServer>;
219+
if (this.isVersionGreaterThan(options.minimumDockerVersion)) {
220+
const dockerImage = this.#DOCKER_IMAGE;
221+
before(function () {
222+
this.timeout(30000);
223+
224+
dockerPromise = spawnRedisServer(dockerImage, options.serverArguments);
225+
return dockerPromise;
226+
});
227+
}
228+
229+
it(title, async function () {
230+
if (!dockerPromise) return this.skip();
231+
232+
const pool = createClientPool({
233+
...options.clientOptions,
234+
socket: {
235+
...options.clientOptions?.socket,
236+
// TODO
237+
// @ts-ignore
238+
port: (await dockerPromise).port
239+
}
240+
}, options.poolOptions);
241+
242+
await pool.connect();
243+
244+
try {
245+
await pool.flushAll();
246+
await fn(pool);
247+
} finally {
248+
await pool.flushAll();
249+
pool.destroy();
250+
}
251+
});
252+
}
253+
194254
static async #clusterFlushAll<
195255
M extends RedisModules,
196256
F extends RedisFunctions,
@@ -228,8 +288,8 @@ export default class TestUtils {
228288

229289
dockersPromise = spawnRedisCluster({
230290
...dockerImage,
231-
numberOfMasters: options?.numberOfMasters,
232-
numberOfReplicas: options?.numberOfReplicas
291+
numberOfMasters: options.numberOfMasters,
292+
numberOfReplicas: options.numberOfReplicas
233293
}, options.serverArguments);
234294
return dockersPromise;
235295
});

0 commit comments

Comments
 (0)