Add wal & config UT.
This commit is contained in:
parent
1a176e6e94
commit
3c3e8fdbff
|
@ -157,7 +157,7 @@ int32_t walLoadMeta(SWal* pWal);
|
|||
int32_t walSaveMeta(SWal* pWal);
|
||||
int32_t walRemoveMeta(SWal* pWal);
|
||||
int32_t walRollFileInfo(SWal* pWal);
|
||||
|
||||
int32_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx, int64_t* lastVer);
|
||||
int32_t walCheckAndRepairMeta(SWal* pWal);
|
||||
|
||||
int32_t walCheckAndRepairIdx(SWal* pWal);
|
||||
|
|
|
@ -46,7 +46,7 @@ static FORCE_INLINE int walBuildTmpMetaName(SWal* pWal, char* buf) {
|
|||
return snprintf(buf, WAL_FILE_LEN, "%s/meta-ver.tmp", pWal->path);
|
||||
}
|
||||
|
||||
static FORCE_INLINE int32_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx, int64_t* lastVer) {
|
||||
FORCE_INLINE int32_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx, int64_t* lastVer) {
|
||||
int32_t code = 0, lino = 0;
|
||||
int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
|
||||
int64_t retVer = -1;
|
||||
|
|
|
@ -146,6 +146,83 @@ class WalRetentionEnv : public ::testing::Test {
|
|||
const char* pathName = TD_TMP_DIR_PATH "wal_test";
|
||||
};
|
||||
|
||||
class WalSkipLevel : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestCase() {
|
||||
int code = walInit(NULL);
|
||||
ASSERT(code == 0);
|
||||
}
|
||||
|
||||
static void TearDownTestCase() { walCleanUp(); }
|
||||
|
||||
void walResetEnv() {
|
||||
TearDown();
|
||||
taosRemoveDir(pathName);
|
||||
SetUp();
|
||||
}
|
||||
|
||||
void SetUp() override {
|
||||
SWalCfg cfg;
|
||||
cfg.rollPeriod = -1;
|
||||
cfg.segSize = -1;
|
||||
cfg.committed = -1;
|
||||
cfg.retentionPeriod = -1;
|
||||
cfg.retentionSize = 0;
|
||||
cfg.rollPeriod = 0;
|
||||
cfg.vgId = 1;
|
||||
cfg.level = TAOS_WAL_SKIP;
|
||||
pWal = walOpen(pathName, &cfg);
|
||||
ASSERT(pWal != NULL);
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
walClose(pWal);
|
||||
pWal = NULL;
|
||||
}
|
||||
|
||||
SWal* pWal = NULL;
|
||||
const char* pathName = TD_TMP_DIR_PATH "wal_test";
|
||||
};
|
||||
|
||||
class WalEncrypted : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestCase() {
|
||||
int code = walInit(NULL);
|
||||
ASSERT(code == 0);
|
||||
}
|
||||
|
||||
static void TearDownTestCase() { walCleanUp(); }
|
||||
|
||||
void walResetEnv() {
|
||||
TearDown();
|
||||
taosRemoveDir(pathName);
|
||||
SetUp();
|
||||
}
|
||||
|
||||
void SetUp() override {
|
||||
SWalCfg cfg;
|
||||
cfg.rollPeriod = -1;
|
||||
cfg.segSize = -1;
|
||||
cfg.committed = -1;
|
||||
cfg.retentionPeriod = -1;
|
||||
cfg.retentionSize = 0;
|
||||
cfg.rollPeriod = 0;
|
||||
cfg.vgId = 0;
|
||||
cfg.level = TAOS_WAL_FSYNC;
|
||||
cfg.encryptAlgorithm = 1;
|
||||
pWal = walOpen(pathName, &cfg);
|
||||
ASSERT(pWal != NULL);
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
walClose(pWal);
|
||||
pWal = NULL;
|
||||
}
|
||||
|
||||
SWal* pWal = NULL;
|
||||
const char* pathName = TD_TMP_DIR_PATH "wal_test";
|
||||
};
|
||||
|
||||
TEST_F(WalCleanEnv, createNew) {
|
||||
walRollFileInfo(pWal);
|
||||
ASSERT(pWal->fileInfoSet != NULL);
|
||||
|
@ -373,6 +450,183 @@ TEST_F(WalKeepEnv, readHandleRead) {
|
|||
walCloseReader(pRead);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walLogExist) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
SWalReader* pRead = walOpenReader(pWal, NULL, 0);
|
||||
ASSERT(pRead != NULL);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 100; i++) {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, i, 0, syncMeta, newStr, len);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
walLogExist(pWal, 0);
|
||||
ASSERT_EQ(code, 0);
|
||||
walCloseReader(pRead);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walScanLogGetLastVerHeadMissMatch) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
do {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, 0, 0, syncMeta, newStr, len);
|
||||
} while (0);
|
||||
|
||||
int i = 0;
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
int64_t offset = walGetCurFileOffset(pWal);
|
||||
SWalFileInfo* pFileInfo = walGetCurFileInfo(pWal);
|
||||
|
||||
pWal->writeHead.head.version = i;
|
||||
pWal->writeHead.head.bodyLen = len;
|
||||
pWal->writeHead.head.msgType = 0;
|
||||
pWal->writeHead.head.ingestTs = taosGetTimestampUs();
|
||||
|
||||
pWal->writeHead.head.syncMeta = syncMeta;
|
||||
|
||||
pWal->writeHead.cksumHead = 1;
|
||||
pWal->writeHead.cksumBody = walCalcBodyCksum(newStr, len);
|
||||
taosWriteFile(pWal->pLogFile, &pWal->writeHead, sizeof(SWalCkHead));
|
||||
taosWriteFile(pWal->pLogFile, newStr, len);
|
||||
|
||||
int64_t lastVer = 0;
|
||||
code = walScanLogGetLastVer(pWal, 0, &lastVer);
|
||||
ASSERT_EQ(code, TSDB_CODE_WAL_CHKSUM_MISMATCH);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walScanLogGetLastVerBodyMissMatch) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
do {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, 0, 0, syncMeta, newStr, len);
|
||||
} while (0);
|
||||
|
||||
int i = 0;
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
int64_t offset = walGetCurFileOffset(pWal);
|
||||
SWalFileInfo* pFileInfo = walGetCurFileInfo(pWal);
|
||||
|
||||
pWal->writeHead.head.version = i;
|
||||
pWal->writeHead.head.bodyLen = len;
|
||||
pWal->writeHead.head.msgType = 0;
|
||||
pWal->writeHead.head.ingestTs = taosGetTimestampUs();
|
||||
|
||||
pWal->writeHead.head.syncMeta = syncMeta;
|
||||
|
||||
pWal->writeHead.cksumHead = walCalcHeadCksum(&pWal->writeHead);
|
||||
pWal->writeHead.cksumBody = 1;
|
||||
taosWriteFile(pWal->pLogFile, &pWal->writeHead, sizeof(SWalCkHead));
|
||||
taosWriteFile(pWal->pLogFile, newStr, len);
|
||||
|
||||
int64_t lastVer = 0;
|
||||
code = walScanLogGetLastVer(pWal, 0, &lastVer);
|
||||
ASSERT_EQ(code, TSDB_CODE_WAL_CHKSUM_MISMATCH);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walCheckAndRepairIdxFile) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
do {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
sprintf(newStr, "%s-%d", ranStr, 0);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, 0, 0, syncMeta, newStr, len);
|
||||
} while (0);
|
||||
SWalFileInfo* pFileInfo = walGetCurFileInfo(pWal);
|
||||
for (int i = 1; i < 100; i++) {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
pWal->writeHead.head.version = i;
|
||||
pWal->writeHead.head.bodyLen = len;
|
||||
pWal->writeHead.head.msgType = 0;
|
||||
pWal->writeHead.head.ingestTs = taosGetTimestampUs();
|
||||
pWal->writeHead.head.syncMeta = syncMeta;
|
||||
pWal->writeHead.cksumHead = walCalcHeadCksum(&pWal->writeHead);
|
||||
pWal->writeHead.cksumBody = walCalcBodyCksum(newStr, len);
|
||||
taosWriteFile(pWal->pLogFile, &pWal->writeHead, sizeof(SWalCkHead));
|
||||
taosWriteFile(pWal->pLogFile, newStr, len);
|
||||
}
|
||||
pWal->vers.lastVer = 99;
|
||||
pFileInfo->lastVer = 99;
|
||||
code = walCheckAndRepairIdx(pWal);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walRestoreFromSnapshot1) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 100; i++) {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, i, 0, syncMeta, newStr, len);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
code = walRestoreFromSnapshot(pWal, 50);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walRestoreFromSnapshot2) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 100; i++) {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, i, 0, syncMeta, newStr, len);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
SWalRef* ref = walOpenRef(pWal);
|
||||
ref->refVer = 10;
|
||||
code = walRestoreFromSnapshot(pWal, 99);
|
||||
ASSERT_EQ(code, -1);
|
||||
}
|
||||
|
||||
TEST_F(WalKeepEnv, walRollback) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 100; i++) {
|
||||
char newStr[100];
|
||||
sprintf(newStr, "%s-%d", ranStr, i);
|
||||
int len = strlen(newStr);
|
||||
code = walAppendLog(pWal, i, 0, syncMeta, newStr, len);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
code = walRollback(pWal, -1);
|
||||
ASSERT_EQ(code, TSDB_CODE_WAL_INVALID_VER);
|
||||
pWal->vers.lastVer = 50;
|
||||
pWal->vers.commitVer = 40;
|
||||
pWal->vers.snapshotVer = 40;
|
||||
SWalFileInfo* fileInfo = walGetCurFileInfo(pWal);
|
||||
|
||||
code = walRollback(pWal, 48);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
|
||||
TEST_F(WalRetentionEnv, repairMeta1) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
|
@ -456,44 +710,6 @@ TEST_F(WalRetentionEnv, repairMeta1) {
|
|||
walCloseReader(pRead);
|
||||
}
|
||||
|
||||
class WalSkipLevel : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestCase() {
|
||||
int code = walInit(NULL);
|
||||
ASSERT(code == 0);
|
||||
}
|
||||
|
||||
static void TearDownTestCase() { walCleanUp(); }
|
||||
|
||||
void walResetEnv() {
|
||||
TearDown();
|
||||
taosRemoveDir(pathName);
|
||||
SetUp();
|
||||
}
|
||||
|
||||
void SetUp() override {
|
||||
SWalCfg cfg;
|
||||
cfg.rollPeriod = -1;
|
||||
cfg.segSize = -1;
|
||||
cfg.committed =-1;
|
||||
cfg.retentionPeriod = -1;
|
||||
cfg.retentionSize = 0;
|
||||
cfg.rollPeriod = 0;
|
||||
cfg.vgId = 1;
|
||||
cfg.level = TAOS_WAL_SKIP;
|
||||
pWal = walOpen(pathName, &cfg);
|
||||
ASSERT(pWal != NULL);
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
walClose(pWal);
|
||||
pWal = NULL;
|
||||
}
|
||||
|
||||
SWal* pWal = NULL;
|
||||
const char* pathName = TD_TMP_DIR_PATH "wal_test";
|
||||
};
|
||||
|
||||
TEST_F(WalSkipLevel, restart) {
|
||||
walResetEnv();
|
||||
int code;
|
||||
|
@ -534,3 +750,14 @@ TEST_F(WalSkipLevel, roll) {
|
|||
code = walEndSnapshot(pWal);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
||||
|
||||
TEST_F(WalEncrypted, write) {
|
||||
int code;
|
||||
for (int i = 0; i < 100; i++) {
|
||||
code = walAppendLog(pWal, i, i + 1, syncMeta, (void*)ranStr, ranStrLen);
|
||||
ASSERT_EQ(code, 0);
|
||||
ASSERT_EQ(pWal->vers.lastVer, i);
|
||||
}
|
||||
code = walSaveMeta(pWal);
|
||||
ASSERT_EQ(code, 0);
|
||||
}
|
|
@ -517,7 +517,7 @@ int32_t cfgSetItemVal(SConfigItem *pItem, const char *name, const char *value, E
|
|||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
|
||||
if (pItem == NULL) {
|
||||
TAOS_RETURN(TSDB_CODE_INVALID_CFG);
|
||||
TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
|
||||
}
|
||||
switch (pItem->dtype) {
|
||||
case CFG_DTYPE_BOOL: {
|
||||
|
@ -627,6 +627,7 @@ int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *p
|
|||
cfgUnLock(pCfg);
|
||||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
if ((pItem->category == CFG_CATEGORY_GLOBAL) && alterType == CFG_ALTER_DNODE) {
|
||||
uError("failed to config:%s, not support update global config on only one dnode", name);
|
||||
cfgUnLock(pCfg);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <iostream>
|
||||
#include "osFile.h"
|
||||
#include "tconfig.h"
|
||||
|
||||
class CfgTest : public ::testing::Test {
|
||||
|
@ -35,6 +37,9 @@ TEST_F(CfgTest, 01_Str) {
|
|||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_ENV_CMD), "env_cmd");
|
||||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_APOLLO_URL), "apollo_url");
|
||||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_ARG_LIST), "arg_list");
|
||||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_TAOS_OPTIONS), "taos_options");
|
||||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_ALTER_CLIENT_CMD), "alter_client_cmd");
|
||||
EXPECT_STREQ(cfgStypeStr(CFG_STYPE_ALTER_SERVER_CMD), "alter_server_cmd");
|
||||
EXPECT_STREQ(cfgStypeStr(ECfgSrcType(1024)), "invalid");
|
||||
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_NONE), "none");
|
||||
|
@ -47,6 +52,10 @@ TEST_F(CfgTest, 01_Str) {
|
|||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DOUBLE), "double");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_LOCALE), "locale");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_CHARSET), "charset");
|
||||
EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_TIMEZONE), "timezone");
|
||||
EXPECT_STREQ(cfgDtypeStr(ECfgDataType(1024)), "invalid");
|
||||
}
|
||||
|
||||
|
@ -57,12 +66,18 @@ TEST_F(CfgTest, 02_Basic) {
|
|||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddDir(pConfig, "test_dir", TD_TMP_DIR_PATH, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 6, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 21, 0, 16, 0, 1, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0, 1, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 21, 0, 16, 0, 2, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0, 2, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 21, 0, 16, 0, 6, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0, 6, 0), 0);
|
||||
EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0, 6, 0), 0);
|
||||
EXPECT_EQ(cfgAddDir(pConfig, "test_dir", TD_TMP_DIR_PATH, 0, 6, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgGetSize(pConfig), 6);
|
||||
|
||||
|
@ -115,12 +130,16 @@ TEST_F(CfgTest, 02_Basic) {
|
|||
EXPECT_EQ(pItem->dtype, CFG_DTYPE_INT32);
|
||||
EXPECT_STREQ(pItem->name, "test_int32");
|
||||
EXPECT_EQ(pItem->i32, 1);
|
||||
code = cfgSetItem(pConfig, "test_int32", "21", CFG_STYPE_DEFAULT, true);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
pItem = cfgGetItem(pConfig, "test_int64");
|
||||
EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT);
|
||||
EXPECT_EQ(pItem->dtype, CFG_DTYPE_INT64);
|
||||
EXPECT_STREQ(pItem->name, "test_int64");
|
||||
EXPECT_EQ(pItem->i64, 2);
|
||||
code = cfgSetItem(pConfig, "test_int64", "21", CFG_STYPE_DEFAULT, true);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
pItem = cfgGetItem(pConfig, "test_float");
|
||||
EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT);
|
||||
|
@ -140,5 +159,210 @@ TEST_F(CfgTest, 02_Basic) {
|
|||
EXPECT_STREQ(pItem->name, "test_dir");
|
||||
EXPECT_STREQ(pItem->str, TD_TMP_DIR_PATH);
|
||||
|
||||
code = cfgGetAndSetItem(pConfig, &pItem, "err_cfg", "err_val", CFG_STYPE_DEFAULT, true);
|
||||
ASSERT_EQ(code, TSDB_CODE_CFG_NOT_FOUND);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_int32", "4", false, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_INVALID_CFG);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_int64", "4", true, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_INVALID_CFG);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_bool", "3", false, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_int32", "74", true, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_int64", "74", false, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
code = cfgCheckRangeForDynUpdate(pConfig, "test_float", "74", false, CFG_ALTER_LOCAL);
|
||||
ASSERT_EQ(code, TSDB_CODE_OUT_OF_RANGE);
|
||||
|
||||
cfgCleanup(pConfig);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, initWithArray) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0, 0, 0), 0);
|
||||
EXPECT_EQ(cfgAddDir(pConfig, "test_dir", TD_TMP_DIR_PATH, 0, 0, 0), 0);
|
||||
|
||||
SArray *pArgs = taosArrayInit(6, sizeof(SConfigPair));
|
||||
SConfigPair *pPair = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair->name = "test_bool";
|
||||
pPair->value = "1";
|
||||
taosArrayPush(pArgs, pPair);
|
||||
SConfigPair *pPair1 = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair1->name = "test_int32";
|
||||
pPair1->value = "2";
|
||||
taosArrayPush(pArgs, pPair1);
|
||||
SConfigPair *pPair2 = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair2->name = "test_int64";
|
||||
pPair2->value = "3";
|
||||
taosArrayPush(pArgs, pPair2);
|
||||
SConfigPair *pPair3 = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair3->name = "test_float";
|
||||
pPair3->value = "4";
|
||||
taosArrayPush(pArgs, pPair3);
|
||||
SConfigPair *pPair4 = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair4->name = "test_string";
|
||||
pPair4->value = "5";
|
||||
taosArrayPush(pArgs, pPair4);
|
||||
SConfigPair *pPair5 = (SConfigPair *)taosMemoryMalloc(sizeof(SConfigPair));
|
||||
pPair5->name = "test_dir";
|
||||
pPair5->value = TD_TMP_DIR_PATH;
|
||||
taosArrayPush(pArgs, pPair5);
|
||||
code = cfgLoadFromArray(pConfig, pArgs);
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgDumpItemCategory) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 6, 100), 0);
|
||||
|
||||
SConfigItem *pItem = NULL;
|
||||
pItem = cfgGetItem(pConfig, "test_bool");
|
||||
EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT);
|
||||
EXPECT_EQ(pItem->dtype, CFG_DTYPE_BOOL);
|
||||
EXPECT_STREQ(pItem->name, "test_bool");
|
||||
EXPECT_EQ(pItem->bval, 0);
|
||||
|
||||
EXPECT_EQ(cfgDumpItemCategory(pItem, NULL, 0, 0), TSDB_CODE_INVALID_CFG);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgDumpCfgS3) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
cfgAddInt32(pConfig, "s3MigrateIntervalSec", 60 * 60, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,
|
||||
CFG_CATEGORY_GLOBAL);
|
||||
cfgAddBool(pConfig, "s3MigrateEnabled", 60 * 60, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_GLOBAL);
|
||||
cfgAddString(pConfig, "s3Accesskey", "", CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY, CFG_CATEGORY_GLOBAL);
|
||||
cfgAddString(pConfig, "s3Endpoint", "", CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY, CFG_CATEGORY_GLOBAL);
|
||||
cfgAddString(pConfig, "s3BucketName", "", CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY, CFG_CATEGORY_GLOBAL);
|
||||
cfgAddInt32(pConfig, "s3PageCacheSize", 10, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,
|
||||
CFG_CATEGORY_GLOBAL);
|
||||
cfgAddInt32(pConfig, "s3UploadDelaySec", 10, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,
|
||||
CFG_CATEGORY_GLOBAL);
|
||||
cfgAddDir(pConfig, "scriptDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL);
|
||||
|
||||
cfgDumpCfgS3(pConfig, false, false);
|
||||
|
||||
cfgDumpCfgS3(pConfig, true, true);
|
||||
|
||||
cfgDumpCfgS3(pConfig, false, true);
|
||||
|
||||
cfgDumpCfgS3(pConfig, true, false);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgLoadFromEnvVar) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 6, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 21, 0, 16, 0, 1, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0, 1, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 21, 0, 16, 0, 2, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0, 2, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 21, 0, 16, 0, 6, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0, 6, 0), 0);
|
||||
EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0, 6, 0), 0);
|
||||
EXPECT_EQ(cfgAddDir(pConfig, "test_dir", TD_TMP_DIR_PATH, 0, 6, 0), 0);
|
||||
|
||||
setenv("test_bool", "1", 1);
|
||||
setenv("test_int32", "2", 1);
|
||||
setenv("test_int64", "3", 1);
|
||||
setenv("test_float", "4", 1);
|
||||
setenv("test_string", "5", 1);
|
||||
setenv("test_dir", TD_TMP_DIR_PATH, 1);
|
||||
|
||||
ASSERT_EQ(cfgLoad(pConfig, CFG_STYPE_ENV_VAR, "test_bool"), TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgLoadFromEnvCmd) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0, 6, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 21, 0, 16, 0, 1, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0, 1, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 21, 0, 16, 0, 2, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0, 2, 0), 0);
|
||||
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 21, 0, 16, 0, 6, 0), TSDB_CODE_OUT_OF_RANGE);
|
||||
EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0, 6, 0), 0);
|
||||
EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0, 6, 0), 0);
|
||||
|
||||
const char *envCmd[] = {"test_bool=1", "test_int32=2", "test_int64=3", "test_float=4", "test_string=5", NULL};
|
||||
|
||||
ASSERT_EQ(cfgLoad(pConfig, CFG_STYPE_ENV_CMD, envCmd), TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgLoadFromEnvFile) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
TdFilePtr envFile = NULL;
|
||||
const char *envFilePath = TD_TMP_DIR_PATH "envFile";
|
||||
envFile = taosOpenFile(envFilePath, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND);
|
||||
const char *buf = "test_bool=1\ntest_int32=2\ntest_int64=3\ntest_float=4\ntest_string=5\n";
|
||||
taosWriteFile(envFile, buf, strlen(buf));
|
||||
taosCloseFile(&envFile);
|
||||
ASSERT_EQ(cfgLoad(pConfig, CFG_STYPE_ENV_FILE, envFilePath), TSDB_CODE_SUCCESS);
|
||||
|
||||
taosRemoveFile(envFilePath);
|
||||
}
|
||||
|
||||
TEST_F(CfgTest, cfgLoadFromApollUrl) {
|
||||
SConfig *pConfig = NULL;
|
||||
int32_t code = cfgInit(&pConfig);
|
||||
|
||||
ASSERT_EQ(code, TSDB_CODE_SUCCESS);
|
||||
ASSERT_NE(pConfig, nullptr);
|
||||
|
||||
TdFilePtr jsonFile = NULL;
|
||||
const char *jsonFilePath = TD_TMP_DIR_PATH "envJson.json";
|
||||
jsonFile = taosOpenFile(jsonFilePath, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND);
|
||||
const char *buf =
|
||||
"{\"test_bool\":\"1\",\"test_int32\":\"2\",\"test_int64\":\"3\",\"test_float\":\"4\",\"test_string\":\"5\"}";
|
||||
taosWriteFile(jsonFile, buf, strlen(buf));
|
||||
taosCloseFile(&jsonFile);
|
||||
|
||||
char str[256];
|
||||
snprintf(str, sizeof(str), "jsonFile:%s", jsonFilePath);
|
||||
ASSERT_EQ(cfgLoad(pConfig, CFG_STYPE_APOLLO_URL, str), TSDB_CODE_INVALID_DATA_FMT);
|
||||
|
||||
taosRemoveFile(jsonFilePath);
|
||||
}
|
Loading…
Reference in New Issue