summaryrefslogtreecommitdiff
path: root/mysql-test/mysql-test-run.sh
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2000-12-13 10:32:54 -0700
committerunknown <sasha@mysql.sashanet.com>2000-12-13 10:32:54 -0700
commit855bddabf39ad5d0ac5d1dce694b38899972daf0 (patch)
tree87852ac9748e81168cda3a32f25f31e644f66001 /mysql-test/mysql-test-run.sh
parent2d47dfa0ce320bb8d87158b7725e0557fd15909a (diff)
downloadmariadb-git-855bddabf39ad5d0ac5d1dce694b38899972daf0.tar.gz
install_test_db.sh fixes for distribution
mysql-test-run.sh fixes for distribution Makefile.am Fixes for distribution mysql-test/Makefile.am: Fixes for distribution mysql-test/mysql-test-run.sh: fixes for distribution mysql-test/install_test_db.sh: fixes for distribution
Diffstat (limited to 'mysql-test/mysql-test-run.sh')
-rwxr-xr-xmysql-test/mysql-test-run.sh624
1 files changed, 624 insertions, 0 deletions
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
new file mode 100755
index 00000000000..a3c868c5b58
--- /dev/null
+++ b/mysql-test/mysql-test-run.sh
@@ -0,0 +1,624 @@
+#! /bin/sh
+# mysql-test-run - originally written by Matt Wagner <matt@mysql.com>
+# modified by Sasha Pachev <sasha@mysql.com>
+
+#++
+# Access Definitions
+#--
+DB=test
+DBUSER=test
+DBPASSWD=
+
+# Are we on source or binary distribution?
+
+if [ $0 = scripts/mysql-test-run ] ;
+then
+ BINARY_DIST=1
+ cd mysql-test
+else
+ if [ -d mysql-test ] ; then
+ cd mysql-test
+ fi
+
+ if [ -f ./mysql-test-run ] && [ -d ../sql ] ; then
+ SOURCE_DIST=1
+ else
+ echo "If you are using binary distribution, run me from install root as \
+ scripts/mysql-test-run. On source distribution run me from source root as \
+ mysql-test/mysql-test-run or from mysql-test as ./mysql-test-run"
+ exit 1
+ fi
+
+fi
+
+
+
+#++
+# Misc. Definitions
+#--
+
+#BASEDIR is always one above mysql-test directory
+CWD=`pwd`
+cd ..
+BASEDIR=`pwd`
+cd $CWD
+MYSQL_TEST_DIR=$BASEDIR/mysql-test
+STD_DATA=$MYSQL_TEST_DIR/std_data
+
+TESTDIR="$MYSQL_TEST_DIR/t/"
+TESTSUFFIX=test
+TOT_PASS=0
+TOT_FAIL=0
+TOT_TEST=0
+USERT=0
+SYST=0
+REALT=0
+MY_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
+TIMEFILE="$MYSQL_TEST_DIR/var/tmp/mysqltest-time"
+DASHBLANK="---- ---- -------"
+MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \
+ myisammrg heap sql"
+GCOV_MSG=/tmp/mysqld-gcov.out #gcov output
+GCOV_ERR=/tmp/mysqld-gcov.err
+
+MASTER_RUNNING=0
+SLAVE_RUNNING=0
+
+[ -d $MY_TMP_DIR ] || mkdir -p $MY_TMP_DIR
+
+[ -z $COLUMNS ] && COLUMNS=80
+E=`expr $COLUMNS - 8`
+C=0
+
+while [ $C != $E ]
+do
+ DASH72="${DASH72}-"
+ C=`expr $C + 1`
+done
+
+#++
+# mysqld Environment Parameters
+#--
+MYRUN_DIR=var/run
+MASTER_MYPORT=9306
+MASTER_MYDDIR="$MYSQL_TEST_DIR/var/lib"
+MASTER_MYSOCK="$MYSQL_TEST_DIR/var/tmp/mysql.sock"
+MASTER_MYPID="$MYSQL_TEST_DIR/var/run/mysqld.pid"
+MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log"
+MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err"
+
+
+SLAVE_MYPORT=9307
+SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
+SLAVE_MYSOCK="$MYSQL_TEST_DIR/var/tmp/mysql-slave.sock"
+SLAVE_MYPID="$MYSQL_TEST_DIR/var/run/mysqld-slave.pid"
+SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log"
+SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/mysqld-slave.err"
+
+if [ x$SOURCE_DIST = x1 ] ; then
+ MY_BASEDIR=$MYSQL_TEST_DIR
+else
+ MY_BASEDIR=$BASEDIR
+fi
+
+#++
+# Program Definitions
+#--
+BASENAME=`which basename | head -1`
+CAT=/bin/cat
+CUT=/usr/bin/cut
+ECHO=/bin/echo
+EXPR=`which expr | head -1`
+FIND=/usr/bin/find
+GCOV=`which gcov | head -1`
+PRINTF=/usr/bin/printf
+RM=/bin/rm
+TIME=/usr/bin/time
+TR=/usr/bin/tr
+XARGS=`which xargs | head -1`
+
+# on source dist, we pick up freshly build executables
+# on binary, use what is installed
+if [ x$SOURCE_DIST = x1 ] ; then
+ MYSQLD="$BASEDIR/sql/mysqld"
+ MYSQL_TEST="$BASEDIR/client/mysqltest"
+ MYSQLADMIN="$BASEDIR/client/mysqladmin"
+ INSTALL_DB="./install_test_db"
+else
+ MYSQLD="$BASEDIR/bin/mysqld"
+ MYSQL_TEST="$BASEDIR/bin/mysqltest"
+ MYSQLADMIN="$BASEDIR/bin/mysqladmin"
+ INSTALL_DB="../scripts/install_test_db -bin"
+fi
+
+
+SLAVE_MYSQLD=$MYSQLD #this will be changed later if we are doing gcov
+
+
+MYSQL_TEST="$MYSQL_TEST --no-defaults --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent"
+GDB_MASTER_INIT=/tmp/gdbinit.master
+GDB_SLAVE_INIT=/tmp/gdbinit.slave
+
+if [ "$1" = "-force" ] ; then
+ FORCE=1
+ shift 1
+fi
+
+
+if [ "$1" = "-record" ] ; then
+ RECORD=1
+ shift 1
+fi
+
+
+if [ "$1" = "-gcov" ];
+then
+ if [ x$BINARY_DIST = x1 ] ; then
+ echo "Cannot do coverage test without the source - please us source dist"
+ exit 1
+ fi
+ DO_GCOV=1
+ shift 1
+fi
+
+if [ "$1" = "-gdb" ];
+then
+# if the user really wanted to run binary dist in a debugger, he can
+# but we should warn him
+ if [ x$BINARY_DIST = x1 ] ; then
+ echo "Note: you will get more meaningful output on a source distribution \
+ compiled with debugging option when running tests with -gdb option"
+ fi
+ DO_GDB=1
+ shift 1
+fi
+
+
+#++
+# Terminal Modifications
+#--
+MOVE_TO_COL="$ECHO -n "
+SETCOLOR_SUCCESS="$ECHO -n "
+SETCOLOR_FAILURE="$ECHO -n "
+SETCOLOR_WARNING="$ECHO -n "
+SETCOLOR_NORMAL="$ECHO -n "
+
+#++
+# Function Definitions
+#--
+echo_ok() {
+ $MOVE_TO_COL && $SETCOLOR_NORMAL
+ $ECHO -n "[ "
+ $SETCOLOR_SUCCESS
+ $ECHO -n "ok"
+ $SETCOLOR_NORMAL
+ $ECHO " ]"
+ return 0
+}
+
+echo_notok() {
+ $MOVE_TO_COL && $SETCOLOR_NORMAL
+ $ECHO -n "[ "
+ $SETCOLOR_FAILURE
+ $ECHO -n "not ok"
+ $SETCOLOR_NORMAL
+ $ECHO " ]"
+ return 0
+}
+
+echo_pass () {
+ $MOVE_TO_COL && $SETCOLOR_NORMAL
+ $ECHO -n "[ "
+ $SETCOLOR_SUCCESS
+ $ECHO -n "pass"
+ $SETCOLOR_NORMAL
+ $ECHO " ]"
+ return 0
+}
+
+prompt_user ()
+{
+ echo $1
+ read unused
+}
+
+echo_fail () {
+ $MOVE_TO_COL && $SETCOLOR_NORMAL
+ $ECHO -n "[ "
+ $SETCOLOR_FAILURE
+ $ECHO -n "fail"
+ $SETCOLOR_NORMAL
+ $ECHO " ]"
+ return 0
+}
+
+error () {
+
+ $SETCOLOR_FAILURE
+ $ECHO -n "Error: " && $SETCOLOR_NORMAL && $ECHO $1
+ $SETCOLOR_NORMAL
+ exit 1
+}
+
+pass_inc () {
+ TOT_PASS=`$EXPR $TOT_PASS + 1`
+}
+
+fail_inc () {
+ TOT_FAIL=`$EXPR $TOT_FAIL + 1`
+}
+
+total_inc () {
+ TOT_TEST=`$EXPR $TOT_TEST + 1`
+}
+
+report_stats () {
+ if [ $TOT_FAIL = 0 ]; then
+ $ECHO "All tests successful."
+ else
+ $ECHO -n "Failed ${TOT_FAIL}/${TOT_TEST} tests, "
+
+ xten=`$EXPR $TOT_PASS \* 10000`
+ raw=`$EXPR $xten / $TOT_TEST`
+ raw=`$PRINTF %.4d $raw`
+ whole=`$PRINTF %.2s $raw`
+ xwhole=`$EXPR $whole \* 100`
+ deci=`$EXPR $raw - $xwhole`
+
+ $ECHO "${whole}.${deci}% successful."
+ fi
+}
+
+mysql_install_db () {
+ $RM -rf $MASTER_MYDDIR $SLAVE_MYDDIR $SLAVE_MYLOG $MASTER_MYLOG \
+ $SLAVE_MYERR $MASTER_MYERR
+ [ -d $MYRUN_DIR ] || mkdir -p $MYRUN_DIR
+ $INSTALL_DB
+ if [ $? != 0 ]; then
+ error "Could not install master test DBs"
+ exit 1
+ fi
+ $INSTALL_DB -slave
+ if [ $? != 0 ]; then
+ error "Could not install slave test DBs"
+ exit 1
+ fi
+ return 0
+}
+
+gcov_prepare () {
+ $FIND $BASEDIR -name \*.gcov \
+ -or -name \*.da | $XARGS $RM
+}
+
+gcov_collect () {
+ $ECHO "Collecting source coverage info..."
+ [ -f $GCOV_MSG ] && $RM $GCOV_MSG
+ [ -f $GCOV_ERR ] && $RM $GCOV_ERR
+ for d in $MYSQLD_SRC_DIRS; do
+ cd $BASEDIR/$d
+ for f in *.h *.cc *.c; do
+ $GCOV $f 2>>$GCOV_ERR >>$GCOV_MSG
+ done
+ cd $MYSQL_TEST_DIR
+ done
+
+ $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
+}
+
+start_master()
+{
+ [ x$MASTER_RUNNING = 1 ] && return
+ cd $BASEDIR # for gcov
+ #start master
+ master_args="--no-defaults --log-bin=master-bin \
+ --server-id=1 \
+ --basedir=$MY_BASEDIR \
+ --port=$MASTER_MYPORT \
+ --exit-info=256 \
+ --datadir=$MASTER_MYDDIR \
+ --pid-file=$MASTER_MYPID \
+ --socket=$MASTER_MYSOCK \
+ --log=$MASTER_MYLOG \
+ --language=english $EXTRA_MASTER_OPT"
+ if [ x$DO_GDB = x1 ]
+ then
+ echo "set args $master_args" > $GDB_MASTER_INIT
+ xterm -title "Master" -e gdb -x $GDB_MASTER_INIT $MYSQLD &
+ prompt_user "Hit enter to continue after you've started the master"
+ else
+ $MYSQLD $master_args >> $MASTER_MYERR 2>&1 &
+ fi
+ MASTER_RUNNING=1
+}
+
+start_slave()
+{
+ [ x$SKIP_SLAVE = x1 ] && return
+ [ x$SLAVE_RUNNING = 1 ] && return
+ if [ -z $SLAVE_MASTER_INFO ] ; then
+ master_info="--master-user=root \
+ --master-connect-retry=1 \
+ --master-host=127.0.0.1 \
+ --master-port=$MASTER_MYPORT \
+ --server-id=2"
+ else
+ master_info=$SLAVE_MASTER_INFO
+ fi
+
+ slave_args="--no-defaults $master_info \
+ --exit-info=256 \
+ --log-bin=slave-bin --log-slave-updates \
+ --basedir=$MY_BASEDIR \
+ --datadir=$SLAVE_MYDDIR \
+ --pid-file=$SLAVE_MYPID \
+ --port=$SLAVE_MYPORT \
+ --socket=$SLAVE_MYSOCK \
+ --log=$SLAVE_MYLOG \
+ --language=english $EXTRA_SLAVE_OPT"
+ if [ x$DO_GDB = x1 ]
+ then
+ echo "set args $slave_args" > $GDB_SLAVE_INIT
+ xterm -title "Slave" -e gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD &
+ prompt_user "Hit enter to continue after you've started the slave"
+ else
+ $SLAVE_MYSQLD $slave_args >> $SLAVE_MYERR 2>&1 &
+ fi
+ SLAVE_RUNNING=1
+}
+
+mysql_start () {
+ start_master
+ start_slave
+ cd $MYSQL_TEST_DIR
+ return 1
+}
+
+stop_slave ()
+{
+ if [ x$SLAVE_RUNNING = x1 ]
+ then
+ $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root shutdown
+ if [ $? != 0 ] ; then # try harder!
+ echo "slave not cooperating with mysqladmin, will try manual kill"
+ kill `cat $SLAVE_MYPID`
+ sleep 2
+ if [ -f $SLAVE_MYPID ] ; then
+ echo "slave refused to die, resorting to SIGKILL murder"
+ kill -9 `cat $SLAVE_MYPID`
+ rm -f $SLAVE_MYPID
+ else
+ echo "slave responded to SIGTERM "
+ fi
+ fi
+ SLAVE_RUNNING=0
+ fi
+}
+
+stop_master ()
+{
+ if [ x$MASTER_RUNNING = x1 ]
+ then
+ $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root shutdown
+ if [ $? != 0 ] ; then # try harder!
+ echo "master not cooperating with mysqladmin, will try manual kill"
+ kill `cat $MASTER_MYPID`
+ sleep 2
+ if [ -f $MASTER_MYPID ] ; then
+ echo "master refused to die, resorting to SIGKILL murder"
+ kill -9 `cat $MASTER_MYPID`
+ rm -f $MASTER_MYPID
+ else
+ echo "master responded to SIGTERM "
+ fi
+ fi
+ MASTER_RUNNING=0
+ fi
+}
+
+mysql_stop ()
+{
+ stop_master
+ stop_slave
+ return 1
+}
+
+mysql_restart () {
+
+ mysql_stop
+ mysql_start
+
+ return 1
+}
+
+mysql_loadstd () {
+
+ cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
+ return 1
+}
+
+run_testcase ()
+{
+ tf=$1
+ tname=`$BASENAME $tf`
+ tname=`$ECHO $tname | $CUT -d . -f 1`
+ master_opt_file=$TESTDIR/$tname-master.opt
+ slave_opt_file=$TESTDIR/$tname-slave.opt
+ slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
+ SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
+ if [ x$RECORD = x1 ]; then
+ extra_flags="-r"
+ else
+ extra_flags=""
+ fi
+
+ if [ -f $master_opt_file ] ;
+ then
+ EXTRA_MASTER_OPT=`cat $master_opt_file`
+ stop_master
+ start_master
+ else
+ if [ ! -z $EXTRA_MASTER_OPT ] || [ x$MASTER_RUNNING != x1 ] ;
+ then
+ EXTRA_MASTER_OPT=""
+ stop_master
+ start_master
+ fi
+ fi
+ do_slave_restart=0
+
+ if [ -f $slave_opt_file ] ;
+ then
+ EXTRA_SLAVE_OPT=`cat $slave_opt_file`
+ do_slave_restart=1
+ else
+ if [ ! -z $EXTRA_SLAVE_OPT ] || [ x$SLAVE_RUNNING != x1 ] ;
+ then
+ EXTRA_SLAVE_OPT=""
+ do_slave_restart=1
+ fi
+ fi
+
+ if [ -f $slave_master_info_file ] ; then
+ SLAVE_MASTER_INFO=`cat $slave_master_info_file`
+ do_slave_restart=1
+ else
+ if [ ! -z $SLAVE_MASTER_INFO ] || [ x$SLAVE_RUNNING != x1 ] ;
+ then
+ SLAVE_MASTER_INFO=""
+ do_slave_restart=1
+ fi
+ fi
+
+ if [ x$do_slave_restart = x1 ] ; then
+ stop_slave
+ start_slave
+ fi
+
+ cd $MYSQL_TEST_DIR
+
+ if [ -f $tf ] ; then
+ mytime=`$TIME -p $MYSQL_TEST -R r/$tname.result $extra_flags \
+ < $tf 2> $TIMEFILE`
+ res=$?
+
+ if [ $res != 1 ]; then
+ mytime=`$CAT $TIMEFILE | $TR '\n' '-'`
+
+ USERT=`$ECHO $mytime | $CUT -d - -f 2 | $CUT -d ' ' -f 2`
+ SYST=`$ECHO $mytime | $CUT -d - -f 3 | $CUT -d ' ' -f 2`
+ REALT=`$ECHO $mytime | $CUT -d - -f 1 | $CUT -d ' ' -f 2`
+ else
+ USERT="...."
+ SYST="...."
+ REALT="...."
+ fi
+
+ timestr="$USERT $SYST $REALT"
+ $SETCOLOR_NORMAL && $ECHO -n "$tname $timestr"
+
+ [ $res != 1 ] && pass_inc && echo_pass
+ [ $res = 1 ] && fail_inc && echo_fail
+
+ total_inc
+
+ if [ $res != 0 ]; then
+ $ECHO "failed output"
+ $CAT $TIMEFILE
+ $ECHO
+ $ECHO
+ if [ x$FORCE != x1 ] ; then
+ $SETCOLOR_NORMAL
+ echo "Aborting, if you want to continue, re-run with -force"
+ mysql_stop
+ exit 1
+ fi
+
+ $SETCOLOR_NORMAL && $ECHO -n "Restarting mysqld $DASHBLANK"
+ mysql_restart
+ $SETCOLOR_SUCCESS && echo_ok
+ $SETCOLOR_NORMAL && $ECHO -n "Resuming Tests $DASHBLANK"
+ $SETCOLOR_SUCCESS && echo_ok
+ $ECHO
+ fi
+ fi
+
+}
+
+
+[ "$DO_GCOV" -a ! -x "$GCOV" ] && error "No gcov found"
+
+[ "$DO_GCOV" ] && gcov_prepare
+
+
+mysql_install_db
+
+#do not automagically start deamons if we are in gdb or running only one test
+#case
+if [ -z $DO_GDB ] && [ -z $1 ]
+then
+ $SETCOLOR_NORMAL && $ECHO -n "Starting mysqld for Testing"
+ mysql_start
+ res=$?
+ res=1
+ [ $res != 1 ] && echo_notok && error "Starting mysqld"
+ [ $res = 1 ] && echo_ok
+fi
+
+$SETCOLOR_NORMAL && $ECHO -n "Loading Standard Test Database"
+mysql_loadstd
+res=$?
+[ x$res != x1 ] && echo_notok && error "Loading STD"
+[ x$res = x1 ] && echo_ok
+
+$SETCOLOR_NORMAL && $ECHO -n "Starting Tests for MySQL $TESTVER Series"
+$SETCOLOR_SUCCESS && echo_ok
+
+$ECHO
+$ECHO " TEST USER SYSTEM ELAPSED RESULT"
+$ECHO $DASH72
+
+if [ -z $1 ] ;
+then
+ if [ x$RECORD = x1 ]; then
+ echo "Will not run in record mode without a specific test case"
+ else
+ for tf in $TESTDIR/*.$TESTSUFFIX
+ do
+ run_testcase $tf
+ done
+ fi
+else
+ tf=$TESTDIR/$1.$TESTSUFFIX
+ if [ -f $tf ] ; then
+ run_testcase $tf
+ else
+ echo "Test case $tf does not exist"
+ fi
+fi
+
+$ECHO $DASH72
+$ECHO
+$SETCOLOR_NORMAL && $ECHO -n "Ending Tests for MySQL $TESTVER Series"
+$SETCOLOR_SUCCESS && echo_ok
+$RM $TIMEFILE
+
+if [ -z $DO_GDB ] ;
+then
+ $SETCOLOR_NORMAL && $ECHO -n "Shutdown mysqld"
+ mysql_stop
+ res=$?
+ res=1
+ [ $res != 1 ] && echo_notok && error "Shutdown mysqld"
+ [ $res = 1 ] && echo_ok
+fi
+
+$SETCOLOR_NORMAL
+
+$ECHO
+report_stats
+$ECHO
+
+[ "$DO_GCOV" ] && gcov_collect # collect coverage information
+
+exit 0