mysql-test-run.sh 51.5 KB
Newer Older
1
#!/bin/sh
2 3
# mysql-test-run - originally written by Matt Wagner <matt@mysql.com>
# modified by Sasha Pachev <sasha@mysql.com>
unknown's avatar
Typo.  
unknown committed
4
# Slightly updated by Monty
5
# Cleaned up again by Matt
unknown's avatar
unknown committed
6
# Fixed by Sergei
7
# List of failed cases (--force) backported from 4.1 by Joerg
unknown's avatar
unknown committed
8
# :-)
unknown's avatar
unknown committed
9 10 11 12 13

#++
# Access Definitions
#--
DB=test
unknown's avatar
unknown committed
14
DBPASSWD=""
15
VERBOSE=""
unknown's avatar
unknown committed
16
USE_MANAGER=0
17 18
MY_TZ=GMT-3
TZ=$MY_TZ; export TZ # for UNIX_TIMESTAMP tests to work
19
LOCAL_SOCKET=@MYSQL_UNIX_ADDR@
20
MYSQL_TCP_PORT=@MYSQL_TCP_PORT@
unknown's avatar
unknown committed
21

22
# For query_cache test
unknown's avatar
unknown committed
23
case `uname` in
24 25 26
    SCO_SV | UnixWare | OpenUNIX )
        # do nothing (Causes strange behavior)
        ;;
unknown's avatar
unknown committed
27 28 29
    QNX)
        # do nothing (avoid error message)
        ;;
30 31 32 33
    * )
        ulimit -n 1024
        ;;
esac
34

35 36 37 38
#++
# Program Definitions
#--

unknown's avatar
unknown committed
39 40
LC_COLLATE=C
export LC_COLLATE
41
PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$PATH
42
MASTER_40_ARGS="--rpl-recovery-rank=1 --init-rpl-role=master"
43

44 45 46 47
# Standard functions

which ()
{
48
  IFS="${IFS=   }"; save_ifs="$IFS"; IFS=':'
49 50
  for file
  do
51
    for dir in $PATH
52
    do
unknown's avatar
unknown committed
53
      if test -f $dir/$file
54 55 56 57 58
      then
        echo "$dir/$file"
        continue 2
      fi
    done
59
    echo "Fatal error: Cannot find program $file in $PATH" 1>&2
60 61
    exit 1
  done
62
  IFS="$save_ifs"
63
  exit 0
64 65 66
}


unknown's avatar
unknown committed
67 68
sleep_until_file_deleted ()
{
69 70
  pid=$1;
  file=$2
unknown's avatar
unknown committed
71
  loop=$SLEEP_TIME_FOR_DELETE
unknown's avatar
unknown committed
72 73
  while (test $loop -gt 0)
  do
unknown's avatar
unknown committed
74
    if [ ! -r $file ]
unknown's avatar
unknown committed
75
    then
76 77 78 79
      if test $pid != "0"
      then
        wait_for_pid $pid
      fi
unknown's avatar
unknown committed
80 81
      return
    fi
unknown's avatar
unknown committed
82
    sleep 1
unknown's avatar
unknown committed
83 84 85 86
    loop=`expr $loop - 1`
  done
}

87
sleep_until_file_created ()
unknown's avatar
unknown committed
88 89
{
  file=$1
unknown's avatar
unknown committed
90 91
  loop=$2
  org_time=$2
unknown's avatar
unknown committed
92 93
  while (test $loop -gt 0)
  do
unknown's avatar
unknown committed
94
    if [ -r $file ]
unknown's avatar
unknown committed
95
    then
96
      return 0
unknown's avatar
unknown committed
97
    fi
unknown's avatar
unknown committed
98
    sleep 1
unknown's avatar
unknown committed
99 100
    loop=`expr $loop - 1`
  done
unknown's avatar
unknown committed
101
  echo "ERROR: $file was not created in $org_time seconds;  Aborting"
unknown's avatar
unknown committed
102 103 104
  exit 1;
}

105 106 107 108 109
# For the future

wait_for_pid()
{
  pid=$1
unknown's avatar
unknown committed
110
  #$WAIT_PID pid $SLEEP_TIME_FOR_DELETE
111 112
}

113 114
# No paths below as we can't be sure where the program is!

unknown's avatar
unknown committed
115 116
SED=sed

117 118
BASENAME=`which basename`
if test $? != 0; then exit 1; fi
unknown's avatar
unknown committed
119
DIFF=`which diff | $SED q`
120
if test $? != 0; then exit 1; fi
121 122
CAT=cat
CUT=cut
unknown's avatar
unknown committed
123
HEAD=head
124 125 126 127
TAIL=tail
ECHO=echo # use internal echo if possible
EXPR=expr # use internal if possible
FIND=find
unknown's avatar
unknown committed
128
GREP=grep
129
if test $? != 0; then exit 1; fi
130 131
PRINTF=printf
RM=rm
132
if test $? != 0; then exit 1; fi
133
TR=tr
134 135
XARGS=`which xargs`
if test $? != 0; then exit 1; fi
136
SORT=sort
137 138 139 140 141

# Are we using a source or a binary distribution?

testdir=@testdir@
if [ -d bin/mysqld ] && [ -d mysql-test ] ; then
142 143
 cd mysql-test
else
144 145
 if [ -d $testdir/mysql-test ] ; then
   cd $testdir
146
 fi
147 148 149 150 151 152 153
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."
unknown's avatar
unknown committed
154
  exit 1
155
fi
156

unknown's avatar
unknown committed
157 158 159
#++
# Misc. Definitions
#--
160

161 162 163 164 165
if [ -d ../sql ] ; then
   SOURCE_DIST=1
else
   BINARY_DIST=1
fi
166

unknown's avatar
unknown committed
167
#BASEDIR is always one above mysql-test directory
unknown's avatar
unknown committed
168 169 170 171
CWD=`pwd`
cd ..
BASEDIR=`pwd`
cd $CWD
172
MYSQL_TEST_DIR=$BASEDIR/mysql-test
173
export MYSQL_TEST_DIR
174
STD_DATA=$MYSQL_TEST_DIR/std_data
unknown's avatar
unknown committed
175
hostname=`hostname`		# Installed in the mysql privilege table
unknown's avatar
unknown committed
176

unknown's avatar
unknown committed
177
MANAGER_QUIET_OPT="-q"
178
TESTDIR="$MYSQL_TEST_DIR/t"
unknown's avatar
unknown committed
179
TESTSUFFIX=test
180
TOT_SKIP=0
unknown's avatar
unknown committed
181 182 183
TOT_PASS=0
TOT_FAIL=0
TOT_TEST=0
184 185 186
USERT=0
SYST=0
REALT=0
187
FAST_START=""
unknown's avatar
unknown committed
188
MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
unknown's avatar
unknown committed
189
SLAVE_LOAD_TMPDIR=../../var/tmp #needs to be same length to test logging
unknown's avatar
unknown committed
190
RES_SPACE="      "
unknown's avatar
unknown committed
191 192
MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \
 myisammrg heap sql"
193
MY_LOG_DIR="$MYSQL_TEST_DIR/var/log" 
194 195 196
#
# Set LD_LIBRARY_PATH if we are using shared libraries
#
197 198
LD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$BASEDIR/zlib/.libs:$LD_LIBRARY_PATH"
DYLD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$BASEDIR/zlib/.libs:$DYLD_LIBRARY_PATH"
unknown's avatar
unknown committed
199
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH
200

unknown's avatar
fixed  
unknown committed
201
MASTER_RUNNING=0
unknown's avatar
unknown committed
202
MASTER1_RUNNING=0
203
MASTER_MYPORT=9306
unknown's avatar
unknown committed
204
MASTER_MYPORT1=9307
unknown's avatar
fixed  
unknown committed
205
SLAVE_RUNNING=0
unknown's avatar
unknown committed
206
SLAVE_MYPORT=9308 # leave room for 2 masters for cluster tests
unknown's avatar
unknown committed
207
MYSQL_MANAGER_PORT=9305 # needs to be out of the way of slaves
208
NDBCLUSTER_PORT=9350
unknown's avatar
unknown committed
209 210 211
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
212
NO_SLAVE=0
unknown's avatar
unknown committed
213
USER_TEST=
unknown's avatar
unknown committed
214
FAILED_CASES=
215

