mysql-test-run.sh 50.9 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"
447
      ;;
448 449 450
    --fast)
      FAST_START=1
      ;;
451 452 453 454 455 456
    -- )  shift; break ;;
    --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
    * ) break ;;
  esac
  shift
done
unknown's avatar
fixed  
unknown committed
457

unknown's avatar
unknown committed
458 459 460 461 462 463 464
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
465 466 467
#++
# mysqld Environment Parameters
#--
468

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

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

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

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

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

490
NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2`
491
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"
492
NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
493
NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
494

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

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

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

515 516 517
# 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
518
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
519 520
   if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then
     MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest_embedded"
unknown's avatar
unknown committed
521
   else
522
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
unknown's avatar
unknown committed
523 524
     exit 1
   fi
525
   MYSQL_CLIENT_TEST="$BASEDIR/libmysqld/examples/mysql_client_test_embedded"
526
 else
unknown's avatar
unknown committed
527 528 529 530
   MYSQLD="$BASEDIR/sql/mysqld"
   if [ -n "$VALGRIND" ] ; then
     MYSQLD="$VALGRIND $MYSQLD"
   fi
unknown's avatar
unknown committed
531 532 533 534 535 536 537
   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
538
   MYSQL_CLIENT_TEST="$BASEDIR/tests/mysql_client_test"
539
 fi
540
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
unknown's avatar
unknown committed
541
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
542
 else
unknown's avatar
unknown committed
543
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
544
 fi
unknown's avatar
unknown committed
545
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
unknown's avatar
unknown committed
546
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
unknown's avatar
unknown committed
547
 else
unknown's avatar
unknown committed
548
   MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
unknown's avatar
unknown committed
549
 fi
unknown's avatar
unknown committed
550 551 552
 if [ -n "$STRACE_CLIENT" ]; then
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
 fi
unknown's avatar
unknown committed
553

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

 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

592
else
593 594 595 596 597 598 599 600

 # 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".

601 602
 if test -x "$BASEDIR/libexec/mysqld"
 then
unknown's avatar
unknown committed
603
   MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
604
 else
unknown's avatar
unknown committed
605
   MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
606
 fi
unknown's avatar
unknown committed
607
 CLIENT_BINDIR="$BASEDIR/bin"
unknown's avatar
unknown committed
608 609 610 611 612 613 614
 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
615 616 617 618 619 620 621 622
 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"
623
 INSTALL_DB="./install_test_db --bin"
unknown's avatar
unknown committed
624
 MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
625
 NDB_TOOLS_DIR="$CLIENT_BINDIR"
unknown's avatar
unknown committed
626
 NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
unknown's avatar
unknown committed
627
 if test -d "$BASEDIR/share/mysql/english"
628 629
 then
   LANGUAGE="$BASEDIR/share/mysql/english/"
630
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
631 632
 else
   LANGUAGE="$BASEDIR/share/english/"
633
   CHARSETSDIR="$BASEDIR/share/charsets"
634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650
 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
651 652
fi

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

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

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

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

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

684
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent"
685 686 687 688
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"
689
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
690
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
691
export NDB_TOOLS_DIR
unknown's avatar
unknown committed
692
export NDB_MGM
693
export NDB_BACKUP_DIR
694
export NDB_TOOLS_OUTPUT
unknown's avatar
unknown committed
695
export PURIFYOPTIONS
696 697
NDB_STATUS_OK=1
export NDB_STATUS_OK
698

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

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

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

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

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

unknown's avatar
unknown committed
738 739 740 741 742 743 744
  # 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

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

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

763 764 765 766 767 768
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
769
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
770 771
}

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

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

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

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

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

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

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

803 804 805 806 807 808

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

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

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

unknown's avatar
unknown committed
846 847 848 849
    # 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
850
    $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' \
851 852 853
        $MY_LOG_DIR/*.err \
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp
unknown's avatar
unknown committed
854 855 856 857 858

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x"
    do
unknown's avatar
unknown committed
859
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
unknown's avatar
unknown committed
860 861 862 863 864 865 866 867 868 869
      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
870
    fi
unknown's avatar
unknown committed
871
}
872

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

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

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

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

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

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

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

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

start_manager()
{
unknown's avatar
unknown committed
956
 if [ $USE_MANAGER = 0 ] ; then
957 958
   echo "Manager disabled, skipping manager start."
   $RM -f $MYSQL_MANAGER_LOG
959 960
  return
 fi
unknown's avatar
unknown committed
961
 $ECHO "Starting MySQL Manager"
962 963 964 965 966 967 968 969 970
 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
971
 $RM -f $MANAGER_PID_FILE
unknown's avatar
unknown committed
972 973
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
unknown's avatar
unknown committed
974
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
975
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
unknown's avatar
unknown committed
976
  abort_if_failed "Could not start MySQL manager"
977 978
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
979 980 981 982 983
  --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"
984 985 986 987
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
unknown's avatar
unknown committed
988 989
}

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

unknown's avatar
unknown committed
1001 1002 1003
}

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

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

1046 1047 1048 1049
start_ndbcluster()
{
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
unknown's avatar
merge  
unknown committed
1050
  rm -f $NDB_TOOLS_OUTPUT
1051 1052 1053 1054 1055
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
  then
    echo "Starting ndbcluster"
    if [ "$DO_BENCH" = 1 ]
    then
1056
      NDBCLUSTER_EXTRA_OPTS=""
1057
    else
1058
      NDBCLUSTER_EXTRA_OPTS="--small"
1059
    fi
1060 1061 1062 1063 1064 1065 1066 1067 1068
    ./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

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

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

unknown's avatar
unknown committed
1091 1092
# 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
1093

unknown's avatar
unknown committed
1094 1095
start_master()
{
unknown's avatar
unknown committed
1096 1097
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
unknown's avatar
unknown committed
1098 1099
    return
  fi
unknown's avatar
unknown committed
1100 1101 1102
  # 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
1103
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
unknown's avatar
unknown committed
1104 1105
  fi

1106
  # Remove old master.info and relay-log.info files
unknown's avatar
unknown committed
1107
  $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
1108 1109 1110 1111 1112 1113 1114 1115

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

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

unknown's avatar
unknown committed
1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185
  # 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
1186 1187 1188 1189
  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
1190
    "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
unknown's avatar
unknown committed
1191 1192
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1193 1194 1195 1196
    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:"
1197
      $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
unknown's avatar
unknown committed
1198 1199 1200 1201
      wait_for_master=1500
    else
      ( $ECHO set args $master_args;
      if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1202
    cat <<EOF
unknown's avatar
unknown committed
1203 1204
b mysql_parse
commands 1
1205
disa 1
unknown's avatar
unknown committed
1206
end
unknown's avatar
unknown committed
1207 1208
r
EOF
unknown's avatar
unknown committed
1209 1210
      fi )  > $GDB_MASTER_INIT
      manager_launch master $XTERM -display $DISPLAY \
1211
      -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
unknown's avatar
unknown committed
1212
    fi
unknown's avatar
unknown committed
1213
  else
1214
    manager_launch master $MASTER_MYSQLD $master_args
unknown's avatar
unknown committed
1215
  fi
unknown's avatar
unknown committed
1216
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
unknown's avatar
unknown committed
1217
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
unknown's avatar
unknown committed
1218
  eval "MASTER$1_RUNNING=1"
unknown's avatar
unknown committed
1219 1220 1221 1222
}

start_slave()
{
unknown's avatar
unknown committed
1223 1224 1225
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
unknown's avatar
unknown committed
1226 1227
  # 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
1228 1229 1230 1231 1232 1233 1234 1235
  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"
1236
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
unknown's avatar
unknown committed
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248
   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
1249
  # Remove stale binary logs and old master.info files
unknown's avatar
unknown committed
1250 1251 1252 1253 1254 1255
  # 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
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266

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

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

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

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

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

1383 1384 1385 1386 1387 1388 1389 1390 1391 1392
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
1393 1394
stop_master ()
{
unknown's avatar
unknown committed
1395 1396
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ]
unknown's avatar
unknown committed
1397
  then
unknown's avatar
unknown committed
1398 1399 1400
    # 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
1401
      pid=`$CAT $MASTER_MYPID$1`
unknown's avatar
unknown committed
1402
      manager_term $pid master $1
unknown's avatar
Merge  
unknown committed
1403
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
unknown's avatar
unknown committed
1404 1405 1406
      then # try harder!
	$ECHO "master not cooperating with mysqladmin, will try manual kill"
	kill $pid
unknown's avatar
Merge  
unknown committed
1407 1408
	sleep_until_file_deleted $pid $MASTER_MYPID$1
	if [ -f $MASTER_MYPID$1 ] ; then
unknown's avatar
unknown committed
1409
	  $ECHO "master refused to die. Sending SIGKILL"
unknown's avatar
Merge  
unknown committed
1410 1411
	  kill -9 `$CAT $MASTER_MYPID$1`
	  $RM -f $MASTER_MYPID$1
unknown's avatar
unknown committed
1412 1413 1414
	else
	  $ECHO "master responded to SIGTERM "
	fi
1415
      else
unknown's avatar
unknown committed
1416
	sleep $SLEEP_TIME_AFTER_RESTART
1417
      fi
unknown's avatar
unknown committed
1418
    fi
unknown's avatar
unknown committed
1419
    eval "MASTER$1_RUNNING=0"
unknown's avatar
unknown committed
1420 1421
  fi
}
unknown's avatar
unknown committed
1422

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

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

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

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

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

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

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

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

unknown's avatar
unknown committed
1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508
 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 \
1509 1510
       "init_connect" \
       "init_file"
unknown's avatar
unknown committed
1511 1512 1513 1514 1515 1516 1517
   do
     if [ "$tname" = "$t" ] ; then
       skip_test $tname
       return
     fi
   done
 fi
1518

1519
 if [ -z "$USE_RUNNING_SERVER" ] ;
unknown's avatar
unknown committed
1520
 then
1521 1522
   if [ -f $master_opt_file ] ;
   then
unknown's avatar
unknown committed
1523
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1524 1525 1526 1527 1528 1529 1530
     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=" "
	 ;;
1531 1532
       --result-file=*)
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
unknown's avatar
unknown committed
1533 1534 1535 1536
         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
1537 1538 1539
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
         ;;
1540
     esac
1541
     stop_master
unknown's avatar
unknown committed
1542
     stop_master 1
unknown's avatar
unknown committed
1543
     report_current_test $tname
1544
     start_master
unknown's avatar
unknown committed
1545
     if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1546 1547
       start_master 1
     fi
1548
     TZ=$MY_TZ; export TZ
1549
   else
unknown's avatar
unknown committed
1550 1551 1552 1553 1554
     # 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 ]
1555 1556 1557
     then
       EXTRA_MASTER_OPT=""
       stop_master
unknown's avatar
unknown committed
1558
       stop_master 1
unknown's avatar
unknown committed
1559
       report_current_test $tname
1560
       start_master
unknown's avatar
unknown committed
1561
       if [ -n "$USE_NDBCLUSTER"  -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1562 1563
         start_master 1
       fi
unknown's avatar
unknown committed
1564
     else
unknown's avatar
unknown committed
1565
       report_current_test $tname
unknown's avatar
unknown committed
1566
     fi
1567
   fi
unknown's avatar
unknown committed
1568

unknown's avatar
unknown committed
1569 1570 1571 1572
   # 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 ] ;
1573
     then
unknown's avatar
unknown committed
1574
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
unknown's avatar
unknown committed
1575
       do_slave_restart=1
unknown's avatar
unknown committed
1576 1577 1578 1579 1580 1581
     else
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
      then
	EXTRA_SLAVE_OPT=""
	do_slave_restart=1
      fi
unknown's avatar
unknown committed
1582
     fi
1583

unknown's avatar
unknown committed
1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605
     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
1606
   fi
unknown's avatar
fixed  
unknown committed
1607
 fi
unknown's avatar
unknown committed
1608 1609 1610 1611 1612 1613

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

1614
 cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
1615

unknown's avatar
unknown committed
1616
 if [ -f $tf ] ; then
unknown's avatar
unknown committed
1617
    $RM -f r/$tname.*reject
unknown's avatar
unknown committed
1618
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1619
    if [ -z "$DO_CLIENT_GDB" ] ; then
1620
      `$MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1621
    else
