From dd0a0861514f1f230f3d2fafc500b9e9085923ae Mon Sep 17 00:00:00 2001 From: tangfangzhi Date: Tue, 8 Mar 2022 14:18:56 +0800 Subject: [PATCH] compatibility test scripts --- tests/compatibility/init.sh | 118 ++++++++++++++++ tests/compatibility/init_container.sh | 105 ++++++++++++++ tests/compatibility/run_test.sh | 188 ++++++++++++++++++++++++++ tests/compatibility/settings.sh | 5 + 4 files changed, 416 insertions(+) create mode 100755 tests/compatibility/init.sh create mode 100755 tests/compatibility/init_container.sh create mode 100755 tests/compatibility/run_test.sh create mode 100644 tests/compatibility/settings.sh diff --git a/tests/compatibility/init.sh b/tests/compatibility/init.sh new file mode 100755 index 0000000000..1aa4930fcb --- /dev/null +++ b/tests/compatibility/init.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +function usage() { + echo "$0" + echo -e "\t -w work dir" + echo -e "\t -o old version package" + echo -e "\t -n new version package" + echo -e "\t -c client package" + echo -e "\t -h help" +} + +while getopts "w:o:n:c:h" opt; do + case $opt in + w) + WORK_DIR=$OPTARG + ;; + o) + TAOS_PKG1=$OPTARG + ;; + n) + TAOS_PKG2=$OPTARG + ;; + c) + CLIENT_PKG=$OPTARG + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done + +if [ -z "$WORK_DIR" ]; then + usage + exit 1 +fi +if [ -z "$TAOS_PKG1" ]; then + usage + exit 1 +fi +if [ -z "$TAOS_PKG2" ]; then + usage + exit 1 +fi +if [ ! -z "$CLIENT_PKG" ]; then + if [ ! -f "$CLIENT_PKG" ]; then + echo "$CLIENT_PKG not found" + exit 1 + fi +fi + +script_dir=`dirname $0` +cd $script_dir + +source settings.sh + +code_dir=$WORK_DIR/TDinternal +container_workdir1=$WORK_DIR/compatibility/$container_name1 +container_workdir2=$WORK_DIR/compatibility/$container_name2 +container_workdir3=$WORK_DIR/compatibility/$container_name3 +container_workdir4=$WORK_DIR/compatibility/$container_name4 + + +mkdir -p $container_workdir1 +mkdir -p $container_workdir2 +mkdir -p $container_workdir3 +mkdir -p $container_workdir4 + +docker rm -f $container_name1 >/dev/null 2>&1 +docker rm -f $container_name2 >/dev/null 2>&1 +docker rm -f $container_name3 >/dev/null 2>&1 +docker rm -f $container_name4 >/dev/null 2>&1 + +net_name=mynet +docker network create --driver bridge --subnet 172.31.30.0/24 --gateway 172.31.30.1 $net_name + +./init_container.sh -d $code_dir -w $container_workdir1 -p $TAOS_PKG1 -q $TAOS_PKG2 -n $net_name -c $container_name1 & +./init_container.sh -d $code_dir -w $container_workdir2 -p $TAOS_PKG1 -q $TAOS_PKG2 -n $net_name -c $container_name2 & +./init_container.sh -d $code_dir -w $container_workdir3 -p $TAOS_PKG1 -q $TAOS_PKG2 -n $net_name -c $container_name3 & +./init_container.sh -d $code_dir -w $container_workdir4 -p $TAOS_PKG1 -q $TAOS_PKG2 -n $net_name -c $container_name4 & + +RET=0 +pids=`jobs -p` +for pid in $pids; do + wait $pid + status=$? + if [ $status -ne 0 ]; then + echo "init container $pid status is $status!" + RET=$status + fi +done + +if [ $RET -eq 0 ]; then + if [ -z "$CLIENT_PKG" ]; then + docker exec $container_name4 pip3 install /home/TDinternal/community/src/connector/python + RET=$? + else + pkg_name=`basename $CLIENT_PKG` + pkg_dir=`echo "$pkg_name"|sed "s/-Linux-x64.tar.gz//"` + docker cp $CLIENT_PKG $container_name4:/home/ + docker exec $container_name4 sh -c "cd /home;tar xzf $pkg_name;pip3 install /home/$pkg_dir/connector/python" + RET=$? + fi +fi + +if [ $RET -eq 0 ]; then + echo "containers created" +else + echo "containers create failed" +fi + +exit $RET + diff --git a/tests/compatibility/init_container.sh b/tests/compatibility/init_container.sh new file mode 100755 index 0000000000..ce1f70fee2 --- /dev/null +++ b/tests/compatibility/init_container.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +function usage() { + echo "$0" + echo -e "\t -w work dir" + echo -e "\t -d TDinternal code dir" + echo -e "\t -p old package" + echo -e "\t -q new package" + echo -e "\t -c container name" + echo -e "\t -h help" +} + +while getopts "w:p:q:n:c:d:h" opt; do + case $opt in + w) + WORK_DIR=$OPTARG + ;; + d) + CODE_DIR=$OPTARG + ;; + p) + TAOS_PKG1=$OPTARG + ;; + q) + TAOS_PKG2=$OPTARG + ;; + c) + CONTAINER_NAME=$OPTARG + ;; + n) + NET_NAME=$OPTARG + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done + +if [ -z "$WORK_DIR" ]; then + usage + exit 1 +fi +if [ -z "$TAOS_PKG1" ]; then + usage + exit 1 +fi +if [ -z "$TAOS_PKG2" ]; then + usage + exit 1 +fi +if [ -z "$CONTAINER_NAME" ]; then + usage + exit 1 +fi +if [ -z "$NET_NAME" ]; then + usage + exit 1 +fi +if [ -z "$CODE_DIR" ]; then + usage + exit 1 +fi +if [ ! -f "$TAOS_PKG1" ]; then + echo "$TAOS_PKG1 not found" + exit 1 +fi +if [ ! -f "$TAOS_PKG2" ]; then + echo "$TAOS_PKG2 not found" + exit 1 +fi + +pkg_name1=`basename $TAOS_PKG1` +pkg_dir1=`echo "$pkg_name1"|sed "s/-Linux-x64.tar.gz//"` +pkg_name2=`basename $TAOS_PKG2` +pkg_dir2=`echo "$pkg_name2"|sed "s/-Linux-x64.tar.gz//"` + +RET=0 +docker run -d --name $CONTAINER_NAME \ + --hostname $CONTAINER_NAME \ + --net $NET_NAME --ulimit core=-1 -it \ + -v $TAOS_PKG1:/home/tdengine1.tar.gz:ro \ + -v $TAOS_PKG2:/home/tdengine2.tar.gz:ro \ + -v $WORK_DIR/coredump:/home/coredump \ + -v $CODE_DIR:/home/TDinternal \ + taos_test:v1.0 bash +RET=$? +if [ $RET -ne 0 ]; then + echo "docker run failed with $RET" + exit $RET +fi + +docker exec $CONTAINER_NAME sh -c "cd /home;tar xzf tdengine1.tar.gz;tar xzf tdengine2.tar.gz;cd $pkg_dir1;./install.sh -v server -e no" +RET=$? +if [ $RET -ne 0 ]; then + echo "docker exec install.sh failed with $RET" + exit $RET +fi +exit 0 + diff --git a/tests/compatibility/run_test.sh b/tests/compatibility/run_test.sh new file mode 100755 index 0000000000..82c494580b --- /dev/null +++ b/tests/compatibility/run_test.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +function usage() { + echo "$0" + echo -e "\t -w work dir" + echo -e "\t -o old package" + echo -e "\t -n new package" + echo -e "\t -c client package" + echo -e "\t -h help" +} + +while getopts "w:o:n:c:h" opt; do + case $opt in + w) + WORK_DIR=$OPTARG + ;; + o) + OLD_PACKAGE=$OPTARG + ;; + n) + NEW_PACKAGE=$OPTARG + ;; + c) + CLIENT_PACKAGE_PARAM="-c $OPTARG" + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" + usage + exit 0 + ;; + esac +done + +if [ -z "$WORK_DIR" ]; then + usage + exit 1 +fi +if [ -z "$OLD_PACKAGE" ]; then + usage + exit 1 +fi +if [ -z "$NEW_PACKAGE" ]; then + usage + exit 1 +fi + +script_dir=`dirname $0` +cd $script_dir + +pkg_name=`basename $NEW_PACKAGE` +new_version=`echo "$pkg_name"|sed "s/TDengine-enterprise-server-//"|sed "s/-Linux-x64.tar.gz//"` +pkg_name=`basename $OLD_PACKAGE` +old_version=`echo "$pkg_name"|sed "s/TDengine-enterprise-server-//"|sed "s/-Linux-x64.tar.gz//"` + +source settings.sh + +containers="$container_name1 $container_name2 $container_name3" + +# initialize all containers and install with old version package +./init.sh -w $WORK_DIR -o $OLD_PACKAGE -n $NEW_PACKAGE $CLIENT_PACKAGE_PARAM + +# upgrade with new version package +function upgrade() { + local container_name=$1 + local new_pkg_name=`basename $NEW_PACKAGE` + local new_pkg_dir=`echo "$new_pkg_name"|sed "s/-Linux-x64.tar.gz//"` + local ret=0 + echo "upgrade ${container_name}" + docker exec $container_name service taosd stop + ret=$? + if [ $ret -ne 0 ]; then + echo "docker exec $container_name service taosd stop, exit: $ret" + return $ret + fi + docker exec $container_name sh -c "cd /home/$new_pkg_dir;./install.sh -v server -e no" + ret=$? + if [ $ret -ne 0 ]; then + echo "docker exec $container_name install.sh, exit: $ret" + return $ret + fi + docker exec $container_name service taosd start + ret=$? + if [ $ret -ne 0 ]; then + echo "docker exec $container_name service taosd start, exit: $ret" + return $ret + fi + return 0 +} + +function checkStatus() { + local container_name=$1 + local check_version=$2 + echo "python3 manualTest/TD-5114/checkClusterStatus.py $container_name $check_version" + docker exec $container_name4 sh -c "cd /home/TDinternal/community/tests/pytest;python3 manualTest/TD-5114/checkClusterStatus.py $container_name $check_version" + return $? +} + +# config container /etc/taos/taos.cfg +taos_cfg=/etc/taos/taos.cfg +for container in $containers; do + docker exec $container sed -i "s/^.*firstEp.*$/firstEp $container_name1:6030/" $taos_cfg + docker exec $container sed -i "s/^.*fqdn.*$/fqdn $container/" $taos_cfg + docker exec $container sed -i "s/^.*numOfMnodes.*$/numOfMnodes 3/" $taos_cfg +done + +# start taosd +docker exec $container_name1 service taosd start +docker exec $container_name4 taos -h $container_name1 -s "CREATE DNODE \"$container_name2:6030\";" +docker exec $container_name4 taos -h $container_name1 -s "CREATE DNODE \"$container_name3:6030\";" + +# start taosd +docker exec $container_name2 service taosd start +docker exec $container_name3 service taosd start + +# show nodes +docker exec $container_name4 taos -h $container_name1 -s "SHOW DNODES;" +docker exec $container_name4 taos -h $container_name1 -s "SHOW MNODES;" + +# check cluster status +for container in $containers; do + checkStatus $container $old_version + RET=$? + if [ $RET -ne 0 ]; then + echo "check cluster status $container error: $RET" + exit $RET + fi + echo "check cluster status $container ret: $RET" +done + +sleep 1 + +# upgrade +upgrade ${container_name3} +RET=$? +if [ $RET -ne 0 ]; then + echo "upgrade ${container_name3} error: $RET" + exit $RET +fi +sleep 10 +# check cluster status +checkStatus ${container_name3} $old_version +RET=$? +if [ $RET -ne 0 ]; then + echo "check cluster status ${container_name3} error: $RET" + exit $RET +fi +echo "check cluster status ${container_name3} ret: $RET" + +# upgrade +upgrade ${container_name2} +RET=$? +if [ $RET -ne 0 ]; then + echo "upgrade ${container_name2} error: $RET" + exit $RET +fi +sleep 10 +# check cluster status +checkStatus ${container_name2} $old_version +RET=$? +if [ $RET -ne 0 ]; then + echo "check cluster status ${container_name2} error: $RET" + exit $RET +fi +echo "check cluster status ${container_name2} ret: $RET" + +# upgrade +upgrade ${container_name1} +RET=$? +if [ $RET -ne 0 ]; then + echo "upgrade ${container_name1} error: $RET" + exit $RET +fi +sleep 10 +# check cluster status +checkStatus ${container_name3} $new_version +RET=$? +if [ $RET -ne 0 ]; then + echo "check cluster status ${container_name3} error: $RET" + exit $RET +fi +echo "check cluster status ${container_name3} ret: $RET" + +exit $RET + diff --git a/tests/compatibility/settings.sh b/tests/compatibility/settings.sh new file mode 100644 index 0000000000..d11e9d19c2 --- /dev/null +++ b/tests/compatibility/settings.sh @@ -0,0 +1,5 @@ + +container_name1=compat_container1 +container_name2=compat_container2 +container_name3=compat_container3 +container_name4=compat_container4 -- GitLab