216
EXTRA_MASTER_OPT=""
217
EXTRA_MYSQL_TEST_OPT=""
218 219
EXTRA_MYSQLDUMP_OPT=""
EXTRA_MYSQLBINLOG_OPT=""
220
USE_RUNNING_SERVER=""
unknown's avatar
unknown committed
221 222
USE_NDBCLUSTER=""
USE_RUNNING_NDBCLUSTER=""
unknown's avatar
unknown committed
223 224
USE_PURIFY=""
PURIFY_LOGS=""
225 226
DO_GCOV=""
DO_GDB=""
unknown's avatar
unknown committed
227
MANUAL_GDB=""
228
DO_DDD=""
229
DO_CLIENT_GDB=""
unknown's avatar
unknown committed
230
SLEEP_TIME_AFTER_RESTART=1
unknown's avatar
unknown committed
231
SLEEP_TIME_FOR_DELETE=10
unknown's avatar
unknown committed
232
SLEEP_TIME_FOR_FIRST_MASTER=400		# Enough time to create innodb tables
unknown's avatar
unknown committed
233
SLEEP_TIME_FOR_SECOND_MASTER=400
unknown's avatar
unknown committed
234
SLEEP_TIME_FOR_FIRST_SLAVE=400
unknown's avatar
unknown committed
235
SLEEP_TIME_FOR_SECOND_SLAVE=30
unknown's avatar
unknown committed
236
CHARACTER_SET=latin1
237
DBUSER=""
238 239
START_WAIT_TIMEOUT=10
STOP_WAIT_TIMEOUT=10
unknown's avatar
unknown committed
240
MYSQL_TEST_SSL_OPTS=""
unknown's avatar
unknown committed
241
USE_TIMER=""
unknown's avatar
unknown committed
242 243
USE_EMBEDDED_SERVER=""
RESULT_EXT=""
unknown's avatar
unknown committed
244
TEST_MODE=""
245

246
NDB_MGM_EXTRA_OPTS=
247 248 249
NDB_MGMD_EXTRA_OPTS=
NDBD_EXTRA_OPTS=

250 251
while test $# -gt 0; do
  case "$1" in
unknown's avatar
unknown committed
252 253 254 255 256 257 258 259 260 261 262
    --embedded-server)
      USE_EMBEDDED_SERVER=1
      USE_MANAGER=0 NO_SLAVE=1
      USE_RUNNING_SERVER=""
      RESULT_EXT=".es"
      TEST_MODE="$TEST_MODE embedded" ;;
    --purify)
      USE_PURIFY=1
      USE_MANAGER=0
      USE_RUNNING_SERVER=""
      TEST_MODE="$TEST_MODE purify" ;;
263 264
    --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
    --force)  FORCE=1 ;;
unknown's avatar
unknown committed
265
    --timer)  USE_TIMER=1 ;;
unknown's avatar
unknown committed
266
    --verbose-manager)  MANAGER_QUIET_OPT="" ;;
267 268 269 270 271
    --old-master) MASTER_40_ARGS="";;
    --master-binary=*)
      MASTER_MYSQLD=`$ECHO "$1" | $SED -e "s;--master-binary=;;"` ;;
    --slave-binary=*)
      SLAVE_MYSQLD=`$ECHO "$1" | $SED -e "s;--slave-binary=;;"` ;;
272
    --local)   USE_RUNNING_SERVER="" ;;
273
    --extern)  USE_RUNNING_SERVER="1" ;;
unknown's avatar
unknown committed
274
    --with-ndbcluster)
275
      USE_NDBCLUSTER="--ndbcluster" ;;
unknown's avatar
unknown committed
276
    --ndb-connectstring=*)
277
      USE_NDBCLUSTER="--ndbcluster" ;
unknown's avatar
unknown committed
278
      USE_RUNNING_NDBCLUSTER=`$ECHO "$1" | $SED -e "s;--ndb-connectstring=;;"` ;;
279 280
    --ndb_mgm-extra-opts=*)
      NDB_MGM_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgm-extra-opts=;;"` ;;
281 282 283 284
    --ndb_mgmd-extra-opts=*)
      NDB_MGMD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgmd-extra-opts=;;"` ;;
    --ndbd-extra-opts=*)
      NDBD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndbd-extra-opts=;;"` ;;
285
    --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
286 287 288 289 290
    --local-master)
      MASTER_MYPORT=3306;
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --host=127.0.0.1 \
      --port=$MYSQL_MYPORT"
      LOCAL_MASTER=1 ;;
291 292
    --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
    --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;;
unknown's avatar
unknown committed
293
    --manager-port=*) MYSQL_MANAGER_PORT=`$ECHO "$1" | $SED -e "s;--manager_port=;;"` ;;
294
    --ndbcluster_port=*) NDBCLUSTER_PORT=`$ECHO "$1" | $SED -e "s;--ndbcluster_port=;;"` ;;
unknown's avatar
unknown committed
295 296
    --with-openssl)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
unknown's avatar
unknown committed
297 298 299
     --ssl-ca=$BASEDIR/SSL/cacert.pem \
     --ssl-cert=$BASEDIR/SSL/server-cert.pem \
     --ssl-key=$BASEDIR/SSL/server-key.pem"
unknown's avatar
unknown committed
300
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
unknown's avatar
unknown committed
301 302
     --ssl-ca=$BASEDIR/SSL/cacert.pem \
     --ssl-cert=$BASEDIR/SSL/server-cert.pem \
unknown's avatar
unknown committed
303 304 305 306
     --ssl-key=$BASEDIR/SSL/server-key.pem"
     MYSQL_TEST_SSL_OPTS="--ssl-ca=$BASEDIR/SSL/cacert.pem \
     --ssl-cert=$BASEDIR/SSL/client-cert.pem \
     --ssl-key=$BASEDIR/SSL/client-key.pem" ;;
unknown's avatar
unknown committed
307
    --no-manager | --skip-manager) USE_MANAGER=0 ;;
308 309 310 311
    --manager)
     USE_MANAGER=1
     USE_RUNNING_SERVER=
     ;;
312 313
    --start-and-exit)
     START_AND_EXIT=1
unknown's avatar
unknown committed
314
     ;;
315
    --socket=*) LOCAL_SOCKET=`$ECHO "$1" | $SED -e "s;--socket=;;"` ;;
316
    --skip-rpl) NO_SLAVE=1 ;;
unknown's avatar
unknown committed
317
    --skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
318
    --do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
319
    --start-from=* ) START_FROM=`$ECHO "$1" | $SED -e "s;--start-from=;;"` ;;
320 321 322 323
    --warnings | --log-warnings)
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --log-warnings"
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --log-warnings"
     ;;
unknown's avatar
unknown committed
324 325 326
    --wait-timeout=*)
     START_WAIT_TIMEOUT=`$ECHO "$1" | $SED -e "s;--wait-timeout=;;"`
     STOP_WAIT_TIMEOUT=$START_WAIT_TIMEOUT;;
327 328 329
    --record)
      RECORD=1;
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
330 331 332 333 334
    --small-bench)
      DO_SMALL_BENCH=1
      DO_BENCH=1
      NO_SLAVE=1
      ;;
unknown's avatar
unknown committed
335 336 337
    --bench)
      DO_BENCH=1
      NO_SLAVE=1
unknown's avatar
unknown committed
338
      ;;
339 340
    --big*)			# Actually --big-test
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
unknown's avatar
unknown committed
341 342
    --compress)
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
343 344
    --sleep=*)
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
unknown's avatar
unknown committed
345
      SLEEP_TIME_AFTER_RESTART=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
346
      ;;
347
    --ps-protocol)
unknown's avatar
unknown committed
348
      TEST_MODE="$TEST_MODE ps-protocol" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
unknown's avatar
unknown committed
349 350 351
    --user-test=*)
      USER_TEST=`$ECHO "$1" | $SED -e "s;--user-test=;;"`
      ;;
352
    --mysqld=*)
unknown's avatar
unknown committed
353
       TMP=`$ECHO "$1" | $SED -e "s;--mysqld=;;"`
unknown's avatar
unknown committed
354
       EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $TMP"
355
       EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $TMP"
356
       ;;
357 358 359 360 361 362
    --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
363
      GCOV=`which gcov`
364
      ;;
unknown's avatar
unknown committed
365 366
    --gprof )
      DO_GPROF=1
unknown's avatar
unknown committed
367
      ;;
368
    --gdb )
unknown's avatar
unknown committed
369 370
      START_WAIT_TIMEOUT=300
      STOP_WAIT_TIMEOUT=300
371
      if [ x$BINARY_DIST = x1 ] ; then
372
	$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
373 374
      fi
      DO_GDB=1
375 376
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
unknown's avatar
unknown committed
377 378
      # This needs to be checked properly
      # USE_MANAGER=1
379
      USE_RUNNING_SERVER=""
380
      ;;
381 382 383 384 385
    --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
386 387
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
388
      ;;
unknown's avatar
unknown committed
389 390 391 392
    --manual-gdb )
      DO_GDB=1
      MANUAL_GDB=1
      USE_RUNNING_SERVER=""
393 394
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
unknown's avatar
unknown committed
395
      ;;
396 397
    --ddd )
      if [ x$BINARY_DIST = x1 ] ; then
398
	$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --ddd option"
399 400
      fi
      DO_DDD=1
401
      USE_RUNNING_SERVER=""
402 403
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
404
      ;;
405
    --valgrind | --valgrind-all)
unknown's avatar
unknown committed
406 407 408
      VALGRIND=`which valgrind` # this will print an error if not found
      # Give good warning to the user and stop
      if [ -z "$VALGRIND" ] ; then
