diff --git a/tests/parallel_test/Jenkinsfile b/tests/parallel_test/Jenkinsfile new file mode 100644 index 0000000000000000000000000000000000000000..95c8cf83d9b6b2514588234cbce27c06343e4c17 --- /dev/null +++ b/tests/parallel_test/Jenkinsfile @@ -0,0 +1,366 @@ +import hudson.model.Result +import hudson.model.*; +import jenkins.model.CauseOfInterruption +node { +} +def sync_source() { + sh ''' + hostname + date + ''' + sh ''' + cd ${WKC} + [ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md" + git reset --hard HEAD~10 >/dev/null + ''' + script { + if (env.CHANGE_TARGET == 'master') { + sh ''' + cd ${WKC} + git checkout master + ''' + } else if (env.CHANGE_TARGET == '2.0') { + sh ''' + cd ${WKC} + git checkout 2.0 + ''' + } else if (env.CHANGE_TARGET == '2.4') { + sh ''' + cd ${WKC} + git checkout 2.4 + ''' + } else { + sh ''' + cd ${WKC} + git checkout develop + ''' + } + } + sh''' + cd ${WKC} + git remote prune origin + [ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md" + git pull >/dev/null + git fetch origin +refs/pull/${CHANGE_ID}/merge + git checkout -qf FETCH_HEAD + git clean -dfx + git submodule update --init --recursive + cd ${WK} + git reset --hard HEAD~10 + ''' + script { + if (env.CHANGE_TARGET == 'master') { + sh ''' + cd ${WK} + git checkout master + ''' + } else if (env.CHANGE_TARGET == '2.0') { + sh ''' + cd ${WK} + git checkout 2.0 + ''' + } else if (env.CHANGE_TARGET == '2.4') { + sh ''' + cd ${WK} + git checkout 2.4 + ''' + } else { + sh ''' + cd ${WK} + git checkout develop + ''' + } + } + sh ''' + cd ${WK} + git pull >/dev/null + export TZ=Asia/Harbin + date + git clean -dfx + ''' +} +def pre_test() { + sync_source() + sh ''' + cd ${WK} + mkdir -p debug + cd debug + go env -w GOPROXY=https://goproxy.cn,direct + go env -w GO111MODULE=on + cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true > /dev/null + make -j8 >/dev/null + ''' + return 1 +} +def pre_test_mac() { + sync_source() + sh ''' + cd ${WK} + mkdir -p debug + cd debug + go env -w GOPROXY=https://goproxy.cn,direct + go env -w GO111MODULE=on + cmake .. -DBUILD_TOOLS=false > /dev/null + make -j8 >/dev/null + ''' + return 1 +} +pipeline { + agent {label " dispatcher "} + options { skipDefaultCheckout() } + environment{ + WK = '/var/data/jenkins/workspace/TDinternal' + WKC = '/var/data/jenkins/workspace/TDinternal/community' + LOGDIR = '/var/data/jenkins/workspace/log' + } + stages { + stage ('pre_build') { + steps { + sh ''' + date + pwd + env + hostname + ''' + } + } + stage ('Parallel build stage') { + //only build pr + options { skipDefaultCheckout() } + when { + allOf { + changeRequest() + not { expression { env.CHANGE_BRANCH =~ /docs\// }} + } + } + parallel { + stage ('dispatcher sync source') { + steps { + timeout(time: 20, unit: 'MINUTES') { + sync_source() + script { + sh ''' + echo "dispatcher ready" + date + ''' + } + } + } + } + stage ('build worker01') { + agent {label " worker01 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker01 build done" + date + ''' + } + } + } + } + stage ('build worker02') { + agent {label " worker02 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker02 build done" + date + ''' + } + } + } + } + stage ('build worker03') { + agent {label " worker03 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker03 build done" + date + ''' + } + } + } + } + stage ('build worker04') { + agent {label " worker04 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker04 build done" + date + ''' + } + } + } + } + stage ('build worker05') { + agent {label " worker05 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker05 build done" + date + ''' + } + } + } + } + } + } + stage('run test') { + parallel { + stage ('build worker06_arm64') { + agent {label " worker06_arm64 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker06_arm64 build done" + date + ''' + } + } + } + } + stage ('build worker07_arm64') { + agent {label " worker07_arm64 "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test() + script { + sh ''' + echo "worker07_arm64 build done" + date + ''' + } + } + } + } + stage ('build Mac_catalina ') { + agent {label " Mac_catalina "} + steps { + timeout(time: 20, unit: 'MINUTES') { + pre_test_mac() + script { + sh ''' + echo "Mac_catalina build done" + date + ''' + } + } + } + } + stage('run cases') { + steps { + sh ''' + date + hostname + ''' + timeout(time: 60, unit: 'MINUTES') { + sh ''' + date + cd ${WKC}/tests/parallel_test + time ./run.sh -m m.json -t cases.task -l ${LOGDIR} -b ${BRANCH_NAME} + date + hostname + ''' + } + } + } + } + } + } + post { + success { + emailext ( + subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS", + body: """ + + + + + + + + + + + + +
+
+ 构建信息 +
+
+
    +
    +
  • 构建名称>>分支:${env.BRANCH_NAME}
  • +
  • 构建结果: Successful
  • +
  • 构建编号:${BUILD_NUMBER}
  • +
  • 触发用户:${env.CHANGE_AUTHOR}
  • +
  • 提交信息:${env.CHANGE_TITLE}
  • +
  • 构建地址:${BUILD_URL}
  • +
  • 构建日志:${BUILD_URL}console
  • +
    +
+
+ + """, + to: "${env.CHANGE_AUTHOR_EMAIL}", + from: "support@taosdata.com" + ) + } + failure { + emailext ( + subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' FAIL", + body: """ + + + + + + + + + + + + +
+
+ 构建信息 +
+
+
    +
    +
  • 构建名称>>分支:${env.BRANCH_NAME}
  • +
  • 构建结果: Failure
  • +
  • 构建编号:${BUILD_NUMBER}
  • +
  • 触发用户:${env.CHANGE_AUTHOR}
  • +
  • 提交信息:${env.CHANGE_TITLE}
  • +
  • 构建地址:${BUILD_URL}
  • +
  • 构建日志:${BUILD_URL}console
  • +
    +
+
+ + """, + to: "${env.CHANGE_AUTHOR_EMAIL}", + from: "support@taosdata.com" + ) + } + } +} diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task new file mode 100644 index 0000000000000000000000000000000000000000..f07c712089f82dbb0eed2753b0164ab3074f6c00 --- /dev/null +++ b/tests/parallel_test/cases.task @@ -0,0 +1,672 @@ +# 806,,pytest,test.py -f update/append_commit_data.py too long time +# 20,,pytest,insert/retentionpolicy.py change date time +# ,2,pytest,python3 ./test.py -f query/nestedQuery/nestedQuery_datacheck.py +# ,,pytest,python3 test.py -f tools/taosdemoTestTblAlt.py never quit +305,,pytest,python3 ./test.py -f update/merge_commit_data-0.py +301,,pytest,python3 ./test.py -f update/merge_commit_data.py +258,,script,./test.sh -f general/stream/stream_3.sim +256,,script,./test.sh -f general/stream/restart_stream.sim +245,,pytest,python3 ./test.py -f update/merge_commit_data2.py +224,,pytest,python3 ./test.py -f query/queryNullValueTest.py +210,,pytest,python3 ./test.py -f update/merge_commit_data2_update0.py +198,,pytest,python3 ./test.py -f update/merge_commit_last-0.py +196,,pytest,python3 ./test.py -f update/merge_commit_last.py +172,,pytest,python3 ./test.py -f stream/stream2.py +156,,pytest,python3 ./test.py -f stream/stream1.py +139,,script,./test.sh -f general/stream/stream_restart.sim +137,,script,./test.sh -f unique/vnode/replica3_repeat.sim +135,,pytest,python3 ./test.py -f insert/randomNullCommit.py +129,,pytest,python3 ./test.py -f query/queryConnection.py +127,,script,./test.sh -f general/stream/metrics_replica1_vnoden.sim +126,,script,./test.sh -f general/stream/table_del.sim +125,,script,./test.sh -f general/stream/table_replica1_vnoden.sim +125,,script,./test.sh -f general/stream/metrics_del.sim +113,,pytest,python3 ./test.py -f update/append_commit_last.py +112,,pytest,python3 ./test.py -f update/append_commit_last-0.py +111,2,script,./test.sh -f unique/cluster/balance3.sim +110,,script,./test.sh -f unique/vnode/many.sim +110,,script,./test.sh -f general/parser/limit2.sim +101,,script,./test.sh -f general/db/alter_tables_d2.sim +# 99,,pytest,python3 ./test.py -f query/nestedQuery/nestedQuery.py +95,,script,./test.sh -f unique/vnode/replica2_repeat.sim +91,,script,./test.sh -f unique/cluster/vgroup100.sim +89,,pytest,python3 ./test.py -f functions/function_interp.py +87,,script,./test.sh -f general/parser/repeatAlter.sim +85,,script,./test.sh -f unique/cluster/balance2.sim +84,,script,./test.sh -f unique/big/balance.sim +83,,script,./test.sh -f unique/dnode/balance1.sim +80,,pytest,python3 ./test.py -f query/last_row_cache.py +80,,pytest,python3 ./test.py -f insert/boundary2.py +76,,pytest,python3 ./test.py -f insert/verifyMemToDiskCrash.py +75,,script,./test.sh -f unique/db/replica_reduce32.sim +73,,script,./test.sh -f unique/db/replica_add23.sim +73,,script,./test.sh -f unique/db/replica_add13.sim +72,,script,./test.sh -f general/db/alter_tables_v4.sim +71,,script,./test.sh -f unique/account/usage.sim +67,,script,./test.sh -f unique/cluster/balance1.sim +65,2,script,./test.sh -f unique/dnode/balance3.sim +65,,script,./test.sh -f general/parser/sliding.sim +64,,script,./test.sh -f unique/arbitrator/dn3_mn1_r3_vnode_delDir.sim +63,,script,./test.sh -f unique/mnode/mgmt20.sim +62,2,script,./test.sh -f unique/dnode/m3.sim +62,2,script,./test.sh -f unique/dnode/m2.sim +62,,script,./test.sh -f unique/dnode/data1.sim +61,,script,./test.sh -f unique/mnode/mgmtr2.sim +61,,script,./test.sh -f unique/db/replica_reduce31.sim +61,,script,./test.sh -f issue/TD-2713.sim +61,,script,./test.sh -f general/parser/selectResNum.sim +60,,script,./test.sh -f unique/import/replica3.sim +60,,script,./test.sh -f general/parser/join_manyblocks.sim +60,,script,./test.sh -f general/db/alter_tables_v1.sim +59,,script,./test.sh -f unique/vnode/replica3_basic.sim +59,,script,./test.sh -f unique/dnode/offline2.sim +59,,script,./test.sh -f unique/arbitrator/check_cluster_cfg_para.sim +58,,script,./test.sh -f unique/vnode/replica2_basic2.sim +58,,script,./test.sh -f unique/dnode/balancex.sim +57,,script,./test.sh -f unique/dnode/balance2.sim +57,,script,./test.sh -f unique/db/delete_part.sim +57,,script,./test.sh -f unique/arbitrator/replica_changeWithArbitrator.sim +57,,script,./test.sh -f unique/arbitrator/dn3_mn1_vnode_noCorruptFile_offline.sim +57,,script,./test.sh -f unique/arbitrator/dn3_mn1_vnode_delDir.sim +57,,script,./test.sh -f general/parser/where.sim +56,,script,./test.sh -f general/wal/sync.sim +56,,script,./test.sh -f general/parser/first_last.sim +56,,script,./test.sh -f general/db/delete_reuse1.sim +56,,pytest,python3 test.py -f tools/taosdemoAllTest/TD-5213/insert4096columns_not_use_taosdemo.py +56,,pytest,python3 ./test.py -f stream/table_1.py +56,,pytest,python3 ./test.py -f stream/metric_1.py +55,,script,./test.sh -f unique/dnode/vnode_clean.sim +55,,script,./test.sh -f unique/dnode/remove2.sim +55,,script,./test.sh -f general/parser/limit1.sim +55,,script,./test.sh -f general/db/delete_reusevnode.sim +55,,pytest,python3 ./test.py -f stream/table_n.py +53,,script,./test.sh -f unique/db/replica_part.sim +53,,script,./test.sh -f general/parser/limit1_tblocks100.sim +52,,script,./test.sh -f unique/arbitrator/dn3_mn1_replica_change.sim +51,,script,./test.sh -f unique/db/delete.sim +51,,script,./test.sh -f general/db/delete_writing1.sim +50,,pytest,python3 ./test.py -f import_merge/import_update_2.py +49,,script,./test.sh -f unique/mnode/mgmt26.sim +49,,script,./test.sh -f unique/dnode/remove1.sim +49,,script,./test.sh -f unique/db/replica_add12.sim +48,,script,./test.sh -f unique/dnode/datatrans_3node_2.sim +48,,script,./test.sh -f unique/db/commit.sim +48,,script,./test.sh -f general/parser/commit.sim +47,,script,./test.sh -f unique/mnode/mgmt34.sim +47,,script,./test.sh -f unique/mnode/mgmt23.sim +47,,script,./test.sh -f unique/import/replica2.sim +47,,script,./test.sh -f unique/dnode/reason.sim +46,,script,./test.sh -f unique/mnode/mgmt22.sim +46,,pytest,python3 ./test.py -f stream/cqSupportBefore1970.py +# 45,,script,./test.sh -f general/parser/col_arithmetic_operation.sim +44,,script,./test.sh -f unique/big/tcp.sim +44,,script,./test.sh -f general/parser/topbot.sim +44,,pytest,python3 ./test.py -f stream/metric_n.py +43,,script,./test.sh -f unique/mnode/mgmt24.sim +42,,script,./test.sh -f unique/arbitrator/dn3_mn1_vnode_nomaster.sim +42,,script,./test.sh -f unique/arbitrator/dn3_mn1_replica_change_dropDnod.sim +42,,pytest,python3 ./test.py -f import_merge/import_update_0.py +41,,script,./test.sh -f unique/dnode/datatrans_3node.sim +41,,script,./test.sh -f general/parser/groupby.sim +41,,pytest,python3 ./test.py -f update/allow_update.py +41,,pytest,python3 ./test.py -f import_merge/import_update_1.py +40,,script,./test.sh -f unique/vnode/replica3_vgroup.sim +40,,script,./test.sh -f unique/mnode/mgmt33.sim +40,,script,./test.sh -f unique/dnode/monitor.sim +40,,script,./test.sh -f unique/big/maxvnodes.sim +40,,script,./test.sh -f general/import/replica1.sim +39,,script,./test.sh -f unique/stable/balance_replica1.sim +39,,script,./test.sh -f unique/migrate/mn2_vn2_repl2_rmVnodeDir.sim +39,,script,./test.sh -f unique/arbitrator/dn3_mn1_r2_vnode_delDir.sim +39,,script,./test.sh -f general/parser/union.sim +38,,script,./test.sh -f unique/dnode/lossdata.sim +38,,script,./test.sh -f unique/cluster/alter.sim +38,,script,./test.sh -f general/parser/interp.sim +38,,script,./test.sh -f general/db/delete_reuse2.sim +38,,script,./test.sh -f general/db/alter_vgroups.sim +37,,script,./test.sh -f unique/migrate/mn2_vn2_repl2_rmMnodeDir.sim +37,,script,./test.sh -f unique/dnode/offline3.sim +37,,script,./test.sh -f unique/arbitrator/dn3_mn1_multiCreateDropTable.sim +37,,script,./test.sh -f general/alter/count.sim +36,,script,./test.sh -f unique/dnode/offline1.sim +36,,script,./test.sh -f unique/account/authority.sim +36,,script,./test.sh -f general/table/delete_reuse2.sim +36,,pytest,python3 test.py -f tools/taosdemoTestQuery.py +36,,pytest,python3 ./test.py -f query/select_last_crash.py +35,,script,./test.sh -f unique/arbitrator/sync_replica3_alterTable_drop.sim +35,,script,./test.sh -f unique/arbitrator/sync_replica2_dropTable.sim +35,,script,./test.sh -f unique/arbitrator/sync_replica2_alterTable_add.sim +35,,script,./test.sh -f general/wal/kill.sim +35,,script,./test.sh -f general/wal/kill.sim +35,,script,./test.sh -f general/parser/projection_limit_offset.sim +35,,pytest,python3 ./test.py -f query/last_cache.py +34,,script,./test.sh -f unique/stable/replica3_vnode3.sim +34,,script,./test.sh -f unique/arbitrator/sync_replica2_dropDb.sim +34,,script,./test.sh -f general/table/delete_reuse1.sim +34,,script,./test.sh -f general/insert/insert_drop.sim +34,,pytest,python3 ./test.py -f update/update_options.py +34,,pytest,python3 ./test.py -f insert/flushwhiledrop.py +33,,script,./test.sh -f unique/mnode/mgmt25.sim +33,,script,./test.sh -f unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir.sim +33,,script,./test.sh -f general/db/delete_reusevnode2.sim +32,,script,./test.sh -f unique/mnode/mgmt30.sim +32,,script,./test.sh -f unique/mnode/mgmt21.sim +32,,script,./test.sh -f unique/arbitrator/offline_replica2_createTable_online.sim +# 32,,pytest,python3 test.py -f tools/taosdemoAllTest/taosdemoTestQueryWithJson.py +31,,script,./test.sh -f unique/dnode/monitor_bug.sim +31,,script,./test.sh -f unique/arbitrator/sync_replica3_dropDb.sim +31,,script,./test.sh -f unique/arbitrator/offline_replica3_alterTable_online.sim +31,,script,./test.sh -f general/parser/tbnameIn.sim +31,,script,./test.sh -f general/db/delete_writing2.sim +# 31,,pytest,python3 test.py -f tools/taosdemoTestLimitOffset.py +30,,script,./test.sh -f unique/dnode/alternativeRole.sim +30,,script,./test.sh -f unique/arbitrator/offline_replica2_alterTag_online.sim +30,,script,./test.sh -f issue/TD-2677.sim +30,,script,./test.sh -f general/db/topic1.sim +# 30,,pytest,python3 ./test.py -f wal/sdbComp.py +29,,script,./test.sh -f unique/column/replica3.sim +29,,script,./test.sh -f unique/arbitrator/sync_replica2_alterTable_drop.sim +29,,script,./test.sh -f general/table/delete_writing.sim +29,,script,./test.sh -f general/compress/compress.sim +28,,script,./test.sh -f unique/stable/dnode2_stop.sim +28,,script,./test.sh -f unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir_stopAll_starAll.sim +28,,script,./test.sh -f unique/arbitrator/offline_replica2_dropDb_online.sim +28,,script,./test.sh -f unique/arbitrator/dn3_mn2_killDnode.sim +28,,script,./test.sh -f general/stable/disk.sim +28,,script,./test.sh -f general/compress/commitlog.sim +27,2,script,./test.sh -f unique/dnode/simple.sim +27,,script,./test.sh -f unique/arbitrator/sync_replica3_dropTable.sim +27,,script,./test.sh -f unique/arbitrator/offline_replica2_dropTable_online.sim +27,,script,./test.sh -f unique/account/pass_alter.sim +27,,script,./test.sh -f general/insert/query_multi_file.sim +26,,script,./test.sh -f unique/arbitrator/offline_replica3_createTable_online.sim +26,,script,./test.sh -f general/parser/slimit.sim +26,,script,./test.sh -f general/parser/lastrow.sim +26,,script,./test.sh -f general/compress/compress2.sim +26,,pytest,python3 ./test.py -f tag_lite/datatype-without-alter.py +26,,pytest,python3 ./test.py -f tag_lite/datatype.py +26,,pytest,python3 ./test.py -f stable/query_after_reset.py +25,,script,./test.sh -f unique/http/admin.sim +25,,script,./test.sh -f unique/arbitrator/sync_replica3_alterTable_add.sim +25,,script,./test.sh -f unique/arbitrator/offline_replica2_alterTable_online.sim +25,,script,./test.sh -f general/import/commit.sim +25,,script,./test.sh -f general/compress/uncompress.sim +25,,script,./test.sh -f general/cache/restart_metrics.sim +25,,script,./test.sh -f general/alter/cached_schema_after_alter.sim +25,,pytest,python3 ./test.py -f queryCount.py +# 25,,pytest,python3 test.py -f alter/alter_cacheLastRow.py +24,,script,./test.sh -f unique/arbitrator/offline_replica3_alterTag_online.sim +24,,script,./test.sh -f issue/TD-2680.sim +24,,script,./test.sh -f general/parser/select_with_tags.sim +24,,script,./test.sh -f general/import/large.sim +24,,script,./test.sh -f general/connection/test_old_data.sim +24,,script,./test.sh -f general/column/table.sim +24,,script,./test.sh -f general/column/metrics.sim +24,,script,./test.sh -f general/alter/insert2.sim +24,,script,./test.sh -f general/alter/insert1.sim +24,,pytest,python3 ./test.py -f import_merge/importLastTPO.py +23,,script,./test.sh -f unique/stable/dnode3.sim +23,,script,./test.sh -f unique/arbitrator/offline_replica3_dropTable_online.sim +23,,script,./test.sh -f general/wal/maxtables.sim +23,,script,./test.sh -f general/alter/table.sim +23,,pytest,python3 ./test.py -f import_merge/importDataHPO.py +23,,pytest,python3 ./test.py -f import_merge/importDataHO.py +23,,pytest,python3 ./test.py -f import_merge/importDataHO2.py +23,,pytest,python3 ./test.py -f import_merge/importDataH2.py +23,,pytest,python3 ./test.py -f import_merge/importCSV.py +23,,pytest,python3 ./test.py -f import_merge/importCacheFileT.py +23,,pytest,python3 ./test.py -f import_merge/importCacheFileSub.py +22,,script,./test.sh -f unique/arbitrator/offline_replica3_dropDb_online.sim +22,,script,./test.sh -f general/wal/maxtables.sim +22,,script,./test.sh -f general/user/pass_alter.sim +22,,script,./test.sh -f general/parser/mixed_blocks.sim +22,,script,./test.sh -f general/http/grafana.sim +22,,script,./test.sh -f general/http/chunked.sim +22,,script,./test.sh -f general/compute/diff2.sim +22,,script,./test.sh -f general/column/commit.sim +22,,script,./test.sh -f general/alter/metrics.sim +22,,pytest,python3 ./test.py -f import_merge/importLastT.py +22,,pytest,python3 ./test.py -f import_merge/importLastTO.py +22,,pytest,python3 ./test.py -f import_merge/importDataSub.py +22,,pytest,python3 ./test.py -f import_merge/importDataLastS.py +22,,pytest,python3 ./test.py -f import_merge/importDataLastHPO.py +22,,pytest,python3 ./test.py -f import_merge/importDataLastHO.py +22,,pytest,python3 ./test.py -f import_merge/importCacheFileTPO.py +22,,pytest,python3 ./test.py -f import_merge/importCacheFileS.py +21,,script,./test.sh -f unique/cluster/cache.sim +21,,script,./test.sh -f unique/arbitrator/dn3_mn1_full_createTableFail.sim +21,,script,./test.sh -f unique/account/account_delete.sim +21,,script,./test.sh -f general/parser/slimit_alter_tags.sim +21,,script,./test.sh -f general/parser/set_tag_vals.sim +21,,script,./test.sh -f general/http/grafana_bug.sim +21,,script,./test.sh -f general/cache/restart_table.sim +# 21,,pytest,python3 test.py -f tools/taosdemoTestInterlace.py +# 21,,pytest,python3 test.py -f tools/taosdemoAllTest/NanoTestCase/taosdemoTestSupportNanoInsert.py +21,,pytest,python3 ./test.py -f import_merge/importDataLastSub.py +21,,pytest,python3 ./test.py -f import_merge/importCacheFileTO.py +21,,pytest,python3 ./test.py -f import_merge/importCacheFileH.py +21,,pytest,python3 ./test.py -f import_merge/importCacheFileHPO.py +21,,pytest,python3 ./test.py -f import_merge/importCacheFileHO.py +20,,script,./test.sh -f general/user/authority.sim +20,,script,./test.sh -f general/http/telegraf.sim +20,,script,./test.sh -f general/http/restful_insert.sim +20,,script,./test.sh -f general/db/nosuchfile.sim +20,,pytest,python3 ./test.py -f stream/new.py +20,,pytest,python3 ./test.py -f query/query.py +19,,script,./test.sh -f unique/http/opentsdb.sim +19,,script,./test.sh -f general/parser/limit.sim +19,,script,./test.sh -f general/parser/last_cache.sim +19,,script,./test.sh -f general/parser/join_multivnode.sim +19,,script,./test.sh -f general/http/restful.sim +19,,script,./test.sh -f general/http/restful_full.sim +19,,script,./test.sh -f general/db/repeat.sim +# 19,,pytest,python3 test.py -f tools/taosdemoTestSampleData.py +# 19,,pytest,python3 test.py -f tools/taosdemoTest.py +# 19,,pytest,python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJsonStmt.py +# 19,,pytest,python3 test.py -f tools/taosdemoAllTest/NanoTestCase/taosdemoTestSupportNanoQuery.py +# 19,,pytest,python3 test.py -f tools/taosdemoAllTest/NanoTestCase/taosdemoTestInsertTime_step.py +# 19,,pytest,python3 ./test.py -f query/query1970YearsAf.py +# 19,,pytest,python3 ./test.py -f perfbenchmark/bug3433.py +19,,pytest,python3 ./test.py -f import_merge/importDataLastH.py +19,,pytest,python3 ./test.py -f client/taoshellCheckCase.py +18,,script,./test.sh -f unique/stable/dnode2.sim +18,,script,./test.sh -f general/stable/metrics.sim +18,,script,./test.sh -f general/parser/slimit1.sim +18,,script,./test.sh -f general/parser/select_from_cache_disk.sim +18,,script,./test.sh -f general/parser/auto_create_tb.sim +18,,script,./test.sh -f general/http/gzip.sim +18,2,script,./test.sh -f general/alter/dnode.sim +# 18,,pytest,python3 test.py -f tools/taosdemoTestWithJson.py +# 18,,pytest,python3 test.py -f tools/taosdemoAllTest/TD-4985/query-limit-offset.py +# 18,,pytest,python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJson.py +18,,pytest,python3 ./test.py -f import_merge/importTORestart.py +17,,script,./test.sh -f general/user/monitor.sim +17,,script,./test.sh -f general/parser/single_row_in_tb.sim +17,,script,./test.sh -f general/parser/auto_create_tb_drop_tb.sim +17,,script,./test.sh -f general/insert/tcp.sim +17,,script,./test.sh -f general/db/tables.sim +# 17,,pytest,python3 test.py -f tools/taosdemoTestWithoutMetric.py +# 17,,pytest,python3 test.py -f tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.py +17,,pytest,python3 ./test.py -f stream/history.py +17,,pytest,python3 ./test.py -f import_merge/importTRestart.py +17,,pytest,python3 ./test.py -f import_merge/importTPORestart.py +17,,pytest,python3 ./test.py -f functions/variable_httpDbNameMandatory.py +16,,script,./test.sh -f unique/account/user_create.sim +16,,pytest,python3 ./test.py -f query/queryTscomputWithNow.py +16,,pytest,python3 ./test.py -f import_merge/importTailPartOverlap.py +16,,pytest,python3 ./test.py -f import_merge/importSubRestart.py +16,,pytest,python3 ./test.py -f import_merge/importInsertThenImport.py +16,,pytest,python3 ./test.py -f functions/function_operations.py -r 1 +15,,script,./test.sh -f general/parser/join.sim +15,,script,./test.sh -f general/import/basic.sim +15,,script,./test.sh -f general/http/restful_limit.sim +15,,script,./test.sh -f general/field/smallint.sim +15,,pytest,python3 ./test.py -f table/alter_wal0.py +15,,pytest,python3 ./test.py -f query/queryWithTaosdKilled.py +15,,pytest,python3 ./test.py -f query/queryNormal.py +15,,pytest,python3 test.py -f query/queryInterval.py +15,,pytest,python3 ./test.py -f insert/schemalessInsert.py +15,,pytest,python3 ./test.py -f import_merge/importToCommit.py +15,,pytest,python3 ./test.py -f import_merge/importTail.py +15,,pytest,python3 ./test.py -f import_merge/importSRestart.py +15,,pytest,python3 ./test.py -f import_merge/importLastS.py +15,,pytest,python3 ./test.py -f import_merge/importDataTO.py +15,,pytest,python3 ./test.py -f import_merge/importDataLastT.py +15,,pytest,python3 ./test.py -f import_merge/importBlock2T.py +15,,pytest,python3 ./test.py -f import_merge/importBlock2HO.py +15,,pytest,python3 ./test.py -f import_merge/importBlock1TPO.py +15,,pytest,python3 ./test.py -f import_merge/importBlock1Sub.py +15,,pytest,python3 ./test.py -f import_merge/importBlock1S.py +15,,pytest,python3 ./test.py -f import_merge/importBlock1HPO.py +15,,pytest,python3 ./test.py -f functions/function_leastsquares.py -r 1 +14,,script,./test.sh -f unique/db/replica_reduce21.sim +14,,script,./test.sh -f general/user/user_create.sim +14,,script,./test.sh -f general/stable/refcount.sim +14,,script,./test.sh -f general/insert/query_block2_file.sim +14,,script,./test.sh -f general/insert/query_block1_file.sim +14,,script,./test.sh -f general/field/bool.sim +14,,script,./test.sh -f general/db/vnodes.sim +14,,script,./test.sh -f general/compute/stddev.sim +14,,script,./test.sh -f general/compute/min.sim +14,,pytest,python3 ./test.py -f query/queryJoin10tables.py +14,,pytest,python3 ./test.py -f query/queryInsertValue.py +14,,pytest,python3 ./test.py -f query/bug1471.py +14,,pytest,python3 ./test.py -f insert/before_1970.py +14,,pytest,python3 ./test.py -f import_merge/importTailOverlap.py +14,,pytest,python3 ./test.py -f import_merge/importDataT.py +14,,pytest,python3 ./test.py -f import_merge/importDataTPO.py +14,,pytest,python3 ./test.py -f import_merge/importDataLastTPO.py +14,,pytest,python3 ./test.py -f import_merge/importBlockbetween.py +14,,pytest,python3 ./test.py -f import_merge/importBlock2TPO.py +14,,pytest,python3 ./test.py -f import_merge/importBlock2TO.py +14,,pytest,python3 ./test.py -f import_merge/importBlock2Sub.py +14,,pytest,python3 ./test.py -f import_merge/importBlock2S.py +14,,pytest,python3 ./test.py -f import_merge/importBlock2H.py +14,,pytest,python3 ./test.py -f import_merge/importBlock1T.py +14,,pytest,python3 ./test.py -f import_merge/importBlock1TO.py +14,,pytest,python3 ./test.py -f import_merge/importBlock1H.py +14,,pytest,python3 ./test.py -f import_merge/importBlock1HO.py +14,,pytest,python3 ./test.py -f functions/function_max.py -r 1 +14,,pytest,python3 ./test.py -f functions/function_last.py -r 1 +14,,pytest,python3 ./test.py -f functions/function_avg.py -r 1 +13,,script,./test.sh -f unique/account/user_len.sim +13,,script,./test.sh -f unique/account/account_len.sim +13,,script,./test.sh -f general/vector/table_query.sim +13,,script,./test.sh -f general/vector/table_mix.sim +13,,script,./test.sh -f general/table/limit.sim +13,,script,./test.sh -f general/parser/timestamp.sim +13,,script,./test.sh -f general/parser/import_commit3.sim +13,,script,./test.sh -f general/parser/fill_stb.sim +13,,script,./test.sh -f general/insert/query_file_memory.sim +13,,script,./test.sh -f general/field/5.sim +13,,script,./test.sh -f general/field/3.sim +13,,script,./test.sh -f general/field/2.sim +13,,script,./test.sh -f general/db/basic.sim +13,,script,./test.sh -f general/compute/avg.sim +13,,script,./test.sh -f general/cache/new_metrics.sim +13,,pytest,python3 ./test.py -f query/queryStddevWithGroupby.py +13,,pytest,python3 ./test.py -f import_merge/importSpan.py +13,,pytest,python3 ./test.py -f import_merge/importLastSub.py +13,,pytest,python3 ./test.py -f import_merge/importLastH.py +13,,pytest,python3 ./test.py -f import_merge/importLastHPO.py +13,,pytest,python3 ./test.py -f import_merge/importLastHO.py +13,,pytest,python3 ./test.py -f import_merge/importDataS.py +13,,pytest,python3 ./test.py -f import_merge/importDataLastTO.py +13,,pytest,python3 ./test.py -f import_merge/importBlock2HPO.py +13,,pytest,python3 ./test.py -f functions/function_twa.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_sum.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_stddev.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_percentile.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_min.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_last_row.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_diff.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_count.py -r 1 +13,,pytest,python3 ./test.py -f functions/function_bottom.py -r 1 +13,,pytest,python3 ./test.py -f client/noConnectionErrorTest.py +12,,script,./test.sh -f unique/account/pass_len.sim +12,,script,./test.sh -f general/vector/single.sim +12,,script,./test.sh -f general/vector/metrics_time.sim +12,,script,./test.sh -f general/vector/metrics_tag.sim +12,,script,./test.sh -f general/vector/metrics_mix.sim +12,,script,./test.sh -f general/user/user_len.sim +12,,script,./test.sh -f general/user/pass_len.sim +12,,script,./test.sh -f general/table/tinyint.sim +12,,script,./test.sh -f general/stable/values.sim +12,,script,./test.sh -f general/stable/show.sim +12,,script,./test.sh -f general/stable/dnode3.sim +12,,script,./test.sh -f general/parser/tags_dynamically_specifiy.sim +12,,script,./test.sh -f general/parser/select_across_vnodes.sim +12,,script,./test.sh -f general/insert/query_block1_memory.sim +12,,script,./test.sh -f general/insert/basic.sim +12,,script,./test.sh -f general/http/prepare.sim +12,,script,./test.sh -f general/field/binary.sim +12,,script,./test.sh -f general/field/6.sim +12,,script,./test.sh -f general/field/4.sim +12,2,script,./test.sh -f general/db/topic2.sim +12,,script,./test.sh -f general/db/alter_option.sim +12,,script,./test.sh -f general/connection/connection.sim +12,,script,./test.sh -f general/compute/max.sim +12,,script,./test.sh -f general/compute/leastsquare.sim +12,,script,./test.sh -f general/compute/last.sim +12,,script,./test.sh -f general/compute/bottom.sim +12,,pytest,python3 ./test.py -f update/allow_update-0.py +12,,pytest,python3 ./test.py -f query/udf.py +12,,pytest,python3 ./test.py -f query/queryLimit.py +12,,pytest,python3 ./test.py -f import_merge/importHead.py +12,,pytest,python3 ./test.py -f functions/function_top.py -r 1 +12,,pytest,python3 ./test.py -f functions/function_spread.py -r 1 +12,,pytest,python3 ./test.py -f functions/function_first.py -r 1 +11,,script,./test.sh -f unique/account/basic.sim +11,,script,./test.sh -f general/vector/table_time.sim +11,,script,./test.sh -f general/vector/table_field.sim +11,,script,./test.sh -f general/vector/multi.sim +11,,script,./test.sh -f general/vector/metrics_query.sim +11,,script,./test.sh -f general/vector/metrics_field.sim +11,,script,./test.sh -f general/table/vgroup.sim +11,,script,./test.sh -f general/table/table.sim +11,,script,./test.sh -f general/table/table_len.sim +11,,script,./test.sh -f general/table/int.sim +11,,script,./test.sh -f general/table/float.sim +11,,script,./test.sh -f general/table/double.sim +11,,script,./test.sh -f general/table/describe.sim +11,,script,./test.sh -f general/table/db.table.sim +11,,script,./test.sh -f general/table/date.sim +11,,script,./test.sh -f general/table/createmulti.sim +11,,script,./test.sh -f general/table/column_value.sim +11,,script,./test.sh -f general/table/column_name.sim +11,,script,./test.sh -f general/table/column2.sim +11,,script,./test.sh -f general/table/bool.sim +11,,script,./test.sh -f general/table/binary.sim +11,,script,./test.sh -f general/table/basic3.sim +11,,script,./test.sh -f general/table/basic1.sim +11,,script,./test.sh -f general/table/autocreate.sim +11,,script,./test.sh -f general/stable/vnode3.sim +11,,script,./test.sh -f general/parser/udf_dll_stable.sim +11,,script,./test.sh -f general/parser/select_distinct_tag.sim +11,,script,./test.sh -f general/parser/insert_tb.sim +11,,script,./test.sh -f general/parser/import_commit2.sim +11,,script,./test.sh -f general/parser/import_commit1.sim +11,,script,./test.sh -f general/parser/having_child.sim +11,,script,./test.sh -f general/parser/binary_escapeCharacter.sim +11,,script,./test.sh -f general/parser/between_and.sim +11,,script,./test.sh -f general/parser/alter_stable.sim +11,,script,./test.sh -f general/insert/query_block2_memory.sim +11,,script,./test.sh -f general/field/tinyint.sim +11,,script,./test.sh -f general/field/single.sim +11,,script,./test.sh -f general/field/bigint.sim +11,,script,./test.sh -f general/db/len.sim +11,,script,./test.sh -f general/db/basic1.sim +11,,script,./test.sh -f general/compute/percentile.sim +11,,script,./test.sh -f general/compute/null.sim +11,,script,./test.sh -f general/compute/first.sim +11,,script,./test.sh -f general/compute/diff.sim +11,,script,./test.sh -f general/compute/count.sim +11,,script,./test.sh -f general/alter/import.sim +# 11,,pytest,python3 test.py -f tools/taosdemoAllTest/NanoTestCase/taosdemoTestSupportNanosubscribe.py +# 11,,pytest,python3 test.py -f subscribe/supertable.py +11,,pytest,python3 ./test.py -f functions/function_percentile2.py +10,,script,./test.sh -f unique/account/paras.sim +10,,script,./test.sh -f general/table/smallint.sim +10,,script,./test.sh -f general/table/column_num.sim +10,,script,./test.sh -f general/table/bigint.sim +10,,script,./test.sh -f general/table/basic2.sim +10,,script,./test.sh -f general/parser/udf.sim +10,,script,./test.sh -f general/parser/udf_dll.sim +10,,script,./test.sh -f general/parser/tags_filter.sim +10,,script,./test.sh -f general/parser/null_char.sim +10,,script,./test.sh -f general/parser/nchar.sim +10,,script,./test.sh -f general/parser/function.sim +10,,script,./test.sh -f general/parser/fill.sim +10,,script,./test.sh -f general/parser/create_tb.sim +10,,script,./test.sh -f general/parser/create_mt.sim +10,,script,./test.sh -f general/parser/alter.sim +10,,script,./test.sh -f general/http/autocreate.sim +10,,script,./test.sh -f general/db/basic5.sim +10,,script,./test.sh -f general/db/basic4.sim +10,,script,./test.sh -f general/db/basic3.sim +10,,script,./test.sh -f general/db/basic2.sim +10,,script,./test.sh -f general/compute/top.sim +10,,script,./test.sh -f general/compute/sum.sim +10,,pytest,python3 test.py -f tools/taosdumpTestNanoSupport.py +10,,pytest,python3 ./test.py -f query/bug1875.py +9,,script,./test.sh -f unique/stable/replica3_dnode6.sim +9,,script,./test.sh -f unique/account/account_create.sim +9,,script,./test.sh -f general/parser/stableOp.sim +9,,script,./test.sh -f general/parser/having.sim +9,,script,./test.sh -f general/parser/dbtbnameValidate.sim +9,,script,./test.sh -f general/parser/create_db.sim +9,,script,./test.sh -f general/compute/interval.sim +9,,pytest,python3 test.py -f tools/taosdumpTest.py +9,,pytest,python3 testCompress.py +9,,pytest,python3 ./test.py -f tag_lite/timestamp.py +9,,pytest,python3 ./test.py -f tag_lite/binary_binary.py +9,,pytest,python3 ./test.py -f query/queryJoin.py +9,,pytest,python3 ./test.py -f insert/metadataUpdate.py +9,,pytest,python3 ./test.py -f insert/insertFromCSV.py +9,,pytest,python3 test.py -f dbmgmt/nanoSecondCheck.py +8,,script,./test.sh -f unique/stable/replica2_vnode3.sim +# 8,,script,./test.sh -f general/parser/columnValue.sim +8,,pytest,python3 test.py -f tools/taosdumpTest2.py +8,,pytest,python3 ./test.py -f tag_lite/tinyint.py +8,,pytest,python3 ./test.py -f tag_lite/TestModifyTag.py +8,,pytest,python3 ./test.py -f tag_lite/set.py +8,,pytest,python3 ./test.py -f tag_lite/filter.py +8,,pytest,python3 ./test.py -f tag_lite/double.py +8,,pytest,python3 ./test.py -f tag_lite/delete.py +8,,pytest,python3 ./test.py -f tag_lite/commit.py +8,,pytest,python3 ./test.py -f tag_lite/column.py +8,,pytest,python3 ./test.py -f tag_lite/binary.py +8,,pytest,python3 ./test.py -f tag_lite/add.py +8,,pytest,python3 ./test.py -f tag_lite/5.py +8,,pytest,python3 ./test.py -f table/boundary.py +8,,pytest,python3 ./test.py -f insert/nchar-unicode.py +8,,pytest,python3 ./test.py -f insert/alterTableAndInsert.py +8,,pytest,python3 ./test.py -f import_merge/importHRestart.py +8,,pytest,python3 ./test.py -f import_merge/importHPORestart.py +8,,pytest,python3 ./test.py -f import_merge/importHORestart.py +8,,pytest,python3 ./test.py -f alter/alter_table_crash.py +7,,script,./test.sh -f unique/stable/replica2_dnode4.sim +7,,script,./test.sh -f general/db/delete.sim +7,,pytest,python3 testNoCompress.py +7,,pytest,python3 ./test.py -f tag_lite/int.py +7,,pytest,python3 ./test.py -f tag_lite/float.py +7,,pytest,python3 ./test.py -f tag_lite/bool.py +7,,pytest,python3 ./test.py -f tag_lite/6.py +7,,pytest,python3 ./test.py -f tag_lite/4.py +7,,pytest,python3 ./test.py -f tag_lite/3.py +7,,pytest,python3 ./test.py -f table/del_stable.py +7,,pytest,python3 ./test.py -f table/create.py +7,,pytest,python3 ./test.py -f table/create_db_from_normal_db.py +7,,pytest,python3 ./test.py -f table/column_num.py +7,,pytest,python3 ./test.py -f stream/showStreamExecTimeisNull.py +7,,pytest,python3 ./test.py -f query/querySort.py +7,,pytest,python3 ./test.py -f query/filterFloatAndDouble.py +7,,pytest,python3 ./test.py -f query/filterAllIntTypes.py +7,,pytest,python3 ./test.py -f insert/tinyint.py +7,,pytest,python3 ./test.py -f insert/modify_column.py +7,,pytest,python3 ./test.py -f insert/bug3654.py +7,,pytest,python3 ./test.py -f insert/binary.py +7,,pytest,python3 ./test.py -f insert/bigint.py +6,,pytest,python3 ./test.py -f update/updateWithClientMerge.py +6,,pytest,python3 ./test.py -f tag_lite/smallint.py +6,,pytest,python3 ./test.py -f tag_lite/int_float.py +6,,pytest,python3 ./test.py -f tag_lite/int_binary.py +6,,pytest,python3 ./test.py -f tag_lite/create-tags-boundary.py +6,,pytest,python3 ./test.py -f tag_lite/create.py +6,,pytest,python3 ./test.py -f tag_lite/bool_binary.py +6,,pytest,python3 ./test.py -f tag_lite/bigint.py +6,,pytest,python3 ./test.py -f table/max_table_length.py +6,,pytest,python3 ./test.py -f table/column_name.py +6,,pytest,python3 ./test.py -f stable/insert.py +6,,pytest,python3 test.py -f restful/restful_bind_db2.py +6,,pytest,python3 test.py -f restful/restful_bind_db1.py +6,,pytest,python3 ./test.py -f query/querySecondtscolumnTowherenow.py +6,,pytest,python3 ./test.py -f query/queryFilterTswithDateUnit.py +6,,pytest,python3 ./test.py -f query/natualInterval.py +6,,pytest,python3 ./test.py -f query/filter.py +6,,pytest,python3 ./test.py -f query/filterCombo.py +6,,pytest,python3 ./test.py -f query/computeErrorinWhere.py +6,,pytest,python3 ./test.py -f query/bug1876.py +6,,pytest,python3 ./test.py -f query/bug1874.py +6,,pytest,python3 ./test.py -f perfbenchmark/taosdemoInsert.py +6,,pytest,python3 ./test.py -f insert/specialSql.py +6,,pytest,python3 ./test.py -f insert/smallint.py +6,,pytest,python3 ./test.py -f insert/nchar.py +6,,pytest,python3 ./test.py -f insert/multi.py +6,,pytest,python3 ./test.py -f insert/line_insert.py +6,,pytest,python3 ./test.py -f insert/in_function.py +6,,pytest,python3 ./test.py -f insert/date.py +6,,pytest,python3 ./test.py -f import_merge/importHeadPartOverlap.py +6,,pytest,python3 ./test.py -f import_merge/importHeadOverlap.py +6,,pytest,python3 bug2265.py +5,,pytest,python3 ./test.py -f wal/addOldWalTest.py +5,,pytest,python3 ./test.py -f user/user_create.py +5,,pytest,python3 ./test.py -f user/pass_len.py +5,,pytest,python3 ./test.py -f tag_lite/unsignedSmallint.py +5,,pytest,python3 ./test.py -f tag_lite/unsignedInt.py +5,,pytest,python3 ./test.py -f tag_lite/change.py +5,,pytest,python3 ./test.py -f tag_lite/bool_int.py +5,,pytest,python3 ./test.py -f table/tablename-boundary.py +5,,pytest,python3 ./test.py -f table/db_table.py +5,,pytest,python3 ./test.py -f table/create_sensitive.py +5,,pytest,python3 ./test.py -f table/alter_column.py +5,,pytest,python3 ./test.py -f query/unionAllTest.py +5,,pytest,python3 ./test.py -f query/querySession.py +5,,pytest,python3 ./test.py -f query/queryError.py +5,,pytest,python3 ./test.py -f query/queryBetweenAnd.py +5,,pytest,python3 ./test.py -f query/queryBase.py +5,,pytest,python3 ./test.py -f query/operator_cost.py +5,,pytest,python3 ./test.py -f query/nestquery_last_row.py +5,,pytest,python3 test.py -f query/nestedQuery/queryWithSpread.py +5,,pytest,python3 ./test.py -f query/nestedQuery/queryInterval.py +5,,pytest,python3 ./test.py -f query/isNullTest.py +5,,pytest,python3 ./test.py -f query/floatCompare.py +5,,pytest,python3 ./test.py -f query/filterOtherTypes.py +5,,pytest,python3 ./test.py -f query/bug3375.py +5,,pytest,python3 ./test.py -f query/bug2218.py +5,,pytest,python3 ./test.py -f query/bug2143.py +5,,pytest,python3 ./test.py -f query/bug2118.py +5,,pytest,python3 ./test.py -f query/bug2117.py +5,,pytest,python3 ./test.py -f insert/unsignedInt.py +5,,pytest,python3 ./test.py -f insert/timestamp.py +5,,pytest,python3 ./test.py -f insert/special_character_show.py +5,,pytest,python3 ./test.py -f insert/int.py +5,,pytest,python3 ./test.py -f insert/insertIntoTwoTables.py +5,,pytest,python3 ./test.py -f insert/insertDynamicColBeforeVal.py +5,,pytest,python3 test.py -f insert/insert_before_use_db.py +5,,pytest,python3 ./test.py -f insert/float.py +5,,pytest,python3 ./test.py -f insert/double.py +5,,pytest,python3 ./test.py -f insert/bool.py +5,,pytest,python3 ./test.py -f functions/function_stddev_td2555.py +5,,pytest,python3 ./test.py -f functions/function_stateWindow.py +5,,pytest,python3 ./test.py -f functions/function_irate.py +5,,pytest,python3 ./test.py -f functions/function_derivative.py +5,,pytest,python3 ./test.py -f client/client.py +5,,pytest,python3 test.py -f alter/alter_keep.py +4,,script,./test.sh -f general/parser/alter1.sim +4,,pytest,python3 ./test.py -f topic/topicQuery.py +4,,pytest,python3 testMinTablesPerVnode.py +4,,pytest,python3 ./test.py -f tag_lite/unsignedTinyint.py +4,,pytest,python3 ./test.py -f tag_lite/unsignedBigint.py +4,,pytest,python3 ./test.py -f tag_lite/drop_auto_create.py +4,,pytest,python3 ./test.py -f tag_lite/alter_tag.py +# 4,,pytest,python3 test.py -f subscribe/singlemeter.py +4,,pytest,python3 ./test.py -f query/ts_2016.py +4,,pytest,python3 ./test.py -f query/subqueryFilter.py +4,,pytest,python3 ./test.py -f query/queryWildcardLength.py +4,,pytest,python3 ./test.py -f query/queryTsisNull.py +4,,pytest,python3 ./test.py -f query/queryTbnameUpperLower.py +4,,pytest,python3 ./test.py -f query/queryStateWindow.py +4,,pytest,python3 ./test.py -f query/queryStableJoin.py +4,,pytest,python3 ./test.py -f query/queryPriKey.py +4,,pytest,python3 ./test.py -f query/queryGroupTbname.py +4,,pytest,python3 ./test.py -f query/queryGroupbyWithInterval.py +4,,pytest,python3 test.py -f query/queryFillTest.py +4,,pytest,python3 ./test.py -f query/queryCountCSVData.py +4,,pytest,python3 ./test.py -f query/queryCnameDisplay.py +4,,pytest,python3 ./test.py -f query/filterAllUnsignedIntTypes.py +4,,pytest,python3 ./test.py -f query/bug6586.py +4,,pytest,python3 ./test.py -f query/bug3351.py +4,,pytest,python3 ./test.py -f query/bug2281.py +4,,pytest,python3 ./test.py -f query/bug2119.py +4,,pytest,python3 ./test.py -f insert/unsignedTinyint.py +4,,pytest,python3 ./test.py -f insert/unsignedSmallint.py +4,,pytest,python3 ./test.py -f insert/unsignedBigint.py +4,,pytest,python3 ./test.py -f insert/insert_locking.py +4,,pytest,python3 ./test.py -f insert/basic.py +4,,pytest,python3 ./test.py -f functions/showOfflineThresholdIs864000.py +4,,pytest,python3 ./test.py -f functions/function_twa_test2.py +4,,pytest,python3 ./test.py -f functions/function_count_last_stab.py +4,,pytest,python3 ./test.py -f functions/all_null_value.py +4,,pytest,python3 ./test.py -f client/version.py +4,,pytest,python3 client/twoClients.py +4,,pytest,python3 ./test.py -f client/alterDatabase.py +4,,pytest,python3 ./test.py -f alter/alter_table.py +4,,pytest,python3 test.py -f alter/alter_create_exception.py +4,,pytest,python3 ./test.py -f alter/alterColMultiTimes.py +3,,pytest,python3 ./test.py -f query/sliding.py +3,,pytest,python3 ./test.py -f query/queryGroupbySort.py +3,,pytest,python3 ./test.py -f alter/alterTimestampColDataProcess.py +3,,pytest,python3 ./test.py -f alter/alterTabAddTagWithNULL.py +3,,pytest,python3 ./test.py -f alter/alter_debugFlag.py +3,,pytest,python3 ./test.py -f account/account_create.py diff --git a/tests/parallel_test/m.json b/tests/parallel_test/m.json new file mode 100644 index 0000000000000000000000000000000000000000..f86c571728962783867680901dfa2611c37e660e --- /dev/null +++ b/tests/parallel_test/m.json @@ -0,0 +1,30 @@ +[{ + "host":"192.168.0.210", + "username":"root", + "workdir":"/var/data/jenkins/workspace", + "thread":25 +}, +{ + "host":"192.168.0.211", + "username":"root", + "workdir":"/var/data/jenkins/workspace", + "thread":25 +}, +{ + "host":"192.168.0.212", + "username":"root", + "workdir":"/var/data/jenkins/workspace", + "thread":25 +}, +{ + "host":"192.168.0.213", + "username":"root", + "workdir":"/var/data/jenkins/workspace", + "thread":25 +}, +{ + "host":"192.168.0.214", + "username":"root", + "workdir":"/var/data/jenkins/workspace", + "thread":25 +}] diff --git a/tests/parallel_test/run.sh b/tests/parallel_test/run.sh new file mode 100755 index 0000000000000000000000000000000000000000..582615f62d84eea218dd3bab27421f380d211865 --- /dev/null +++ b/tests/parallel_test/run.sh @@ -0,0 +1,354 @@ +#!/bin/bash + +function usage() { + echo "$0" + echo -e "\t -m vm config file" + echo -e "\t -t task file" + echo -e "\t -b branch" + echo -e "\t -l log dir" + echo -e "\t -h help" +} + +while getopts "m:t:b:l:h" opt; do + case $opt in + m) + config_file=$OPTARG + ;; + t) + t_file=$OPTARG + ;; + b) + branch=$OPTARG + ;; + l) + log_dir=$OPTARG + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done +#config_file=$1 +if [ -z $config_file ]; then + usage + exit 1 +fi +if [ ! -f $config_file ]; then + echo "$config_file not found" + usage + exit 1 +fi +#t_file=$2 +if [ -z $t_file ]; then + usage + exit 1 +fi +if [ ! -f $t_file ]; then + echo "$t_file not found" + usage + exit 1 +fi +date_tag=`date +%Y%m%d-%H%M%S` +if [ -z $log_dir ]; then + log_dir="log/${branch}_${date_tag}" +else + log_dir="$log_dir/${branch}_${date_tag}" +fi + +hosts=() +usernames=() +passwords=() +workdirs=() +threads=() + +i=0 +while [ 1 ]; do + host=`jq .[$i].host $config_file` + if [ "$host" = "null" ]; then + break + fi + username=`jq .[$i].username $config_file` + if [ "$username" = "null" ]; then + break + fi + password=`jq .[$i].password $config_file` + if [ "$password" = "null" ]; then + password="" + fi + workdir=`jq .[$i].workdir $config_file` + if [ "$workdir" = "null" ]; then + break + fi + thread=`jq .[$i].thread $config_file` + if [ "$thread" = "null" ]; then + break + fi + hosts[i]=`echo $host|sed 's/\"$//'|sed 's/^\"//'` + usernames[i]=`echo $username|sed 's/\"$//'|sed 's/^\"//'` + passwords[i]=`echo $password|sed 's/\"$//'|sed 's/^\"//'` + workdirs[i]=`echo $workdir|sed 's/\"$//'|sed 's/^\"//'` + threads[i]=$thread + i=$(( i + 1 )) +done + + +function prepare_cases() { + cat $t_file >>$task_file + local i=0 + while [ $i -lt $1 ]; do + echo "%%FINISHED%%" >>$task_file + i=$(( i + 1 )) + done +} + +function clean_tmp() { + # clean tmp dir + local index=$1 + local ssh_script="sshpass -p ${passwords[index]} ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + if [ -z ${passwords[index]} ]; then + ssh_script="ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + fi + local cmd="${ssh_script} rm -rf ${workdirs[index]}/tmp" + ${cmd} +} +# build source +function build_src() { + echo "build source" + local index=$1 + local ssh_script="sshpass -p ${passwords[index]} ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + if [ -z ${passwords[index]} ]; then + ssh_script="ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + fi + local script=". ~/.bashrc;cd ${workdirs[index]}/TDinternal;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true;make -j8;make install" + local cmd="${ssh_script} sh -c \"$script\"" + echo "$cmd" + ${cmd} + if [ $? -ne 0 ]; then + flock -x $lock_file -c "echo \"${hosts[index]} TDengine build failed\" >>$log_dir/failed.log" + return + fi + script=". ~/.bashrc;cd ${workdirs[index]}/taos-tools;git submodule update --init --recursive;mkdir -p build;cd build;cmake ..;make -j4" + cmd="${ssh_script} sh -c \"$script\"" + ${cmd} + if [ $? -ne 0 ]; then + flock -x $lock_file -c "echo \"${hosts[index]} taos-tools build failed\" >>$log_dir/failed.log" + return + fi + script="cp -rf ${workdirs[index]}/taos-tools/build/build/bin/* ${workdirs[index]}/TDinternal/debug/build/bin/;cp -rf ${workdirs[index]}/taos-tools/build/build/lib/* ${workdirs[index]}/TDinternal/debug/build/lib/;cp -rf ${workdirs[index]}/taos-tools/build/build/lib64/* ${workdirs[index]}/TDinternal/debug/build/lib/;cp -rf ${workdirs[index]}/TDinternal/debug/build/bin/demo ${workdirs[index]}/TDinternal/debug/build/bin/taosdemo" + cmd="${ssh_script} sh -c \"$script\"" + ${cmd} +} +function rename_taosdemo() { + local index=$1 + local ssh_script="sshpass -p ${passwords[index]} ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + if [ -z ${passwords[index]} ]; then + ssh_script="ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + fi + local script="cp -rf ${workdirs[index]}/TDinternal/debug/build/bin/demo ${workdirs[index]}/TDinternal/debug/build/bin/taosdemo" + cmd="${ssh_script} sh -c \"$script\"" + ${cmd} +} + +function run_thread() { + local index=$1 + local thread_no=$2 + local runcase_script="sshpass -p ${passwords[index]} ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + if [ -z ${passwords[index]} ]; then + runcase_script="ssh -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}" + fi + local count=0 + local script="${workdirs[index]}/TDinternal/community/tests/parallel_test/run_container.sh" + local cmd="${runcase_script} ${script}" + + # script="echo" + while [ 1 ]; do + local line=`flock -x $lock_file -c "head -n1 $task_file;sed -i \"1d\" $task_file"` + if [ "x$line" = "x%%FINISHED%%" ]; then + # echo "$index . $thread_no EXIT" + break + fi + if [ -z "$line" ]; then + continue + fi + echo "$line"|grep -q "^#" + if [ $? -eq 0 ]; then + continue + fi + local case_redo_time=`echo "$line"|cut -d, -f2` + if [ -z "$case_redo_time" ]; then + case_redo_time=1 + fi + local exec_dir=`echo "$line"|cut -d, -f3` + local case_cmd=`echo "$line"|cut -d, -f4` + local case_file="" + echo "$case_cmd"|grep -q "^python3" + if [ $? -eq 0 ]; then + case_file=`echo "$case_cmd"|grep -o ".*\.py"|awk '{print $NF}'` + fi + echo "$case_cmd"|grep -q "\.sim" + if [ $? -eq 0 ]; then + case_file=`echo "$case_cmd"|grep -o ".*\.sim"|awk '{print $NF}'` + fi + if [ -z "$case_file" ]; then + case_file=`echo "$case_cmd"|awk '{print $NF}'` + fi + if [ -z "$case_file" ]; then + continue + fi + case_file="$exec_dir/${case_file}.${index}.${thread_no}" + count=$(( count + 1 )) + local case_path=`dirname "$case_file"` + if [ ! -z "$case_path" ]; then + mkdir -p $log_dir/$case_path + fi + cmd="${runcase_script} ${script} -w ${workdirs[index]} -c \"${case_cmd}\" -t ${thread_no} -d ${exec_dir}" + # echo "$thread_no $count $cmd" + local ret=0 + local redo_count=1 + start_time=`date +%s` + while [ ${redo_count} -lt 6 ]; do + echo "${hosts[index]}-${thread_no} order:${count}, redo:${redo_count} task:${line}" >$log_dir/$case_file.log + echo -e "\e[33m >>>>> \e[0m ${case_cmd}" + date >>$log_dir/$case_file.log + # $cmd 2>&1 | tee -a $log_dir/$case_file.log + # ret=${PIPESTATUS[0]} + $cmd >>$log_dir/$case_file.log 2>&1 + ret=$? + if [ $ret -eq 0 ]; then + break + fi + redo=0 + grep -q "wait too long for taosd start" $log_dir/$case_file.log + if [ $? -eq 0 ]; then + redo=1 + fi + grep -q "kex_exchange_identification: Connection closed by remote host" $log_dir/$case_file.log + if [ $? -eq 0 ]; then + redo=1 + fi + grep -q "kex_exchange_identification: read: Connection reset by peer" $log_dir/$case_file.log + if [ $? -eq 0 ]; then + redo=1 + fi + grep -q "Database not ready" $log_dir/$case_file.log + if [ $? -eq 0 ]; then + redo=1 + fi + grep -q "Unable to establish connection" $log_dir/$case_file.log + if [ $? -eq 0 ]; then + redo=1 + fi + if [ $redo_count -lt $case_redo_time ]; then + redo=1 + fi + if [ $redo -eq 0 ]; then + break + fi + redo_count=$(( redo_count + 1 )) + done + end_time=`date +%s` + echo >>$log_dir/$case_file.log + echo "${hosts[index]} execute time: $(( end_time - start_time ))s" >>$log_dir/$case_file.log + # echo "$thread_no ${line} DONE" + if [ $ret -ne 0 ]; then + flock -x $lock_file -c "echo \"${hosts[index]} ret:${ret} ${line}\" >>$log_dir/failed.log" + mkdir -p $log_dir/${case_file}.coredump + local remote_coredump_dir="${workdirs[index]}/tmp/thread_volume/$thread_no/coredump" + cmd="sshpass -p ${passwords[index]} scp -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}:${remote_coredump_dir}/* $log_dir/${case_file}.coredump/" + if [ -z ${passwords[index]} ]; then + cmd="scp -o StrictHostKeyChecking=no ${usernames[index]}@${hosts[index]}:${remote_coredump_dir}/* $log_dir/${case_file}.coredump/" + fi + $cmd # 2>/dev/null + local case_info=`echo "$line"|cut -d, -f 3,4` + local corefile=`ls $log_dir/${case_file}.coredump/` + corefile=`find $log_dir/${case_file}.coredump/ -name "core.*"` + echo -e "$case_info \e[31m failed\e[0m" + echo "=========================log============================" + cat $log_dir/$case_file.log + echo "=====================================================" + echo -e "\e[34m log file: $log_dir/$case_file.log \e[0m" + if [ ! -z $corefile ]; then + echo -e "\e[34m corefiles: $corefile \e[0m" + fi + fi + done +} + +# echo "hosts: ${hosts[@]}" +# echo "usernames: ${usernames[@]}" +# echo "passwords: ${passwords[@]}" +# echo "workdirs: ${workdirs[@]}" +# echo "threads: ${threads[@]}" +# TODO: check host accessibility + +i=0 +while [ $i -lt ${#hosts[*]} ]; do + clean_tmp $i & + i=$(( i + 1 )) +done +wait + +mkdir -p $log_dir +rm -rf $log_dir/* +task_file=$log_dir/$$.task +lock_file=$log_dir/$$.lock + +i=0 +while [ $i -lt ${#hosts[*]} ]; do + # build_src $i & + rename_taosdemo $i & + i=$(( i + 1 )) +done +wait +# if [ -f "$log_dir/failed.log" ]; then +# cat $log_dir/failed.log +# exit 1 +# fi + +i=0 +j=0 +while [ $i -lt ${#hosts[*]} ]; do + j=$(( j + threads[i] )) + i=$(( i + 1 )) +done +prepare_cases $j + +i=0 +while [ $i -lt ${#hosts[*]} ]; do + j=0 + while [ $j -lt ${threads[i]} ]; do + run_thread $i $j & + j=$(( j + 1 )) + done + i=$(( i + 1 )) +done + +wait + +rm -f $lock_file +rm -f $task_file + +# docker ps -a|grep -v CONTAINER|awk '{print $1}'|xargs docker rm -f +RET=0 +i=1 +if [ -f "$log_dir/failed.log" ]; then + echo "=====================================================" + while read line; do + line=`echo "$line"|cut -d, -f 3,4` + echo -e "$i. $line \e[31m failed\e[0m" >&2 + i=$(( i + 1 )) + done <$log_dir/failed.log + RET=1 +fi + +echo "${log_dir}" >&2 + +date + +exit $RET diff --git a/tests/parallel_test/run_case.sh b/tests/parallel_test/run_case.sh new file mode 100755 index 0000000000000000000000000000000000000000..5884f400b50701bedb70a314e346a9ed93a6b2b3 --- /dev/null +++ b/tests/parallel_test/run_case.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +CONTAINER_TESTDIR=/home/community +# CONTAINER_TESTDIR=/root/tang/repository/TDengine + +# export PATH=$PATH:$CONTAINER_TESTDIR/debug/build/bin + +function usage() { + echo "$0" + echo -e "\t -d execution dir" + echo -e "\t -c command" + echo -e "\t -h help" +} + +while getopts "d:c:h" opt; do + case $opt in + d) + exec_dir=$OPTARG + ;; + c) + cmd=$OPTARG + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done + +if [ -z "$exec_dir" ]; then + usage + exit 0 +fi +if [ -z "$cmd" ]; then + usage + exit 0 +fi + +go env -w GOPROXY=https://goproxy.cn +echo "StrictHostKeyChecking no" >>/etc/ssh/ssh_config +ln -s $CONTAINER_TESTDIR/debug/build/lib/libtaos.so /usr/lib/libtaos.so +npm config -g set unsafe-perm +npm config -g set registry https://registry.npm.taobao.org +mkdir -p /home/sim/tsim + +# echo "$cmd"|grep -q "nodejs" +# if [ $? -eq 0 ]; then +# cd $CONTAINER_TESTDIR/src/connector/nodejs +# npm install node-gyp-build@4.3.0 --ignore-scripts +# fi + +cd $CONTAINER_TESTDIR/tests/$exec_dir +ulimit -c unlimited + +$cmd +RET=$? + +if [ $RET -ne 0 ]; then + pwd +fi + +exit $RET + diff --git a/tests/parallel_test/run_container.sh b/tests/parallel_test/run_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..35e214d4ab4696a54be8bfb47216f13071bd803d --- /dev/null +++ b/tests/parallel_test/run_container.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +function usage() { + echo "$0" + echo -e "\t -w work dir" + echo -e "\t -d execution dir" + echo -e "\t -c command" + echo -e "\t -t thread number" + echo -e "\t -h help" +} + +while getopts "w:d:c:t:h" opt; do + case $opt in + w) + WORKDIR=$OPTARG + ;; + d) + exec_dir=$OPTARG + ;; + c) + cmd=$OPTARG + ;; + t) + thread_no=$OPTARG + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done + +if [ -z "$WORKDIR" ]; then + usage + exit 1 +fi +if [ -z "$exec_dir" ]; then + usage + exit 1 +fi +if [ -z "$cmd" ]; then + usage + exit 1 +fi +if [ -z "$thread_no" ]; then + usage + exit 1 +fi + +ulimit -c unlimited + +INTERNAL_REPDIR=$WORKDIR/TDinternal +REPDIR=$INTERNAL_REPDIR/community +CONTAINER_TESTDIR=/home/community +TMP_DIR=$WORKDIR/tmp + +MOUNT_DIR="" +mkdir -p ${TMP_DIR}/thread_volume/$thread_no/sim/tsim +mkdir -p ${TMP_DIR}/thread_volume/$thread_no/node_modules +mkdir -p ${TMP_DIR}/thread_volume/$thread_no/coredump +rm -rf ${TMP_DIR}/thread_volume/$thread_no/coredump/* +if [ ! -d "${TMP_DIR}/thread_volume/$thread_no/$exec_dir" ]; then + subdir=`echo "$exec_dir"|cut -d/ -f1` + echo "cp -rf ${REPDIR}/tests/$subdir ${TMP_DIR}/thread_volume/$thread_no/" + cp -rf ${REPDIR}/tests/$subdir ${TMP_DIR}/thread_volume/$thread_no/ +fi +MOUNT_DIR="$TMP_DIR/thread_volume/$thread_no/$exec_dir:$CONTAINER_TESTDIR/tests/$exec_dir" +echo "$thread_no -> ${exec_dir}:$cmd" +echo "$cmd"|grep -q "nodejs" +if [ $? -eq 0 ]; then + MOUNT_NODE_MOD="-v $TMP_DIR/thread_volume/$thread_no/node_modules:${CONTAINER_TESTDIR}/src/connector/nodejs/node_modules \ +-v $TMP_DIR/thread_volume/$thread_no/node_modules:${CONTAINER_TESTDIR}/tests/examples/nodejs/node_modules \ +-v $TMP_DIR/thread_volume/$thread_no/node_modules:${CONTAINER_TESTDIR}/tests/connectorTest/nodejsTest/nanosupport/node_modules" +fi + +docker run \ + -v $REPDIR/tests:$CONTAINER_TESTDIR/tests \ + -v $MOUNT_DIR \ + -v "$TMP_DIR/thread_volume/$thread_no/sim:${CONTAINER_TESTDIR}/sim" \ + -v ${TMP_DIR}/thread_volume/$thread_no/coredump:/home/coredump \ + -v $INTERNAL_REPDIR/debug:$CONTAINER_TESTDIR/debug:ro \ + -v $REPDIR/deps:$CONTAINER_TESTDIR/deps:ro \ + -v $REPDIR/src:$CONTAINER_TESTDIR/src \ + -v $REPDIR/src/inc/taos.h:/usr/include/taos.h:ro \ + -v $REPDIR/tests/examples:$CONTAINER_TESTDIR/tests/examples \ + -v $REPDIR/snap:$CONTAINER_TESTDIR/snap:ro \ + -v $REPDIR/alert:$CONTAINER_TESTDIR/alert:ro \ + -v $REPDIR/packaging/cfg/taos.cfg:/etc/taos/taos.cfg:ro \ + -v $REPDIR/README.md:$CONTAINER_TESTDIR/README.md:ro \ + -v $REPDIR/src/connector/python/taos:/usr/local/lib/python3.8/site-packages/taos:ro \ + -e LD_LIBRARY_PATH=$CONTAINER_TESTDIR/debug/build/lib:$CONTAINER_TESTDIR/debug/build/lib64 \ + -e PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$CONTAINER_TESTDIR/debug/build/bin:/usr/local/go/bin:/usr/local/node-v12.20.0-linux-x64/bin:/usr/local/apache-maven-3.8.4/bin:/usr/local/jdk1.8.0_144/bin \ + -e JAVA_HOME=/usr/local/jdk1.8.0_144 \ + --rm --ulimit core=-1 taos_test:v1.0 $CONTAINER_TESTDIR/tests/parallel_test/run_case.sh -d "$exec_dir" -c "$cmd" +ret=$? +exit $ret +