diff --git a/.travis.yml b/.travis.yml index 73d2af4d025790936025819a1b600452fc01158e..994928bb01b1ec3676c2168625cd5f68af21bb43 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,10 +24,11 @@ matrix: - python-setuptools - python3-pip - python3-setuptools + - valgrind before_install: - sudo apt update -y -qq - - sudo apt install -y net-tools python-pip python-setuptools python3-pip python3-setuptools + - sudo apt install -y net-tools python-pip python-setuptools python3-pip python3-setuptools valgrind before_script: - cd ${TRAVIS_BUILD_DIR} @@ -43,16 +44,32 @@ matrix: case $TRAVIS_OS_NAME in linux) cd ${TRAVIS_BUILD_DIR}/debug - sudo make install || exit $? + sudo make install || travis_terminate $? pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/ pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/ cd ${TRAVIS_BUILD_DIR}/tests - bash ./test-all.sh + ./test-all.sh || travis_terminate $? - if [ "$?" -ne "0" ]; then - exit $? + cd ${TRAVIS_BUILD_DIR}/tests/pytest + ./simpletest.sh -g 2>&1 | tee mem-error-out.txt + sleep 1 + + # Color setting + RED='\033[0;31m' + GREEN='\033[1;32m' + GREEN_DARK='\033[0;32m' + GREEN_UNDERLINE='\033[4;32m' + NC='\033[0m' + + memError=`grep -m 1 'ERROR SUMMARY' mem-error-out.txt | awk '{print $4}'` + + if [ -n "$memError" ]; then + if [ "$memError" -gt 23 ]; then + echo -e "${RED} ## Memory errors number valgrind reports is $memError. More than our threshold! ## ${NC} " + travis_terminate $memError + fi fi ;; @@ -74,12 +91,12 @@ matrix: # GitHub project metadata # ** specific to your project ** project: - name: sangshuduo/TDengine + name: TDengine version: 2.x - description: sangshuduo/TDengine + description: taosdata/TDengine # Where email notification of build analysis results will be sent - notification_email: sangshuduo@gmail.com + notification_email: sdsang@taosdata.com # Commands to prepare for build_command # ** likely specific to your build ** @@ -87,7 +104,7 @@ matrix: # The command that will be added as an argument to "cov-build" to compile your project for analysis, # ** likely specific to your build ** - build_command: cmake --build . + build_command: make # Pattern to match selecting branches that will run analysis. We recommend leaving this set to 'coverity_scan'. # Take care in resource usage, and consider the build frequency allowances per @@ -132,22 +149,25 @@ matrix: case $TRAVIS_OS_NAME in linux) cd ${TRAVIS_BUILD_DIR}/debug - sudo make install || exit $? + sudo make install || travis_terminate $? pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/ pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/ cd ${TRAVIS_BUILD_DIR}/tests - bash ./test-all.sh + ./test-all.sh if [ "$?" -ne "0" ]; then - exit $? + travis_terminate $? fi + sudo pkill taosd + sleep 1 + cd ${TRAVIS_BUILD_DIR} lcov -d . --capture --rc lcov_branch_coverage=1 -o coverage.info - lcov -l --rc lcov_branch_coverage=1 coverage.info || exit $? + lcov -l --rc lcov_branch_coverage=1 coverage.info || travis_terminate $? gem install coveralls-lcov @@ -163,7 +183,6 @@ matrix: echo -e "${GREEN} ## Uploaded to Coveralls.io! ## ${NC}" else echo -e "${RED} ## Coveralls.io not collect coverage report! ## ${NC} " - exit $? fi bash <(curl -s https://codecov.io/bash) -y .codecov.yml -f coverage.info @@ -171,7 +190,6 @@ matrix: echo -e "${GREEN} ## Uploaded to Codecov! ## ${NC} " else echo -e "${RED} ## Codecov did not collect coverage report! ## ${NC} " - exit $? fi ;; diff --git a/src/query/tests/astTest.cpp b/src/query/tests/astTest.cpp index 0f41ebea2667c1715d22e98a5968bc4ce6ad3792..c926c9e7b9e4ac347e42cac1891b2d7110a2063e 100644 --- a/src/query/tests/astTest.cpp +++ b/src/query/tests/astTest.cpp @@ -21,21 +21,21 @@ static void initSchema(SSchema *pSchema, int32_t numOfCols); static void initSchema_binary(SSchema *schema, int32_t numOfCols); -static tSkipList *createSkipList(SSchema *pSchema, int32_t numOfTags); -static tSkipList *createSkipList_binary(SSchema *pSchema, int32_t numOfTags); +static SSkipList *createSkipList(SSchema *pSchema, int32_t numOfTags); +static SSkipList *createSkipList_binary(SSchema *pSchema, int32_t numOfTags); -static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, tSkipList *pSkipList, ResultObj *expectedVal); +static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, SSkipList *pSkipList, ResultObj *expectedVal); -static void dropMeter(tSkipList *pSkipList); +static void dropMeter(SSkipList *pSkipList); -static void Right2LeftTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList); +static void Right2LeftTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList); -static void Left2RightTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList); +static void Left2RightTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList); -static void IllegalExprTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList); +static void IllegalExprTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList); -static void Left2RightTest_binary(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList); -static void Right2LeftTest_binary(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList); +static void Left2RightTest_binary(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList); +static void Right2LeftTest_binary(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList); void setValue(ResultObj *pResult, int32_t num, char **val) { pResult->numOfResult = num; @@ -112,7 +112,7 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { strcpy(schema[7].name, "h"); } -// static void addOneNode(SSchema *pSchema, int32_t tagsLen, tSkipList *pSkipList, +// static void addOneNode(SSchema *pSchema, int32_t tagsLen, SSkipList *pSkipList, // char *meterId, int32_t a, double b, char *c, int64_t d, int16_t e, int8_t f, float g, // bool h, int32_t numOfTags) { // STabObj *pMeter = calloc(1, sizeof(STabObj)); @@ -146,11 +146,11 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { // offset += pSchema[6].bytes; // *(int8_t *) (tags + offset) = h ? 1 : 0; // -// tSkipListKey pKey = tSkipListCreateKey(pSchema[0].type, tags, pSchema[0].bytes); -// tSkipListPut(pSkipList, pMeter, &pKey, 1); +// SSkipListKey pKey = SSkipListCreateKey(pSchema[0].type, tags, pSchema[0].bytes); +// SSkipListPut(pSkipList, pMeter, &pKey, 1); //} // -// static void addOneNode_binary(SSchema *pSchema, int32_t tagsLen, tSkipList *pSkipList, +// static void addOneNode_binary(SSchema *pSchema, int32_t tagsLen, SSkipList *pSkipList, // char *meterId, int32_t a, double b, char *c, int64_t d, int16_t e, int8_t f, float g, // bool h, int32_t numOfTags) { // STabObj *pMeter = calloc(1, sizeof(STabObj)); @@ -183,16 +183,16 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { // offset += pSchema[6].bytes; // *(int8_t *) (tags + offset) = h ? 1 : 0; // -// tSkipListKey pKey = tSkipListCreateKey(pSchema[0].type, tags, pSchema[0].bytes); -// tSkipListPut(pSkipList, pMeter, &pKey, 1); -// tSkipListDestroyKey(&pKey); +// SSkipListKey pKey = SSkipListCreateKey(pSchema[0].type, tags, pSchema[0].bytes); +// SSkipListPut(pSkipList, pMeter, &pKey, 1); +// SSkipListDestroyKey(&pKey); //} -// static void dropMeter(tSkipList *pSkipList) { -// tSkipListNode **pRes = NULL; -// int32_t num = tSkipListIterateList(pSkipList, &pRes, NULL, NULL); +// static void dropMeter(SSkipList *pSkipList) { +// SSkipListNode **pRes = NULL; +// int32_t num = SSkipListIterateList(pSkipList, &pRes, NULL, NULL); // for (int32_t i = 0; i < num; ++i) { -// tSkipListNode *pNode = pRes[i]; +// SSkipListNode *pNode = pRes[i]; // STabObj *pMeter = (STabObj *) pNode->pData; // free(pMeter->pTagData); // free(pMeter); @@ -201,13 +201,13 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { // free(pRes); //} -// static tSkipList *createSkipList(SSchema *pSchema, int32_t numOfTags) { +// static SSkipList *createSkipList(SSchema *pSchema, int32_t numOfTags) { // int32_t tagsLen = 0; // for (int32_t i = 0; i < numOfTags; ++i) { // tagsLen += pSchema[i].bytes; // } // -// tSkipList *pSkipList = tSkipListCreate(10, pSchema[0].type, 4); +// SSkipList *pSkipList = SSkipListCreate(10, pSchema[0].type, 4); // // addOneNode(pSchema, tagsLen, pSkipList, "tm0\0", 0, 10.5, "abc", 1000, -10000, -20, 1.0, true, 8); // addOneNode(pSchema, tagsLen, pSkipList, "tm1\0", 1, 20.5, "def", 1100, -10500, -30, 2.0, false, 8); @@ -220,13 +220,13 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { // return pSkipList; //} // -// static tSkipList *createSkipList_binary(SSchema *pSchema, int32_t numOfTags) { +// static SSkipList *createSkipList_binary(SSchema *pSchema, int32_t numOfTags) { // int32_t tagsLen = 0; // for (int32_t i = 0; i < numOfTags; ++i) { // tagsLen += pSchema[i].bytes; // } // -// tSkipList *pSkipList = tSkipListCreate(10, pSchema[0].type, 4); +// SSkipList *pSkipList = SSkipListCreate(10, pSchema[0].type, 4); // // addOneNode_binary(pSchema, tagsLen, pSkipList, "tm0\0", 0, 10.5, "abc", 1000, -10000, -20, 1.0, true, 8); // addOneNode_binary(pSchema, tagsLen, pSkipList, "tm1\0", 1, 20.5, "def", 1100, -10500, -30, 2.0, false, 8); @@ -239,7 +239,7 @@ static void initSchema(SSchema *schema, int32_t numOfCols) { // return pSkipList; //} -static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, tSkipList *pSkipList, ResultObj *pResult) { +static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, SSkipList *pSkipList, ResultObj *pResult) { tExprNode *pExpr = NULL; tSQLBinaryExprFromString(&pExpr, schema, numOfCols, sql, strlen(sql)); @@ -255,7 +255,7 @@ static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, tSkipLis printf("expr is: %s\n", str); SArray *result = NULL; - // tExprTreeTraverse(pExpr, pSkipList, result, tSkipListNodeFilterCallback, &result); + // tExprTreeTraverse(pExpr, pSkipList, result, SSkipListNodeFilterCallback, &result); // printf("the result is:%lld\n", result.num); // // bool findResult = false; @@ -277,7 +277,7 @@ static void testQueryStr(SSchema *schema, int32_t numOfCols, char *sql, tSkipLis tExprTreeDestroy(&pExpr, NULL); } -static void Left2RightTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { +static void Left2RightTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList) { char str[256] = {0}; char *t0[1] = {"tm0"}; @@ -342,7 +342,7 @@ static void Left2RightTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipL testQueryStr(schema, numOfCols, "f > -65", pSkipList, &res); } -void Right2LeftTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { +void Right2LeftTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList) { ResultObj res = {1, {"tm1"}}; testQueryStr(schema, numOfCols, "((1=a))", pSkipList, &res); @@ -359,7 +359,7 @@ void Right2LeftTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { testQueryStr(schema, numOfCols, "0=h", pSkipList, &res); } -static void IllegalExprTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { +static void IllegalExprTest(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList) { testQueryStr(schema, numOfCols, "h=", pSkipList, NULL); testQueryStr(schema, numOfCols, "h<", pSkipList, NULL); testQueryStr(schema, numOfCols, "a=1 and ", pSkipList, NULL); @@ -374,7 +374,7 @@ static void IllegalExprTest(SSchema *schema, int32_t numOfCols, tSkipList *pSkip testQueryStr(schema, numOfCols, "a=1 and ", pSkipList, NULL); } -static void Left2RightTest_binary(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { +static void Left2RightTest_binary(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList) { char str[256] = {0}; char *sql = NULL; @@ -432,7 +432,7 @@ static void Left2RightTest_binary(SSchema *schema, int32_t numOfCols, tSkipList testQueryStr(schema, numOfCols, sql, pSkipList, &res); } -static void Right2LeftTest_binary(SSchema *schema, int32_t numOfCols, tSkipList *pSkipList) { +static void Right2LeftTest_binary(SSchema *schema, int32_t numOfCols, SSkipList *pSkipList) { char str[256] = {0}; char *sql = NULL; diff --git a/src/util/inc/tskiplist.h b/src/util/inc/tskiplist.h index 176135cf92c8ae5ffdd8d93bd8acb48f05331f77..4634c148816d2c9d47792ae0d0961e2434667819 100644 --- a/src/util/inc/tskiplist.h +++ b/src/util/inc/tskiplist.h @@ -50,6 +50,8 @@ typedef struct SSkipListNode { #define SL_GET_NODE_DATA(n) ((char *)(n) + SL_NODE_HEADER_SIZE((n)->level)) #define SL_GET_NODE_KEY(s, n) ((s)->keyFn(SL_GET_NODE_DATA(n))) +#define SL_GET_SL_MIN_KEY(s) (SL_GET_NODE_KEY((s), SL_GET_FORWARD_POINTER((s)->pHead, 0))) + #define SL_GET_NODE_LEVEL(n) *(uint8_t *)((n)) /* diff --git a/src/util/src/tskiplist.c b/src/util/src/tskiplist.c index ee090130993e2d87838f8453a5ead4e9837c6b92..109b4b45b6fa56975ed31622a912332ede276531 100644 --- a/src/util/src/tskiplist.c +++ b/src/util/src/tskiplist.c @@ -71,7 +71,8 @@ memset(pNode, 0, SL_NODE_HEADER_SIZE(_l));\ } while(0) static void tSkipListDoInsert(SSkipList *pSkipList, SSkipListNode **forward, SSkipListNode *pNode); -static SSkipListNode* tSkipListDoAppend(SSkipList *pSkipList, SSkipListNode *pNode); +static SSkipListNode* tSkipListPushBack(SSkipList *pSkipList, SSkipListNode *pNode); +static SSkipListNode* tSkipListPushFront(SSkipList* pSkipList, SSkipListNode *pNode); static SSkipListIterator* doCreateSkipListIterator(SSkipList *pSkipList, int32_t order); static bool initForwardBackwardPtr(SSkipList* pSkipList) { @@ -207,10 +208,17 @@ SSkipListNode *tSkipListPut(SSkipList *pSkipList, SSkipListNode *pNode) { pthread_rwlock_wrlock(pSkipList->lock); } - // the new key is greater than the last key of skiplist append it at last position + // if the new key is greater than the maximum key of skip list, push back this node at the end of skip list char *newDatakey = SL_GET_NODE_KEY(pSkipList, pNode); if (pSkipList->size == 0 || pSkipList->comparFn(pSkipList->lastKey, newDatakey) < 0) { - return tSkipListDoAppend(pSkipList, pNode); + return tSkipListPushBack(pSkipList, pNode); + } + + // if the new key is less than the minimum key of skip list, push front this node at the front of skip list + assert(pSkipList->size > 0); + char* minKey = SL_GET_SL_MIN_KEY(pSkipList); + if (pSkipList->comparFn(newDatakey, minKey) < 0) { + return tSkipListPushFront(pSkipList, pNode); } // find the appropriated position to insert data @@ -269,7 +277,17 @@ void tSkipListDoInsert(SSkipList *pSkipList, SSkipListNode **forward, SSkipListN } } -SSkipListNode* tSkipListDoAppend(SSkipList *pSkipList, SSkipListNode *pNode) { +SSkipListNode* tSkipListPushFront(SSkipList* pSkipList, SSkipListNode *pNode) { + SSkipListNode* forward[MAX_SKIP_LIST_LEVEL] = {0}; + for(int32_t i = 0; i < pSkipList->level; ++i) { + forward[i] = pSkipList->pHead; + } + + tSkipListDoInsert(pSkipList, forward, pNode); + return pNode; +} + +SSkipListNode* tSkipListPushBack(SSkipList *pSkipList, SSkipListNode *pNode) { // do clear pointer area DO_MEMSET_PTR_AREA(pNode); diff --git a/src/util/tests/CMakeLists.txt b/src/util/tests/CMakeLists.txt index 042c925165985a285670f5df845708f92146b353..9f66eba37a3eccf68b7f0b584eb9a28fc0dfcd1d 100644 --- a/src/util/tests/CMakeLists.txt +++ b/src/util/tests/CMakeLists.txt @@ -11,5 +11,5 @@ IF (HEADER_GTEST_INCLUDE_DIR AND LIB_GTEST_STATIC_DIR) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST) ADD_EXECUTABLE(utilTest ${SOURCE_LIST}) - TARGET_LINK_LIBRARIES(utilTest tutil gtest pthread) + TARGET_LINK_LIBRARIES(utilTest tutil common gtest pthread) ENDIF() \ No newline at end of file diff --git a/tests/pytest/simpletest.sh b/tests/pytest/simpletest.sh index bffb3689b2f24136851e736b5b516c4aa96c621c..a6e023bde8c0a38a7d87b772639fed38233efb71 100755 --- a/tests/pytest/simpletest.sh +++ b/tests/pytest/simpletest.sh @@ -1 +1,3 @@ -sudo python ./test.py -f insert/basic.py +#!/bin/bash +python2 ./test.py -f insert/basic.py $1 +python2 ./test.py -s $1 diff --git a/tests/pytest/test.py b/tests/pytest/test.py index ea727d5f6ed09a079687f143cdf5ae33a7d315a2..f5d4cc7c2998f55bbfe5c9f94ad872357b4a4bab 100644 --- a/tests/pytest/test.py +++ b/tests/pytest/test.py @@ -15,6 +15,9 @@ # -*- coding: utf-8 -*- import sys import getopt +import subprocess +from distutils.log import warn as printf + from util.log import * from util.dnodes import * from util.cases import * @@ -29,8 +32,10 @@ if __name__ == "__main__": deployPath = "" masterIp = "" testCluster = False - opts, args = getopt.getopt(sys.argv[1:], 'f:p:m:sch', [ - 'file=', 'path=', 'master', 'stop', 'cluster', 'help']) + valgrind = 0 + stop = 0 + opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:scgh', [ + 'file=', 'path=', 'master', 'stop', 'cluster', 'valgrind', 'help']) for key, value in opts: if key in ['-h', '--help']: tdLog.printNoPrefix( @@ -41,21 +46,49 @@ if __name__ == "__main__": tdLog.printNoPrefix('-c Test Cluster Flag') tdLog.printNoPrefix('-s stop All dnodes') sys.exit(0) + if key in ['-f', '--file']: fileName = value + if key in ['-p', '--path']: deployPath = value + if key in ['-m', '--master']: masterIp = value + if key in ['-c', '--cluster']: testCluster = True + + if key in ['-g', '--valgrind']: + valgrind = 1 + if key in ['-s', '--stop']: - cmd = "ps -ef|grep -w taosd | grep 'taosd' | grep -v grep | awk '{print $2}' && pkill -9 taosd" - os.system(cmd) - tdLog.exit('stop All dnodes') + stop = 1 + + if (stop != 0): + if (valgrind == 0): + toBeKilled = "taosd" + else: + toBeKilled = "valgrind.bin" + + killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -HUP " % toBeKilled + os.system(killCmd) + time.sleep(1) + + psCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % toBeKilled + processID = subprocess.check_output(psCmd, shell=True) + + while( processID ): + os.system(killCmd) + time.sleep(1) + processID = subprocess.check_output(psCmd, shell=True) + + tdLog.exit('stop All dnodes') if masterIp == "": tdDnodes.init(deployPath) + tdDnodes.setValgrind(valgrind) + if testCluster: tdLog.notice("Procedures for testing cluster") if fileName == "all": diff --git a/tests/pytest/util/dnodes.py b/tests/pytest/util/dnodes.py index 2be4f94802a2637f393d6471aa09f8ed0f2ea125..45eaa9b30b75d92d87f9a4d6c04dcc7e0436266b 100644 --- a/tests/pytest/util/dnodes.py +++ b/tests/pytest/util/dnodes.py @@ -14,6 +14,7 @@ import sys import os import os.path +import subprocess from util.log import * @@ -29,6 +30,9 @@ class TDSimClient: if os.system(cmd) != 0: tdLog.exit(cmd) + def setValgrind(self, value): + self.valgrind = value + def deploy(self): self.logDir = "%s/sim/psim/log" % (self.path,) self.cfgDir = "%s/sim/psim/cfg" % (self.path) @@ -78,10 +82,14 @@ class TDDnode: self.index = index self.running = 0 self.deployed = 0 + self.valgrind = 0 def init(self, path): self.path = path + def setValgrind(self, value): + self.valgrind = value + def deploy(self): self.logDir = "%s/sim/dnode%d/log" % (self.path, self.index) self.dataDir = "%s/sim/dnode%d/data" % (self.path, self.index) @@ -164,9 +172,18 @@ class TDDnode: if self.deployed == 0: tdLog.exit("dnode:%d is not deployed" % (self.index)) - cmd = "nohup %staosd -c %s > /dev/null 2>&1 & " % ( - binPath, self.cfgDir) - print(cmd) + + if self.valgrind == 0: + cmd = "nohup %staosd -c %s > /dev/null 2>&1 & " % ( + binPath, self.cfgDir) + else: + valgrindCmdline = "valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes" + + cmd = "nohup %s %staosd -c %s 2>&1 & " % ( + valgrindCmdline, binPath, self.cfgDir) + + print(cmd) + if os.system(cmd) != 0: tdLog.exit(cmd) self.running = 1 @@ -275,8 +292,12 @@ class TDDnodes: self.sim.init(self.path) self.sim.deploy() + def setValgrind(self, value): + self.valgrind = value + def deploy(self, index): self.check(index) + self.dnodes[index - 1].setValgrind(self.valgrind) self.dnodes[index - 1].deploy() def cfg(self, index, option, value): @@ -312,11 +333,14 @@ class TDDnodes: for i in range(len(self.dnodes)): self.dnodes[i].stop() - cmd = "sudo systemctl stop taosd" - os.system(cmd) + psCmd = "ps -ef | grep -w taosd | grep 'root' | grep -v grep | awk '{print $2}'" + processID = subprocess.check_output(psCmd, shell=True) + if processID: + cmd = "sudo systemctl stop taosd" + os.system(cmd) # if os.system(cmd) != 0 : # tdLog.exit(cmd) - cmd = "ps -ef | grep -w taosd | grep 'dnode' | grep -v grep | awk '{print $2}' && sudo pkill -sigkill taosd" + cmd = "ps -ef | grep -w taosd | grep 'dnode' | grep -v grep | awk '{print $2}' && pkill -sigkill taosd" os.system(cmd) # if os.system(cmd) != 0 : # tdLog.exit(cmd) diff --git a/tests/pytest/util/log.py b/tests/pytest/util/log.py index c7032df3c4a67d14eeaab95e705f2a9d59624bc9..97c8b2ef7f2d2b7b207aa632e07328beab06f440 100644 --- a/tests/pytest/util/log.py +++ b/tests/pytest/util/log.py @@ -42,7 +42,7 @@ class TDLog: printf("\033[1;31m%s %s\033[0m" % (datetime.datetime.now(), err)) sys.exit(1) - def printfNoPrefix(self, info): + def printNoPrefix(self, info): printf("\033[1;36m%s\033[0m" % (info)) diff --git a/tests/test-all.sh b/tests/test-all.sh index 8bd01119c4cee2e836d39ce181ca30941271ed85..dee89b9dc57da7e6a8292ee0aca82b329b8865f2 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -8,32 +8,33 @@ GREEN_UNDERLINE='\033[4;32m' NC='\033[0m' cd script -sudo ./test.sh 2>&1 | grep 'success\|failed' | tee out.txt +./test.sh -f basicSuite.sim 2>&1 | grep 'success\|failed\|fault' | tee out.txt -total_success=`grep success out.txt | wc -l` +totalSuccess=`grep success out.txt | wc -l` +totalBasic=`grep success out.txt | grep Suite | wc -l` -if [ "$total_success" -gt "0" ]; then - total_success=`expr $total_success - 1` - echo -e "${GREEN} ### Total $total_success TSIM case(s) succeed! ### ${NC}" +if [ "$totalSuccess" -gt "0" ]; then + totalSuccess=`expr $totalSuccess - $totalBasic` + echo -e "${GREEN} ### Total $totalSuccess TSIM case(s) succeed! ### ${NC}" fi -total_failed=`grep failed out.txt | wc -l` -if [ "$total_failed" -ne "0" ]; then - echo -e "${RED} ### Total $total_failed TSIM case(s) failed! ### ${NC}" - exit $total_failed +totalFailed=`grep 'failed\|fault' out.txt | wc -l` +if [ "$totalFailed" -ne "0" ]; then + echo -e "${RED} ### Total $totalFailed TSIM case(s) failed! ### ${NC}" + exit $totalFailed fi cd ../pytest -sudo ./simpletest.sh 2>&1 | grep 'successfully executed\|failed' | tee pytest-out.txt -total_py_success=`grep 'successfully executed' pytest-out.txt | wc -l` +./simpletest.sh 2>&1 | grep 'successfully executed\|failed' | tee pytest-out.txt +totalPySuccess=`grep 'successfully executed' pytest-out.txt | wc -l` -if [ "$total_py_success" -gt "0" ]; then - echo -e "${GREEN} ### Total $total_py_success python case(s) succeed! ### ${NC}" +if [ "$totalPySuccess" -gt "0" ]; then + echo -e "${GREEN} ### Total $totalPySuccess python case(s) succeed! ### ${NC}" fi -total_py_failed=`grep 'failed' pytest-out.txt | wc -l` -if [ "$total_py_failed" -ne "0" ]; then - echo -e "${RED} ### Total $total_py_failed python case(s) failed! ### ${NC}" - exit $total_py_failed +totalPyFailed=`grep 'failed' pytest-out.txt | wc -l` +if [ "$totalPyFailed" -ne "0" ]; then + echo -e "${RED} ### Total $totalPyFailed python case(s) failed! ### ${NC}" + exit $totalPyFailed fi