409
        $ECHO "You need to have the 'valgrind' program in your PATH to run mysql-test-run with option --valgrind. Valgrind's home page is http://valgrind.kde.org ."
unknown's avatar
unknown committed
410 411
        exit 1
      fi
412 413
      # >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
      valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && VALGRIND="$VALGRIND --tool=memcheck"
unknown's avatar
unknown committed
414
      VALGRIND="$VALGRIND --alignment=8 --leak-check=yes --num-callers=16"
415 416
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-safemalloc --skip-bdb"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-safemalloc --skip-bdb"
unknown's avatar
unknown committed
417
      SLEEP_TIME_AFTER_RESTART=10
418
      SLEEP_TIME_FOR_DELETE=60
419
      USE_RUNNING_SERVER=""
420 421 422 423
      if test "$1" = "--valgrind-all"
      then
        VALGRIND="$VALGRIND -v --show-reachable=yes"
      fi
unknown's avatar
unknown committed
424 425 426 427 428
      ;;
    --valgrind-options=*)
      TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"`
      VALGRIND="$VALGRIND $TMP"
      ;;
429 430 431 432
    --skip-*)
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1"
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1"
      ;;
unknown's avatar
unknown committed
433 434
    --strace-client )
      STRACE_CLIENT=1
unknown's avatar
unknown committed
435
      ;;
436
    --debug)
437
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
unknown's avatar
unknown committed
438
       --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/master.trace"
439
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
unknown's avatar
unknown committed
440
       --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/slave.trace"
441 442
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqltest.trace"
443 444 445 446
      EXTRA_MYSQLDUMP_OPT="$EXTRA_MYSQLDUMP_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqldump.trace"
      EXTRA_MYSQLBINLOG_OPT="$EXTRA_MYSQLBINLOG_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlbinlog.trace"
unknown's avatar
unknown committed
447
      EXTRA_MYSQL_CLIENT_TEST_OPT="--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysql_client_test.trace"
448
      ;;
449 450 451
    --fast)
      FAST_START=1
      ;;
452 453 454 455 456 457
    -- )  shift; break ;;
    --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
    * ) break ;;
  esac
  shift
done
unknown's avatar
fixed  
unknown committed
458

unknown's avatar
unknown committed
459 460 461 462 463 464 465
if [ -z "$TEST_MODE" ] ; then
  TEST_MODE="default"
else
  # Remove the leading space if any
  TEST_MODE=`echo $TEST_MODE | sed 's/^ *//'`
fi

unknown's avatar
unknown committed
466 467 468
#++
# mysqld Environment Parameters
#--
469

unknown's avatar
unknown committed
470
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
471 472
MANAGER_PID_FILE="$MYRUN_DIR/manager.pid"

473
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
unknown's avatar
unknown committed
474
MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
unknown's avatar
unknown committed
475
MASTER_MYSOCK1=$MYSQL_MYSOCK"1"
unknown's avatar
unknown committed
476 477 478
MASTER_MYPID="$MYRUN_DIR/master.pid"
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/master.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/master.err"
479 480

SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
unknown's avatar
unknown committed
481
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
unknown's avatar
unknown committed
482 483 484
SLAVE_MYPID="$MYRUN_DIR/slave.pid"
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/slave.err"
485

486
CURRENT_TEST="$MYSQL_TEST_DIR/var/log/current_test"
487
SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
488

unknown's avatar
unknown committed
489
export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
unknown's avatar
unknown committed
490

491
NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2`
492
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgm-extra-opts=$NDB_MGM_EXTRA_OPTS --ndb_mgmd-extra-opts=$NDB_MGMD_EXTRA_OPTS --ndbd-extra-opts=$NDBD_EXTRA_OPTS"
493
NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
494
NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
495

496 497 498 499
if [ x$SOURCE_DIST = x1 ] ; then
 MY_BASEDIR=$MYSQL_TEST_DIR
else
 MY_BASEDIR=$BASEDIR
unknown's avatar
unknown committed
500
fi
unknown's avatar
unknown committed
501

unknown's avatar
unknown committed
502 503 504 505 506 507 508 509
# 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
510
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
unknown's avatar
unknown committed
511

512
if test ${COLUMNS:-0} -lt 80 ; then COLUMNS=80 ; fi
513
E=`$EXPR $COLUMNS - 8`
unknown's avatar
unknown committed
514
DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c 1-$E`
515

516 517 518
# on source dist, we pick up freshly build executables
# on binary, use what is installed
if [ x$SOURCE_DIST = x1 ] ; then
unknown's avatar
unknown committed
519
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
520 521
   if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then
     MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest_embedded"
unknown's avatar
unknown committed
522
   else
523
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
unknown's avatar
unknown committed
524 525
     exit 1
   fi
526
   MYSQL_CLIENT_TEST="$BASEDIR/libmysqld/examples/mysql_client_test_embedded"
527
 else
unknown's avatar
unknown committed
528 529 530 531
   MYSQLD="$BASEDIR/sql/mysqld"
   if [ -n "$VALGRIND" ] ; then
     MYSQLD="$VALGRIND $MYSQLD"
   fi
unknown's avatar
unknown committed
532 533 534 535 536 537 538
   if [ -f "$BASEDIR/client/.libs/lt-mysqltest" ] ; then
     MYSQL_TEST="$BASEDIR/client/.libs/lt-mysqltest"
   elif [ -f "$BASEDIR/client/.libs/mysqltest" ] ; then
     MYSQL_TEST="$BASEDIR/client/.libs/mysqltest"
   else
     MYSQL_TEST="$BASEDIR/client/mysqltest"
   fi
539
   MYSQL_CLIENT_TEST="$BASEDIR/tests/mysql_client_test"
540
 fi
541
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
unknown's avatar
unknown committed
542
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
543
 else
unknown's avatar
unknown committed
544
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
545
 fi
unknown's avatar
unknown committed
546
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
unknown's avatar
unknown committed
547
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
unknown's avatar
unknown committed
548
 else
unknown's avatar
unknown committed
549
   MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
unknown's avatar
unknown committed
550
 fi
unknown's avatar
unknown committed
551 552 553
 if [ -n "$STRACE_CLIENT" ]; then
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
 fi
unknown's avatar
unknown committed
554

unknown's avatar
unknown committed
555 556
 CLIENT_BINDIR="$BASEDIR/client"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
unknown's avatar
unknown committed
557
 WAIT_PID="$BASEDIR/extra/mysql_waitpid"
unknown's avatar
unknown committed
558
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
unknown's avatar
unknown committed
559
 MYSQL_MANAGER="$BASEDIR/tools/mysqlmanager"
unknown's avatar
unknown committed
560 561
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
 MYSQL="$CLIENT_BINDIR/mysql"
562
 LANGUAGE="$BASEDIR/sql/share/english/"
563
 CHARSETSDIR="$BASEDIR/sql/share/charsets"
564
 INSTALL_DB="./install_test_db"
565
 MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
566
 NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
unknown's avatar
unknown committed
567
 NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm"
unknown's avatar
unknown committed
568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592

 if [ -n "$USE_PURIFY" ] ; then
   PSUP="$MYSQL_TEST_DIR/purify.suppress"
   echo "suppress UMR rw_read_held; mi_open; ha_myisam::open64; handler::ha_open; openfrm" >  $PSUP
   echo "suppress UMR my_end; main" >> $PSUP
   echo "suppress UMR _doprnt; fprintf; my_end; main" >> $PSUP
   PURIFYOPTIONS="-windows=no -log-file=%v.purifylog -append-logfile -add-suppression-files=$PSUP"
   if [ -f "${MYSQL_TEST}-purify" ] ; then
     MYSQL_TEST="${MYSQL_TEST}-purify"
     PLOG="$MYSQL_TEST.purifylog"
     if [ -f $PLOG ]; then
       mv $PLOG $PLOG.$$
     fi
     PURIFY_LOGS="$PLOG"
   fi
   if [ -f "${MYSQLD}-purify" ] ; then
     MYSQLD="${MYSQLD}-purify"
     PLOG="$MYSQLD.purifylog"
     if [ -f $PLOG ]; then
       mv $PLOG $PLOG.$$
     fi
     PURIFY_LOGS="$PURIFY_LOGS $PLOG"
   fi
 fi

593
else
594 595 596 597 598 599 600 601

 # We have a binary installation. Note that this can be both from
 # unpacking a MySQL AB binary distribution (created using
 # "scripts/make_binary_distribution", and from a "make install".
 # Unfortunately the structure differs a bit, for a "make install"
 # currently all binaries are in "bin", for a MySQL AB packaging
 # some are in "tests".

602 603
 if test -x "$BASEDIR/libexec/mysqld"
 then
unknown's avatar
unknown committed
604
   MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
605
 else
unknown's avatar
unknown committed
606
   MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
607
 fi
