mirror of
https://github.com/MariaDB/server.git
synced 2025-05-13 01:01:44 +03:00

Remove not used BDB logs on shutdown Don't give warnings for repair on slaves Fixed transaction log files
558 lines
11 KiB
Bash
Executable File
558 lines
11 KiB
Bash
Executable File
#! /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
|
||
|
||
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
|
||
|
||
[ -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" = "-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()
|
||
{
|
||
cd $BASEDIR # for gcov
|
||
#start master
|
||
master_args="--no-defaults --log-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
|
||
slave_args="--no-defaults --server-id=2 \
|
||
--master-user=root \
|
||
--master-connect-retry=1 \
|
||
--master-host=127.0.0.1 \
|
||
--master-port=$MASTER_MYPORT \
|
||
--exit-info=256 \
|
||
--log-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
|
||
SLAVE_RUNNING=0
|
||
fi
|
||
}
|
||
|
||
stop_master ()
|
||
{
|
||
if [ x$MASTER_RUNNING = x1 ]
|
||
then
|
||
$MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root shutdown
|
||
MASTER_RUNNING=0
|
||
fi
|
||
}
|
||
|
||
mysql_stop ()
|
||
{
|
||
stop_master
|
||
stop_slave
|
||
return 1
|
||
}
|
||
|
||
mysql_restart () {
|
||
|
||
return 1
|
||
mysql_stop
|
||
res=$?
|
||
[ $res != 1 ] && echo_notok && error "Stopping mysqld"
|
||
|
||
mysql_start
|
||
res=$?
|
||
[ $res != 1 ] && echo_notok && error "Starting mysqld"
|
||
|
||
return 1
|
||
}
|
||
|
||
mysql_loadstd () {
|
||
|
||
#sleep 2
|
||
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
|
||
SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
|
||
|
||
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
|
||
|
||
if [ -f $slave_opt_file ] ;
|
||
then
|
||
EXTRA_SLAVE_OPT=`cat $slave_opt_file`
|
||
stop_slave
|
||
start_slave
|
||
else
|
||
if [ ! -z EXTRA_SLAVE_OPT ] || [ x$SLAVE_RUNNING != x1 ] ;
|
||
then
|
||
EXTRA_SLAVE_OPT=""
|
||
stop_slave
|
||
start_slave
|
||
|
||
fi
|
||
fi
|
||
|
||
cd $MYSQL_TEST_DIR
|
||
|
||
if [ -f $tf ] ; then
|
||
mytime=`$TIME -p $MYSQL_TEST < $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=$?
|
||
#[ $res != 1 ] && echo_notok && error "Loading STD"
|
||
#[ $res = 1 ] && 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
|
||
for tf in $TESTDIR/*.$TESTSUFFIX
|
||
do
|
||
run_testcase $tf
|
||
done
|
||
else
|
||
tf=$TESTDIR/$1.$TESTSUFFIX
|
||
run_testcase $tf
|
||
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
|