test: add unitest for transaction
This commit is contained in:
parent
bd817f1a6f
commit
80bb3d6e54
|
@ -24,9 +24,12 @@ extern "C" {
|
|||
|
||||
int32_t mndInitUser(SMnode *pMnode);
|
||||
void mndCleanupUser(SMnode *pMnode);
|
||||
SUserObj *mndAcquireUser(SMnode *pMnode, char *userName);
|
||||
SUserObj *mndAcquireUser(SMnode *pMnode, const char *userName);
|
||||
void mndReleaseUser(SMnode *pMnode, SUserObj *pUser);
|
||||
|
||||
// for trans test
|
||||
SSdbRaw *mndUserActionEncode(SUserObj *pUser);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#define USER_RESERVE_SIZE 64
|
||||
|
||||
static int32_t mndCreateDefaultUsers(SMnode *pMnode);
|
||||
static SSdbRaw *mndUserActionEncode(SUserObj *pUser);
|
||||
static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw);
|
||||
static int32_t mndUserActionInsert(SSdb *pSdb, SUserObj *pUser);
|
||||
static int32_t mndUserActionDelete(SSdb *pSdb, SUserObj *pUser);
|
||||
|
@ -90,7 +89,7 @@ static int32_t mndCreateDefaultUsers(SMnode *pMnode) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static SSdbRaw *mndUserActionEncode(SUserObj *pUser) {
|
||||
SSdbRaw *mndUserActionEncode(SUserObj *pUser) {
|
||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
||||
int32_t numOfReadDbs = taosHashGetSize(pUser->readDbs);
|
||||
|
@ -238,7 +237,7 @@ static int32_t mndUserActionUpdate(SSdb *pSdb, SUserObj *pOld, SUserObj *pNew) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
SUserObj *mndAcquireUser(SMnode *pMnode, char *userName) {
|
||||
SUserObj *mndAcquireUser(SMnode *pMnode, const char *userName) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
SUserObj *pUser = sdbAcquire(pSdb, SDB_USER, userName);
|
||||
if (pUser == NULL) {
|
||||
|
|
|
@ -1,11 +1,37 @@
|
|||
aux_source_directory(. MNODE_TRANS_TEST_SRC)
|
||||
add_executable(transTest ${MNODE_TRANS_TEST_SRC})
|
||||
add_executable(transTest1 "")
|
||||
target_sources(transTest1
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/trans1.cpp"
|
||||
)
|
||||
target_link_libraries(
|
||||
transTest
|
||||
transTest1
|
||||
PUBLIC sut
|
||||
)
|
||||
|
||||
add_test(
|
||||
NAME transTest
|
||||
COMMAND transTest
|
||||
target_include_directories(
|
||||
transTest1
|
||||
PUBLIC "${TD_SOURCE_DIR}/include/dnode/mnode"
|
||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../inc"
|
||||
)
|
||||
add_test(
|
||||
NAME transTest1
|
||||
COMMAND transTest1
|
||||
)
|
||||
|
||||
add_executable(transTest2 "")
|
||||
target_sources(transTest2
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/trans2.cpp"
|
||||
)
|
||||
target_link_libraries(
|
||||
transTest2
|
||||
PUBLIC dnode mnode gtest_main
|
||||
)
|
||||
target_include_directories(
|
||||
transTest2
|
||||
PUBLIC "${TD_SOURCE_DIR}/include/dnode/mnode"
|
||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../inc"
|
||||
)
|
||||
add_test(
|
||||
NAME transTest2
|
||||
COMMAND transTest2
|
||||
)
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
|
||||
#include "sut.h"
|
||||
|
||||
class MndTestTrans : public ::testing::Test {
|
||||
class MndTestTrans1 : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
test.Init("/tmp/mnode_test_trans", 9013);
|
||||
test.Init("/tmp/mnode_test_trans1", 9013);
|
||||
const char* fqdn = "localhost";
|
||||
const char* firstEp = "localhost:9013";
|
||||
server2.Start("/tmp/mnode_test_trans2", fqdn, 9020, firstEp);
|
||||
|
@ -26,7 +26,7 @@ class MndTestTrans : public ::testing::Test {
|
|||
}
|
||||
|
||||
static void KillThenRestartServer() {
|
||||
char file[PATH_MAX] = "/tmp/mnode_test_trans/mnode/data/sdb.data";
|
||||
char file[PATH_MAX] = "/tmp/mnode_test_trans1/mnode/data/sdb.data";
|
||||
TdFilePtr pFile = taosOpenFile(file, TD_FILE_READ);
|
||||
int32_t size = 3 * 1024 * 1024;
|
||||
void* buffer = taosMemoryMalloc(size);
|
||||
|
@ -60,10 +60,10 @@ class MndTestTrans : public ::testing::Test {
|
|||
void TearDown() override {}
|
||||
};
|
||||
|
||||
Testbase MndTestTrans::test;
|
||||
TestServer MndTestTrans::server2;
|
||||
Testbase MndTestTrans1::test;
|
||||
TestServer MndTestTrans1::server2;
|
||||
|
||||
TEST_F(MndTestTrans, 00_Create_User_Crash) {
|
||||
TEST_F(MndTestTrans1, 00_Create_User_Crash) {
|
||||
{
|
||||
test.SendShowReq(TSDB_MGMT_TABLE_TRANS, "trans", "");
|
||||
EXPECT_EQ(test.GetShowRows(), 0);
|
||||
|
@ -83,7 +83,7 @@ TEST_F(MndTestTrans, 00_Create_User_Crash) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(MndTestTrans, 01_Create_User_Crash) {
|
||||
TEST_F(MndTestTrans1, 01_Create_User_Crash) {
|
||||
{
|
||||
SCreateUserReq createReq = {0};
|
||||
strcpy(createReq.user, "u1");
|
||||
|
@ -107,7 +107,7 @@ TEST_F(MndTestTrans, 01_Create_User_Crash) {
|
|||
EXPECT_EQ(test.GetShowRows(), 2);
|
||||
}
|
||||
|
||||
TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
||||
TEST_F(MndTestTrans1, 02_Create_Qnode1_Crash) {
|
||||
{
|
||||
SMCreateQnodeReq createReq = {0};
|
||||
createReq.dnodeId = 1;
|
||||
|
@ -142,7 +142,7 @@ TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||
TEST_F(MndTestTrans1, 03_Create_Qnode2_Crash) {
|
||||
{
|
||||
SCreateDnodeReq createReq = {0};
|
||||
strcpy(createReq.fqdn, "localhost");
|
|
@ -0,0 +1,110 @@
|
|||
/**
|
||||
* @file trans.cpp
|
||||
* @author slguan (slguan@taosdata.com)
|
||||
* @brief MNODE module trans tests
|
||||
* @version 1.0
|
||||
* @date 2022-05-02
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "mndTrans.h"
|
||||
#include "mndUser.h"
|
||||
#include "tcache.h"
|
||||
|
||||
void reportStartup(SMgmtWrapper *pWrapper, const char *name, const char *desc) {}
|
||||
|
||||
class MndTestTrans2 : public ::testing::Test {
|
||||
protected:
|
||||
static void SetUpTestSuite() {
|
||||
dDebugFlag = 143;
|
||||
vDebugFlag = 0;
|
||||
mDebugFlag = 143;
|
||||
cDebugFlag = 0;
|
||||
jniDebugFlag = 0;
|
||||
tmrDebugFlag = 135;
|
||||
uDebugFlag = 135;
|
||||
rpcDebugFlag = 143;
|
||||
qDebugFlag = 0;
|
||||
wDebugFlag = 0;
|
||||
sDebugFlag = 0;
|
||||
tsdbDebugFlag = 0;
|
||||
tsLogEmbedded = 1;
|
||||
tsAsyncLog = 0;
|
||||
|
||||
const char *logpath = "/tmp/td";
|
||||
taosRemoveDir(logpath);
|
||||
taosMkDir(logpath);
|
||||
tstrncpy(tsLogDir, logpath, PATH_MAX);
|
||||
if (taosInitLog("taosdlog", 1) != 0) {
|
||||
printf("failed to init log file\n");
|
||||
}
|
||||
|
||||
walInit();
|
||||
|
||||
static SMsgCb msgCb = {0};
|
||||
msgCb.reportStartupFp = reportStartup;
|
||||
msgCb.pWrapper = (SMgmtWrapper *)(&msgCb); // hack
|
||||
tmsgSetDefaultMsgCb(&msgCb);
|
||||
|
||||
SMnodeOpt opt = {0};
|
||||
opt.deploy = 1;
|
||||
opt.replica = 1;
|
||||
opt.replicas[0].id = 1;
|
||||
opt.replicas[0].port = 9040;
|
||||
strcpy(opt.replicas[0].fqdn, "localhost");
|
||||
opt.msgCb = msgCb;
|
||||
const char *mnodepath = "/tmp/mnode_test_trans";
|
||||
pMnode = mndOpen(mnodepath, &opt);
|
||||
}
|
||||
|
||||
static void TearDownTestSuite() {
|
||||
mndClose(pMnode);
|
||||
walCleanUp();
|
||||
taosCloseLog();
|
||||
taosStopCacheRefreshWorker();
|
||||
}
|
||||
|
||||
static SMnode *pMnode;
|
||||
|
||||
public:
|
||||
void SetUp() override {}
|
||||
void TearDown() override {}
|
||||
|
||||
void CreateUser(const char *user) {
|
||||
SUserObj userObj = {0};
|
||||
taosEncryptPass_c((uint8_t *)"taosdata", strlen("taosdata"), userObj.pass);
|
||||
tstrncpy(userObj.user, user, TSDB_USER_LEN);
|
||||
tstrncpy(userObj.acct, "root", TSDB_USER_LEN);
|
||||
userObj.createdTime = taosGetTimestampMs();
|
||||
userObj.updateTime = userObj.createdTime;
|
||||
userObj.superUser = 1;
|
||||
|
||||
SRpcMsg rpcMsg = {0};
|
||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_TYPE_CREATE_USER, &rpcMsg);
|
||||
SSdbRaw *pRedoRaw = mndUserActionEncode(&userObj);
|
||||
mndTransAppendRedolog(pTrans, pRedoRaw);
|
||||
sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY);
|
||||
|
||||
char *param = strdup("====> test param <=====");
|
||||
mndTransSetCb(pTrans, TEST_TRANS_START_FUNC, TEST_TRANS_STOP_FUNC, param, strlen(param) + 1);
|
||||
|
||||
mndTransPrepare(pMnode, pTrans);
|
||||
mndTransDrop(pTrans);
|
||||
}
|
||||
};
|
||||
|
||||
SMnode *MndTestTrans2::pMnode;
|
||||
|
||||
TEST_F(MndTestTrans2, 01_CbFunc) {
|
||||
ASSERT_NE(pMnode, nullptr);
|
||||
|
||||
const char *user1 = "test1";
|
||||
CreateUser(user1);
|
||||
|
||||
SUserObj *pUser1 = mndAcquireUser(pMnode, user1);
|
||||
ASSERT_NE(pUser1, nullptr);
|
||||
}
|
Loading…
Reference in New Issue