unknown's avatar
unknown committed
608
 CLIENT_BINDIR="$BASEDIR/bin"
unknown's avatar
unknown committed
609 610 611 612 613 614 615
 if test -d "$BASEDIR/tests"
 then
   TESTS_BINDIR="$BASEDIR/tests"
 else
   TESTS_BINDIR="$BASEDIR/bin"
 fi
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
unknown's avatar
unknown committed
616 617 618 619 620 621 622 623
 MYSQL_DUMP="$CLIENT_BINDIR/mysqldump"
 MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
 WAIT_PID="$CLIENT_BINDIR/mysql_waitpid"
 MYSQL_MANAGER="$CLIENT_BINDIR/mysqlmanager"
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
 MYSQL="$CLIENT_BINDIR/mysql"
624
 INSTALL_DB="./install_test_db --bin"
unknown's avatar
unknown committed
625
 MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
626
 NDB_TOOLS_DIR="$CLIENT_BINDIR"
unknown's avatar
unknown committed
627
 NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
unknown's avatar
unknown committed
628
 if test -d "$BASEDIR/share/mysql/english"
629 630
 then
   LANGUAGE="$BASEDIR/share/mysql/english/"
631
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
632 633
 else
   LANGUAGE="$BASEDIR/share/english/"
634
   CHARSETSDIR="$BASEDIR/share/charsets"
635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651
 fi
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
   if [ -f "$CLIENT_BINDIR/mysqltest_embedded" ] ; then
     MYSQL_TEST="$VALGRIND $CLIENT_BINDIR/mysqltest_embedded"
   else
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
     exit 1
   fi
   if [ -d "$BASEDIR/tests/mysql_client_test_embedded" ] ; then
     MYSQL_CLIENT_TEST="$TESTS_BINDIR/mysql_client_test_embedded"
   else
     MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test_embedded"
   fi
 else
   MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
   MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test"
 fi
652 653
fi

654 655 656 657 658 659 660 661 662 663
if [ -z "$MASTER_MYSQLD" ]
then
MASTER_MYSQLD=$MYSQLD
fi

if [ -z "$SLAVE_MYSQLD" ]
then
SLAVE_MYSQLD=$MYSQLD
fi

664 665 666 667 668 669
# If we should run all tests cases, we will use a local server for that

if [ -z "$1" ]
then
   USE_RUNNING_SERVER=""
fi
670 671
if [ -n "$USE_RUNNING_SERVER" ]
then
672
   MASTER_MYSOCK=$LOCAL_SOCKET;
673
   DBUSER=${DBUSER:-test}
674
else
675
   DBUSER=${DBUSER:-root}		# We want to do FLUSH xxx commands
676
fi
677 678 679

if [ -w / ]
then
unknown's avatar
unknown committed
680 681 682
  # 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"
683 684
fi

unknown's avatar
unknown committed
685
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
686 687 688 689
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR $EXTRA_MYSQLBINLOG_OPT"
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD"
690
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
691
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
692
export NDB_TOOLS_DIR
unknown's avatar
unknown committed
693
export NDB_MGM
694
export NDB_BACKUP_DIR
695
export NDB_TOOLS_OUTPUT
unknown's avatar
unknown committed
696
export PURIFYOPTIONS
697 698
NDB_STATUS_OK=1
export NDB_STATUS_OK
699

700
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
701
 --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
unknown's avatar
unknown committed
702 703 704 705
 --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT $MYSQL_TEST_SSL_OPTS"
if [ x$USE_TIMER = x1 ] ; then
  MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS --timer-file=$MY_LOG_DIR/timer"
fi
706 707 708
MYSQL_TEST_BIN=$MYSQL_TEST
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
709 710 711
GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out
unknown's avatar
unknown committed
712 713 714 715
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
716
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
717 718 719
if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
  XTERM=`which xterm`
fi
720

unknown's avatar
unknown committed
721 722 723 724
#++
# Function Definitions
#--

unknown's avatar
unknown committed
725 726
prompt_user ()
{
727
 $ECHO $1
728
 read unused
unknown's avatar
unknown committed
729 730
}

unknown's avatar
unknown committed
731
# We can't use diff -u or diff -a as these are not portable
732

unknown's avatar
unknown committed
733 734 735 736
show_failed_diff ()
{
  reject_file=r/$1.reject
  result_file=r/$1.result
737
  eval_file=r/$1.eval
unknown's avatar
unknown committed
738

unknown's avatar
unknown committed
739 740 741 742 743 744 745
  # If we have an special externsion for result files we use it if we are recording
  # or a result file with that extension exists.
  if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ]
  then
    result_file="$result_file$RESULT_EXT"
  fi

746 747 748 749
  if [ -f $eval_file ]
  then
    result_file=$eval_file
  fi
unknown's avatar
unknown committed
750

unknown's avatar
unknown committed
751 752 753 754
  if [ -x "$DIFF" ] && [ -f $reject_file ]
  then
    echo "Below are the diffs between actual and expected results:"
    echo "-------------------------------------------------------"
unknown's avatar
unknown committed
755
    $DIFF -c $result_file $reject_file
unknown's avatar
unknown committed
756
    echo "-------------------------------------------------------"
757
    echo "Please follow the instructions outlined at"
758
    echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
759
    echo "to find the reason to this problem and how to report this."
760
    echo ""
unknown's avatar
unknown committed
761
  fi
unknown's avatar
unknown committed
762
}
unknown's avatar
unknown committed
763

764 765 766 767 768 769
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
unknown's avatar
unknown committed
770
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
771 772
}

unknown's avatar
unknown committed
773
error () {
unknown's avatar
unknown committed
774
    $ECHO  "Error:  $1"
unknown's avatar
unknown committed
775 776 777
    exit 1
}

778
error_is () {
779 780
    $ECHO "Errors are (from $TIMEFILE) :"
    $CAT < $TIMEFILE
781
    $ECHO "(the last lines may be the most important ones)"
782 783
}

unknown's avatar
unknown committed
784
prefix_to_8() {
785
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
unknown's avatar
unknown committed
786 787
}

unknown's avatar
unknown committed
788
pass_inc () {
unknown's avatar
unknown committed
789
    TOT_PASS=`$EXPR $TOT_PASS + 1`
unknown's avatar
unknown committed
790 791 792
}

fail_inc () {
unknown's avatar
unknown committed
793
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
unknown's avatar
unknown committed
794 795
}

796 797 798 799
skip_inc () {
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
}

unknown's avatar
unknown committed
800
total_inc () {
unknown's avatar
unknown committed
801
    TOT_TEST=`$EXPR $TOT_TEST + 1`
unknown's avatar
unknown committed
802 803
}

804 805 806 807 808 809

skip_test() {
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
810
   RES="$pname"
811 812 813 814
   skip_inc
   $ECHO "$RES$RES_SPACE [ skipped ]"
}

unknown's avatar
unknown committed
815 816 817 818 819 820 821 822 823 824 825
report_current_test () {
   tname=$1
   echo "CURRENT_TEST: $tname" >> $MASTER_MYERR
   if [ -n "$PURIFY_LOGS" ] ; then
     for log in $PURIFY_LOGS
     do
       echo "CURRENT_TEST: $tname" >> $log
     done
   fi
}

