mariadb/ndb/test/run-test/ndb-autotest.sh
unknown a2fe4d1bb2 ndb - autotest
fix to ndb-autotest.sh


ndb/test/run-test/ndb-autotest.sh:
  Add bin/ to get access to ndb_cpcc
2005-05-06 18:58:46 +02:00

250 lines
4.9 KiB
Bash
Executable file

#!/bin/sh
save_args=$*
VERSION="ndb-autotest.sh version 1.01"
DATE=`date '+%Y-%m-%d'`
export DATE
set -e
ulimit -Sc unlimited
echo "`date` starting: $*"
RSYNC_RSH=ssh
export RSYNC_RSH
do_clone=yes
build=yes
deploy=yes
clone=5.0-ndb
RUN="daily-basic daily-devel"
conf=autotest.conf
while [ "$1" ]
do
case "$1" in
--no-clone) do_clone="";;
--no-build) build="";;
--no-deploy) deploy="";;
--clone=*) clone=`echo $1 | sed s/--clone=//`;;
--conf=*) conf=`echo $1 | sed s/--conf=//`;;
--version) echo $VERSION; exit;;
*) RUN=$*;;
esac
shift
done
if [ -f $conf ]
then
. $conf
else
echo "Can't find config file: $conf"
exit
fi
env
LOCK=$HOME/.autotest-lock
src_clone=$src_clone_base-$clone
if [ -f $LOCK ]
then
echo "Lock file exists: $LOCK"
exit 1
fi
echo "$DATE $RUN" > $LOCK
trap "rm -f $LOCK" ERR
dst_place=${build_dir}/clone-mysql-$clone-$DATE
if [ "$do_clone" ]
then
rm -rf $dst_place
bk clone $src_clone $dst_place
fi
if [ "$build" ]
then
cd $dst_place
rm -rf $run_dir/*
aclocal; autoheader; autoconf; automake
if [ -d storage ]
then
(cd storage/innobase; aclocal; autoheader; autoconf; automake)
(cd storage/bdb/dist; sh s_all)
else
(cd innobase; aclocal; autoheader; autoconf; automake)
(cd bdb/dist; sh s_all)
fi
eval $configure --prefix=$run_dir
make
make install
(cd $run_dir; ./bin/mysql_install_db)
fi
###
# check script version
#
script=$run_dir/mysql-test/ndb/ndb-autotest.sh
if [ -x $script ]
then
$script --version > /tmp/version.$$
else
echo $VERSION > /tmp/version.$$
fi
match=`grep -c "$VERSION" /tmp/version.$$`
rm -f /tmp/version.$$
if [ $match -eq 0 ]
then
echo "Incorrect script version...restarting"
cp $run_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
rm -rf $run_dir $dst_place
sh /tmp/at.$$.sh $save_args
exit
fi
# Check that all interesting files are present
test_dir=$run_dir/mysql-test/ndb
atrt=$test_dir/atrt
html=$test_dir/make-html-reports.sh
mkconfig=$run_dir/mysql-test/ndb/make-config.sh
PATH=$run_dir/bin:$test_dir:$PATH
export PATH
filter(){
neg=$1
shift
while [ $# -gt 0 ]
do
if [ `grep -c $1 $neg` -eq 0 ] ; then echo $1; fi
shift
done
}
###
# check ndb_cpcc fail hosts
#
ndb_cpcc $hosts | awk '{ if($1=="Failed"){ print;}}' > /tmp/failed.$DATE
filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
hosts=`cat /tmp/hosts.$DATE`
if [ "$deploy" ]
then
(cd / && tar cfz /tmp/build.$DATE.tgz $run_dir )
for i in $hosts
do
ok=0
scp /tmp/build.$DATE.tgz $i:/tmp/build.$DATE.$$.tgz && \
ssh $i "rm -rf /space/autotest/*" && \
ssh $i "cd / && tar xfz /tmp/build.$DATE.$$.tgz" && \
ssh $i "rm /tmp/build.$DATE.$$.tgz" && ok=1
if [ $ok -eq 0 ]
then
echo "$i failed during scp/ssh, excluding"
echo $i >> /tmp/failed.$DATE
fi
done
fi
rm -f /tmp/build.$DATE.tgz
###
# handle scp failed hosts
#
filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
hosts=`cat /tmp/hosts.$DATE`
cat /tmp/failed.$DATE > /tmp/filter_hosts.$$
###
# functions for running atrt
#
choose(){
SRC=$1
TMP1=/tmp/choose.$$
TMP2=/tmp/choose.$$.$$
shift
cp $SRC $TMP1
i=1
while [ $# -gt 0 ]
do
sed -e s,"CHOOSE_host$i",$1,g < $TMP1 > $TMP2
mv $TMP2 $TMP1
shift
i=`expr $i + 1`
done
cat $TMP1
rm -f $TMP1
}
choose_conf(){
host=`uname -n`
if [ -f $test_dir/conf-$1-$host.txt ]
then
echo "$test_dir/conf-$1-$host.txt"
elif [ -f $test_dir/conf-$1.txt ]
then
echo "$test_dir/conf-$1.txt"
fi
}
start(){
rm -rf report.txt result* log.txt
$atrt -v -v -r -R --log-file=log.txt --testcase-file=$test_dir/$2-tests.txt &
pid=$!
echo $pid > run.pid
wait $pid
rm run.pid
[ -f log.txt ] && mv log.txt $3
[ -f report.txt ] && mv report.txt $3
[ "`find . -name 'result*'`" ] && mv result* $3
cd $3
sh $html . $1 $DATE
cd ..
p2=`pwd`
cd ..
tar cfz /tmp/res.$$.tgz `basename $p2`/$DATE
scp /tmp/res.$$.tgz $result_host:$result_path/tmp/res.$DATE.`uname -n`.$$.tgz
rm -f /tmp/res.$$.tgz
}
p=`pwd`
for dir in $RUN
do
echo "Fixing hosts for $dir"
run_dir=$base_dir/run-$dir-mysql-$clone-$target
res_dir=$base_dir/result-$dir-mysql-$clone-$target/$DATE
mkdir -p $run_dir $res_dir
rm -rf $res_dir/* $run_dir/*
count=`grep -c "COMPUTER" $run_dir/1.ndb_mgmd/initconfig.template`
avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
avail=`echo $avail_hosts | wc -w`
if [ $count -gt $avail ]
then
echo "Not enough hosts"
echo "Needs: $count available: $avail ($avail_hosts)"
break;
fi
run_hosts=`echo $avail_hosts| awk '{for(i=1;i<='$count';i++)print $i;}'`
conf=`choose_conf $dir`
choose $conf $run_hosts > $run_dir/d.txt
(cd $run_dir; $mkconfig d.txt )
echo $run_hosts >> /tmp/filter_hosts.$$
cd $run_dir
start $dir-mysql-$clone-$target $dir $res_dir &
done
cd $p
rm /tmp/filter_hosts.$$
wait
rm -f $LOCK