1622
      do_gdb_test "$mysql_test_args" "$tf"
1623
    fi
unknown's avatar
unknown committed
1624

unknown's avatar
unknown committed
1625 1626
    res=$?

1627
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1628
    RES="$pname"
unknown's avatar
unknown committed
1629

1630 1631 1632 1633
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
unknown's avatar
unknown committed
1634

unknown's avatar
unknown committed
1635
    if [ $res = 0 ]; then
1636 1637
      total_inc
      pass_inc
unknown's avatar
unknown committed
1638
      TIMER=""
unknown's avatar
unknown committed
1639
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
unknown's avatar
unknown committed
1640 1641 1642 1643
	TIMER=`cat $MY_LOG_DIR/timer`
	TIMER=`$PRINTF "%13s" $TIMER`
      fi
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1644
    else
1645
      # why the following ``if'' ? That is why res==1 is special ?
1646 1647 1648 1649
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1650 1651 1652
        if [ $res -gt 2 ]; then
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
        fi
1653
	total_inc
unknown's avatar
unknown committed
1654
        fail_inc
1655
	$ECHO "$RES$RES_SPACE [ fail ]"
1656 1657
        $ECHO
	error_is
unknown's avatar
unknown committed
1658
	show_failed_diff $tname
unknown's avatar
unknown committed
1659
	$ECHO
