mysql-test-run.sh 31 KB
Newer Older
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1
#! /bin/sh
2 3
# mysql-test-run - originally written by Matt Wagner <matt@mysql.com>
# modified by Sasha Pachev <sasha@mysql.com>
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
4
# Sligtly updated by Monty
5
# Cleaned up again by Matt
6 7
# Fixed by Sergei
# :-)
bk@work.mysql.com's avatar
bk@work.mysql.com committed
8 9 10 11 12

#++
# Access Definitions
#--
DB=test
13
DBPASSWD=
14
VERBOSE=""
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
15
USE_MANAGER=0
16
TZ=GMT-3; export TZ # for UNIX_TIMESTAMP tests to work
bk@work.mysql.com's avatar
bk@work.mysql.com committed
17

18 19 20 21
#++
# Program Definitions
#--

monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
22
PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin
23

24 25 26 27
# Standard functions

which ()
{
28
  IFS="${IFS=   }"; save_ifs="$IFS"; IFS=':'
29 30
  for file
  do
31
    for dir in $PATH
32 33 34 35 36 37 38 39 40 41
    do
      if test -f $dir/$file
      then
        echo "$dir/$file"
        continue 2
      fi
    done
    echo "which: no $file in ($PATH)"
    exit 1
  done
42
  IFS="$save_ifs"
43 44 45
}


monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
sleep_until_file_deleted ()
{
  file=$1
  loop=$SLEEP_TIME
  while (test $loop -gt 0)
  do
    sleep 1
    if [ ! -f $file ]
    then
      return
    fi
    loop=`expr $loop - 1`
  done
}

sleep_until_file_exists ()
{
  file=$1
  loop=60	# Should be long enough enough for all cases
  while (test $loop -gt 0)
  do
    sleep 1
    if [ -f $file ]
    then
      return
    fi
    loop=`expr $loop - 1`
  done
  echo "ERROR: $file was not created in 60 seconds;  Aborting"
  exit 1;
}


79 80 81
# No paths below as we can't be sure where the program is!

BASENAME=`which basename | head -1`
82
DIFF=`which diff | head -1`
83 84
CAT=cat
CUT=cut
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
85
HEAD=head
86 87 88 89 90 91 92 93 94 95
TAIL=tail
ECHO=echo # use internal echo if possible
EXPR=expr # use internal if possible
FIND=find
GCOV=`which gcov | head -1`
PRINTF=printf
RM=rm
TIME=time
TR=tr
XARGS=`which xargs | head -1`
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
96
SED=sed
97 98 99 100 101

# Are we using a source or a binary distribution?

testdir=@testdir@
if [ -d bin/mysqld ] && [ -d mysql-test ] ; then
102 103
 cd mysql-test
else
104 105
 if [ -d $testdir/mysql-test ] ; then
   cd $testdir
106
 fi
107 108 109 110 111 112 113
fi

if [ ! -f ./mysql-test-run ] ; then
  $ECHO "Can't find the location for the mysql-test-run script"

  $ECHO "Go to to the mysql-test directory and execute the script as follows:"
  $ECHO "./mysql-test-run."
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
114
  exit 1
115
fi
116

bk@work.mysql.com's avatar
bk@work.mysql.com committed
117 118 119
#++
# Misc. Definitions
#--
120

121 122 123 124 125
if [ -d ../sql ] ; then
   SOURCE_DIST=1
else
   BINARY_DIST=1
fi
126

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
127
#BASEDIR is always one above mysql-test directory
bk@work.mysql.com's avatar
bk@work.mysql.com committed
128 129 130 131
CWD=`pwd`
cd ..
BASEDIR=`pwd`
cd $CWD
132
MYSQL_TEST_DIR=$BASEDIR/mysql-test
133
export MYSQL_TEST_DIR
134
STD_DATA=$MYSQL_TEST_DIR/std_data
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
135
hostname=`hostname`		# Installed in the mysql privilege table
136

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
137
MANAGER_QUIET_OPT="-q"
138
TESTDIR="$MYSQL_TEST_DIR/t"
139
TESTSUFFIX=test
140
TOT_SKIP=0
bk@work.mysql.com's avatar
bk@work.mysql.com committed
141 142 143
TOT_PASS=0
TOT_FAIL=0
TOT_TEST=0
144 145 146
USERT=0
SYST=0
REALT=0
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
147
MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
sasha@mysql.sashanet.com's avatar
sasha@mysql.sashanet.com committed
148
SLAVE_LOAD_TMPDIR=../../var/tmp #needs to be same length to test logging
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
149
RES_SPACE="      "
150 151
MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \
 myisammrg heap sql"
152 153 154
#
# Set LD_LIBRARY_PATH if we are using shared libraries
#
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
155
LD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$LD_LIBRARY_PATH"
156
export LD_LIBRARY_PATH
157

sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
158
MASTER_RUNNING=0
159
MASTER_MYPORT=9306
sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
160
SLAVE_RUNNING=0
161
SLAVE_MYPORT=9307
162
MYSQL_MANAGER_PORT=9305 # needs to be out of the way of slaves
163 164 165
MYSQL_MANAGER_PW_FILE=$MYSQL_TEST_DIR/var/tmp/manager.pwd
MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log
MYSQL_MANAGER_USER=root
166
NO_SLAVE=0
167

168
EXTRA_MASTER_OPT=""
169 170 171 172 173
EXTRA_MYSQL_TEST_OPT=""
USE_RUNNING_SERVER=1
DO_GCOV=""
DO_GDB=""
DO_DDD=""
174
DO_CLIENT_GDB=""
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
175
SLEEP_TIME=10
176
CHARACTER_SET=latin1
177
DBUSER=""
178 179
START_WAIT_TIMEOUT=3
STOP_WAIT_TIMEOUT=3
180 181 182

while test $# -gt 0; do
  case "$1" in
183 184
    --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
    --force)  FORCE=1 ;;
185
    --verbose-manager)  MANAGER_QUIET_OPT="" ;;
186 187
    --local)   USE_RUNNING_SERVER="" ;;
    --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
188 189 190 191 192
    --local-master)
      MASTER_MYPORT=3306;
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --host=127.0.0.1 \
      --port=$MYSQL_MYPORT"
      LOCAL_MASTER=1 ;;
193 194
    --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
    --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;;
195
    --manager-port=*) MYSQL_MANAGER_PORT=`$ECHO "$1" | $SED -e "s;--manager_port=;;"` ;;
196 197
    --with-openssl)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
tonu@x153.internalnet's avatar
tonu@x153.internalnet committed
198 199 200
     --ssl-ca=$BASEDIR/SSL/cacert.pem \
     --ssl-cert=$BASEDIR/SSL/server-cert.pem \
     --ssl-key=$BASEDIR/SSL/server-key.pem"
201
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
tonu@x153.internalnet's avatar
tonu@x153.internalnet committed
202 203 204
     --ssl-ca=$BASEDIR/SSL/cacert.pem \
     --ssl-cert=$BASEDIR/SSL/server-cert.pem \
     --ssl-key=$BASEDIR/SSL/server-key.pem" ;;
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
205
    --no-manager | --skip-manager) USE_MANAGER=0 ;;
206 207 208 209
    --manager)
     USE_MANAGER=1
     USE_RUNNING_SERVER=
     ;;
210 211
    --start-and-exit)
     START_AND_EXIT=1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
212
     ;;
213 214 215 216 217 218
    --skip-innobase)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-innobase"
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-innobase" ;;
    --skip-bdb)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-bdb"
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-bdb" ;;
219
    --skip-rpl) NO_SLAVE=1 ;;
220
    --skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
221
    --do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
222 223 224
    --wait-timeout=*)
     START_WAIT_TIMEOUT=`$ECHO "$1" | $SED -e "s;--wait-timeout=;;"`
     STOP_WAIT_TIMEOUT=$START_WAIT_TIMEOUT;;
225 226 227
    --record)
      RECORD=1;
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
228 229 230
    --bench)
      DO_BENCH=1
      NO_SLAVE=1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
231
      ;;
232 233
    --big*)			# Actually --big-test
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
234 235
    --compress)
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
236 237 238 239
    --sleep=*)
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
      SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
      ;;
240
    --mysqld=*)
serg@serg.mysql.com's avatar
serg@serg.mysql.com committed
241
       TMP=`$ECHO "$1" | $SED -e "s;--mysqld=;;"`
242
       EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $TMP"
243
       EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $TMP"
244
       ;;
245 246 247 248 249 250 251
    --gcov )
      if [ x$BINARY_DIST = x1 ] ; then
	$ECHO "Cannot do coverage test without the source - please use source dist"
	exit 1
      fi
      DO_GCOV=1
      ;;
252 253
    --gprof )
      DO_GPROF=1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
254
      ;;
255
    --gdb )
256 257
      START_WAIT_TIMEOUT=300
      STOP_WAIT_TIMEOUT=300
258
      if [ x$BINARY_DIST = x1 ] ; then
259
	$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
260 261
      fi
      DO_GDB=1
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
262 263
      # We must use manager, as things doesn't work on Linux without it
      USE_MANAGER=1
264
      USE_RUNNING_SERVER=""
265
      ;;
266 267 268 269 270 271
    --client-gdb )
      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 --client-gdb option"
      fi
      DO_CLIENT_GDB=1
      ;;
272 273
    --ddd )
      if [ x$BINARY_DIST = x1 ] ; then
274
	$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --ddd option"
275 276
      fi
      DO_DDD=1
277
      USE_RUNNING_SERVER=""
278
      ;;
279 280 281 282
    --skip-*)
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1"
      ;;
283 284
    --strace-client )
      STRACE_CLIENT=1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
285
      ;;
286
    --debug)
287
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
288
       --debug=d:t:i:O,$MYSQL_TEST_DIR/var/log/master.trace"
289
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
290
       --debug=d:t:i:O,$MYSQL_TEST_DIR/var/log/slave.trace"
291
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug"
292 293 294 295 296 297 298
      ;;
    -- )  shift; break ;;
    --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
    * ) break ;;
  esac
  shift
