diff options
author | unknown <sasha@mysql.sashanet.com> | 2000-12-13 10:32:54 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2000-12-13 10:32:54 -0700 |
commit | 855bddabf39ad5d0ac5d1dce694b38899972daf0 (patch) | |
tree | 87852ac9748e81168cda3a32f25f31e644f66001 /mysql-test/mysql-test-run.sh | |
parent | 2d47dfa0ce320bb8d87158b7725e0557fd15909a (diff) | |
download | mariadb-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-x | mysql-test/mysql-test-run.sh | 624 |
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 [300C[20D" +SETCOLOR_SUCCESS="$ECHO -n [1;32m" +SETCOLOR_FAILURE="$ECHO -n [1;31m" +SETCOLOR_WARNING="$ECHO -n [1;33m" +SETCOLOR_NORMAL="$ECHO -n [0;39m" + +#++ +# 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 |