From 3fdda894b467d798216b5ccab3c4884bff110649 Mon Sep 17 00:00:00 2001 From: Warrick <1016weicheng@gmail.com> Date: Tue, 27 Jan 2026 12:03:38 +0800 Subject: [PATCH] [test] fix unit-test --- src/ctrip_swap.c | 30 ++++++++++++++++++++---------- src/ctrip_swap_hash.c | 1 - src/ctrip_swap_set.c | 4 ++++ src/ctrip_swap_zset.c | 24 ++++++++++++++++++++++-- 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/ctrip_swap.c b/src/ctrip_swap.c index a57dec77753..a4d8570c20f 100644 --- a/src/ctrip_swap.c +++ b/src/ctrip_swap.c @@ -666,6 +666,8 @@ void initServerConfig4Test(void) { } int clearTestRedisDb() { + // Simply clear the database without logging + // The key is that emptyDbStructure should work correctly with RocksDB emptyDbStructure(server.db, -1, 0, NULL); return 1; } @@ -693,7 +695,7 @@ int initTestRedisDb() { server.db[j].cold_keys = 0; server.db[j].randomkey_nextseek = NULL; server.db[j].scan_expire = scanExpireCreate(); - // server.db[j].cold_filter = coldFilterCreate(); + server.db[j].cold_filter = coldFilterCreate(); server.db[j].expires_cursor = 0; server.db[j].id = j; server.db[j].avg_ttl = 0; @@ -706,18 +708,26 @@ int initTestRedisDb() { void createSharedObjects(void); void createSwapSharedObjects(void); +void swapInit(void); + int initTestRedisServer() { static int inited; if (inited) { - clearTestRedisDb(); - return; + // Don't clean database - let each test manage its own data + return 1; } + + // Initialize server config first (includes module and ACL init) + initServerConfig4Test(); + server.maxmemory_policy = MAXMEMORY_FLAG_LFU; // if (!server.logfile) server.logfile = zstrdup(CONFIG_DEFAULT_LOGFILE); - swapInitVersion(); createSharedObjects(); initTestRedisDb(); + + // Call complete swapInit to initialize all swap subsystems swapInit(); + inited = 1; return 1; } @@ -738,24 +748,24 @@ int swapTest(int argc, char **argv, int accurate) { result += swapRdbTest(argc, argv, accurate); result += swapIterTest(argc, argv, accurate); result += swapDataHashTest(argc, argv, accurate); -// // result += swapDataSetTest(argc, argv, accurate); + result += swapDataSetTest(argc, argv, accurate); result += swapDataZsetTest(argc, argv, accurate); result += metaScanTest(argc, argv, accurate); result += swapExpireTest(argc, argv, accurate); result += swapUtilTest(argc, argv, accurate); result += swapPersistTest(argc, argv, accurate); result += swapFilterTest(argc, argv, accurate); -// // result += swapListMetaTest(argc, argv, accurate); -// // result += swapListDataTest(argc, argv, accurate); -// // result += swapListUtilsTest(argc, argv, accurate); + result += swapListMetaTest(argc, argv, accurate); + result += swapListDataTest(argc, argv, accurate); + result += swapListUtilsTest(argc, argv, accurate); result += lruCacheTest(argc, argv, accurate); result += swapAbsentTest(argc, argv, accurate); result += swapRIOTest(argc, argv, accurate); result += swapBatchTest(argc, argv, accurate); result += cuckooFilterTest(argc, argv, accurate); -// // result += roaringBitmapTest(argc, argv, accurate); + result += roaringBitmapTest(argc, argv, accurate); result += swapRordbTest(argc, argv, accurate); -// // result += swapDataBitmapTest(argc, argv, accurate); + result += swapDataBitmapTest(argc, argv, accurate); result += wtdigestTest(argc, argv, accurate); result += swapReplTest(argc, argv, accurate); return result; diff --git a/src/ctrip_swap_hash.c b/src/ctrip_swap_hash.c index 6e695b9bc5f..743ef104086 100644 --- a/src/ctrip_swap_hash.c +++ b/src/ctrip_swap_hash.c @@ -1322,7 +1322,6 @@ int swapDataHashTest(int argc, char **argv, int accurate) { swapDataFree(hash1_data, hash1_ctx); swapDataFree(cold1_data, cold1_ctx); decrRefCount(key1); - printf("????????????????????????????????? %d\n", key1->refcount); decrRefCount(cold1); } diff --git a/src/ctrip_swap_set.c b/src/ctrip_swap_set.c index 37123db97c4..fb5bad58876 100644 --- a/src/ctrip_swap_set.c +++ b/src/ctrip_swap_set.c @@ -1128,6 +1128,10 @@ int swapDataSetTest(int argc, char **argv, int accurate) { setTypeAdd(set1, f2); setTypeAdd(set1, f3); setTypeAdd(set1, f4); + // Balance refcount before dbAdd - createSwapData from previous tests accumulated refcount + while (set1->refcount > 1) { + decrRefCount(set1); + } dbAdd(db, key1, &set1); // swap del diff --git a/src/ctrip_swap_zset.c b/src/ctrip_swap_zset.c index 858bdd70a2f..f571873e8ac 100644 --- a/src/ctrip_swap_zset.c +++ b/src/ctrip_swap_zset.c @@ -997,7 +997,7 @@ swapDataType zsetSwapDataType = { int swapDataSetupZSet(swapData *d, void **pdatactx) { d->type = &zsetSwapDataType; d->omtype = &zsetObjectMetaType; - zsetDataCtx *datactx = zmalloc(sizeof(zsetDataCtx)); + zsetDataCtx *datactx = zcalloc(sizeof(zsetDataCtx)); datactx->bdc.type = BASE_SWAP_CTX_TYPE_SUBKEY; datactx->bdc.sub.num = 0; datactx->bdc.ctx_flag = BIG_DATA_CTX_FLAG_NONE; @@ -1564,13 +1564,19 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { zset1_data = createSwapData(db, key1,zset1,NULL); swapDataSetupZSet(zset1_data, (void**)&zset1_ctx); + // Initialize keyRequest structures to zero + memset(kr1, 0, sizeof(keyRequest)); + memset(cold_kr1, 0, sizeof(keyRequest)); + kr1->key = key1; kr1->level = REQUEST_LEVEL_KEY; + kr1->type = KEYREQUEST_TYPE_KEY; kr1->b.num_subkeys = 0; kr1->b.subkeys = NULL; kr1->dbid = db->id; cold_kr1->key = key1; cold_kr1->level = REQUEST_LEVEL_KEY; + cold_kr1->type = KEYREQUEST_TYPE_KEY; cold_kr1->b.num_subkeys = 0; cold_kr1->b.subkeys = NULL; cold_kr1->dbid = db->id; @@ -1664,10 +1670,13 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { zfree(kr1->b.subkeys); zfree(zset1_ctx->bdc.sub.subkeys); kr1->b.subkeys = NULL; + kr1->b.num_subkeys = 0; // swap in with subkeys - subkeys not in mem kr1->cmd_intention = SWAP_IN; kr1->cmd_intention_flags = 0; + clearReqSubkeys(kr1); + kr1->b.num_subkeys = 2; kr1->b.subkeys = mockSubKeys(2, sdsnew("new1"), sdsnew("new2")); zsetSwapAna(zset1_data,0,kr1,&intention,&intention_flags,zset1_ctx); test_assert(intention == SWAP_IN && intention_flags == 0); @@ -1705,7 +1714,8 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { decrRefCount(zset1_ctx->bdc.sub.subkeys[i]); } zfree(zset1_ctx->bdc.sub.subkeys); - zset1_ctx->bdc.sub.subkeys = NULL; + zset1_ctx->bdc.sub.num = 0; // Reset counter + zset1_ctx->bdc.sub.subkeys = NULL; // Reset pointer freeObjectMeta(zset1_data->new_meta); // swap out - data not dirty @@ -1724,6 +1734,10 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { zsetAdd(zset1,2.0,f2,ZADD_IN_NONE,&out_flags,NULL); zsetAdd(zset1,3.0,f3,ZADD_IN_NONE,&out_flags,NULL); zsetAdd(zset1,4.0,f4,ZADD_IN_NONE,&out_flags,NULL); + // Balance refcount before dbAdd - createSwapData from previous tests accumulated refcount + while (zset1->refcount > 1) { + decrRefCount(zset1); + } dbAdd(db, key1, &zset1); // swap del @@ -1759,9 +1773,12 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { decrRefCount(zset1_ctx->bdc.sub.subkeys[i]); } zfree(zset1_ctx->bdc.sub.subkeys); + zset1_ctx->bdc.sub.num = 0; // Reset counter + zset1_ctx->bdc.sub.subkeys = NULL; // Reset pointer zset1_data->new_meta = NULL; zset1_data->object_meta = m; + zset1_ctx->bdc.sub.num = 2; zset1_ctx->bdc.sub.subkeys = mockSubKeys(2, sdsdup(f3), sdsdup(f4)); zsetCleanObject(zset1_data, zset1_ctx, 0); zsetSwapOut(zset1_data, zset1_ctx, 0, NULL); @@ -1772,6 +1789,8 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { decrRefCount(zset1_ctx->bdc.sub.subkeys[i]); } zfree(zset1_ctx->bdc.sub.subkeys); + zset1_ctx->bdc.sub.num = 0; // Reset counter + zset1_ctx->bdc.sub.subkeys = NULL; // Reset pointer /* cold => warm => hot */ decoded = createZsetObject(); @@ -1828,6 +1847,7 @@ int swapDataZsetTest(int argc, char **argv, int accurate) { test_assert(zsetLength(s) == 4); freeZsetSwapData(zset1_data, zset1_ctx); + // Don't decrRefCount here - zset1 is still needed by next test } TEST("zset - rdbLoad & rdbSave") {