test: add unit test files.
This commit is contained in:
parent
739485a419
commit
3111a01a12
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wwrite-strings"
|
||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
||||
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||
|
||||
#include <libs/stream/tstream.h>
|
||||
#include <libs/transport/trpc.h>
|
||||
#include "../../inc/mndStream.h"
|
||||
|
||||
namespace {
|
||||
SRpcMsg buildHbReq() {
|
||||
SStreamHbMsg msg = {0};
|
||||
msg.vgId = 1;
|
||||
msg.numOfTasks = 5;
|
||||
msg.pTaskStatus = taosArrayInit(4, sizeof(STaskStatusEntry));
|
||||
|
||||
for (int32_t i = 0; i < 4; ++i) {
|
||||
STaskStatusEntry entry = {0};
|
||||
entry.nodeId = i + 1;
|
||||
entry.stage = 1;
|
||||
entry.id.taskId = i + 1;
|
||||
entry.id.streamId = 999;
|
||||
|
||||
if (i == 0) {
|
||||
entry.stage = 4;
|
||||
}
|
||||
|
||||
taosArrayPush(msg.pTaskStatus, &entry);
|
||||
}
|
||||
|
||||
// (p->checkpointId != 0) && p->checkpointFailed
|
||||
// add failed checkpoint info
|
||||
{
|
||||
STaskStatusEntry entry = {0};
|
||||
entry.nodeId = 5;
|
||||
entry.stage = 1;
|
||||
|
||||
entry.id.taskId = 5;
|
||||
entry.id.streamId = 999;
|
||||
|
||||
entry.checkpointId = 1;
|
||||
entry.checkpointFailed = true;
|
||||
|
||||
taosArrayPush(msg.pTaskStatus, &entry);
|
||||
}
|
||||
|
||||
int32_t tlen = 0;
|
||||
int32_t code = 0;
|
||||
SEncoder encoder;
|
||||
void* buf = NULL;
|
||||
SRpcMsg msg1 = {0};
|
||||
msg1.info.noResp = 1;
|
||||
|
||||
tEncodeSize(tEncodeStreamHbMsg, &msg, tlen, code);
|
||||
if (code < 0) {
|
||||
goto _end;
|
||||
}
|
||||
|
||||
buf = rpcMallocCont(tlen);
|
||||
if (buf == NULL) {
|
||||
goto _end;
|
||||
}
|
||||
|
||||
tEncoderInit(&encoder, (uint8_t*)buf, tlen);
|
||||
if ((code = tEncodeStreamHbMsg(&encoder, &msg)) < 0) {
|
||||
rpcFreeCont(buf);
|
||||
goto _end;
|
||||
}
|
||||
tEncoderClear(&encoder);
|
||||
|
||||
initRpcMsg(&msg1, TDMT_MND_STREAM_HEARTBEAT, buf, tlen);
|
||||
|
||||
taosArrayDestroy(msg.pTaskStatus);
|
||||
return msg1;
|
||||
|
||||
_end:
|
||||
return msg1;
|
||||
}
|
||||
|
||||
void setTask(SStreamTask* pTask, int32_t nodeId, int64_t streamId, int32_t taskId) {
|
||||
SStreamExecInfo* pExecNode = &execInfo;
|
||||
|
||||
pTask->id.streamId = streamId;
|
||||
pTask->id.taskId = taskId;
|
||||
pTask->info.nodeId = nodeId;
|
||||
|
||||
STaskId id = {.streamId = pTask->id.streamId, .taskId = pTask->id.taskId};
|
||||
STaskStatusEntry entry = {0};
|
||||
streamTaskStatusInit(&entry, pTask);
|
||||
|
||||
entry.stage = 1;
|
||||
entry.status = TASK_STATUS__READY;
|
||||
|
||||
taosHashPut(pExecNode->pTaskMap, &id, sizeof(id), &entry, sizeof(entry));
|
||||
taosArrayPush(pExecNode->pTaskList, &id);
|
||||
}
|
||||
void initStreamExecInfo() {
|
||||
SStreamExecInfo* pExecNode = &execInfo;
|
||||
|
||||
SStreamTask task = {0};
|
||||
setTask(&task, 1, 999, 1);
|
||||
setTask(&task, 1, 999, 2);
|
||||
setTask(&task, 1, 999, 3);
|
||||
setTask(&task, 1, 999, 4);
|
||||
setTask(&task, 2, 999, 5);
|
||||
}
|
||||
|
||||
void initNodeInfo() {
|
||||
execInfo.pNodeList = taosArrayInit(4, sizeof(SNodeEntry));
|
||||
SNodeEntry entry = {0};
|
||||
entry.nodeId = 2;
|
||||
entry.stageUpdated = true;
|
||||
taosArrayPush(execInfo.pNodeList, &entry);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
||||
TEST(mndHbTest, handle_error_in_hb) {
|
||||
mndInitExecInfo();
|
||||
initStreamExecInfo();
|
||||
initNodeInfo();
|
||||
|
||||
SRpcMsg msg = buildHbReq();
|
||||
int32_t code = mndProcessStreamHb(&msg);
|
||||
|
||||
rpcFreeCont(msg.pCont);
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic pop
|
Loading…
Reference in New Issue