Skip to content

Commit 26eba14

Browse files
committed
tests: Factor out RedisForwarder
This connexion forwarder specifically tailored for redis will be useful for other multi-server Redis-related tests, so let's factor it out.
1 parent 2b77efb commit 26eba14

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

test/gen-server/lib/HealthCheck.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { assert } from 'chai';
22
import fetch from 'node-fetch';
33
import { TestServer } from 'test/gen-server/apiUtils';
4-
import { TcpForwarder } from 'test/server/tcpForwarder';
4+
import { RedisForwarder } from 'test/server/tcpForwarder';
55
import * as testUtils from 'test/server/testUtils';
66
import { waitForIt } from 'test/server/wait';
77

@@ -12,22 +12,14 @@ describe('HealthCheck', function() {
1212
describe(serverType, function() {
1313
let server: TestServer;
1414
let oldEnv: testUtils.EnvironmentSnapshot;
15-
let redisForwarder: TcpForwarder;
15+
let redisForwarder: RedisForwarder;
1616

1717
before(async function() {
1818
oldEnv = new testUtils.EnvironmentSnapshot();
1919

20-
// We set up Redis via a TcpForwarder, so that we can simulate disconnects.
21-
if (!process.env.TEST_REDIS_URL) {
22-
throw new Error("TEST_REDIS_URL is expected");
23-
}
24-
const redisUrl = new URL(process.env.TEST_REDIS_URL);
25-
const redisPort = parseInt(redisUrl.port, 10) || 6379;
26-
redisForwarder = new TcpForwarder(redisPort, redisUrl.host);
27-
const forwarderPort = await redisForwarder.pickForwarderPort();
28-
await redisForwarder.connect();
29-
30-
process.env.REDIS_URL = `redis://localhost:${forwarderPort}`;
20+
// We set up Redis via a forwarder, so that we can simulate disconnects.
21+
redisForwarder = await RedisForwarder.create();
22+
process.env.REDIS_URL = `redis://localhost:${redisForwarder.port}`;
3123
server = new TestServer(this);
3224
await server.start([serverType]);
3325
});

test/server/tcpForwarder.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,21 @@ async function destroySock(sock: Socket): Promise<void> {
5959
sock.on('close', resolve).destroy());
6060
}
6161
}
62+
63+
export class RedisForwarder extends TcpForwarder {
64+
public static async create() {
65+
if (!process.env.TEST_REDIS_URL) {
66+
throw new Error("TEST_REDIS_URL is expected");
67+
}
68+
69+
const url = new URL(process.env.TEST_REDIS_URL);
70+
const port = parseInt(url.port, 10) || 6379;
71+
const forwarder = new RedisForwarder(port, url.hostname);
72+
await forwarder.pickForwarderPort();
73+
await forwarder.connect();
74+
forwarder.redisUrl = `redis://localhost:${forwarder.port}${url.pathname}`;
75+
return forwarder;
76+
}
77+
78+
public redisUrl: string;
79+
}

0 commit comments

Comments
 (0)