summaryrefslogtreecommitdiff
path: root/ndb/test/run-test/ndb-autotest.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/test/run-test/ndb-autotest.sh')
-rwxr-xr-xndb/test/run-test/ndb-autotest.sh257
1 files changed, 202 insertions, 55 deletions
diff --git a/ndb/test/run-test/ndb-autotest.sh b/ndb/test/run-test/ndb-autotest.sh
index f1c83f079cd..921b5f8a862 100755
--- a/ndb/test/run-test/ndb-autotest.sh
+++ b/ndb/test/run-test/ndb-autotest.sh
@@ -1,10 +1,20 @@
#!/bin/sh
+#############################################################
+# This script created by Jonas does the following #
+# Cleans up clones and pevious builds, pulls new clones, #
+# builds, deploys, configures the tests and launches ATRT #
+#############################################################
+
+###############
+#Script setup #
+##############
save_args=$*
VERSION="ndb-autotest.sh version 1.04"
DATE=`date '+%Y-%m-%d'`
-export DATE
+HOST=`hostname -s`
+export DATE HOST
set -e
ulimit -Sc unlimited
@@ -14,21 +24,33 @@ echo "`date` starting: $*"
RSYNC_RSH=ssh
export RSYNC_RSH
+verbose=0
do_clone=yes
build=yes
deploy=yes
+run_test=yes
+config=yes
+report=yes
clone=5.0-ndb
RUN="daily-basic daily-devel"
conf=autotest.conf
+############################
+# Read command line entries#
+############################
+
while [ "$1" ]
do
case "$1" in
--no-clone) do_clone="";;
--no-build) build="";;
--no-deploy) deploy="";;
- --clone=*) clone=`echo $1 | sed s/--clone=//`;;
+ --no-test) run_test="";;
+ --no-config) config="";;
+ --no-report) report="";;
+ --verbose) verbose=`expr $verbose + 1`;;
+ --clone=*) clone=`echo $1 | sed s/--clone=//`;;
--conf=*) conf=`echo $1 | sed s/--conf=//`;;
--version) echo $VERSION; exit;;
*) RUN=$*;;
@@ -36,6 +58,12 @@ do
shift
done
+#################################
+#Make sure the configfile exists#
+#if it does not exit. if it does#
+# (.) load it #
+#################################
+
if [ -f $conf ]
then
. $conf
@@ -44,51 +72,119 @@ else
exit
fi
-env
+###############################
+# Validate that all interesting
+# variables where set in conf
+###############################
+vars="target base_dir src_clone install_dir build_dir hosts configure"
+if [ "$report" ]
+then
+ vars="$vars result_host result_path"
+fi
+for i in $vars
+do
+ t=`echo echo \\$$i`
+ if [ -z `eval $t` ]
+ then
+ echo "Invalid config: $conf, variable $i is not set"
+ exit
+ fi
+done
+
+###############################
+#Print out the enviroment vars#
+###############################
+
+if [ $verbose -gt 0 ]
+then
+ env
+fi
+
+####################################
+# Setup the lock file name and path#
+# Setup the clone source location #
+####################################
LOCK=$HOME/.autotest-lock
src_clone=$src_clone_base-$clone
+#######################################
+# Check to see if the lock file exists#
+# If it does exit. #
+#######################################
+
if [ -f $LOCK ]
then
echo "Lock file exists: $LOCK"
exit 1
fi
+#######################################
+# If the lock file does not exist then#
+# create it with date and run info #
+#######################################
+
echo "$DATE $RUN" > $LOCK
+
+#############################
+#If any errors here down, we#
+# trap them, and remove the #
+# Lock file before exit #
+#############################
+
trap "rm -f $LOCK" ERR
+# You can add more to this path#
+################################
+
dst_place=${build_dir}/clone-mysql-$clone-$DATE
+#########################################
+# Delete source and pull down the latest#
+#########################################
+
if [ "$do_clone" ]
then
rm -rf $dst_place
bk clone $src_clone $dst_place
fi
+##########################################
+# Build the source, make installs, and #
+# create the database to be rsynced #
+##########################################
+
if [ "$build" ]
then
cd $dst_place
- rm -rf $run_dir/*
- aclocal; autoheader; autoconf; automake
- if [ -d storage ]
+ rm -rf $install_dir/*
+ if [ -x BUILD/autorun.sh ]
then
- (cd storage/innobase; aclocal; autoheader; autoconf; automake)
- (cd storage/bdb/dist; sh s_all)
+ ./BUILD/autorun.sh
else
- (cd innobase; aclocal; autoheader; autoconf; automake)
- (cd bdb/dist; sh s_all)
+ 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
fi
- eval $configure --prefix=$run_dir
+ eval $configure --prefix=$install_dir
make
make install
- (cd $run_dir; ./bin/mysql_install_db)
+ (cd $install_dir; ./bin/mysql_install_db) # This will be rsynced to all
fi
-###
-# check script version
-#
-script=$run_dir/mysql-test/ndb/ndb-autotest.sh
+################################
+# check script version. If the #
+# version is old, replace it #
+# and restart #
+################################
+
+script=$install_dir/mysql-test/ndb/ndb-autotest.sh
if [ -x $script ]
then
$script --version > /tmp/version.$$
@@ -100,21 +196,34 @@ 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
+ cp $install_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
+ rm -rf $install_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
+###############################################
+# Check that all interesting files are present#
+###############################################
+
+test_dir=$install_dir/mysql-test/ndb
atrt=$test_dir/atrt
html=$test_dir/make-html-reports.sh
-mkconfig=$run_dir/mysql-test/ndb/make-config.sh
+mkconfig=$install_dir/mysql-test/ndb/make-config.sh
-PATH=$run_dir/bin:$test_dir:$PATH
+##########################
+#Setup bin and test paths#
+##########################
+
+PATH=$install_dir/bin:$test_dir:$PATH
export PATH
+###########################
+# This will filter out all#
+# the host that did not #
+# respond. Called below #
+###########################
+
filter(){
neg=$1
shift
@@ -125,18 +234,22 @@ filter(){
done
}
-###
-# check ndb_cpcc fail hosts
-#
+############################
+# 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`
+#############################
+# Push bin and test to hosts#
+#############################
+
if [ "$deploy" ]
then
for i in $hosts
- do
- rsync -a --delete --force --ignore-errors $run_dir/ $i:$run_dir
+ do
+ rsync -a --delete --force --ignore-errors $install_dir/ $i:$install_dir
ok=$?
if [ $ok -ne 0 ]
then
@@ -145,7 +258,6 @@ then
fi
done
fi
-rm -f /tmp/build.$DATE.tgz
###
# handle scp failed hosts
@@ -154,9 +266,11 @@ filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
hosts=`cat /tmp/hosts.$DATE`
cat /tmp/failed.$DATE > /tmp/filter_hosts.$$
-###
-# functions for running atrt
-#
+#############################
+# Function for replacing the#
+# choose host with real host#
+# names. Note $$ = PID #
+#############################
choose(){
SRC=$1
TMP1=/tmp/choose.$$
@@ -177,16 +291,25 @@ choose(){
}
choose_conf(){
- host=`hostname -s`
- if [ -f $test_dir/conf-$1-$host.txt ]
- then
+ if [ -f $test_dir/conf-$1-$HOST.txt ]
+ then
+ echo "$test_dir/conf-$1-$HOST.txt"
echo "$test_dir/conf-$1-$host.txt"
elif [ -f $test_dir/conf-$1.txt ]
then
echo "$test_dir/conf-$1.txt"
+ else
+ echo "Unable to find conf file looked for" 1>&2
+ echo "$testdir/conf-$1-host.txt and" 1>&2
+ echo "$testdir/conf-$1.txt" 1>&2
+ exit
fi
}
-
+######################################
+# Starts ATRT and gives it the right #
+# command line options. after it #
+# Gathers results and moves them #
+######################################
start(){
rm -rf report.txt result* log.txt
$atrt -v -v -r -R --log-file=log.txt --testcase-file=$test_dir/$2-tests.txt &
@@ -202,17 +325,31 @@ start(){
cd ..
p2=`pwd`
cd ..
- tar cfz /tmp/res.$$.tgz `basename $p2`/$DATE
- scp /tmp/res.$$.tgz $result_host:$result_path/res.$DATE.`hostname -s`.$2.$$.tgz
- rm -f /tmp/res.$$.tgz
+ if [ "$report" ]
+ then
+ tar cfz /tmp/res.$2.$$.tgz `basename $p2`/$DATE
+ scp /tmp/res.$2.$$.tgz \
+ $result_host:$result_path/res.$DATE.$HOST.$2.$$.tgz
+ rm -f /tmp/res.$2.$$.tgz
+ fi
}
+#########################################
+# Count how many computers we have ready#
+#########################################
+
count_hosts(){
- cnt=`grep "CHOOSE_host" $1 |
- awk '{for(i=1; i<=NF;i++) if(match($i, "CHOOSE_host") > 0) print $i;}' |
- sort | uniq | wc -l`
+ cnt=`grep "CHOOSE_host" $1 | awk '{for(i=1; i<=NF;i++) \
+ if(match($i, "CHOOSE_host") > 0) print $i;}' | sort | uniq | wc -l`
echo $cnt
}
+#######################################################
+# Calls: Choose #
+# Choose_host #
+# Count_host #
+# start #
+# for each directory in the $RUN variable #
+#######################################################
p=`pwd`
for dir in $RUN
@@ -223,26 +360,36 @@ do
res_dir=$base_dir/result-$dir-mysql-$clone-$target/$DATE
mkdir -p $run_dir $res_dir
- rm -rf $res_dir/* $run_dir/*
-
- conf=`choose_conf $dir`
- count=`count_hosts $conf`
- avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
- avail=`echo $avail_hosts | wc -w`
- if [ $count -gt $avail ]
+ rm -rf $res_dir/*
+ cd $run_dir
+
+ if [ "$config" ]
then
+ rm -rf $run_dir/*
+
+ conf=`choose_conf $dir`
+ count=`count_hosts $conf`
+ 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
+ fi
- run_hosts=`echo $avail_hosts|awk '{for(i=1;i<='$count';i++)print $i;}'`
- echo $run_hosts >> /tmp/filter_hosts.$$
+ run_hosts=`echo $avail_hosts| \
+ awk '{for(i=1;i<='$count';i++)print $i;}'`
+ echo $run_hosts >> /tmp/filter_hosts.$$
- cd $run_dir
- choose $conf $run_hosts > d.tmp
- $mkconfig d.tmp
- start $dir-mysql-$clone-$target $dir $res_dir &
+ choose $conf $run_hosts > d.tmp
+ $mkconfig d.tmp
+ fi
+
+ if [ "$run_test" ]
+ then
+ start $dir-mysql-$clone-$target $dir $res_dir &
+ fi
done
cd $p
rm /tmp/filter_hosts.$$