mysql-test-run.sh
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:18k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #! /bin/sh
  2. # mysql-test-run - originally written by Matt Wagner <matt@mysql.com>
  3. # modified by Sasha Pachev <sasha@mysql.com>
  4. # Sligtly updated by Monty
  5. # Cleaned up again by Matt
  6. # Fixed by Sergei
  7. # :-)
  8. #++
  9. # Access Definitions
  10. #--
  11. DB=test
  12. DBPASSWD=
  13. VERBOSE=""
  14. TZ=GMT-3; export TZ # for UNIX_TIMESTAMP tests to work
  15. #++
  16. # Program Definitions
  17. #--
  18. PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin
  19. # No paths below as we can't be sure where the program is!
  20. BASENAME=`which basename | head -1`
  21. CAT=cat
  22. CUT=cut
  23. TAIL=tail
  24. ECHO=echo # use internal echo if possible
  25. EXPR=expr # use internal if possible
  26. FIND=find
  27. GCOV=`which gcov | head -1`
  28. PRINTF=printf
  29. RM=rm
  30. TIME=time
  31. TR=tr
  32. XARGS=`which xargs | head -1`
  33. SED=sed
  34. # Are we using a source or a binary distribution?
  35. testdir=@testdir@
  36. if [ -d bin/mysqld ] && [ -d mysql-test ] ; then
  37.  cd mysql-test
  38. else
  39.  if [ -d $testdir/mysql-test ] ; then
  40.    cd $testdir
  41.  fi
  42. fi
  43. if [ ! -f ./mysql-test-run ] ; then
  44.   $ECHO "Can't find the location for the mysql-test-run script"
  45.   $ECHO "Go to to the mysql-test directory and execute the script as follows:"
  46.   $ECHO "./mysql-test-run."
  47.   exit 1
  48. fi
  49. #++
  50. # Misc. Definitions
  51. #--
  52. if [ -d ../sql ] ; then
  53.    SOURCE_DIST=1
  54. else
  55.    BINARY_DIST=1
  56. fi
  57. #BASEDIR is always one above mysql-test directory 
  58. CWD=`pwd`
  59. cd ..
  60. BASEDIR=`pwd`
  61. cd $CWD
  62. MYSQL_TEST_DIR=$BASEDIR/mysql-test
  63. export MYSQL_TEST_DIR
  64. STD_DATA=$MYSQL_TEST_DIR/std_data
  65. hostname=`hostname` # Installed in the mysql privilege table
  66.   
  67. TESTDIR="$MYSQL_TEST_DIR/t/"
  68. TESTSUFFIX=test
  69. TOT_PASS=0
  70. TOT_FAIL=0
  71. TOT_TEST=0
  72. USERT=0
  73. SYST=0
  74. REALT=0
  75. MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
  76. RES_SPACE="      "
  77. MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam 
  78.  myisammrg heap sql"
  79. MASTER_RUNNING=0
  80. MASTER_MYPORT=9306
  81. SLAVE_RUNNING=0
  82. SLAVE_MYPORT=9307
  83. NO_SLAVE=0
  84. EXTRA_MASTER_OPT=""
  85. EXTRA_MYSQL_TEST_OPT=""
  86. USE_RUNNING_SERVER=1
  87. DO_GCOV=""
  88. DO_GDB=""
  89. DO_DDD=""
  90. SLEEP_TIME=2
  91. DBUSER=""
  92. while test $# -gt 0; do
  93.   case "$1" in
  94.     --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
  95.     --force)  FORCE=1 ;;
  96.     --local)   USE_RUNNING_SERVER="" ;;
  97.     --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
  98.     --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
  99.     --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;;
  100.     --skip-rpl) NO_SLAVE=1 ;;
  101.     --record)
  102.       RECORD=1;
  103.       EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
  104.     --sleep=*)
  105.       EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
  106.       SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
  107.       ;;
  108.     --gcov )
  109.       if [ x$BINARY_DIST = x1 ] ; then
  110. $ECHO "Cannot do coverage test without the source - please use source dist"
  111. exit 1
  112.       fi
  113.       DO_GCOV=1
  114.       ;;
  115.     --gdb )
  116.       if [ x$BINARY_DIST = x1 ] ; then
  117. $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with -gdb option"
  118.       fi
  119.       DO_GDB=1
  120.       ;;
  121.     --ddd )
  122.       if [ x$BINARY_DIST = x1 ] ; then
  123. $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with -gdb option"
  124.       fi
  125.       DO_DDD=1
  126.       ;;
  127.     --debug)
  128.       EXTRA_MASTER_MYSQLD_OPT=--debug=d:t:O,$MYSQL_TMP_DIR/master.trace
  129.       EXTRA_SLAVE_MYSQLD_OPT=--debug=d:t:O,$MYSQL_TMP_DIR/slave.trace
  130.       EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug"
  131.       ;;
  132.     -- )  shift; break ;;
  133.     --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
  134.     * ) break ;;
  135.   esac
  136.   shift
  137. done
  138. #++
  139. # mysqld Environment Parameters
  140. #--
  141. MYRUN_DIR=$MYSQL_TEST_DIR/var/run
  142. MASTER_MYDDIR="$MYSQL_TEST_DIR/var/lib"
  143. MASTER_MYSOCK="$MYSQL_TMP_DIR/mysql-master.sock"
  144. MASTER_MYPID="$MYRUN_DIR/mysqld.pid"
  145. MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log"
  146. MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err"
  147. SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
  148. SLAVE_MYSOCK="$MYSQL_TMP_DIR/mysql-slave.sock"
  149. SLAVE_MYPID="$MYRUN_DIR/mysqld-slave.pid"
  150. SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log"
  151. SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/mysqld-slave.err"
  152. SMALL_SERVER="-O key_buffer_size=1M -O sort_buffer=256K -O max_heap_table_size=1M"
  153. if [ x$SOURCE_DIST = x1 ] ; then
  154.  MY_BASEDIR=$MYSQL_TEST_DIR
  155. else
  156.  MY_BASEDIR=$BASEDIR
  157. fi  
  158. # Create the directories
  159. # This should be fixed to be not be dependent on the contence of MYSQL_TMP_DIR
  160. # or MYRUN_DIR
  161. # (mkdir -p is not portable)
  162. [ -d $MYSQL_TEST_DIR/var ] || mkdir $MYSQL_TEST_DIR/var
  163. [ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp
  164. [ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run
  165. [ -z "$COLUMNS" ] && COLUMNS=80
  166. E=`$EXPR $COLUMNS - 8`
  167. #DASH72=`expr substr '------------------------------------------------------------------------' 1 $E`
  168. DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E`
  169. # on source dist, we pick up freshly build executables
  170. # on binary, use what is installed
  171. if [ x$SOURCE_DIST = x1 ] ; then
  172.  MYSQLD="$BASEDIR/sql/mysqld"
  173.  MYSQL_TEST="$BASEDIR/client/mysqltest"
  174.  MYSQLADMIN="$BASEDIR/client/mysqladmin"
  175.  MYSQL="$BASEDIR/client/mysql"
  176.  INSTALL_DB="./install_test_db"
  177. else
  178.  MYSQLD="$BASEDIR/bin/mysqld"
  179.  MYSQL_TEST="$BASEDIR/bin/mysqltest"
  180.  MYSQLADMIN="$BASEDIR/bin/mysqladmin"
  181.  MYSQL="$BASEDIR/bin/mysql"
  182.  INSTALL_DB="./install_test_db -bin"
  183. fi
  184. # If we should run all tests cases, we will use a local server for that
  185. if [ -z "$1" ]
  186. then
  187.    USE_RUNNING_SERVER=""
  188. fi
  189. if [ -n "$USE_RUNNING_SERVER" ]
  190. then
  191.    MASTER_MYSOCK="/tmp/mysql.sock"
  192.    DBUSER=${DBUSER:-test}
  193. else
  194.    DBUSER=${DBUSER:-root} # We want to do FLUSH xxx commands
  195. fi
  196. if [ -w / ]
  197. then
  198.     # We are running as root;  We need to add the --root argument
  199.     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --user=root"
  200.     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --user=root"
  201. fi
  202. MYSQL_TEST="$MYSQL_TEST --no-defaults --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent -v --tmpdir=$MYSQL_TMP_DIR"
  203. GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
  204. GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
  205. GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out
  206. GCOV_ERR=$MYSQL_TMP_DIR/mysqld-gcov.err  
  207. TIMEFILE="$MYSQL_TMP_DIR/mysqltest-time"
  208. SLAVE_MYSQLD=$MYSQLD #this can be changed later if we are doing gcov
  209. #++
  210. # Function Definitions
  211. #--
  212. wait_for_server_start ()
  213. {
  214.    $MYSQLADMIN --no-defaults -u $DBUSER --silent -w2 --host=$hostname --port=$1  ping >/dev/null
  215. }
  216. prompt_user ()
  217. {
  218.  $ECHO $1
  219.  read unused
  220. }
  221. error () {
  222.     $ECHO  "Error:  $1"
  223.     exit 1
  224. }
  225. error_is () {
  226.     $TR "n" " " < $TIMEFILE | $SED -e 's/.* At line (.*): (.*)Command .*$/   >> Error at line 1: 2<</'
  227. }
  228. prefix_to_8() {
  229.  $ECHO "        $1" | $SED -e 's:.*(........)$:1:'
  230. }
  231. pass_inc () {
  232.     TOT_PASS=`$EXPR $TOT_PASS + 1`
  233. }
  234. fail_inc () {
  235.     TOT_FAIL=`$EXPR $TOT_FAIL + 1`
  236. }
  237. skip_inc () {
  238.     TOT_SKIP=`$EXPR $TOT_SKIP + 1`
  239. }
  240. total_inc () {
  241.     TOT_TEST=`$EXPR $TOT_TEST + 1`
  242. }
  243. report_stats () {
  244.     if [ $TOT_FAIL = 0 ]; then
  245. $ECHO "All $TOT_TEST tests were successful."
  246.     else
  247. xten=`$EXPR $TOT_PASS * 10000`   
  248. raw=`$EXPR $xten / $TOT_TEST`     
  249. raw=`$PRINTF %.4d $raw`           
  250. whole=`$PRINTF %.2s $raw`         
  251. xwhole=`$EXPR $whole * 100`      
  252. deci=`$EXPR $raw - $xwhole`       
  253. $ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% successful."
  254. $ECHO ""
  255.         $ECHO "The log files in $MYSQL_TEST_DIR/var/log may give you some hint"
  256. $ECHO "of what when wrong."
  257. $ECHO "If you want to report this error, please read first the documentation at"
  258.         $ECHO "http://www.mysql.com/doc/M/y/MySQL_test_suite.html"
  259.     fi
  260. }
  261. mysql_install_db () {
  262.     $ECHO "Removing Stale Files"
  263.     $RM -rf $MASTER_MYDDIR $SLAVE_MYDDIR $SLAVE_MYLOG $MASTER_MYLOG 
  264.      $SLAVE_MYERR $MASTER_MYERR
  265.     $ECHO "Installing Master Databases"
  266.     $INSTALL_DB
  267.     if [ $? != 0 ]; then
  268. error "Could not install master test DBs"
  269. exit 1
  270.     fi
  271.     $ECHO "Installing Slave Databases"
  272.     $INSTALL_DB -slave
  273.     if [ $? != 0 ]; then
  274. error "Could not install slave test DBs"
  275. exit 1
  276.     fi
  277.     return 0
  278. }
  279. gcov_prepare () {
  280.     $FIND $BASEDIR -name *.gcov 
  281.     -or -name *.da | $XARGS $RM
  282. }
  283. gcov_collect () {
  284.     $ECHO "Collecting source coverage info..."
  285.     [ -f $GCOV_MSG ] && $RM $GCOV_MSG
  286.     [ -f $GCOV_ERR ] && $RM $GCOV_ERR
  287.     for d in $MYSQLD_SRC_DIRS; do
  288. cd $BASEDIR/$d
  289. for f in *.h *.cc *.c; do
  290.     $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
  291. done
  292. cd $MYSQL_TEST_DIR
  293.     done
  294.     $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
  295. }
  296. start_master()
  297. {
  298.     [ x$MASTER_RUNNING = 1 ] && return
  299.     #run master initialization shell script if one exists
  300.     if [ -f "$master_init_script" ] ;
  301.     then
  302.         /bin/sh $master_init_script
  303.     fi
  304.     cd $BASEDIR # for gcov
  305.     # Remove old berkeley db log files that can confuse the server
  306.     $RM -f $MASTER_MYDDIR/log.*
  307.     #start master
  308.     master_args="--no-defaults --log-bin=master-bin 
  309.          --server-id=1 
  310.             --basedir=$MY_BASEDIR 
  311.     --port=$MASTER_MYPORT 
  312.     --exit-info=256 
  313.             --datadir=$MASTER_MYDDIR 
  314.     --pid-file=$MASTER_MYPID 
  315.     --socket=$MASTER_MYSOCK 
  316.             --log=$MASTER_MYLOG --default-character-set=latin1 
  317.     --core 
  318.     --tmpdir=$MYSQL_TMP_DIR 
  319.     --language=english 
  320.             --innobase_data_file_path=ibdata1:50M 
  321.      $SMALL_SERVER 
  322.      $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
  323.     if [ x$DO_DDD = x1 ]
  324.     then
  325.       $ECHO "set args $master_args" > $GDB_MASTER_INIT
  326.       ddd --debugger "gdb -x $GDB_MASTER_INIT" $MYSQLD &
  327.       prompt_user "Hit enter to continue after you've started the master"
  328.     elif [ x$DO_GDB = x1 ]
  329.     then
  330.       $ECHO "set args $master_args" > $GDB_MASTER_INIT
  331.       xterm -title "Master" -e gdb -x $GDB_MASTER_INIT $MYSQLD &
  332.       prompt_user "Hit enter to continue after you've started the master"
  333.     else     
  334.       $MYSQLD $master_args  >> $MASTER_MYERR 2>&1 &
  335.     fi  
  336.   wait_for_server_start $MASTER_MYPORT
  337.   MASTER_RUNNING=1
  338. }
  339. start_slave()
  340. {
  341.     [ x$SKIP_SLAVE = x1 ] && return
  342.     [ x$SLAVE_RUNNING = 1 ] && return
  343.     
  344.     #run slave initialization shell script if one exists
  345.     if [ -f "$slave_init_script" ] ;
  346.     then
  347.   /bin/sh $slave_init_script
  348.     fi
  349.     
  350.     if [ -z "$SLAVE_MASTER_INFO" ] ; then
  351.       master_info="--master-user=root 
  352.     --master-connect-retry=1 
  353.     --master-host=127.0.0.1 
  354.     --master-password= 
  355.     --master-port=$MASTER_MYPORT 
  356.     --server-id=2"
  357.    else
  358.      master_info=$SLAVE_MASTER_INFO
  359.    fi     
  360.     
  361.     $RM -f $SLAVE_MYDDIR/log.*
  362.     slave_args="--no-defaults $master_info 
  363.          --exit-info=256 
  364.     --log-bin=slave-bin --log-slave-updates 
  365.             --basedir=$MY_BASEDIR 
  366.             --datadir=$SLAVE_MYDDIR 
  367.     --pid-file=$SLAVE_MYPID 
  368.     --port=$SLAVE_MYPORT 
  369.     --socket=$SLAVE_MYSOCK 
  370.             --log=$SLAVE_MYLOG --default-character-set=latin1 
  371.     --core 
  372.     --tmpdir=$MYSQL_TMP_DIR 
  373.             --language=english 
  374.     --skip-innobase 
  375.      $SMALL_SERVER 
  376.              $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  377.     if [ x$DO_DDD = x1 ]
  378.     then
  379.       $ECHO "set args $master_args" > $GDB_SLAVE_INIT
  380.       ddd --debugger "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD &
  381.       prompt_user "Hit enter to continue after you've started the master"
  382.     elif [ x$DO_GDB = x1 ]
  383.     then
  384.       $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
  385.       xterm -title "Slave" -e gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD &
  386.       prompt_user "Hit enter to continue after you've started the slave"
  387.     else
  388.       $SLAVE_MYSQLD $slave_args  >> $SLAVE_MYERR 2>&1 &
  389.     fi
  390.     wait_for_server_start $SLAVE_MYPORT
  391.     SLAVE_RUNNING=1
  392. }
  393. mysql_start () {
  394.     $ECHO "Starting MySQL daemon"
  395.     start_master
  396.     start_slave
  397.     cd $MYSQL_TEST_DIR
  398.     return 1
  399. }
  400. stop_slave ()
  401. {
  402.   if [ x$SLAVE_RUNNING = x1 ]
  403.   then
  404.     $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O shutdown_timeout=10 shutdown
  405.     if [ $? != 0 ] && [ -f $SLAVE_MYPID ]
  406.     then # try harder!
  407.      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
  408.      kill `$CAT $SLAVE_MYPID`
  409.      sleep $SLEEP_TIME
  410.      if [ -f $SLAVE_MYPID ] ; then
  411.        $ECHO "slave refused to die. Sending SIGKILL"
  412.        kill -9 `$CAT $SLAVE_MYPID`
  413.        $RM -f $SLAVE_MYPID
  414.      else
  415.       $ECHO "slave responded to SIGTERM " 
  416.      fi
  417.     fi
  418.     SLAVE_RUNNING=0
  419.   fi  
  420. }
  421. stop_master ()
  422. {
  423.   if [ x$MASTER_RUNNING = x1 ]
  424.   then
  425.     $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O shutdown_timeout=10 shutdown
  426.     if [ $? != 0 ] && [ -f $MASTER_MYPID ]
  427.     then # try harder!
  428.      $ECHO "master not cooperating with mysqladmin, will try manual kill"
  429.      kill `$CAT $MASTER_MYPID`
  430.      sleep $SLEEP_TIME
  431.      if [ -f $MASTER_MYPID ] ; then
  432.        $ECHO "master refused to die. Sending SIGKILL"
  433.        kill -9 `$CAT $MASTER_MYPID`
  434.        $RM -f $MASTER_MYPID
  435.      else
  436.       $ECHO "master responded to SIGTERM " 
  437.      fi
  438.     fi
  439.     MASTER_RUNNING=0
  440.   fi
  441. }
  442. mysql_stop ()
  443. {
  444.  $ECHO  "Ending Tests"
  445.  $ECHO  "Shutting-down MySQL daemon"
  446.  $ECHO  ""
  447.  stop_master
  448.  $ECHO "Master shutdown finished"
  449.  stop_slave
  450.  $ECHO "Slave shutdown finished"
  451.  
  452.  return 1
  453. }
  454. mysql_restart () {
  455.     mysql_stop
  456.     mysql_start
  457.     return 1
  458. }
  459. mysql_loadstd () {
  460.     
  461.     # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test  
  462.     return 1
  463. }
  464. run_testcase ()
  465. {
  466.  tf=$1
  467.  tname=`$BASENAME $tf .test`
  468.  master_opt_file=$TESTDIR/$tname-master.opt
  469.  slave_opt_file=$TESTDIR/$tname-slave.opt
  470.  master_init_script=$TESTDIR/$tname-master.sh
  471.  slave_init_script=$TESTDIR/$tname-slave.sh
  472.  slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
  473.  SKIP_SLAVE=`$EXPR ( $tname : rpl ) = 0`
  474.  if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ;
  475.  then
  476.    USERT="    ...."
  477.    SYST="    ...."
  478.    REALT="    ...."
  479.    timestr="$USERT $SYST $REALT"
  480.    pname=`$ECHO "$tname                 "|$CUT -c 1-16`
  481.    RES="$pname          $timestr"
  482.    pass_inc
  483.    $ECHO "$RES$RES_SPACE [ skipped ]"
  484.    return
  485.  fi
  486.  if [ -z "$USE_RUNNING_SERVER" ] ;
  487.  then
  488.    if [ -f $master_opt_file ] ;
  489.    then
  490.      EXTRA_MASTER_OPT=`$CAT $master_opt_file`
  491.      stop_master
  492.      start_master
  493.    else
  494.      if [ ! -z "$EXTRA_MASTER_OPT" ] || [ x$MASTER_RUNNING != x1 ] ;
  495.      then
  496.        EXTRA_MASTER_OPT=""
  497.        stop_master
  498.        start_master
  499.      fi  
  500.    fi
  501.    do_slave_restart=0
  502.  
  503.    if [ -f $slave_opt_file ] ;
  504.    then
  505.      EXTRA_SLAVE_OPT=`$CAT $slave_opt_file`
  506.      do_slave_restart=1
  507.    else
  508.     if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
  509.     then
  510.       EXTRA_SLAVE_OPT=""
  511.       do_slave_restart=1    
  512.     fi  
  513.    fi
  514.    if [ -f $slave_master_info_file ] ; then
  515.      SLAVE_MASTER_INFO=`$CAT $slave_master_info_file`
  516.      do_slave_restart=1
  517.    else
  518.      if [ ! -z "$SLAVE_MASTER_INFO" ] || [ x$SLAVE_RUNNING != x1 ] ;
  519.      then
  520.        SLAVE_MASTER_INFO=""
  521.        do_slave_restart=1    
  522.      fi  
  523.    fi
  524.    if [ x$do_slave_restart = x1 ] ; then
  525.      stop_slave
  526.      start_slave
  527.    fi
  528.  fi
  529.  cd $MYSQL_TEST_DIR
  530.   
  531.  if [ -f $tf ] ; then
  532.     $RM -f r/$tname.*reject
  533.     mytime=`$TIME -p $MYSQL_TEST -R r/$tname.result $EXTRA_MYSQL_TEST_OPT 
  534.      < $tf 2> $TIMEFILE`
  535.     res=$?
  536.     if [ $res = 0 ]; then
  537. mytime=`$CAT $TIMEFILE | $TAIL -3 | $TR 'n' ':'`
  538. USERT=`$ECHO $mytime | $CUT -d : -f 2 | $CUT -d ' ' -f 2`
  539.         USERT=`prefix_to_8 $USERT`
  540. SYST=`$ECHO $mytime | $CUT -d : -f 3 | $CUT -d ' ' -f 2`
  541.         SYST=`prefix_to_8 $SYST`
  542. REALT=`$ECHO $mytime | $CUT -d : -f 1 | $CUT -d ' ' -f 2`
  543.         REALT=`prefix_to_8 $REALT`
  544.     else
  545. USERT="    ...."
  546. SYST="    ...."
  547. REALT="    ...."
  548.     fi
  549.     timestr="$USERT $SYST $REALT"
  550.     pname=`$ECHO "$tname                 "|$CUT -c 1-16`
  551.     RES="$pname          $timestr"
  552.     if [ $res = 0 ]; then
  553.       total_inc
  554.       pass_inc
  555.       $ECHO "$RES$RES_SPACE [ pass ]"
  556.     else
  557.       if [ $res = 1 ]; then
  558. total_inc
  559.         fail_inc
  560. $ECHO "$RES$RES_SPACE [ fail ]"
  561.         $ECHO
  562. error_is
  563. $ECHO
  564. if [ x$FORCE != x1 ] ; then
  565.  $ECHO "Aborting. To continue, re-run with '--force'."
  566.  $ECHO
  567.          if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
  568.  then
  569.    mysql_stop
  570.      fi
  571.  exit 1
  572. fi
  573.  
  574.         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
  575. then
  576.   mysql_restart
  577. fi
  578. $ECHO "Resuming Tests"
  579. $ECHO ""
  580.       else
  581.         pass_inc
  582. $ECHO "$RES$RES_SPACE [ skipped ]"
  583.       fi
  584.     fi
  585.   fi
  586. }
  587. ######################################################################
  588. # Main script starts here
  589. ######################################################################
  590. [ "$DO_GCOV" -a ! -x "$GCOV" ] && error "No gcov found"
  591. [ "$DO_GCOV" ] && gcov_prepare 
  592. # Ensure that no old mysqld test servers are running
  593. if [ -z "$USE_RUNNING_SERVER" ]
  594. then
  595.   $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O connect_timeout=5 shutdown > /dev/null 2>&1
  596.   $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O connect_timeout=5 shutdown > /dev/null 2>&1
  597.   $ECHO "Installing Test Databases"
  598.   mysql_install_db
  599. #do not automagically start deamons if we are in gdb or running only one test
  600. #case
  601.   if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  602.   then
  603.     mysql_start
  604.   fi
  605.   $ECHO  "Loading Standard Test Databases"
  606.   mysql_loadstd
  607. fi
  608. $ECHO  "Starting Tests"
  609. $ECHO
  610. $ECHO " TEST                         USER   SYSTEM  ELAPSED        RESULT"
  611. $ECHO $DASH72
  612. if [ -z "$1" ] ;
  613. then
  614.  if [ x$RECORD = x1 ]; then
  615.   $ECHO "Will not run in record mode without a specific test case."
  616.  else
  617.   for tf in $TESTDIR/*.$TESTSUFFIX
  618.   do
  619.     run_testcase $tf
  620.   done
  621.   $RM -f $TIMEFILE # Remove for full test
  622.  fi
  623. else 
  624. tname=`$BASENAME $1 .test`
  625.  tf=$TESTDIR/$tname.$TESTSUFFIX
  626.  if [ -f $tf ] ; then
  627.   run_testcase $tf
  628.  else
  629.    $ECHO "Test case $tf does not exist."
  630.  fi
  631. fi
  632. $ECHO $DASH72
  633. $ECHO
  634. if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
  635. then
  636.     mysql_stop
  637. fi
  638. report_stats
  639. $ECHO
  640. [ "$DO_GCOV" ] && gcov_collect # collect coverage information
  641. exit 0