Skip to content

Commit 33a3f3f

Browse files
authored
run tests with redis 7 as well - copied from #2020 (#2062)
* run tests on redis 7 as well - copied from #2020 * copy some changes from #2020 * clean BITCOUNT
1 parent b0fb3bd commit 33a3f3f

File tree

7 files changed

+75
-43
lines changed

7 files changed

+75
-43
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
fail-fast: false
1818
matrix:
1919
node-version: ['12', '14', '16']
20-
redis-version: ['5', '6.0', '6.2']
20+
redis-version: ['5', '6.0', '6.2', '7.0-rc2']
2121
steps:
2222
- uses: actions/[email protected]
2323
with:

packages/client/lib/commands/ACL_GETUSER.spec.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,32 @@ describe('ACL GETUSER', () => {
1313
});
1414

1515
testUtils.testWithClient('client.aclGetUser', async client => {
16+
const expectedReply: any = {
17+
passwords: [],
18+
commands: '+@all',
19+
};
20+
21+
if (testUtils.isVersionGreaterThan([7])) {
22+
expectedReply.flags = ['on', 'nopass'];
23+
expectedReply.keys = '~*';
24+
expectedReply.channels = '&*';
25+
expectedReply.selectors = [];
26+
} else {
27+
expectedReply.keys = ['*'];
28+
expectedReply.selectors = undefined;
29+
30+
if (testUtils.isVersionGreaterThan([6, 2])) {
31+
expectedReply.flags = ['on', 'allkeys', 'allchannels', 'allcommands', 'nopass'];
32+
expectedReply.channels = ['*'];
33+
} else {
34+
expectedReply.flags = ['on', 'allkeys', 'allcommands', 'nopass'];
35+
expectedReply.channels = undefined;
36+
}
37+
}
38+
1639
assert.deepEqual(
1740
await client.aclGetUser('default'),
18-
{
19-
passwords: [],
20-
commands: '+@all',
21-
keys: ['*'],
22-
...(testUtils.isVersionGreaterThan([6, 2]) ? {
23-
flags: ['on', 'allkeys', 'allchannels', 'allcommands', 'nopass'],
24-
channels: ['*']
25-
} : {
26-
flags: ['on', 'allkeys', 'allcommands', 'nopass'],
27-
channels: undefined
28-
})
29-
}
41+
expectedReply
3042
);
3143
}, GLOBAL.SERVERS.OPEN);
3244
});

packages/client/lib/commands/ACL_GETUSER.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@ export function transformArguments(username: RedisCommandArgument): RedisCommand
55
}
66

77
type AclGetUserRawReply = [
8-
_: RedisCommandArgument,
9-
flags: Array<RedisCommandArgument>,
10-
_: RedisCommandArgument,
11-
passwords: Array<RedisCommandArgument>,
12-
_: RedisCommandArgument,
13-
commands: RedisCommandArgument,
14-
_: RedisCommandArgument,
15-
keys: Array<RedisCommandArgument>,
16-
_: RedisCommandArgument,
17-
channels: Array<RedisCommandArgument>
8+
'flags',
9+
Array<RedisCommandArgument>,
10+
'passwords',
11+
Array<RedisCommandArgument>,
12+
'commands',
13+
RedisCommandArgument,
14+
'keys',
15+
Array<RedisCommandArgument> | RedisCommandArgument,
16+
'channels',
17+
Array<RedisCommandArgument> | RedisCommandArgument,
18+
'selectors' | undefined,
19+
Array<Array<string>> | undefined
1820
];
1921

2022
interface AclUser {
2123
flags: Array<RedisCommandArgument>;
2224
passwords: Array<RedisCommandArgument>;
2325
commands: RedisCommandArgument;
24-
keys: Array<RedisCommandArgument>;
25-
channels: Array<RedisCommandArgument>
26+
keys: Array<RedisCommandArgument> | RedisCommandArgument;
27+
channels: Array<RedisCommandArgument> | RedisCommandArgument;
28+
selectors?: Array<Array<string>>;
2629
}
2730

2831
export function transformReply(reply: AclGetUserRawReply): AclUser {
@@ -31,6 +34,7 @@ export function transformReply(reply: AclGetUserRawReply): AclUser {
3134
passwords: reply[3],
3235
commands: reply[5],
3336
keys: reply[7],
34-
channels: reply[9]
37+
channels: reply[9],
38+
selectors: reply[11]
3539
};
3640
}

packages/client/lib/commands/BITCOUNT.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function transformArguments(
2222
range.end.toString()
2323
);
2424

25-
if (range?.mode) {
25+
if (range.mode) {
2626
args.push(range.mode);
2727
}
2828
}