done
sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
299

bk@work.mysql.com's avatar
bk@work.mysql.com committed
300 301 302
#++
# mysqld Environment Parameters
#--
303

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
304
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
305 306
MANAGER_PID_FILE="$MYRUN_DIR/manager.pid"

307
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
308
MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
309
MASTER_MYPID="$MYRUN_DIR/mysqld.pid"
310 311 312 313
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err"

SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
314
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
315
SLAVE_MYPID="$MYRUN_DIR/mysqld-slave.pid"
316 317 318
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/mysqld-slave.err"

319 320
SMALL_SERVER="-O key_buffer_size=1M -O sort_buffer=256K -O max_heap_table_size=1M"

sasha@mysql.sashanet.com's avatar
sasha@mysql.sashanet.com committed
321 322 323
export MASTER_MYPORT
export SLAVE_MYPORT

324 325 326 327
if [ x$SOURCE_DIST = x1 ] ; then
 MY_BASEDIR=$MYSQL_TEST_DIR
else
 MY_BASEDIR=$BASEDIR
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
328
fi
bk@work.mysql.com's avatar
bk@work.mysql.com committed
329

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
330 331 332 333 334 335 336 337 338
# Create the directories

# This should be fixed to be not be dependent on the contence of MYSQL_TMP_DIR
# or MYRUN_DIR
# (mkdir -p is not portable)
[ -d $MYSQL_TEST_DIR/var ] || mkdir $MYSQL_TEST_DIR/var
[ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp
[ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run

339 340
[ -z "$COLUMNS" ] && COLUMNS=80
E=`$EXPR $COLUMNS - 8`
341
DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E`
342

343 344 345 346
# 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"
347
 if [ -f "$BASEDIR/client/.libs/lt-mysqltest" ] ; then
348
   MYSQL_TEST="$BASEDIR/client/.libs/lt-mysqltest"
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
349 350
 elif [ -f "$BASEDIR/client/.libs/mysqltest" ] ; then
   MYSQL_TEST="$BASEDIR/client/.libs/mysqltest"
351 352 353
 else
   MYSQL_TEST="$BASEDIR/client/mysqltest"
 fi
354 355 356
 if [ -n "$STRACE_CLIENT" ]; then
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
 fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
357

358
 MYSQLADMIN="$BASEDIR/client/mysqladmin"
359 360 361
 MYSQL_MANAGER_CLIENT="$BASEDIR/client/mysqlmanagerc"
 MYSQL_MANAGER="$BASEDIR/tools/mysqlmanager"
 MYSQL_MANAGER_PWGEN="$BASEDIR/client/mysqlmanager-pwgen"
362
 MYSQL="$BASEDIR/client/mysql"
363
 LANGUAGE="$BASEDIR/sql/share/english/"
364
 CHARSETSDIR="$BASEDIR/sql/share/charsets"
365 366 367 368 369
 INSTALL_DB="./install_test_db"
else
 MYSQLD="$BASEDIR/bin/mysqld"
 MYSQL_TEST="$BASEDIR/bin/mysqltest"
 MYSQLADMIN="$BASEDIR/bin/mysqladmin"
370 371 372
 MYSQL_MANAGER="$BASEDIR/bin/mysqlmanager"
 MYSQL_MANAGER_CLIENT="$BASEDIR/bin/mysqlmanagerc"
 MYSQL_MANAGER_PWGEN="$BASEDIR/bin/mysqlmanager-pwgen"
373
 MYSQL="$BASEDIR/bin/mysql"
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
374
 INSTALL_DB="./install_test_db -bin"
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
375
 if test -d "$BASEDIR/share/mysql/english"
376 377
 then
   LANGUAGE="$BASEDIR/share/mysql/english/"
378
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
379 380
 else
   LANGUAGE="$BASEDIR/share/english/"
381
   CHARSETSDIR="$BASEDIR/share/charsets"
382
  fi
383 384
fi

385 386 387 388 389 390
# If we should run all tests cases, we will use a local server for that

if [ -z "$1" ]
then
   USE_RUNNING_SERVER=""
fi
391 392 393
if [ -n "$USE_RUNNING_SERVER" ]
then
   MASTER_MYSOCK="/tmp/mysql.sock"
394
   DBUSER=${DBUSER:-test}
395
else
396
   DBUSER=${DBUSER:-root}		# We want to do FLUSH xxx commands
397
fi
398 399 400 401 402 403 404 405

if [ -w / ]
then
    # We are running as root;  We need to add the --root argument
    EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --user=root"
    EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --user=root"
fi

406

407 408 409
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
 --user=$DBUSER --password=$DBPASSWD --silent -v \
 --tmpdir=$MYSQL_TMP_DIR"
410 411 412
MYSQL_TEST_BIN=$MYSQL_TEST
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
413 414 415
GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out
416 417 418 419
GCOV_ERR=$MYSQL_TMP_DIR/mysqld-gcov.err
GPROF_DIR=$MYSQL_TMP_DIR/gprof
GPROF_MASTER=$GPROF_DIR/master.gprof
GPROF_SLAVE=$GPROF_DIR/slave.gprof
420
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
421
SLAVE_MYSQLD=$MYSQLD #this can be changed later if we are doing gcov
422
XTERM=`which xterm`
423

bk@work.mysql.com's avatar
bk@work.mysql.com committed
424 425 426
#++
# Function Definitions
#--
427
wait_for_server_start ()
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
428
{
monty@tik.mysql.fi's avatar
monty@tik.mysql.fi committed
429
   $MYSQLADMIN --no-defaults -u $DBUSER --silent -O connect_timeout=10 -w2 --host=$hostname --port=$1  ping >/dev/null 2>&1
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
430
}
bk@work.mysql.com's avatar
bk@work.mysql.com committed
431

432 433
prompt_user ()
{
434
 $ECHO $1
435
 read unused
436 437
}

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
438
# We can't use diff -u or diff -a as these are not portable
439

440 441 442 443
show_failed_diff ()
{
  reject_file=r/$1.reject
  result_file=r/$1.result
444
  eval_file=r/$1.eval
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
445

446 447 448 449
  if [ -f $eval_file ]
  then
    result_file=$eval_file
  fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
450

451 452 453 454
  if [ -x "$DIFF" ] && [ -f $reject_file ]
  then
    echo "Below are the diffs between actual and expected results:"
    echo "-------------------------------------------------------"
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
455
    $DIFF -c $result_file $reject_file
456
    echo "-------------------------------------------------------"
457 458 459
    echo "Please follow the instructions outlined at"
    echo "http://www.mysql.com/doc/R/e/Reporting_mysqltest_bugs.html"
    echo "to find the reason to this problem and how to report this."
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
460
  fi
461
}
bk@work.mysql.com's avatar
bk@work.mysql.com committed
462

463 464 465 466 467 468
do_gdb_test ()
{
  mysql_test_args="$MYSQL_TEST_ARGS $1"
  $ECHO "set args $mysql_test_args < $2" > $GDB_CLIENT_INIT
  echo "Set breakpoints ( if needed) and type 'run' in gdb window"
  #this xterm should not be backgrounded
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
469
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
470 471
}

bk@work.mysql.com's avatar
bk@work.mysql.com committed
472
error () {
473
    $ECHO  "Error:  $1"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
474 475 476
    exit 1
}

477
error_is () {
monty@bitch.mysql.fi's avatar
monty@bitch.mysql.fi committed
478
    $CAT < $TIMEFILE | $SED -e 's/.* At line \(.*\)\: \(.*\)/   \>\> Error at line \1: \2<\</' | $HEAD -1
479 480
}

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
481
prefix_to_8() {
482
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
483 484
}

bk@work.mysql.com's avatar
bk@work.mysql.com committed
485
pass_inc () {
486
    TOT_PASS=`$EXPR $TOT_PASS + 1`
bk@work.mysql.com's avatar
bk@work.mysql.com committed
487 488 489
}

fail_inc () {
490
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
bk@work.mysql.com's avatar
bk@work.mysql.com committed
491 492
}

493 494 495 496
skip_inc () {
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
}

bk@work.mysql.com's avatar
bk@work.mysql.com committed
497
total_inc () {
498
    TOT_TEST=`$EXPR $TOT_TEST + 1`
bk@work.mysql.com's avatar
bk@work.mysql.com committed
499 500 501
}

report_stats () {
502
    if [ $TOT_FAIL = 0 ]; then
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
503
	$ECHO "All $TOT_TEST tests were successful."
bk@work.mysql.com's avatar
bk@work.mysql.com committed
504
    else
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
505 506 507 508 509 510
	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`
511
	$ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% successful."
512 513 514 515 516
	$ECHO ""
        $ECHO "The log files in $MYSQL_TEST_DIR/var/log may give you some hint"
	$ECHO "of what when wrong."
	$ECHO "If you want to report this error, please read first the documentation at"
        $ECHO "http://www.mysql.com/doc/M/y/MySQL_test_suite.html"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
517 518
    fi
}
519

bk@work.mysql.com's avatar
bk@work.mysql.com committed
520
mysql_install_db () {
521
    $ECHO "Removing Stale Files"
522 523
    $RM -rf $MASTER_MYDDIR $SLAVE_MYDDIR $SLAVE_MYLOG $MASTER_MYLOG \
     $SLAVE_MYERR $MASTER_MYERR
524
    $ECHO "Installing Master Databases"
525 526 527 528 529
    $INSTALL_DB
    if [ $? != 0 ]; then
	error "Could not install master test DBs"
	exit 1
    fi
530
    $ECHO "Installing Slave Databases"
531
    $INSTALL_DB -slave
532
    if [ $? != 0 ]; then
533
	error "Could not install slave test DBs"
534
	exit 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
535
    fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
536

537 538
    for slave_num in 1 2 ;
    do
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
539
     $RM -rf var/slave$slave_num-data/
540 541 542 543
     mkdir -p var/slave$slave_num-data/mysql
     mkdir -p var/slave$slave_num-data/test
     cp var/slave-data/mysql/* var/slave$slave_num-data/mysql
    done
bk@work.mysql.com's avatar
bk@work.mysql.com committed
544 545 546
    return 0
}

547 548
gprof_prepare ()
{
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
549 550
 $RM -rf $GPROF_DIR
 mkdir -p $GPROF_DIR
551 552 553 554 555 556 557 558 559 560 561 562 563 564
}

gprof_collect ()
{
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
   gprof $MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
   echo "Master execution profile has been saved in $GPROF_MASTER"
 fi
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
   gprof $MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
 fi
}

565
gcov_prepare () {
566 567
    $FIND $BASEDIR -name \*.gcov \
    -or -name \*.da | $XARGS $RM
568 569 570
}

gcov_collect () {
571
    $ECHO "Collecting source coverage info..."
572 573
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
574 575 576
    for d in $MYSQLD_SRC_DIRS; do
	cd $BASEDIR/$d
	for f in *.h *.cc *.c; do
577
	    $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
578
	done
579
	cd $MYSQL_TEST_DIR
580 581
    done

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
582
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
583 584
}

585 586 587 588 589
abort_if_failed()
{
 if [ ! $? = 0 ] ; then
  echo $1
  exit 1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
590
 fi
591 592 593 594
}

start_manager()
{
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
595
 if [ $USE_MANAGER = 0 ] ; then
596
  echo "Manager disabled, skipping manager start."
597 598
  return
 fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
599
 $ECHO "Starting MySQL Manager"
600 601 602 603 604 605 606 607 608
 if [ -f "$MANAGER_PID_FILE" ] ; then
    kill `cat $MANAGER_PID_FILE`
    sleep 1
    if [ -f "$MANAGER_PID_FILE" ] ; then
     kill -9 `cat $MANAGER_PID_FILE`
     sleep 1
    fi
 fi

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
609
 $RM -f $MANAGER_PID_FILE
610 611
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
612
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
613
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
614
  abort_if_failed "Could not start MySQL manager"
615 616
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
617 618 619 620 621
  --manager-password=$MYSQL_MANAGER_PW \
  --manager-port=$MYSQL_MANAGER_PORT \
  --manager-wait-timeout=$START_WAIT_TIMEOUT"
  MYSQL_TEST="$MYSQL_TEST $mysqltest_manager_args"
  MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS $mysqltest_manager_args"
622 623 624 625
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
626 627
}

628 629
stop_manager()
{
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
630
 if [ $USE_MANAGER = 0 ] ; then
631 632
  return
 fi
633 634 635 636
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
637 638
 echo "Manager terminated"

639 640 641
}

manager_launch()
642
{
643 644
  ident=$1
  shift
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
645
  if [ $USE_MANAGER = 0 ] ; then
646
   $@  >$CUR_MYERR 2>&1  &
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
647
   sleep 2 #hack
648 649
   return
  fi
650
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
651
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
652 653 654 655 656
def_exec $ident $@
set_exec_stdout $ident $CUR_MYERR
set_exec_stderr $ident $CUR_MYERR
set_exec_con $ident root localhost $CUR_MYSOCK
start_exec $ident $START_WAIT_TIMEOUT
657 658 659
EOF
 abort_if_failed "Could not execute manager command"
}
660

661 662 663 664
manager_term()
{
  ident=$1
  shift
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
665
  if [ $USE_MANAGER = 0 ] ; then
666
   $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock -O \
667
   connect_timeout=5 -O shutdown_timeout=20 shutdown >/dev/null 2>&1
668 669
   return
  fi
670 671
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
672
stop_exec $ident $STOP_WAIT_TIMEOUT
673 674 675 676 677
EOF
 abort_if_failed "Could not execute manager command"
}


678 679
start_master()
{
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745
  if [ x$MASTER_RUNNING = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
    return
  fi
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
  # Remove stale binary logs
  $RM -f $MYSQL_TEST_DIR/var/log/master-bin.*

  #run master initialization shell script if one exists

  if [ -f "$master_init_script" ] ;
  then
      /bin/sh $master_init_script
  fi
  cd $BASEDIR # for gcov
  #start master
  if [ -z "$DO_BENCH" ]
  then
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin \
  	    --server-id=1 --rpl-recovery-rank=1 \
          --basedir=$MY_BASEDIR --init-rpl-role=master \
          --port=$MASTER_MYPORT \
          --exit-info=256 \
          --core \
          --datadir=$MASTER_MYDDIR \
          --pid-file=$MASTER_MYPID \
          --socket=$MASTER_MYSOCK \
          --log=$MASTER_MYLOG \
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
           $SMALL_SERVER \
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
  else
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin \
          --server-id=1 --rpl-recovery-rank=1 \
          --basedir=$MY_BASEDIR --init-rpl-role=master \
          --port=$MASTER_MYPORT \
          --datadir=$MASTER_MYDDIR \
          --pid-file=$MASTER_MYPID \
          --socket=$MASTER_MYSOCK \
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
           $SMALL_SERVER \
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
  fi

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
    "gdb -x $GDB_MASTER_INIT" $MYSQLD
  elif [ x$DO_GDB = x1 ]
  then
    ( echo set args $master_args;
    if [ $USE_MANAGER = 0 ] ; then
    cat <<EOF
serg@serg.mysql.com's avatar
serg@serg.mysql.com committed
746 747
b mysql_parse
commands 1
748
disa 1
serg@serg.mysql.com's avatar
serg@serg.mysql.com committed
749
end
750 751
r
EOF
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
752 753 754 755 756 757 758
    fi )  > $GDB_MASTER_INIT
    manager_launch master $XTERM -display $DISPLAY \
    -title "Master" -e gdb -x $GDB_MASTER_INIT $MYSQLD
  else
    manager_launch master $MYSQLD $master_args
  fi
  sleep_until_file_exists $MASTER_MYPID
759 760 761 762 763
  MASTER_RUNNING=1
}

start_slave()
{
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
  #when testing fail-safe replication, we will have more than one slave
  #in this case, we start secondary slaves with an argument
  slave_ident="slave$1"
  if [ -n "$1" ] ;
  then
   slave_server_id=`$EXPR 2 + $1`
   slave_rpl_rank=$slave_server_id
   slave_port=`expr $SLAVE_MYPORT + $1`
   slave_log="$SLAVE_MYLOG.$1"
   slave_err="$SLAVE_MYERR.$1"
   slave_datadir="var/$slave_ident-data/"
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
   slave_sock="$SLAVE_MYSOCK-$1"
  else
   slave_server_id=2
   slave_rpl_rank=2
   slave_port=$SLAVE_MYPORT
   slave_log=$SLAVE_MYLOG
   slave_err=$SLAVE_MYERR
   slave_datadir=$SLAVE_MYDDIR
   slave_pid=$SLAVE_MYPID
   slave_sock="$SLAVE_MYSOCK"
 fi
  # Remove stale binary logs
  $RM -f $MYSQL_TEST_DIR/var/log/$slave_ident-bin.*

  #run slave initialization shell script if one exists
  if [ -f "$slave_init_script" ] ;
  then
        /bin/sh $slave_init_script
  fi

  if [ -z "$SLAVE_MASTER_INFO" ] ; then
    master_info="--master-user=root \
          --master-connect-retry=1 \
          --master-host=127.0.0.1 \
          --master-password= \
          --master-port=$MASTER_MYPORT \
          --server-id=$slave_server_id --rpl-recovery-rank=$slave_rpl_rank"
 else
   master_info=$SLAVE_MASTER_INFO
 fi

  $RM -f $slave_datadir/log.*
  slave_args="--no-defaults $master_info \
  	    --exit-info=256 \
          --log-bin=$MYSQL_TEST_DIR/var/log/$slave_ident-bin \
          --log-slave-updates \
          --log=$slave_log \
          --basedir=$MY_BASEDIR \
          --datadir=$slave_datadir \
          --pid-file=$slave_pid \
          --port=$slave_port \
          --socket=$slave_sock \
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core --init-rpl-role=slave \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --skip-innodb --skip-slave-start \
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
          --report-host=127.0.0.1 --report-user=root \
          --report-port=$slave_port \
          --master-retry-count=5 \
           $SMALL_SERVER \
           $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  CUR_MYERR=$slave_err
  CUR_MYSOCK=$slave_sock

  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_SLAVE_INIT
    manager_launch $slave_ident ddd -display $DISPLAY --debugger \
     "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD
  elif [ x$DO_GDB = x1 ]
  then
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
    manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
    gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
  else
    manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
  fi
  eval "SLAVE$1_RUNNING=1"
  sleep_until_file_exists $slave_pid
851 852
}

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
853 854 855 856 857 858 859
mysql_start ()
{
  $ECHO "Starting MySQL daemon"
  start_master
  start_slave
  cd $MYSQL_TEST_DIR
  return 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
860 861
}

862 863
stop_slave ()
{
864 865 866
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ -n "$1" ] ;
867
  then
868 869 870
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
  else
   slave_pid=$SLAVE_MYPID
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
871
  fi
872 873 874 875
  if [ x$this_slave_running = x1 ]
  then
    manager_term $slave_ident
    if [ $? != 0 ] && [ -f $slave_pid ]
876
    then # try harder!
877
     $ECHO "slave not cooperating with mysqladmin, will try manual kill"
878
     kill `$CAT $slave_pid`
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
879 880
     sleep_until_file_deleted $slave_pid
     if [ -f $slave_pid ] ; then
881
       $ECHO "slave refused to die. Sending SIGKILL"
882 883
       kill -9 `$CAT $slave_pid`
       $RM -f $slave_pid
884
     else
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
885
      $ECHO "slave responded to SIGTERM "
886 887
     fi
    fi
888
    eval "SLAVE$1_RUNNING=0"
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
889
  fi
890
}
bk@work.mysql.com's avatar
bk@work.mysql.com committed
891

892 893 894 895
stop_master ()
{
  if [ x$MASTER_RUNNING = x1 ]
  then
896
    manager_term master
897 898
    if [ $? != 0 ] && [ -f $MASTER_MYPID ]
    then # try harder!
899
     $ECHO "master not cooperating with mysqladmin, will try manual kill"
900
     kill `$CAT $MASTER_MYPID`
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
901
     sleep_until_file_deleted $MASTER_MYPID
902
     if [ -f $MASTER_MYPID ] ; then
903
       $ECHO "master refused to die. Sending SIGKILL"
904
       kill -9 `$CAT $MASTER_MYPID`
905
       $RM -f $MASTER_MYPID
906
     else
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
907
      $ECHO "master responded to SIGTERM "
908 909
     fi
    fi
910 911 912
    MASTER_RUNNING=0
  fi
}
bk@work.mysql.com's avatar
bk@work.mysql.com committed
913

914 915
mysql_stop ()
{
916 917
 $ECHO  "Ending Tests"
 $ECHO  "Shutting-down MySQL daemon"
918
 $ECHO  ""
919
 stop_master
920
 $ECHO "Master shutdown finished"
921
 stop_slave
922 923
 stop_slave 1
 stop_slave 2
924
 $ECHO "Slave shutdown finished"
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
925

926
 return 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
927 928
}

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
929 930 931 932 933
mysql_restart ()
{
  mysql_stop
  mysql_start
  return 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
934 935 936
}

mysql_loadstd () {
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
937 938

    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
bk@work.mysql.com's avatar
bk@work.mysql.com committed
939 940 941
    return 1
}

942 943 944
run_testcase ()
{
 tf=$1
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
945
 tname=`$BASENAME $tf .test`
946 947
 master_opt_file=$TESTDIR/$tname-master.opt
 slave_opt_file=$TESTDIR/$tname-slave.opt
948 949
 master_init_script=$TESTDIR/$tname-master.sh
 slave_init_script=$TESTDIR/$tname-slave.sh
sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
950
 slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
951
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
952
 if [ $USE_MANAGER = 1 ] ; then
953
  many_slaves=`$EXPR \( $tname : rpl_failsafe \) != 0`
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
954 955 956
 fi

 if [ -n "$SKIP_TEST" ] ; then
957
   SKIP_THIS_TEST=`$EXPR \( $tname : "$SKIP_TEST" \) != 0`
958 959 960 961 962
   if [ x$SKIP_THIS_TEST = x1 ] ;
   then
    return;
   fi
  fi
963

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
964
 if [ -n "$DO_TEST" ] ; then
965 966 967 968 969 970 971 972
   DO_THIS_TEST=`$EXPR \( $tname : "$DO_TEST" \) != 0`
   if [ x$DO_THIS_TEST = x0 ] ;
   then
    return;
   fi
  fi


973 974 975 976 977 978
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ;
 then
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   timestr="$USERT $SYST $REALT"
979 980
   pname=`$ECHO "$tname                        "|$CUT -c 1-24`
   RES="$pname  $timestr"
981
   skip_inc
982 983 984 985
   $ECHO "$RES$RES_SPACE [ skipped ]"
   return
 fi

986
 if [ -z "$USE_RUNNING_SERVER" ] ;
987
 then
988 989 990 991 992 993 994 995 996 997 998
   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
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
999
     fi
1000 1001
   fi
   do_slave_restart=0
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1002

1003 1004 1005 1006 1007 1008 1009 1010
   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=""
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1011 1012
      do_slave_restart=1
    fi
1013
   fi
sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
1014

1015 1016 1017 1018 1019 1020 1021
   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=""
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1022 1023
       do_slave_restart=1
     fi
1024 1025 1026 1027 1028 1029
   fi

   if [ x$do_slave_restart = x1 ] ; then
     stop_slave
     start_slave
   fi
1030 1031 1032 1033
   if [ x$many_slaves = x1 ]; then
    start_slave 1
    start_slave 2
   fi
sasha@mysql.sashanet.com's avatar
fixed  
sasha@mysql.sashanet.com committed
1034
 fi
1035
 cd $MYSQL_TEST_DIR
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1036

1037
 if [ -f $tf ] ; then
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1038
    $RM -f r/$tname.*reject
1039
    mysql_test_args="-R r/$tname.result $EXTRA_MYSQL_TEST_OPT"
1040 1041
    if [ -z "$DO_CLIENT_GDB" ] ; then
      mytime=`$TIME -p $MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`
1042
    else
1043
      do_gdb_test "$mysql_test_args" "$tf"
1044
    fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1045

bk@work.mysql.com's avatar
bk@work.mysql.com committed
1046 1047
    res=$?

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1048
    if [ $res = 0 ]; then
1049
	mytime=`$CAT $TIMEFILE | $TAIL -3 | $TR '\n' ':'`
1050

1051
	USERT=`$ECHO $mytime | $CUT -d : -f 2 | $CUT -d ' ' -f 2`
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1052
        USERT=`prefix_to_8 $USERT`
1053
	SYST=`$ECHO $mytime | $CUT -d : -f 3 | $CUT -d ' ' -f 2`
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1054
        SYST=`prefix_to_8 $SYST`
1055
	REALT=`$ECHO $mytime | $CUT -d : -f 1 | $CUT -d ' ' -f 2`
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1056
        REALT=`prefix_to_8 $REALT`
1057
    else
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1058 1059 1060
	USERT="    ...."
	SYST="    ...."
	REALT="    ...."
1061 1062
    fi

1063
    timestr="$USERT $SYST $REALT"
1064 1065
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
    RES="$pname  $timestr"
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1066

1067 1068 1069 1070
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1071

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1072
    if [ $res = 0 ]; then
1073 1074
      total_inc
      pass_inc
1075
      $ECHO "$RES$RES_SPACE [ pass ]"
1076
    else
1077
      # why the following ``if'' ? That is why res==1 is special ?
1078 1079 1080 1081
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1082
	total_inc
1083
        fail_inc
1084
	$ECHO "$RES$RES_SPACE [ fail ]"
1085 1086
        $ECHO
	error_is
1087
	show_failed_diff $tname
1088
	$ECHO
1089
	if [ x$FORCE != x1 ] ; then
1090 1091
	 $ECHO "Aborting. To continue, re-run with '--force'."
	 $ECHO
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1092 1093 1094
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
	 then
	   mysql_stop
1095
	   stop_manager
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1096
   	 fi
1097 1098
	 exit 1
	fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1099

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1100 1101 1102 1103
        if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
	then
	  mysql_restart
	fi
1104
	$ECHO "Resuming Tests"
1105
	$ECHO ""
1106
      fi
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1107
    fi
1108
  fi
1109 1110
}

monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1111 1112 1113 1114
######################################################################
# Main script starts here
######################################################################

1115 1116
[ "$DO_GCOV" -a ! -x "$GCOV" ] && error "No gcov found"

monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1117 1118
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
1119

1120 1121
if [ -z "$USE_RUNNING_SERVER" ]
then
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1122
  # Ensure that no old mysqld test servers are running
1123 1124
  $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
  $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145
  $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
  $MYSQLADMIN --no-defaults --host=$hostname --port=$SLAVE_MYPORT -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
  $MYSQLADMIN --no-defaults --host=$hostname --port=`expr $SLAVE_MYPORT + 1` -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
  sleep_until_file_deleted $MASTER_MYPID
  sleep_until_file_deleted $SLAVE_MYPID

  # Kill any running managers
  if [ -f "$MANAGER_PID_FILE" ]
  then
    kill `cat $MANAGER_PID_FILE`
    sleep 1
    if [ -f "$MANAGER_PID_FILE" ]
    then
      kill -9 `cat $MANAGER_PID_FILE`
      sleep 1
    fi
  fi

  # Remove files that can cause problems
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1146 1147
  $ECHO "Installing Test Databases"
  mysql_install_db
1148
  start_manager
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1149 1150 1151

# Do not automagically start deamons if we are in gdb or running only one test
# case
1152 1153 1154 1155 1156 1157
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
1158 1159
fi

1160 1161 1162 1163
if [ "x$START_AND_EXIT" = "x1" ] ; then
 echo "Servers started, exiting"
 exit
fi
1164

1165
$ECHO  "Starting Tests"
1166

1167 1168
if [ "$DO_BENCH" = 1 ]
then
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1169 1170 1171 1172
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
1173
  then
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1174
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root
1175
  else
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1176 1177 1178 1179 1180 1181
    if [ -x "./$1" ]
    then
       ./$1 --socket=$MASTER_MYSOCK --user=root
    else
      echo "benchmark $1 not found"
    fi
1182
  fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1183 1184 1185 1186
  cd $savedir
  mysql_stop
  stop_manager
  exit
1187 1188
fi

1189
$ECHO
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
1190
$ECHO " TEST                         USER   SYSTEM  ELAPSED        RESULT"
1191 1192
$ECHO $DASH72

1193
if [ -z "$1" ] ;
1194
then
1195
 if [ x$RECORD = x1 ]; then
1196
  $ECHO "Will not run in record mode without a specific test case."
1197 1198 1199 1200 1201
 else
  for tf in $TESTDIR/*.$TESTSUFFIX
  do
    run_testcase $tf
  done
1202
  $RM -f $TIMEFILE	# Remove for full test
1203
 fi
monty@hundin.mysql.fi's avatar
monty@hundin.mysql.fi committed
1204
else
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214
  while [ ! -z "$1" ]; do
    tname=`$BASENAME $1 .test`
    tf=$TESTDIR/$tname.$TESTSUFFIX
    if [ -f $tf ] ; then
      run_testcase $tf
    else
      $ECHO "Test case $tf does not exist."
    fi
    shift
  done
1215
fi
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1216

1217 1218
$ECHO $DASH72
$ECHO
1219

1220
if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
1221 1222 1223
then
    mysql_stop
fi
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1224

1225
stop_manager
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1226
report_stats
1227
$ECHO
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1228

1229
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
1230
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
1231

bk@work.mysql.com's avatar
bk@work.mysql.com committed
1232
exit 0