192 lines
5.5 KiB
Bash
Executable File
192 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
today=`date +"%Y%m%d"`
|
|
TDENGINE_DIR=/home/shuduo/work/taosdata/TDengine.orig
|
|
TDENGINE_FULLTEST_REPORT=$TDENGINE_DIR/tests/full-report-$today.log
|
|
|
|
# Color setting
|
|
RED='\033[0;31m'
|
|
GREEN='\033[1;32m'
|
|
GREEN_DARK='\033[0;32m'
|
|
GREEN_UNDERLINE='\033[4;32m'
|
|
NC='\033[0m'
|
|
|
|
function buildTDengine {
|
|
echo "check if TDengine need build"
|
|
|
|
need_rebuild=false
|
|
|
|
if [ ! -d $TDENGINE_DIR ]; then
|
|
echo "No TDengine source code found!"
|
|
git clone https://github.com/taosdata/TDengine $TDENGINE_DIR
|
|
need_rebuild=true
|
|
fi
|
|
|
|
cd $TDENGINE_DIR
|
|
git remote prune origin > /dev/null
|
|
git remote update > /dev/null
|
|
REMOTE_COMMIT=`git rev-parse --short remotes/origin/develop`
|
|
LOCAL_COMMIT=`git rev-parse --short @`
|
|
echo " LOCAL: $LOCAL_COMMIT"
|
|
echo "REMOTE: $REMOTE_COMMIT"
|
|
|
|
if [ "$LOCAL_COMMIT" == "$REMOTE_COMMIT" ]; then
|
|
echo "repo up-to-date"
|
|
else
|
|
echo "repo need to pull"
|
|
git pull
|
|
need_rebuild=true
|
|
fi
|
|
|
|
[ -d $TDENGINE_DIR/debug ] || mkdir $TDENGINE_DIR/debug
|
|
cd $TDENGINE_DIR/debug
|
|
[ -f $TDENGINE_DIR/debug/build/bin/taosd ] || need_rebuild=true
|
|
|
|
if $need_rebuild ; then
|
|
echo "rebuild.."
|
|
|
|
LOCAL_COMMIT=`git rev-parse --short @`
|
|
rm -rf *
|
|
cmake .. > /dev/null
|
|
make > /dev/null
|
|
fi
|
|
|
|
make install > /dev/null
|
|
}
|
|
|
|
function runGeneralCaseOneByOne {
|
|
while read -r line; do
|
|
if [[ $line =~ ^./test.sh* ]]; then
|
|
general_case=`echo $line | grep -w general`
|
|
|
|
if [ -n "$general_case" ]; then
|
|
case=`echo $line | awk '{print $NF}'`
|
|
|
|
start_time=`date +%s`
|
|
./test.sh -f $case > /dev/null 2>&1 && ret=0 || ret = 1
|
|
end_time=`date +%s`
|
|
|
|
if [[ ret -eq 0 ]]; then
|
|
echo -e "${GREEN}$case success${NC}" | tee -a $TDENGINE_FULLTEST_REPORT
|
|
else
|
|
casename=`echo $case|sed 's/\//\-/g'`
|
|
find $TDENGINE_DIR/sim -name "*log" -exec tar czf $TDENGINE_DIR/fulltest-$today-$casename.log.tar.gz {} +
|
|
echo -e "${RED}$case failed and log saved${NC}" | tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
echo execution time of $case was `expr $end_time - $start_time`s. | tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
fi
|
|
done < $1
|
|
}
|
|
|
|
function runPyCaseOneByOne {
|
|
while read -r line; do
|
|
if [[ $line =~ ^python.* ]]; then
|
|
if [[ $line != *sleep* ]]; then
|
|
case=`echo $line|awk '{print $NF}'`
|
|
start_time=`date +%s`
|
|
$line > /dev/null 2>&1 && ret=0 || ret=1
|
|
end_time=`date +%s`
|
|
|
|
if [[ ret -eq 0 ]]; then
|
|
echo -e "${GREEN}$case success${NC}" | tee -a pytest-out.log
|
|
else
|
|
casename=`echo $case|sed 's/\//\-/g'`
|
|
find $TDENGINE_DIR/sim -name "*log" -exec tar czf $TDENGINE_DIR/fulltest-$today-$casename.log.tar.gz {} +
|
|
echo -e "${RED}$case failed and log saved${NC}" | tee -a pytest-out.log
|
|
fi
|
|
echo execution time of $case was `expr $end_time - $start_time`s. | tee -a pytest-out.log
|
|
else
|
|
$line > /dev/null 2>&1
|
|
fi
|
|
fi
|
|
done < $1
|
|
}
|
|
|
|
function runTest {
|
|
echo "Run Test"
|
|
cd $TDENGINE_DIR/tests/script
|
|
|
|
[ -d $TDENGINE_DIR/sim ] && rm -rf $TDENGINE_DIR/sim
|
|
[ -f $TDENGINE_FULLTEST_REPORT ] && rm $TDENGINE_FULLTEST_REPORT
|
|
|
|
runGeneralCaseOneByOne jenkins/basic.txt
|
|
|
|
totalSuccess=`grep 'success' $TDENGINE_FULLTEST_REPORT | wc -l`
|
|
|
|
if [ "$totalSuccess" -gt "0" ]; then
|
|
echo -e "\n${GREEN} ### Total $totalSuccess SIM case(s) succeed! ### ${NC}" \
|
|
| tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
|
|
totalFailed=`grep 'failed\|fault' $TDENGINE_FULLTEST_REPORT | wc -l`
|
|
if [ "$totalFailed" -ne "0" ]; then
|
|
echo -e "${RED} ### Total $totalFailed SIM case(s) failed! ### ${NC}\n" \
|
|
| tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
|
|
cd $TDENGINE_DIR/tests/pytest
|
|
[ -d $TDENGINE_DIR/sim ] && rm -rf $TDENGINE_DIR/sim
|
|
[ -f pytest-out.log ] && rm -f pytest-out.log
|
|
runPyCaseOneByOne fulltest.sh
|
|
|
|
totalPySuccess=`grep 'success' pytest-out.log | wc -l`
|
|
totalPyFailed=`grep 'failed\|fault' pytest-out.log | wc -l`
|
|
|
|
cat pytest-out.log >> $TDENGINE_FULLTEST_REPORT
|
|
if [ "$totalPySuccess" -gt "0" ]; then
|
|
echo -e "\n${GREEN} ### Total $totalPySuccess python case(s) succeed! ### ${NC}" \
|
|
| tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
|
|
if [ "$totalPyFailed" -ne "0" ]; then
|
|
echo -e "\n${RED} ### Total $totalPyFailed python case(s) failed! ### ${NC}" \
|
|
| tee -a $TDENGINE_FULLTEST_REPORT
|
|
fi
|
|
}
|
|
|
|
function sendReport {
|
|
echo "Send Report"
|
|
receiver="sdsang@taosdata.com, sangshuduo@gmail.com, pxiao@taosdata.com"
|
|
mimebody="MIME-Version: 1.0\nContent-Type: text/html; charset=utf-8\n"
|
|
|
|
cd $TDENGINE_DIR/tests
|
|
|
|
sed -i 's/\x1b\[[0-9;]*m//g' $TDENGINE_FULLTEST_REPORT
|
|
BODY_CONTENT=`cat $TDENGINE_FULLTEST_REPORT`
|
|
|
|
cd $TDENGINE_DIR
|
|
tar czf fulltest-$today.tar.gz fulltest-$today-*.log.tar.gz
|
|
|
|
echo -e "to: ${receiver}\nsubject: Full test report ${today}, commit ID: ${LOCAL_COMMIT}\n\n${today}:\n${BODY_CONTENT}" | \
|
|
(cat - && uuencode $TDENGINE_FULLTEST_REPORT fulltest-report-$today.log) | \
|
|
(cat - && uuencode $TDENGINE_DIR/fulltest-$today.tar.gz fulltest-$today.tar.gz) | \
|
|
ssmtp "${receiver}" && echo "Report Sent!"
|
|
}
|
|
|
|
function stopTaosd {
|
|
echo "Stop taosd"
|
|
systemctl stop taosd
|
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
|
while [ -n "$PID" ]
|
|
do
|
|
pkill -TERM -x taosd
|
|
sleep 1
|
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
|
done
|
|
}
|
|
|
|
WORK_DIR=/home/shuduo/work/taosdata
|
|
|
|
date >> $WORK_DIR/cron.log
|
|
echo "Run Full Test" | tee -a $WORK_DIR/cron.log
|
|
|
|
stopTaosd
|
|
buildTDengine
|
|
runTest
|
|
sendReport
|
|
stopTaosd
|
|
|
|
date >> $WORK_DIR/cron.log
|
|
echo "End of Full Test" | tee -a $WORK_DIR/cron.log
|