packages/client/lib/commands/COMMAND_INFO.spec.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ export function assertPingCommand(commandInfo: CommandReply | null | undefined):
99
{
1010
name: 'ping',
1111
arity: -1,
12-
flags: new Set([CommandFlags.STALE, CommandFlags.FAST]),
12+
flags: new Set(
13+
testUtils.isVersionGreaterThan([7]) ?
14+
[CommandFlags.FAST] :
15+
[CommandFlags.STALE, CommandFlags.FAST]
16+
),
1317
firstKeyIndex: 0,
1418
lastKeyIndex: 0,
1519
step: 0,

packages/test-utils/lib/dockers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const portIterator = (async function*(): AsyncIterableIterator<number> {
3838

3939
export interface RedisServerDockerConfig {
4040
image: string;
41-
version: Array<number>;
41+
version: string;
4242
}
4343

4444
export interface RedisServerDocker {
@@ -54,7 +54,7 @@ async function spawnRedisServerDocker({ image, version }: RedisServerDockerConfi
5454
{ stdout, stderr } = await execAsync(
5555
'docker run -d --network host $(' +
5656
`docker build ${DOCKER_FODLER_PATH} -q ` +
57-
`--build-arg IMAGE=${image}:${version.join('.')} ` +
57+
`--build-arg IMAGE=${image}:${version} ` +
5858
`--build-arg REDIS_ARGUMENTS="--save --port ${port.toString()} ${serverArguments.join(' ')}"` +
5959
')'
6060
);

packages/test-utils/lib/index.ts

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,49 +27,61 @@ interface ClusterTestOptions<M extends RedisModules, S extends RedisScripts> ext
2727
numberOfNodes?: number;
2828
}
2929

30+
interface Version {
31+
string: string;
32+
numbers: Array<number>;
33+
}
34+
3035
export default class TestUtils {
31-
static #getVersion(argumentName: string, defaultVersion: string): Array<number> {
36+
static #getVersion(argumentName: string, defaultVersion: string): Version {
3237
return yargs(hideBin(process.argv))
3338
.option(argumentName, {
3439
type: 'string',
3540
default: defaultVersion
3641
})
3742
.coerce(argumentName, (arg: string) => {
38-
return arg.split('.').map(x => {
39-
const value = Number(x);
40-
if (Number.isNaN(value)) {
41-
throw new TypeError(`${arg} is not a valid redis version`);
42-
}
43+
const indexOfDash = arg.indexOf('-');
44+
return {
45+
string: arg,
46+
numbers: (indexOfDash === -1 ? arg : arg.substring(0, indexOfDash)).split('.').map(x => {
47+
const value = Number(x);
48+
if (Number.isNaN(value)) {
49+
throw new TypeError(`${arg} is not a valid redis version`);
50+
}
4351

44-
return value;
45-
});
52+
return value;
53+
})
54+
};
4655
})
4756
.demandOption(argumentName)
4857
.parseSync()[argumentName];
4958
}
5059

60+
readonly #VERSION_NUMBERS: Array<number>;
5161
readonly #DOCKER_IMAGE: RedisServerDockerConfig;
5262

5363
constructor(config: TestUtilsConfig) {
64+
const { string, numbers } = TestUtils.#getVersion(config.dockerImageVersionArgument, config.defaultDockerVersion);
65+
this.#VERSION_NUMBERS = numbers;
5466
this.#DOCKER_IMAGE = {
5567
image: config.dockerImageName,
56-
version: TestUtils.#getVersion(config.dockerImageVersionArgument, config.defaultDockerVersion)
68+
version: string
5769
};
5870
}
5971

6072
isVersionGreaterThan(minimumVersion: Array<number> | undefined): boolean {
6173
if (minimumVersion === undefined) return true;
6274

63-
const lastIndex = Math.min(this.#DOCKER_IMAGE.version.length, minimumVersion.length) - 1;
75+
const lastIndex = Math.min(this.#VERSION_NUMBERS.length, minimumVersion.length) - 1;
6476
for (let i = 0; i < lastIndex; i++) {
65-
if (this.#DOCKER_IMAGE.version[i] > minimumVersion[i]) {
77+
if (this.#VERSION_NUMBERS[i] > minimumVersion[i]) {
6678
return true;
67-
} else if (minimumVersion[i] > this.#DOCKER_IMAGE.version[i]) {
79+
} else if (minimumVersion[i] > this.#VERSION_NUMBERS[i]) {
6880
return false;
6981
}
7082
}
7183

72-
return this.#DOCKER_IMAGE.version[lastIndex] >= minimumVersion[lastIndex];
84+
return this.#VERSION_NUMBERS[lastIndex] >= minimumVersion[lastIndex];
7385
}
7486

7587
isVersionGreaterThanHook(minimumVersion: Array<number> | undefined): void {

0 commit comments

Comments
 (0)