1660
	if [ x$FORCE != x1 ] ; then
unknown's avatar
unknown committed
1661
	 $ECHO "Aborting: $tname failed in $TEST_MODE mode. To continue, re-run with '--force'."
1662
	 $ECHO
unknown's avatar
unknown committed
1663 1664
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	    [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1665 1666
	 then
	   mysql_stop
unknown's avatar
unknown committed
1667
	   stop_manager
unknown's avatar
unknown committed
1668
   	 fi
1669 1670
	 exit 1
	fi
unknown's avatar
unknown committed
1671
	FAILED_CASES="$FAILED_CASES $tname"
unknown's avatar
unknown committed
1672 1673
        if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	   [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1674 1675 1676
	then
	  mysql_restart
	fi
1677
	$ECHO "Resuming Tests"
1678
	$ECHO ""
1679
      fi
unknown's avatar
unknown committed
1680
    fi
1681
  fi
unknown's avatar
unknown committed
1682 1683
}

unknown's avatar
unknown committed
1684 1685 1686 1687
######################################################################
# Main script starts here
######################################################################

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

unknown's avatar
unknown committed
1690 1691
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
unknown's avatar
unknown committed
1692

1693 1694
if [ -z "$USE_RUNNING_SERVER" ]
then
1695 1696 1697 1698
  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
1699
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1700 1701
    $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
1702
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1703 1704 1705
    $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
1706
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
1707 1708
    sleep_until_file_deleted 0 $SLAVE_MYPID
  else
1709
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
1710
  fi
unknown's avatar
unknown committed
1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723

  # 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
1724
  stop_ndbcluster
unknown's avatar
unknown committed
1725

unknown's avatar
unknown committed
1726
  # Remove files that can cause problems
1727
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
unknown's avatar
unknown committed
1728 1729
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1730 1731
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
unknown's avatar
unknown committed
1732
  $RM -f $MASTER_MYDDIR"1"/log.*
1733

unknown's avatar
unknown committed
1734 1735
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
1736 1737
  $ECHO "Installing Test Databases"
  mysql_install_db
unknown's avatar
unknown committed
1738

unknown's avatar
unknown committed
1739
  start_manager
unknown's avatar
unknown committed
1740

unknown's avatar
unknown committed
1741
# Do not automagically start daemons if we are in gdb or running only one test
unknown's avatar
unknown committed
1742
# case
1743 1744 1745 1746 1747 1748
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
unknown's avatar
unknown committed
1749 1750
fi

1751
$ECHO  "Starting Tests"
unknown's avatar
unknown committed
1752

1753 1754 1755
#
# This can probably be deleted
#
unknown's avatar
unknown committed
1756 1757
if [ "$DO_BENCH" = 1 ]
then
1758 1759
  start_master

1760 1761 1762 1763 1764
  if [ "$DO_SMALL_BENCH" = 1 ]
  then
    EXTRA_BENCH_ARGS="--small-test --small-tables"
  fi

1765 1766
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
1767
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
1768 1769
  fi 

unknown's avatar
unknown committed
1770 1771 1772 1773
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
unknown's avatar
unknown committed
1774
  then
1775
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
unknown's avatar
unknown committed
1776
  else
unknown's avatar
unknown committed
1777 1778
    if [ -x "./$1" ]
    then
1779
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
unknown's avatar
unknown committed
1780 1781 1782
    else
      echo "benchmark $1 not found"
    fi
unknown's avatar
unknown committed
1783
  fi
unknown's avatar
unknown committed
1784 1785 1786 1787
  cd $savedir
  mysql_stop
  stop_manager
  exit
unknown's avatar
unknown committed
1788 1789
fi

unknown's avatar
unknown committed
1790
$ECHO
unknown's avatar
unknown committed
1791
if [ x$USE_TIMER = x1 ] ; then
unknown's avatar
unknown committed
1792
$ECHO "TEST                            RESULT        TIME (ms)"
unknown's avatar
unknown committed
1793 1794 1795
else
$ECHO "TEST                            RESULT"
fi
unknown's avatar
unknown committed
1796 1797
$ECHO $DASH72

unknown's avatar
unknown committed
1798
if [ -z "$1" ] ;
unknown's avatar
unknown committed
1799
then
1800 1801 1802
  if [ x$RECORD = x1 ]; then
    $ECHO "Will not run in record mode without a specific test case."
  else
1803 1804 1805 1806
    for tf in $TESTDIR/*.$TESTSUFFIX
    do
      run_testcase $tf
    done
1807 1808
    $RM -f $TIMEFILE	# Remove for full test
  fi
unknown's avatar
unknown committed
1809
else
unknown's avatar
unknown committed
1810 1811 1812 1813 1814 1815 1816 1817 1818 1819
  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
1820
fi
unknown's avatar
unknown committed
1821

unknown's avatar
unknown committed
1822 1823
$ECHO $DASH72
$ECHO
1824

1825
if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
unknown's avatar
unknown committed
1826 1827 1828
then
    mysql_stop
fi
unknown's avatar
unknown committed
1829
stop_manager
unknown's avatar
unknown committed
1830
report_stats
unknown's avatar
unknown committed
1831
$ECHO
unknown's avatar
unknown committed
1832

unknown's avatar
unknown committed
1833
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
unknown's avatar
unknown committed
1834
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
unknown's avatar
unknown committed
1835

unknown's avatar
unknown committed
1836
if [ $TOT_FAIL -ne 0 ]; then
unknown's avatar
unknown committed
1837
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
unknown's avatar
unknown committed
1838 1839 1840 1841 1842
  $ECHO
  exit 1
else
  exit 0
fi