unknown's avatar
unknown committed
826
report_stats () {
827
    if [ $TOT_FAIL = 0 ]; then
unknown's avatar
unknown committed
828
	$ECHO "All $TOT_TEST tests were successful."
unknown's avatar
unknown committed
829
    else
unknown's avatar
unknown committed
830 831 832 833 834 835
	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`
836
	$ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% were successful."
837
	$ECHO ""
838
        $ECHO "The log files in $MY_LOG_DIR may give you some hint"
839 840
	$ECHO "of what when wrong."
	$ECHO "If you want to report this error, please read first the documentation at"
841
        $ECHO "http://www.mysql.com/doc/en/MySQL_test_suite.html"
unknown's avatar
unknown committed
842
    fi
unknown's avatar
unknown committed
843

unknown's avatar
unknown committed
844 845 846
    if test -z "$USE_RUNNING_SERVER"
    then

unknown's avatar
unknown committed
847 848 849 850
    # Report if there was any fatal warnings/errors in the log files
    #
    $RM -f $MY_LOG_DIR/warnings $MY_LOG_DIR/warnings.tmp
    # Remove some non fatal warnings from the log files
851
    $SED -e 's!Warning:  Table:.* on delete!!g' -e 's!Warning: Setting lower_case_table_names=2!!g' -e 's!Warning: One can only use the --user.*root!!g' \
852 853 854
        $MY_LOG_DIR/*.err \
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp
unknown's avatar
unknown committed
855 856 857 858 859

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x"
    do
unknown's avatar
unknown committed
860
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
unknown's avatar
unknown committed
861 862 863 864 865 866 867 868 869 870
      then
        found_error=1
      fi
    done
    $RM -f $MY_LOG_DIR/warnings.tmp
    if [ $found_error = "1" ]
    then
      echo "WARNING: Got errors/warnings while running tests. Please examine"
      echo "$MY_LOG_DIR/warnings for details."
    fi
unknown's avatar
unknown committed
871
    fi
unknown's avatar
unknown committed
872
}
873

unknown's avatar
unknown committed
874
mysql_install_db () {
875
    $ECHO "Removing Stale Files"
unknown's avatar
unknown committed
876
    $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1" $SLAVE_MYDDIR $MY_LOG_DIR/* 
877
    $ECHO "Installing Master Databases"
878 879 880 881 882
    $INSTALL_DB
    if [ $? != 0 ]; then
	error "Could not install master test DBs"
	exit 1
    fi
unknown's avatar
unknown committed
883 884 885 886 887 888 889 890 891
    if [ ! -z "$USE_NDBCLUSTER" ]
    then
      $ECHO "Installing Master Databases 1"
      $INSTALL_DB -1
      if [ $? != 0 ]; then
	error "Could not install master test DBs 1"
	exit 1
      fi
    fi
892
    $ECHO "Installing Slave Databases"
893
    $INSTALL_DB -slave
894
    if [ $? != 0 ]; then
895
	error "Could not install slave test DBs"
896
	exit 1
unknown's avatar
unknown committed
897
    fi
unknown's avatar
unknown committed
898

899 900
    for slave_num in 1 2 ;
    do
901
      $RM -rf var/slave$slave_num-data
902 903 904
      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
905
    done
unknown's avatar
unknown committed
906 907 908
    return 0
}

unknown's avatar
unknown committed
909 910
gprof_prepare ()
{
unknown's avatar
unknown committed
911 912
 $RM -rf $GPROF_DIR
 mkdir -p $GPROF_DIR
unknown's avatar
unknown committed
913 914 915 916 917
}

gprof_collect ()
{
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
918
   gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
unknown's avatar
unknown committed
919 920 921
   echo "Master execution profile has been saved in $GPROF_MASTER"
 fi
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
922
   gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
unknown's avatar
unknown committed
923 924 925 926
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
 fi
}

927
gcov_prepare () {
unknown's avatar
unknown committed
928 929
    $FIND $BASEDIR -name \*.gcov \
    -or -name \*.da | $XARGS $RM
unknown's avatar
unknown committed
930 931 932
}

gcov_collect () {
unknown's avatar
unknown committed
933
    $ECHO "Collecting source coverage info..."
unknown's avatar
unknown committed
934 935
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
unknown's avatar
unknown committed
936 937 938
    for d in $MYSQLD_SRC_DIRS; do
	cd $BASEDIR/$d
	for f in *.h *.cc *.c; do
unknown's avatar
unknown committed
939
	    $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
unknown's avatar
unknown committed
940
	done
941
	cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
942 943
    done

unknown's avatar
unknown committed
944
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
unknown's avatar
unknown committed
945 946
}

unknown's avatar
unknown committed
947 948 949 950 951
abort_if_failed()
{
 if [ ! $? = 0 ] ; then
  echo $1
  exit 1
unknown's avatar
unknown committed
952
 fi
unknown's avatar
unknown committed
953 954 955 956
}

start_manager()
{
unknown's avatar
unknown committed
957
 if [ $USE_MANAGER = 0 ] ; then
958 959
   echo "Manager disabled, skipping manager start."
   $RM -f $MYSQL_MANAGER_LOG
960 961
  return
 fi
unknown's avatar
unknown committed
962
 $ECHO "Starting MySQL Manager"
963 964 965 966 967 968 969 970 971
 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

unknown's avatar
unknown committed
972
 $RM -f $MANAGER_PID_FILE
unknown's avatar
unknown committed
973 974
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
unknown's avatar
unknown committed
975
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
976
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
unknown's avatar
unknown committed
977
  abort_if_failed "Could not start MySQL manager"
978 979
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
980 981 982 983 984
  --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"
985 986 987 988
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
unknown's avatar
unknown committed
989 990
}

unknown's avatar
unknown committed
991 992
stop_manager()
{
unknown's avatar
unknown committed
993
 if [ $USE_MANAGER = 0 ] ; then
994 995
  return
 fi
unknown's avatar
unknown committed
996 997 998 999
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
1000 1001
 echo "Manager terminated"

unknown's avatar
unknown committed
1002 1003 1004
}

manager_launch()
unknown's avatar
unknown committed
1005
{
unknown's avatar
unknown committed
1006 1007
  ident=$1
  shift
unknown's avatar
unknown committed
1008
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1009
    echo $@ | /bin/sh  >> $CUR_MYERR 2>&1  &
unknown's avatar
unknown committed
1010 1011
    sleep 2 #hack
    return
1012
  fi
unknown's avatar
unknown committed
1013
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
unknown's avatar
unknown committed
1014
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1015
def_exec $ident "$@"
unknown's avatar
unknown committed
1016 1017 1018 1019
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
unknown's avatar
unknown committed
1020
EOF
unknown's avatar
unknown committed
1021
  abort_if_failed "Could not execute manager command"
unknown's avatar
unknown committed
1022
}
unknown's avatar
unknown committed
1023

unknown's avatar
unknown committed
1024 1025
manager_term()
{
1026 1027
  pid=$1
  ident=$2
unknown's avatar
unknown committed
1028
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1029
    # Shutdown time must be high as slave may be in reconnect
unknown's avatar
unknown committed
1030
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1
1031 1032
    res=$?
    # Some systems require an extra connect
unknown's avatar
unknown committed
1033
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1
1034 1035 1036 1037 1038
    if test $res = 0
    then
      wait_for_pid $pid
    fi
    return $res
1039
  fi
unknown's avatar
unknown committed
1040 1041
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1042
stop_exec $ident $STOP_WAIT_TIMEOUT
unknown's avatar
unknown committed
1043 1044 1045 1046
EOF
 abort_if_failed "Could not execute manager command"
}

1047 1048 1049 1050
start_ndbcluster()
{
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
unknown's avatar
merge  
unknown committed
1051
  rm -f $NDB_TOOLS_OUTPUT
1052 1053 1054 1055 1056
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
  then
    echo "Starting ndbcluster"
    if [ "$DO_BENCH" = 1 ]
    then
1057
      NDBCLUSTER_EXTRA_OPTS=""
1058
    else
1059
      NDBCLUSTER_EXTRA_OPTS="--small"
1060
    fi
1061 1062 1063 1064 1065 1066 1067 1068 1069
    ./ndb/ndbcluster $NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --initial || NDB_STATUS_OK=0
    if [ x$NDB_STATUS_OK != x1 ] ; then
      if [ x$FORCE != x1 ] ; then
        exit 1
      fi
      USE_NDBCLUSTER=
      return
    fi

1070
    NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
1071
  else
1072 1073
    NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
    echo "Using ndbcluster at $NDB_CONNECTSTRING"
1074
  fi
1075 1076
  USE_NDBCLUSTER="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\""
  export NDB_CONNECTSTRING
1077 1078 1079 1080 1081 1082 1083 1084 1085 1086
  fi
}

stop_ndbcluster()
{
 if [ ! -z "$USE_NDBCLUSTER" ]
 then
 if [ -z "$USE_RUNNING_NDBCLUSTER" ]
 then
   # Kill any running ndbcluster stuff
1087
   ./ndb/ndbcluster $NDBCLUSTER_OPTS --stop
1088 1089 1090 1091
 fi
 fi
}

unknown's avatar
unknown committed
1092 1093
# The embedded server needs the cleanup so we do some of the start work
# but stop before actually running mysqld or anything.
unknown's avatar
unknown committed
1094

unknown's avatar
unknown committed
1095 1096
start_master()
{
unknown's avatar
unknown committed
1097 1098
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
unknown's avatar
unknown committed
1099 1100
    return
  fi
unknown's avatar
unknown committed
1101 1102 1103
  # Remove stale binary logs except for 2 tests which need them
  if [ "$tname" != "rpl_crash_binlog_ib_1b" ] && [ "$tname" != "rpl_crash_binlog_ib_2b" ] && [ "$tname" != "rpl_crash_binlog_ib_3b" ] 
  then
unknown's avatar
unknown committed
1104
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
unknown's avatar
unknown committed
1105 1106
  fi

1107
  # Remove old master.info and relay-log.info files
unknown's avatar
unknown committed
1108
  $RM -f $MYSQL_TEST_DIR/var/master-data$1/master.info $MYSQL_TEST_DIR/var/master-data$1/relay-log.info
unknown's avatar
unknown committed
1109 1110 1111 1112 1113 1114 1115 1116

  #run master initialization shell script if one exists

  if [ -f "$master_init_script" ] ;
  then
      /bin/sh $master_init_script
  fi
  cd $BASEDIR # for gcov
unknown's avatar
unknown committed
1117 1118 1119
  if [ -n "$1" ] ; then
   id=`$EXPR $1 + 101`;
   this_master_myport=`$EXPR $MASTER_MYPORT + $1`
1120
   NOT_FIRST_MASTER_EXTRA_OPTS="--skip-innodb"
unknown's avatar
unknown committed
1121 1122 1123
  else
   id=1;
   this_master_myport=$MASTER_MYPORT
1124
   NOT_FIRST_MASTER_EXTRA_OPTS=""
unknown's avatar
unknown committed
1125
  fi
unknown's avatar
unknown committed
1126 1127
  if [ -z "$DO_BENCH" ]
  then
unknown's avatar
unknown committed
1128 1129
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
  	    --server-id=$id  \
1130
          --basedir=$MY_BASEDIR \
unknown's avatar
unknown committed
1131
          --port=$this_master_myport \
unknown's avatar
unknown committed
1132
          --local-infile \
unknown's avatar
unknown committed
1133 1134
          --exit-info=256 \
          --core \
unknown's avatar
unknown committed
1135
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1136 1137 1138 1139
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
          --log=$MASTER_MYLOG$1 \
unknown's avatar
unknown committed
1140 1141 1142 1143 1144
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1145
	  --open-files-limit=1024 \
1146
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1147
           $SMALL_SERVER \
1148 1149
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
           $NOT_FIRST_MASTER_EXTRA_OPTS"
unknown's avatar
unknown committed
1150
  else
unknown's avatar
unknown committed
1151 1152
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
          --server-id=$id --rpl-recovery-rank=1 \
unknown's avatar
unknown committed
1153
          --basedir=$MY_BASEDIR --init-rpl-role=master \
unknown's avatar
unknown committed
1154
          --port=$this_master_myport \
unknown's avatar
unknown committed
1155
          --local-infile \
unknown's avatar
unknown committed
1156 1157 1158
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
unknown's avatar
unknown committed
1159 1160 1161
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core \
unknown's avatar
unknown committed
1162
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1163 1164 1165
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1166
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1167
           $SMALL_SERVER \
1168 1169
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
           $NOT_FIRST_MASTER_EXTRA_OPTS"
unknown's avatar
unknown committed
1170 1171 1172 1173 1174
  fi

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

unknown's avatar
unknown committed
1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186
  # For embedded server we collect the server flags and return
  if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
    # Add a -A to each argument to pass it to embedded server
    EMBEDDED_SERVER_OPTS=""
    for opt in $master_args
    do
      EMBEDDED_SERVER_OPTS="$EMBEDDED_SERVER_OPTS -A $opt"
    done
    EXTRA_MYSQL_TEST_OPT="$EMBEDDED_SERVER_OPTS"
    return
  fi

unknown's avatar
unknown committed
1187 1188 1189 1190
  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
1191
    "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
unknown's avatar
unknown committed
1192 1193
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1194 1195 1196 1197
    if [ x$MANUAL_GDB = x1 ]
    then
      $ECHO "set args $master_args" > $GDB_MASTER_INIT
      $ECHO "To start gdb for the master , type in another window:"
1198
      $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
unknown's avatar
unknown committed
1199 1200 1201 1202
      wait_for_master=1500
    else
      ( $ECHO set args $master_args;
      if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1203
    cat <<EOF
unknown's avatar
unknown committed
1204 1205
b mysql_parse
commands 1
1206
disa 1
unknown's avatar
unknown committed
1207
end
unknown's avatar
unknown committed
1208 1209
r
EOF
unknown's avatar
unknown committed
1210 1211
      fi )  > $GDB_MASTER_INIT
      manager_launch master $XTERM -display $DISPLAY \
1212
      -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
unknown's avatar
unknown committed
1213
    fi
unknown's avatar
unknown committed
1214
  else
1215
    manager_launch master $MASTER_MYSQLD $master_args
unknown's avatar
unknown committed
1216
  fi
unknown's avatar
unknown committed
1217
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
unknown's avatar
unknown committed
1218
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
unknown's avatar
unknown committed
1219
  eval "MASTER$1_RUNNING=1"
unknown's avatar
unknown committed
1220 1221 1222 1223
}

start_slave()
{
unknown's avatar
unknown committed
1224 1225 1226
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
unknown's avatar
unknown committed
1227 1228
  # When testing fail-safe replication, we will have more than one slave
  # in this case, we start secondary slaves with an argument
unknown's avatar
unknown committed
1229 1230 1231 1232 1233 1234 1235 1236
  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"
1237
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
unknown's avatar
unknown committed
1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249
   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
unknown's avatar
unknown committed
1250
  # Remove stale binary logs and old master.info files
unknown's avatar
unknown committed
1251 1252 1253 1254 1255 1256
  # except for too tests which need them
  if [ "$tname" != "rpl_crash_binlog_ib_1b" ] && [ "$tname" != "rpl_crash_binlog_ib_2b" ] && [ "$tname" != "rpl_crash_binlog_ib_3b" ]
  then
    $RM -f $MYSQL_TEST_DIR/var/log/$slave_ident-*bin.*
    $RM -f $slave_datadir/master.info $slave_datadir/relay-log.info
  fi
unknown's avatar
unknown committed
1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267

  #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 \
1268
          --master-password="" \
unknown's avatar
unknown committed
1269 1270 1271 1272 1273 1274 1275 1276 1277 1278
          --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 \
1279
          --relay-log=$MYSQL_TEST_DIR/var/log/$slave_ident-relay-bin \
unknown's avatar
unknown committed
1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291
          --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 \
unknown's avatar
unknown committed
1292
          --skip-innodb --skip-ndbcluster --skip-slave-start \
unknown's avatar
unknown committed
1293 1294 1295
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
          --report-host=127.0.0.1 --report-user=root \
          --report-port=$slave_port \
1296
          --master-retry-count=10 \
unknown's avatar
unknown committed
1297
          -O slave_net_timeout=10 \
unknown's avatar
unknown committed
1298 1299 1300 1301 1302 1303 1304
           $SMALL_SERVER \
           $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  CUR_MYERR=$slave_err
  CUR_MYSOCK=$slave_sock

  if [ x$DO_DDD = x1 ]
  then
1305
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1306 1307 1308 1309
    manager_launch $slave_ident ddd -display $DISPLAY --debugger \
     "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1310 1311
    if [ x$MANUAL_GDB = x1 ]
    then
unknown's avatar
unknown committed
1312
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1313
      echo "To start gdb for the slave, type in another window:"
1314
      echo "cd $CWD ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
unknown's avatar
unknown committed
1315 1316
      wait_for_slave=1500
    else
unknown's avatar
unknown committed
1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
      ( $ECHO set args $slave_args;
      if [ $USE_MANAGER = 0 ] ; then
    cat <<EOF
b mysql_parse
commands 1
disa 1
end
r
EOF
      fi )  > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1327 1328 1329
      manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
      gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
    fi
unknown's avatar
unknown committed
1330 1331 1332 1333
  else
    manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
  fi
  eval "SLAVE$1_RUNNING=1"
1334
  sleep_until_file_created $slave_pid $wait_for_slave
unknown's avatar
unknown committed
1335
  wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
unknown's avatar
unknown committed
1336 1337
}

unknown's avatar
unknown committed
1338 1339
mysql_start ()
{
unknown's avatar
unknown committed
1340
# We should not start the daemon here as we don't know the arguments
unknown's avatar
unknown committed
1341
# for the test.  Better to let the test start the daemon
unknown's avatar
unknown committed
1342 1343 1344 1345

#  $ECHO "Starting MySQL daemon"
#  start_master
#  start_slave
unknown's avatar
unknown committed
1346
  cd $MYSQL_TEST_DIR
1347
  start_ndbcluster
unknown's avatar
unknown committed
1348
  return 1
unknown's avatar
unknown committed
1349 1350
}

unknown's avatar
unknown committed
1351 1352
stop_slave ()
{
1353 1354 1355
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ -n "$1" ] ;
unknown's avatar
unknown committed
1356
  then
1357 1358 1359
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
  else
   slave_pid=$SLAVE_MYPID
unknown's avatar
unknown committed
1360
  fi
1361 1362
  if [ x$this_slave_running = x1 ]
  then
1363 1364
    pid=`$CAT $slave_pid`
    manager_term $pid $slave_ident
1365
    if [ $? != 0 ] && [ -f $slave_pid ]
1366
    then # try harder!
1367
      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
1368 1369
      kill $pid
      sleep_until_file_deleted $pid $slave_pid
1370 1371 1372 1373 1374 1375 1376 1377 1378
      if [ -f $slave_pid ] ; then
        $ECHO "slave refused to die. Sending SIGKILL"
        kill -9 `$CAT $slave_pid`
        $RM -f $slave_pid
      else
        $ECHO "slave responded to SIGTERM "
      fi
    else
      sleep $SLEEP_TIME_AFTER_RESTART
unknown's avatar
unknown committed
1379
    fi
1380
    eval "SLAVE$1_RUNNING=0"
unknown's avatar
unknown committed
1381
  fi
unknown's avatar
unknown committed
1382
}
unknown's avatar
unknown committed
1383

1384 1385 1386 1387 1388 1389 1390 1391 1392 1393
stop_slave_threads ()
{
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ x$this_slave_running = x1 ]
  then
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$slave_ident.sock stop-slave > /dev/null 2>&1
  fi
}

unknown's avatar
unknown committed
1394 1395
stop_master ()
{
unknown's avatar
unknown committed
1396 1397
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ]
unknown's avatar
unknown committed
1398
  then
unknown's avatar
unknown committed
1399 1400 1401
    # For embedded server we don't stop anyting but mark that
    # MASTER_RUNNING=0 to get cleanup when calling start_master().
    if [ x$USE_EMBEDDED_SERVER != x1 ] ; then
unknown's avatar
Merge  
unknown committed
1402
      pid=`$CAT $MASTER_MYPID$1`
unknown's avatar
unknown committed
1403
      manager_term $pid master $1
unknown's avatar
Merge  
unknown committed
1404
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
unknown's avatar
unknown committed
1405 1406 1407
      then # try harder!
	$ECHO "master not cooperating with mysqladmin, will try manual kill"
	kill $pid
unknown's avatar
Merge  
unknown committed
1408 1409
	sleep_until_file_deleted $pid $MASTER_MYPID$1
	if [ -f $MASTER_MYPID$1 ] ; then
unknown's avatar
unknown committed
1410
	  $ECHO "master refused to die. Sending SIGKILL"
unknown's avatar
Merge  
unknown committed
1411 1412
	  kill -9 `$CAT $MASTER_MYPID$1`
	  $RM -f $MASTER_MYPID$1
unknown's avatar
unknown committed
1413 1414 1415
	else
	  $ECHO "master responded to SIGTERM "
	fi
1416
      else
unknown's avatar
unknown committed
1417
	sleep $SLEEP_TIME_AFTER_RESTART
1418
      fi
unknown's avatar
unknown committed
1419
    fi
unknown's avatar
unknown committed
1420
    eval "MASTER$1_RUNNING=0"
unknown's avatar
unknown committed
1421 1422
  fi
}
unknown's avatar
unknown committed
1423

unknown's avatar
unknown committed
1424 1425
mysql_stop ()
{
1426 1427
 $ECHO  "Ending Tests"
 $ECHO  "Shutting-down MySQL daemon"
1428
 $ECHO  ""
unknown's avatar
unknown committed
1429
 stop_master
unknown's avatar
unknown committed
1430
 stop_master 1
unknown's avatar
unknown committed
1431
 $ECHO "Master shutdown finished"
unknown's avatar
unknown committed
1432
 stop_slave
1433 1434
 stop_slave 1
 stop_slave 2
unknown's avatar
unknown committed
1435
 $ECHO "Slave shutdown finished"
1436
 stop_ndbcluster
unknown's avatar
unknown committed
1437
 return 1
unknown's avatar
unknown committed
1438 1439
}

unknown's avatar
unknown committed
1440 1441 1442 1443 1444
mysql_restart ()
{
  mysql_stop
  mysql_start
  return 1
unknown's avatar
unknown committed
1445 1446 1447
}

mysql_loadstd () {
unknown's avatar
unknown committed
1448 1449

    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
unknown's avatar
unknown committed
1450 1451 1452
    return 1
}

unknown's avatar
unknown committed
1453 1454 1455
run_testcase ()
{
 tf=$1
unknown's avatar
unknown committed
1456
 tname=`$BASENAME $tf .test`
unknown's avatar
unknown committed
1457 1458
 master_opt_file=$TESTDIR/$tname-master.opt
 slave_opt_file=$TESTDIR/$tname-slave.opt
1459 1460
 master_init_script=$TESTDIR/$tname-master.sh
 slave_init_script=$TESTDIR/$tname-slave.sh
1461
 slave_master_info_file=$TESTDIR/$tname.slave-mi
unknown's avatar
unknown committed
1462 1463
 tsrcdir=$TESTDIR/$tname-src
 result_file="r/$tname.result"
1464
 echo $tname > $CURRENT_TEST
unknown's avatar
unknown committed
1465
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
unknown's avatar
unknown committed
1466 1467 1468
 if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then
   result_file="$result_file$RESULT_EXT"
 fi
1469
 if [ "$USE_MANAGER" = 1 ] ; then
unknown's avatar
unknown committed
1470
  many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)`
1471 1472 1473 1474
 fi
 if $EXPR "$tname" '<' "$START_FROM" > /dev/null ; then
   #skip_test $tname
   return
unknown's avatar
unknown committed
1475 1476
 fi

1477 1478 1479 1480
 if [ "$SKIP_TEST" ] ; then
   if $EXPR \( "$tname" : "$SKIP_TEST" \) > /dev/null ; then
     skip_test $tname
     return
unknown's avatar
unknown committed
1481
   fi
1482
 fi
1483

1484 1485
 if [ "$DO_TEST" ] ; then
   if $EXPR \( "$tname" : "$DO_TEST" \) > /dev/null ; then
unknown's avatar
unknown committed
1486
     : #empty command to keep some shells happy
1487 1488 1489
   else
     #skip_test $tname
     return
1490
   fi
1491
 fi
1492

1493 1494
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; then
   skip_test $tname
1495 1496 1497
   return
 fi

unknown's avatar
unknown committed
1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509
 if [ "x$USE_EMBEDDED_SERVER" != "x1" ] ; then
   # Stop all slave threads, so that we don't have useless reconnection
   #  attempts and error messages in case the slave and master servers restart.
   stop_slave_threads
   stop_slave_threads 1
   stop_slave_threads 2
 fi

 # FIXME temporary solution, we will get a new C version of this
 # script soon anyway so it is not worth it spending the time
 if [ "x$USE_EMBEDDED_SERVER" = "x1" -a -z "$DO_TEST" ] ; then
   for t in \
1510
        "alter_table" \
unknown's avatar
unknown committed
1511 1512
	"bdb-deadlock" \
	"connect" \
1513 1514
        "ctype_latin1_de" \
        "ctype_ucs" \
unknown's avatar
unknown committed
1515 1516 1517 1518 1519
	"flush_block_commit" \
	"grant2" \
	"grant_cache" \
	"grant" \
	"init_connect" \
1520 1521
	"init_file" \
        "innodb" \
unknown's avatar
unknown committed
1522 1523 1524 1525 1526 1527 1528
	"innodb-deadlock" \
	"innodb-lock" \
	"mix_innodb_myisam_binlog" \
	"mysqlbinlog2" \
	"mysqlbinlog" \
	"mysqldump" \
	"mysql_protocols" \
1529
        "packet" \
unknown's avatar
unknown committed
1530 1531 1532 1533
	"ps_1general" \
	"rename" \
	"show_check" \
        "system_mysql_db_fix" \
1534
        "timezone2" \
unknown's avatar
unknown committed
1535 1536 1537 1538 1539 1540 1541 1542 1543
	"user_var" \
	"variables"
   do
     if [ "$tname" = "$t" ] ; then
       skip_test $tname
       return
     fi
   done
 fi
1544

1545
 if [ -z "$USE_RUNNING_SERVER" ] ;
unknown's avatar
unknown committed
1546
 then
1547 1548
   if [ -f $master_opt_file ] ;
   then
unknown's avatar
unknown committed
1549
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1550 1551 1552 1553 1554 1555 1556
     case "$EXTRA_MASTER_OPT" in
       --timezone=*)
	 TZ=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--timezone=;;"`
	 export TZ
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
	 ;;
