fix error when taos_query_a param is null
c_test missing on linux mem leak wal_test pageBufferTest on linux tfsTest on linux
This commit is contained in:
parent
209ebbde84
commit
355ec86926
|
@ -41,6 +41,7 @@ add_subdirectory(source)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(tools)
|
||||||
add_subdirectory(utils)
|
add_subdirectory(utils)
|
||||||
add_subdirectory(examples/c)
|
add_subdirectory(examples/c)
|
||||||
|
add_subdirectory(tests)
|
||||||
include(${TD_SUPPORT_DIR}/cmake.install)
|
include(${TD_SUPPORT_DIR}/cmake.install)
|
||||||
|
|
||||||
# docs
|
# docs
|
||||||
|
|
|
@ -206,6 +206,7 @@ typedef struct SRequestSendRecvBody {
|
||||||
__taos_async_fn_t fetchFp;
|
__taos_async_fn_t fetchFp;
|
||||||
EQueryExecMode execMode;
|
EQueryExecMode execMode;
|
||||||
void* param;
|
void* param;
|
||||||
|
bool paramCreatedInternal;
|
||||||
SDataBuf requestMsg;
|
SDataBuf requestMsg;
|
||||||
int64_t queryJob; // query job, created according to sql query DAG.
|
int64_t queryJob; // query job, created according to sql query DAG.
|
||||||
int32_t subplanNum;
|
int32_t subplanNum;
|
||||||
|
@ -415,6 +416,7 @@ int32_t buildPreviousRequest(SRequestObj *pRequest, const char* sql, SRequestObj
|
||||||
int32_t prepareAndParseSqlSyntax(SSqlCallbackWrapper **ppWrapper, SRequestObj *pRequest, bool updateMetaForce);
|
int32_t prepareAndParseSqlSyntax(SSqlCallbackWrapper **ppWrapper, SRequestObj *pRequest, bool updateMetaForce);
|
||||||
void returnToUser(SRequestObj* pRequest);
|
void returnToUser(SRequestObj* pRequest);
|
||||||
void stopAllQueries(SRequestObj *pRequest);
|
void stopAllQueries(SRequestObj *pRequest);
|
||||||
|
void doRequestCallback(SRequestObj* pRequest, int32_t code);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -437,7 +437,7 @@ void doDestroyRequest(void *p) {
|
||||||
deregisterRequest(pRequest);
|
deregisterRequest(pRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRequest->syncQuery) {
|
if (pRequest->syncQuery || pRequest->body.paramCreatedInternal) {
|
||||||
if (pRequest->body.param) {
|
if (pRequest->body.param) {
|
||||||
tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem);
|
tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,6 +208,7 @@ int32_t buildRequest(uint64_t connId, const char* sql, int sqlLen, void* param,
|
||||||
tsem_init(&newpParam->sem, 0, 0);
|
tsem_init(&newpParam->sem, 0, 0);
|
||||||
newpParam->pRequest = (*pRequest);
|
newpParam->pRequest = (*pRequest);
|
||||||
param = newpParam;
|
param = newpParam;
|
||||||
|
(*pRequest)->body.paramCreatedInternal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pRequest)->body.param = param;
|
(*pRequest)->body.param = param;
|
||||||
|
@ -336,7 +337,7 @@ static SAppInstInfo* getAppInfo(SRequestObj* pRequest) { return pRequest->pTscOb
|
||||||
void asyncExecLocalCmd(SRequestObj* pRequest, SQuery* pQuery) {
|
void asyncExecLocalCmd(SRequestObj* pRequest, SQuery* pQuery) {
|
||||||
SRetrieveTableRsp* pRsp = NULL;
|
SRetrieveTableRsp* pRsp = NULL;
|
||||||
if (pRequest->validateOnly) {
|
if (pRequest->validateOnly) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, 0);
|
doRequestCallback(pRequest, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,18 +359,18 @@ void asyncExecLocalCmd(SRequestObj* pRequest, SQuery* pQuery) {
|
||||||
pRequest->requestId);
|
pRequest->requestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t asyncExecDdlQuery(SRequestObj* pRequest, SQuery* pQuery) {
|
int32_t asyncExecDdlQuery(SRequestObj* pRequest, SQuery* pQuery) {
|
||||||
if (pRequest->validateOnly) {
|
if (pRequest->validateOnly) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, 0);
|
doRequestCallback(pRequest, 0);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// drop table if exists not_exists_table
|
// drop table if exists not_exists_table
|
||||||
if (NULL == pQuery->pCmdMsg) {
|
if (NULL == pQuery->pCmdMsg) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, 0);
|
doRequestCallback(pRequest, 0);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,7 +385,7 @@ int32_t asyncExecDdlQuery(SRequestObj* pRequest, SQuery* pQuery) {
|
||||||
int64_t transporterId = 0;
|
int64_t transporterId = 0;
|
||||||
int32_t code = asyncSendMsgToServer(pAppInfo->pTransporter, &pMsgInfo->epSet, &transporterId, pSendMsg);
|
int32_t code = asyncSendMsgToServer(pAppInfo->pTransporter, &pMsgInfo->epSet, &transporterId, pSendMsg);
|
||||||
if (code) {
|
if (code) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -913,7 +914,7 @@ void continuePostSubQuery(SRequestObj* pRequest, TAOS_ROW row) {
|
||||||
void returnToUser(SRequestObj* pRequest) {
|
void returnToUser(SRequestObj* pRequest) {
|
||||||
if (pRequest->relation.userRefId == pRequest->self || 0 == pRequest->relation.userRefId) {
|
if (pRequest->relation.userRefId == pRequest->self || 0 == pRequest->relation.userRefId) {
|
||||||
// return to client
|
// return to client
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, pRequest->code);
|
doRequestCallback(pRequest, pRequest->code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -921,7 +922,7 @@ void returnToUser(SRequestObj* pRequest) {
|
||||||
if (pUserReq) {
|
if (pUserReq) {
|
||||||
pUserReq->code = pRequest->code;
|
pUserReq->code = pRequest->code;
|
||||||
// return to client
|
// return to client
|
||||||
pUserReq->body.queryFp(pUserReq->body.param, pUserReq, pUserReq->code);
|
doRequestCallback(pUserReq, pUserReq->code);
|
||||||
releaseRequest(pRequest->relation.userRefId);
|
releaseRequest(pRequest->relation.userRefId);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1031,7 +1032,7 @@ void schedulerExecCb(SExecResult* pResult, void* param, int32_t code) {
|
||||||
pRequest->pWrapper = NULL;
|
pRequest->pWrapper = NULL;
|
||||||
|
|
||||||
// return to client
|
// return to client
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1181,7 +1182,7 @@ static int32_t asyncExecSchQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaDat
|
||||||
pRequest->code = terrno;
|
pRequest->code = terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo not to be released here
|
// todo not to be released here
|
||||||
|
@ -1223,10 +1224,10 @@ void launchAsyncQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaData* pResultM
|
||||||
}
|
}
|
||||||
case QUERY_EXEC_MODE_EMPTY_RESULT:
|
case QUERY_EXEC_MODE_EMPTY_RESULT:
|
||||||
pRequest->type = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
|
pRequest->type = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, 0);
|
doRequestCallback(pRequest, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, -1);
|
doRequestCallback(pRequest, -1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2558,12 +2559,13 @@ static void fetchCallback(void* pResult, void* param, int32_t code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param) {
|
void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param) {
|
||||||
if (pRequest->syncQuery && pRequest->body.param != param) {
|
if ((pRequest->syncQuery || pRequest->body.paramCreatedInternal) && pRequest->body.param != param) {
|
||||||
if (pRequest->body.param) {
|
if (pRequest->body.param) {
|
||||||
tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem);
|
tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem);
|
||||||
}
|
}
|
||||||
taosMemoryFree(pRequest->body.param);
|
taosMemoryFree(pRequest->body.param);
|
||||||
pRequest->syncQuery = false;
|
pRequest->syncQuery = false;
|
||||||
|
pRequest->body.paramCreatedInternal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->body.fetchFp = fp;
|
pRequest->body.fetchFp = fp;
|
||||||
|
@ -2604,3 +2606,11 @@ void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param
|
||||||
|
|
||||||
schedulerFetchRows(pRequest->body.queryJob, &req);
|
schedulerFetchRows(pRequest->body.queryJob, &req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void doRequestCallback(SRequestObj* pRequest, int32_t code) {
|
||||||
|
if (pRequest->body.paramCreatedInternal) {
|
||||||
|
pRequest->body.queryFp(NULL, pRequest, code);
|
||||||
|
} else {
|
||||||
|
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1114,7 +1114,7 @@ static void doAsyncQueryFromParse(SMetaData *pResultMeta, void *param, int32_t c
|
||||||
pRequest->pWrapper = NULL;
|
pRequest->pWrapper = NULL;
|
||||||
terrno = code;
|
terrno = code;
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1131,7 +1131,7 @@ void continueInsertFromCsv(SSqlCallbackWrapper *pWrapper, SRequestObj *pRequest)
|
||||||
pRequest->pWrapper = NULL;
|
pRequest->pWrapper = NULL;
|
||||||
terrno = code;
|
terrno = code;
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1226,7 +1226,7 @@ void doAsyncQuery(SRequestObj *pRequest, bool updateMetaForce) {
|
||||||
terrno = code;
|
terrno = code;
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
tscDebug("call sync query cb with code: %s", tstrerror(code));
|
tscDebug("call sync query cb with code: %s", tstrerror(code));
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1258,7 +1258,7 @@ void doAsyncQuery(SRequestObj *pRequest, bool updateMetaForce) {
|
||||||
|
|
||||||
terrno = code;
|
terrno = code;
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ int32_t genericRspCallback(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
taosMemoryFree(pMsg->pEpSet);
|
taosMemoryFree(pMsg->pEpSet);
|
||||||
taosMemoryFree(pMsg->pData);
|
taosMemoryFree(pMsg->pData);
|
||||||
if (pRequest->body.queryFp != NULL) {
|
if (pRequest->body.queryFp != NULL) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -199,7 +199,7 @@ int32_t processCreateDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRequest->body.queryFp) {
|
if (pRequest->body.queryFp) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,8 @@ int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
setErrno(pRequest, code);
|
setErrno(pRequest, code);
|
||||||
|
|
||||||
if (pRequest->body.queryFp != NULL) {
|
if (pRequest->body.queryFp != NULL) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, pRequest->code);
|
doRequestCallback(pRequest, pRequest->code);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -299,7 +300,7 @@ int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
taosMemoryFree(pMsg->pEpSet);
|
taosMemoryFree(pMsg->pEpSet);
|
||||||
|
|
||||||
if (pRequest->body.queryFp != NULL) {
|
if (pRequest->body.queryFp != NULL) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, pRequest->code);
|
doRequestCallback(pRequest, pRequest->code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -343,7 +344,7 @@ int32_t processCreateSTableRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -380,7 +381,7 @@ int32_t processDropDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
taosMemoryFree(pMsg->pEpSet);
|
taosMemoryFree(pMsg->pEpSet);
|
||||||
|
|
||||||
if (pRequest->body.queryFp != NULL) {
|
if (pRequest->body.queryFp != NULL) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -420,7 +421,7 @@ int32_t processAlterStbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
@ -534,7 +535,7 @@ int32_t processShowVariablesRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
taosMemoryFree(pMsg->pEpSet);
|
taosMemoryFree(pMsg->pEpSet);
|
||||||
|
|
||||||
if (pRequest->body.queryFp != NULL) {
|
if (pRequest->body.queryFp != NULL) {
|
||||||
pRequest->body.queryFp(pRequest->body.param, pRequest, code);
|
doRequestCallback(pRequest, code);
|
||||||
} else {
|
} else {
|
||||||
tsem_post(&pRequest->body.rspSem);
|
tsem_post(&pRequest->body.rspSem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,6 +218,7 @@ TEST_F(TfsTest, 04_File) {
|
||||||
EXPECT_STREQ(outfile.aname, file0.aname);
|
EXPECT_STREQ(outfile.aname, file0.aname);
|
||||||
EXPECT_STREQ(outfile.rname, "fname");
|
EXPECT_STREQ(outfile.rname, "fname");
|
||||||
EXPECT_EQ(outfile.pTfs, pTfs);
|
EXPECT_EQ(outfile.pTfs, pTfs);
|
||||||
|
taosMemoryFree(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -441,4 +441,5 @@ TEST_F(WalRetentionEnv, repairMeta1) {
|
||||||
EXPECT_EQ(newStr[j], pRead->pHead->head.body[j]);
|
EXPECT_EQ(newStr[j], pRead->pHead->head.body[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
walCloseReader(pRead);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,11 +76,6 @@ void fileOperateOnBusy(void *param) {
|
||||||
|
|
||||||
ret = taosUnLockFile(pFile);
|
ret = taosUnLockFile(pFile);
|
||||||
printf("On busy thread unlock file ret:%d\n", ret);
|
printf("On busy thread unlock file ret:%d\n", ret);
|
||||||
#ifdef _TD_DARWIN_64
|
|
||||||
ASSERT_EQ(ret, 0);
|
|
||||||
#else
|
|
||||||
ASSERT_NE(ret, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = taosCloseFile(&pFile);
|
ret = taosCloseFile(&pFile);
|
||||||
printf("On busy thread close file ret:%d\n", ret);
|
printf("On busy thread close file ret:%d\n", ret);
|
||||||
|
@ -98,6 +93,8 @@ TEST(osTest, osFile) {
|
||||||
ASSERT_NE(pOutFD, nullptr);
|
ASSERT_NE(pOutFD, nullptr);
|
||||||
printf("create file success\n");
|
printf("create file success\n");
|
||||||
|
|
||||||
|
taosCloseFile(&pOutFD);
|
||||||
|
|
||||||
TdFilePtr pFile = taosOpenFile(fname, TD_FILE_CREATE | TD_FILE_WRITE);
|
TdFilePtr pFile = taosOpenFile(fname, TD_FILE_CREATE | TD_FILE_WRITE);
|
||||||
printf("open file\n");
|
printf("open file\n");
|
||||||
ASSERT_NE(pFile, nullptr);
|
ASSERT_NE(pFile, nullptr);
|
||||||
|
|
|
@ -217,6 +217,7 @@ void testFlushAndReadBackBuffer() {
|
||||||
pPg = (SFilePage*)getBufPage(pBuf, pageId);
|
pPg = (SFilePage*)getBufPage(pBuf, pageId);
|
||||||
ASSERT_TRUE(checkBufVarData(pPg, rowData + 3, len));
|
ASSERT_TRUE(checkBufVarData(pPg, rowData + 3, len));
|
||||||
destroyDiskbasedBuf(pBuf);
|
destroyDiskbasedBuf(pBuf);
|
||||||
|
taosMemoryFree(rowData);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#ADD_SUBDIRECTORY(examples/c)
|
|
||||||
ADD_SUBDIRECTORY(tsim)
|
if(${BUILD_TEST})
|
||||||
ADD_SUBDIRECTORY(test/c)
|
add_subdirectory(taosc_test)
|
||||||
#ADD_SUBDIRECTORY(comparisonTest/tdengine)
|
endif(${BUILD_TEST})
|
|
@ -0,0 +1,28 @@
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8...3.20)
|
||||||
|
PROJECT(TDengine)
|
||||||
|
|
||||||
|
FIND_PATH(HEADER_GTEST_INCLUDE_DIR gtest.h /usr/include/gtest /usr/local/include/gtest /usr/local/taos/include)
|
||||||
|
FIND_LIBRARY(LIB_GTEST_STATIC_DIR libgtest.a /usr/lib/ /usr/local/lib /usr/lib64 /usr/local/taos/driver/)
|
||||||
|
FIND_LIBRARY(LIB_GTEST_SHARED_DIR libgtest.so /usr/lib/ /usr/local/lib /usr/lib64 /usr/local/taos/driver/)
|
||||||
|
|
||||||
|
IF (HEADER_GTEST_INCLUDE_DIR AND (LIB_GTEST_STATIC_DIR OR LIB_GTEST_SHARED_DIR))
|
||||||
|
MESSAGE(STATUS "gTest library found, build os test")
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(${HEADER_GTEST_INCLUDE_DIR})
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
aux_source_directory(src OS_SRC)
|
||||||
|
# taoscTest
|
||||||
|
add_executable(taoscTest "taoscTest.cpp")
|
||||||
|
target_link_libraries(taoscTest taos os gtest_main)
|
||||||
|
target_include_directories(
|
||||||
|
taoscTest
|
||||||
|
PUBLIC "${TD_SOURCE_DIR}/include/os"
|
||||||
|
)
|
||||||
|
add_test(
|
||||||
|
NAME taoscTest
|
||||||
|
COMMAND taoscTest
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* 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 <gtest/gtest.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#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"
|
||||||
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat"
|
||||||
|
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
|
||||||
|
#pragma GCC diagnostic ignored "-Wpointer-arith"
|
||||||
|
|
||||||
|
#include "os.h"
|
||||||
|
#include "taos.h"
|
||||||
|
|
||||||
|
class taoscTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
static void SetUpTestCase() {
|
||||||
|
printf("start test setup.\n");
|
||||||
|
TAOS* taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_TRUE(taos != nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* res = taos_query(taos, "drop database IF EXISTS taosc_test_db;");
|
||||||
|
if (taos_errno(res) != 0) {
|
||||||
|
printf("error in drop database taosc_test_db, reason:%s\n", taos_errstr(res));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
taosSsleep(5);
|
||||||
|
taosSsleep(3);
|
||||||
|
taos_free_result(res);
|
||||||
|
printf("drop database taosc_test_db,finished.\n");
|
||||||
|
|
||||||
|
res = taos_query(taos, "create database taosc_test_db;");
|
||||||
|
if (taos_errno(res) != 0) {
|
||||||
|
printf("error in create database taosc_test_db, reason:%s\n", taos_errstr(res));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
taosSsleep(5);
|
||||||
|
taos_free_result(res);
|
||||||
|
printf("create database taosc_test_db,finished.\n");
|
||||||
|
|
||||||
|
taos_close(taos);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TearDownTestCase() {}
|
||||||
|
|
||||||
|
void SetUp() override {}
|
||||||
|
|
||||||
|
void TearDown() override {}
|
||||||
|
};
|
||||||
|
|
||||||
|
tsem_t query_sem;
|
||||||
|
int getRecordCounts = 0;
|
||||||
|
|
||||||
|
void fetchCallback(void* param, void* res, int32_t numOfRow) {
|
||||||
|
ASSERT_TRUE(numOfRow >= 0);
|
||||||
|
if (numOfRow == 0) {
|
||||||
|
printf("completed\n");
|
||||||
|
taos_free_result(res);
|
||||||
|
tsem_post(&query_sem);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("numOfRow = %d \n", numOfRow);
|
||||||
|
int numFields = taos_num_fields(res);
|
||||||
|
TAOS_FIELD* fields = taos_fetch_fields(res);
|
||||||
|
|
||||||
|
for (int i = 0; i < numOfRow; ++i) {
|
||||||
|
TAOS_ROW row = taos_fetch_row(res);
|
||||||
|
char temp[256] = {0};
|
||||||
|
taos_print_row(temp, row, fields, numFields);
|
||||||
|
// printf("%s\n", temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
getRecordCounts += numOfRow;
|
||||||
|
taos_fetch_raw_block_a(res, fetchCallback, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
void queryCallback(void* param, void* res, int32_t code) {
|
||||||
|
ASSERT_TRUE(code == 0);
|
||||||
|
ASSERT_TRUE(param == NULL);
|
||||||
|
taos_fetch_raw_block_a(res, fetchCallback, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(taoscTest, Connect) {
|
||||||
|
char sql[1024] = {0};
|
||||||
|
int32_t code = 0;
|
||||||
|
TAOS* taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_TRUE(taos != nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* res = taos_query(taos, "create table taosc_test_db.taosc_test_table (ts TIMESTAMP, val INT)");
|
||||||
|
if (taos_errno(res) != 0) {
|
||||||
|
printf("error in table database taosc_test_table, reason:%s\n", taos_errstr(res));
|
||||||
|
}
|
||||||
|
ASSERT_TRUE(taos_errno(res) == 0);
|
||||||
|
taos_free_result(res);
|
||||||
|
taosSsleep(2);
|
||||||
|
|
||||||
|
int insertCounts = 10000;
|
||||||
|
for (int i = 0; i < insertCounts; i++) {
|
||||||
|
char sql[128];
|
||||||
|
sprintf(sql, "insert into taosc_test_db.taosc_test_table values(now() + %ds, %d)", i, i);
|
||||||
|
res = taos_query(taos, sql);
|
||||||
|
ASSERT_TRUE(taos_errno(res) == 0);
|
||||||
|
taos_free_result(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
tsem_init(&query_sem, 0, 0);
|
||||||
|
taos_query_a(taos, "select * from taosc_test_db.taosc_test_table;", queryCallback, NULL);
|
||||||
|
tsem_wait(&query_sem);
|
||||||
|
|
||||||
|
ASSERT_EQ(getRecordCounts, insertCounts);
|
||||||
|
taos_close(taos);
|
||||||
|
|
||||||
|
printf("Connect test finished.\n");
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ function usage() {
|
||||||
echo -e "\t -h help"
|
echo -e "\t -h help"
|
||||||
}
|
}
|
||||||
|
|
||||||
ent=0
|
ent=1
|
||||||
while getopts "eh" opt; do
|
while getopts "eh" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
e)
|
e)
|
||||||
|
@ -24,6 +24,8 @@ while getopts "eh" opt; do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
script_dir=`dirname $0`
|
script_dir=`dirname $0`
|
||||||
cd ${script_dir}
|
cd ${script_dir}
|
||||||
PWD=`pwd`
|
PWD=`pwd`
|
||||||
|
@ -34,6 +36,13 @@ else
|
||||||
cd ../../../debug
|
cd ../../../debug
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
pgrep taosd || taosd >> /dev/null 2>&1 &
|
||||||
|
pgrep taosadapter || taosadapter >> /dev/null 2>&1
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
ctest -j8
|
ctest -j8
|
||||||
ret=$?
|
ret=$?
|
||||||
exit $ret
|
exit $ret
|
||||||
|
|
Loading…
Reference in New Issue