Skip to content

Commit 8d60a05

Browse files
committed
Fix test
1 parent c99f278 commit 8d60a05

File tree

2 files changed

+50
-41
lines changed

2 files changed

+50
-41
lines changed

test/test_common.c

+33-28
Original file line numberDiff line numberDiff line change
@@ -344,16 +344,14 @@ void get_redis_version(redisContext *c, int *majorptr, int *minorptr) {
344344
exit(1);
345345
}
346346

347+
#define MAX_ARGS 50
347348
void setupRedisServer(const char *extraArgs) {
348-
349-
/* If redis not installed return gracefully */
350349
if (!redisInstallFolder) return;
351350

352-
/* execl() not accept empty string */
353351
const char *_extraArgs = (extraArgs) ? extraArgs : "--loglevel verbose";
354352

355353
pid_t pid = fork();
356-
assert_int_not_equal (pid, -1);
354+
assert(pid != -1);
357355

358356
int port = findFreePort(6500, 6600);
359357

@@ -364,31 +362,38 @@ void setupRedisServer(const char *extraArgs) {
364362
snprintf(testrdbModulePath, sizeof(testrdbModulePath), "%s/../tests/modules/testrdb.so", redisInstallFolder);
365363
snprintf(redisPortStr, sizeof(redisPortStr), "%d", port);
366364

367-
/* if module testrdb.so exists (ci.yaml takes care to build testrdb), part
368-
* of redis repo testing, then load it for test_rdb_to_redis_module. The
369-
* test will run only if testrdb appear in the server "MODULE LIST",
370-
* otherwise skipped gracefully. */
365+
// Tokenize extraArgs and build the arguments list
366+
char *args[MAX_ARGS];
367+
int argIndex = 0;
368+
369+
args[argIndex++] = fullpath;
370+
args[argIndex++] = "--port";
371+
args[argIndex++] = redisPortStr;
372+
args[argIndex++] = "--dir";
373+
args[argIndex++] = "./test/tmp/";
374+
args[argIndex++] = "--logfile";
375+
args[argIndex++] = "./redis.log";
376+
377+
// Add module loading arguments if the module exists
371378
if (access(testrdbModulePath, F_OK) != -1) {
372-
execl(fullpath, fullpath,
373-
"--enable-debug-command", "yes",
374-
"--port", redisPortStr,
375-
"--dir", "./test/tmp/",
376-
"--logfile", "./redis.log",
377-
"--loadmodule", testrdbModulePath, "4",
378-
_extraArgs,
379-
(char *) NULL);
380-
} else {
381-
execl(fullpath, fullpath,
382-
"--enable-debug-command", "yes",
383-
"--port", redisPortStr,
384-
"--dir", "./test/tmp/",
385-
"--logfile", "./redis.log",
386-
_extraArgs,
387-
(char *) NULL);
388-
}
389-
390-
/* If execl returns, an error occurred! */
391-
perror("execl");
379+
args[argIndex++] = "--loadmodule";
380+
args[argIndex++] = testrdbModulePath;
381+
args[argIndex++] = "4";
382+
}
383+
384+
/* Tokenize extraArgs and add to the arguments list */
385+
char *extraArgsCopy = strdup(_extraArgs);
386+
char *token = strtok(extraArgsCopy, " ");
387+
while (token && argIndex < MAX_ARGS - 1) {
388+
args[argIndex++] = token;
389+
token = strtok(NULL, " ");
390+
}
391+
args[argIndex] = NULL;
392+
393+
execvp(fullpath, args);
394+
395+
/* If execvp returns, an error occurred */
396+
perror("execvp");
392397
exit(1);
393398
} else { /* parent */
394399
int retryCount = 3;

test/test_rdb_to_redis.c

+17-13
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static void rdb_to_json(const char *rdbfile, const char *outfile) {
7272
* isDigest - if set, compare DB digest before and after reload
7373
* isRestore - if set, use RESTORE command after reload. Otherwise, plain commands
7474
*/
75-
static void rdb_save_librdb_reload_eq(int isRestore) {
75+
static void rdb_save_librdb_reload_eq(int isRestore, char *serverRdbFile) {
7676
char *res;
7777
const char *rdbfile = TMP_FOLDER("reload.rdb");
7878
char expectedSha[100];
@@ -84,7 +84,7 @@ static void rdb_save_librdb_reload_eq(int isRestore) {
8484
/* Keep aside rdb file */
8585
sendRedisCmd("SAVE", REDIS_REPLY_STATUS, NULL);
8686
runSystemCmd("rm %s || true", rdbfile);
87-
runSystemCmd("cp %s %s > /dev/null", TMP_FOLDER("dump.rdb"), rdbfile);
87+
runSystemCmd("cp %s %s > /dev/null", serverRdbFile, rdbfile);
8888

8989
/* Flush Redis */
9090
sendRedisCmd("FLUSHALL", REDIS_REPLY_STATUS, NULL);
@@ -194,25 +194,29 @@ static void test_rdb_to_redis_hash_with_expire(void **state) {
194194
if ((serverMajorVer<7) || ((serverMajorVer==7) && (serverMinorVer<4)))
195195
skip();
196196

197-
/* dict (max-lp-entries=0) */
198-
sendRedisCmd("FLUSHALL", REDIS_REPLY_STATUS, NULL);
199-
sendRedisCmd("CONFIG SET HASH-MAX-LISTPACK-ENTRIES 0", REDIS_REPLY_STATUS, NULL);
200-
sendRedisCmd("HSET myhash f1 v1 f2 v2 f3 v3", REDIS_REPLY_INTEGER, "3");
201-
sendRedisCmd("HPEXPIREAT myhash 70368744177663 FIELDS 2 f1 f2", REDIS_REPLY_ARRAY, "1 1");
202-
rdb_save_librdb_reload_eq(0 /*restore*/);
203-
rdb_save_librdb_reload_eq(1 /*restore*/);
204-
sendRedisCmd("HPEXPIRETIME myhash FIELDS 3 f1 f2 f3", REDIS_REPLY_ARRAY,
205-
"70368744177663 70368744177663 -1"); /* verify expected output */
197+
setupRedisServer("--enable-debug-command yes --dbfilename expire.rdb");
206198

207199
/* listpack */
208200
sendRedisCmd("FLUSHALL", REDIS_REPLY_STATUS, NULL);
209201
sendRedisCmd("CONFIG SET HASH-MAX-LISTPACK-ENTRIES 512", REDIS_REPLY_STATUS, NULL);
210202
sendRedisCmd("HSET myhash f4 v1 f5 v2 f6 v3", REDIS_REPLY_INTEGER, "3");
211203
sendRedisCmd("HPEXPIREAT myhash 70368744177663 FIELDS 2 f4 f5", REDIS_REPLY_ARRAY, "1 1");
212-
rdb_save_librdb_reload_eq(0 /*restore*/);
213-
rdb_save_librdb_reload_eq(1 /*restore*/);
204+
rdb_save_librdb_reload_eq(0 /*restore*/, TMP_FOLDER("expire.rdb"));
205+
rdb_save_librdb_reload_eq(1 /*restore*/, TMP_FOLDER("expire.rdb"));
214206
sendRedisCmd("HPEXPIRETIME myhash FIELDS 3 f4 f5 f6", REDIS_REPLY_ARRAY,
215207
"70368744177663 70368744177663 -1"); /* verify expected output */
208+
209+
/* dict (max-lp-entries=0) */
210+
sendRedisCmd("FLUSHALL", REDIS_REPLY_STATUS, NULL);
211+
sendRedisCmd("CONFIG SET HASH-MAX-LISTPACK-ENTRIES 0", REDIS_REPLY_STATUS, NULL);
212+
sendRedisCmd("HSET myhash f4 v1 f5 v2 f6 v3", REDIS_REPLY_INTEGER, "3");
213+
sendRedisCmd("HPEXPIREAT myhash 70368744177663 FIELDS 2 f4 f5", REDIS_REPLY_ARRAY, "1 1");
214+
rdb_save_librdb_reload_eq(0 /*restore*/, TMP_FOLDER("expire.rdb"));
215+
rdb_save_librdb_reload_eq(1 /*restore*/, TMP_FOLDER("expire.rdb"));
216+
sendRedisCmd("HPEXPIRETIME myhash FIELDS 3 f4 f5 f6", REDIS_REPLY_ARRAY,
217+
"70368744177663 70368744177663 -1"); /* verify expected output */
218+
219+
teardownRedisServer();
216220
}
217221

218222
static void test_rdb_to_redis_hash_zl(void **state) {

0 commit comments

Comments
 (0)