1557 1558
       --result-file=*)
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
unknown's avatar
unknown committed
1559 1560 1561 1562
         result_file="r/$result_file.result"
         if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then
	   result_file="$result_file$RESULT_EXT"
	 fi
1563 1564 1565
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
         ;;
1566
     esac
1567
     stop_master
unknown's avatar
unknown committed
1568
     stop_master 1
unknown's avatar
unknown committed
1569
     report_current_test $tname
1570
     start_master
unknown's avatar
unknown committed
1571
     if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1572 1573
       start_master 1
     fi
1574
     TZ=$MY_TZ; export TZ
1575
   else
unknown's avatar
unknown committed
1576 1577 1578 1579 1580
     # If we had extra master opts to the previous run
     # or there is no master running (FIXME strange.....)
     # or there is a master init script
     if [ ! -z "$EXTRA_MASTER_OPT" ] || [ x$MASTER_RUNNING != x1 ] || \
	[ -f $master_init_script ]
1581 1582 1583
     then
       EXTRA_MASTER_OPT=""
       stop_master
unknown's avatar
unknown committed
1584
       stop_master 1
unknown's avatar
unknown committed
1585
       report_current_test $tname
1586
       start_master
unknown's avatar
unknown committed
1587
       if [ -n "$USE_NDBCLUSTER"  -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1588 1589
         start_master 1
       fi
unknown's avatar
unknown committed
1590
     else
unknown's avatar
unknown committed
1591
       report_current_test $tname
unknown's avatar
unknown committed
1592
     fi
1593
   fi
unknown's avatar
unknown committed
1594

unknown's avatar
unknown committed
1595 1596 1597 1598
   # We never start a slave if embedded server is used
   if [ "x$USE_EMBEDDED_SERVER" != "x1" ] ; then
     do_slave_restart=0
     if [ -f $slave_opt_file ] ;
1599
     then
unknown's avatar
unknown committed
1600
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
unknown's avatar
unknown committed
1601
       do_slave_restart=1
unknown's avatar
unknown committed
1602 1603 1604 1605 1606 1607
     else
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
      then
	EXTRA_SLAVE_OPT=""
	do_slave_restart=1
      fi
unknown's avatar
unknown committed
1608
     fi
1609

unknown's avatar
unknown committed
1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631
     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
       echo "CURRENT_TEST: $tname" >> $SLAVE_MYERR
       start_slave
     else
       echo "CURRENT_TEST: $tname" >> $SLAVE_MYERR
     fi
     if [ x$many_slaves = x1 ]; then
      start_slave 1
      start_slave 2
     fi
1632
   fi
unknown's avatar
fixed  
unknown committed
1633
 fi
unknown's avatar
unknown committed
1634 1635 1636 1637 1638 1639

 if [ "x$START_AND_EXIT" = "x1" ] ; then
  echo "Servers started, exiting"
  exit
 fi

1640
 cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
1641

unknown's avatar
unknown committed
1642
 if [ -f $tf ] ; then
unknown's avatar
unknown committed
1643
    $RM -f r/$tname.*reject
unknown's avatar
unknown committed
1644
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1645
    if [ -z "$DO_CLIENT_GDB" ] ; then
1646
      `$MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1647
    else
1648
      do_gdb_test "$mysql_test_args" "$tf"
1649
    fi
unknown's avatar
unknown committed
1650

unknown's avatar
unknown committed
1651 1652
    res=$?

1653
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1654
    RES="$pname"
unknown's avatar
unknown committed
1655

1656 1657 1658 1659
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
unknown's avatar
unknown committed
1660

unknown's avatar
unknown committed
1661
    if [ $res = 0 ]; then
1662 1663
      total_inc
      pass_inc
unknown's avatar
unknown committed
1664
      TIMER=""
unknown's avatar
unknown committed
1665
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
unknown's avatar
unknown committed
1666 1667 1668 1669
	TIMER=`cat $MY_LOG_DIR/timer`
	TIMER=`$PRINTF "%13s" $TIMER`
      fi
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1670
    else
1671
      # why the following ``if'' ? That is why res==1 is special ?
1672 1673 1674 1675
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1676 1677 1678
        if [ $res -gt 2 ]; then
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
        fi
1679
	total_inc
unknown's avatar
unknown committed
1680
        fail_inc
1681
	$ECHO "$RES$RES_SPACE [ fail ]"
1682 1683
        $ECHO
	error_is
unknown's avatar
unknown committed
1684
	show_failed_diff $tname
unknown's avatar
unknown committed
1685
	$ECHO
1686
	if [ x$FORCE != x1 ] ; then
unknown's avatar
unknown committed
1687
	 $ECHO "Aborting: $tname failed in $TEST_MODE mode. To continue, re-run with '--force'."
1688
	 $ECHO
unknown's avatar
unknown committed
1689 1690
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	    [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1691 1692
	 then
	   mysql_stop
unknown's avatar
unknown committed
1693
	   stop_manager
unknown's avatar
unknown committed
1694
   	 fi
1695 1696
	 exit 1
	fi
unknown's avatar
unknown committed
1697
	FAILED_CASES="$FAILED_CASES $tname"
unknown's avatar
unknown committed
1698 1699
        if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	   [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1700 1701 1702
	then
	  mysql_restart
	fi
1703
	$ECHO "Resuming Tests"
1704
	$ECHO ""
1705
      fi
unknown's avatar
unknown committed
1706
    fi
1707
  fi
unknown's avatar
unknown committed
1708 1709
}

unknown's avatar
unknown committed
1710 1711 1712 1713
######################################################################
# Main script starts here
######################################################################

unknown's avatar
unknown committed
1714 1715
[ "$DO_GCOV" -a ! -x "$GCOV" ] && error "No gcov found"

unknown's avatar
unknown committed
1716 1717
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
unknown's avatar
unknown committed
1718

1719 1720
if [ -z "$USE_RUNNING_SERVER" ]
then
1721 1722 1723 1724
  if [ -z "$FAST_START" ]
  then
    # Ensure that no old mysqld test servers are running
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1725
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1726 1727
    $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1728
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1729 1730 1731
    $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 0 $MASTER_MYPID
1732
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
1733 1734
    sleep_until_file_deleted 0 $SLAVE_MYPID
  else
1735
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
1736
  fi
unknown's avatar
unknown committed
1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749

  # 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

unknown's avatar
unknown committed
1750
  stop_ndbcluster
unknown's avatar
unknown committed
1751

unknown's avatar
unknown committed
1752
  # Remove files that can cause problems
1753
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
unknown's avatar
unknown committed
1754 1755
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1756 1757
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
unknown's avatar
unknown committed
1758
  $RM -f $MASTER_MYDDIR"1"/log.*
1759

unknown's avatar
unknown committed
1760 1761
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
1762 1763
  $ECHO "Installing Test Databases"
  mysql_install_db
unknown's avatar
unknown committed
1764

unknown's avatar
unknown committed
1765
  start_manager
unknown's avatar
unknown committed
1766

unknown's avatar
unknown committed
1767
# Do not automagically start daemons if we are in gdb or running only one test
unknown's avatar
unknown committed
1768
# case
1769 1770 1771 1772 1773 1774
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
unknown's avatar
unknown committed
1775 1776
fi

1777
$ECHO  "Starting Tests"
unknown's avatar
unknown committed
1778

1779 1780 1781
#
# This can probably be deleted
#
unknown's avatar
unknown committed
1782 1783
if [ "$DO_BENCH" = 1 ]
then
1784 1785
  start_master

1786 1787 1788 1789 1790
  if [ "$DO_SMALL_BENCH" = 1 ]
  then
    EXTRA_BENCH_ARGS="--small-test --small-tables"
  fi

1791 1792
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
1793
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
1794 1795
  fi 

unknown's avatar
unknown committed
1796 1797 1798 1799
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
unknown's avatar
unknown committed
1800
  then
1801
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
unknown's avatar
unknown committed
1802
  else
unknown's avatar
unknown committed
1803 1804
    if [ -x "./$1" ]
    then
1805
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
unknown's avatar
unknown committed
1806 1807 1808
    else
      echo "benchmark $1 not found"
    fi
unknown's avatar
unknown committed
1809
  fi
unknown's avatar
unknown committed
1810 1811 1812 1813
  cd $savedir
  mysql_stop
  stop_manager
  exit
unknown's avatar
unknown committed
1814 1815
fi

unknown's avatar
unknown committed
1816
$ECHO
unknown's avatar
unknown committed
1817
if [ x$USE_TIMER = x1 ] ; then
unknown's avatar
unknown committed
1818
$ECHO "TEST                            RESULT        TIME (ms)"
unknown's avatar
unknown committed
1819 1820 1821
else
$ECHO "TEST                            RESULT"
fi
unknown's avatar
unknown committed
1822 1823
$ECHO $DASH72

unknown's avatar
unknown committed
1824
if [ -z "$1" ] ;
unknown's avatar
unknown committed
1825
then
1826 1827 1828
  if [ x$RECORD = x1 ]; then
    $ECHO "Will not run in record mode without a specific test case."
  else
1829 1830 1831 1832
    for tf in $TESTDIR/*.$TESTSUFFIX
    do
      run_testcase $tf
    done
1833 1834
    $RM -f $TIMEFILE	# Remove for full test
  fi
unknown's avatar
unknown committed
1835
else
unknown's avatar
unknown committed
1836 1837 1838 1839 1840 1841 1842 1843 1844 1845
  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
unknown's avatar
unknown committed
1846
fi
unknown's avatar
unknown committed
1847

unknown's avatar
unknown committed
1848 1849
$ECHO $DASH72
$ECHO
1850

1851
if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
unknown's avatar
unknown committed
1852 1853 1854
then
    mysql_stop
fi
unknown's avatar
unknown committed
1855
stop_manager
unknown's avatar
unknown committed
1856
report_stats
unknown's avatar
unknown committed
1857
$ECHO
unknown's avatar
unknown committed
1858

unknown's avatar
unknown committed
1859
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
unknown's avatar
unknown committed
1860
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
unknown's avatar
unknown committed
1861

unknown's avatar
unknown committed
1862
if [ $TOT_FAIL -ne 0 ]; then
unknown's avatar
unknown committed
1863
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
unknown's avatar
unknown committed
1864 1865 1866 1867 1868
  $ECHO
  exit 1
else
  exit 0
fi