mysql-test-run.sh 53.4 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="      "
191
MYSQLD_SRC_DIRS="strings mysys include extra regex myisam \
unknown's avatar
unknown committed
192
 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
unknown committed
201 202 203 204 205 206 207
#
# Allow anyone in the group to see the generated database files
#
UMASK=0660
UMASK_DIR=0770
export UMASK UMASK_DIR

unknown's avatar
fixed  
unknown committed
208
MASTER_RUNNING=0
unknown's avatar
unknown committed
209
MASTER1_RUNNING=0
210
MASTER_MYPORT=9306
unknown's avatar
fixed  
unknown committed
211
SLAVE_RUNNING=0
unknown's avatar
unknown committed
212
SLAVE_MYPORT=9308 # leave room for 2 masters for cluster tests
unknown's avatar
unknown committed
213
MYSQL_MANAGER_PORT=9305 # needs to be out of the way of slaves
214
NDBCLUSTER_PORT=9350
unknown's avatar
unknown committed
215 216 217
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
218
NO_SLAVE=0
unknown's avatar
unknown committed
219
USER_TEST=
unknown's avatar
unknown committed
220
FAILED_CASES=
221

222
EXTRA_MASTER_OPT=""
223
EXTRA_MYSQL_TEST_OPT=""
224
EXTRA_MYSQLDUMP_OPT=""
225
EXTRA_MYSQLSHOW_OPT=""
226
EXTRA_MYSQLBINLOG_OPT=""
227
USE_RUNNING_SERVER=0
228
USE_NDBCLUSTER=@USE_NDBCLUSTER@
unknown's avatar
unknown committed
229
USE_RUNNING_NDBCLUSTER=""
unknown's avatar
unknown committed
230 231
USE_PURIFY=""
PURIFY_LOGS=""
232 233
DO_GCOV=""
DO_GDB=""
unknown's avatar
unknown committed
234
MANUAL_GDB=""
235
DO_DDD=""
236
DO_CLIENT_GDB=""
unknown's avatar
unknown committed
237
SLEEP_TIME_AFTER_RESTART=1
unknown's avatar
unknown committed
238
SLEEP_TIME_FOR_DELETE=10
unknown's avatar
unknown committed
239
SLEEP_TIME_FOR_FIRST_MASTER=400		# Enough time to create innodb tables
unknown's avatar
unknown committed
240
SLEEP_TIME_FOR_SECOND_MASTER=400
unknown's avatar
unknown committed
241
SLEEP_TIME_FOR_FIRST_SLAVE=400
242
SLEEP_TIME_FOR_SECOND_SLAVE=300
unknown's avatar
unknown committed
243
CHARACTER_SET=latin1
244
DBUSER=""
245 246
START_WAIT_TIMEOUT=10
STOP_WAIT_TIMEOUT=10
unknown's avatar
unknown committed
247
MYSQL_TEST_SSL_OPTS=""
unknown's avatar
unknown committed
248
USE_TIMER=""
unknown's avatar
unknown committed
249 250
USE_EMBEDDED_SERVER=""
RESULT_EXT=""
unknown's avatar
unknown committed
251
TEST_MODE=""
252

253
NDB_MGM_EXTRA_OPTS=
254 255 256
NDB_MGMD_EXTRA_OPTS=
NDBD_EXTRA_OPTS=

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

unknown's avatar
unknown committed
476 477 478 479 480 481 482
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
483 484 485
#++
# mysqld Environment Parameters
#--
486

unknown's avatar
unknown committed
487
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
488 489
MANAGER_PID_FILE="$MYRUN_DIR/manager.pid"

490
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
unknown's avatar
unknown committed
491
MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
unknown's avatar
unknown committed
492
MASTER_MYSOCK1=$MYSQL_MYSOCK"1"
unknown's avatar
unknown committed
493 494 495
MASTER_MYPID="$MYRUN_DIR/master.pid"
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/master.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/master.err"
496 497

SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
unknown's avatar
unknown committed
498
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
unknown's avatar
unknown committed
499 500 501
SLAVE_MYPID="$MYRUN_DIR/slave.pid"
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/slave.err"
502

503
CURRENT_TEST="$MYSQL_TEST_DIR/var/log/current_test"
504
SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
505

506
export MASTER_MYPORT SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
unknown's avatar
unknown committed
507

508
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_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"
509
NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
510
NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
511

512 513 514 515
if [ x$SOURCE_DIST = x1 ] ; then
 MY_BASEDIR=$MYSQL_TEST_DIR
else
 MY_BASEDIR=$BASEDIR
unknown's avatar
unknown committed
516
fi
unknown's avatar
unknown committed
517

unknown's avatar
unknown committed
518 519 520 521 522 523 524 525
# 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
526
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
unknown's avatar
unknown committed
527

528
if test ${COLUMNS:-0} -lt 80 ; then COLUMNS=80 ; fi
529
E=`$EXPR $COLUMNS - 8`
unknown's avatar
unknown committed
530
DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c 1-$E`
531

532 533 534
# 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
535
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
536 537
   if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then
     MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest_embedded"
unknown's avatar
unknown committed
538
   else
539
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
unknown's avatar
unknown committed
540 541
     exit 1
   fi
542
   MYSQL_CLIENT_TEST="$BASEDIR/libmysqld/examples/mysql_client_test_embedded"
543
 else
unknown's avatar
unknown committed
544 545 546 547
   MYSQLD="$BASEDIR/sql/mysqld"
   if [ -n "$VALGRIND" ] ; then
     MYSQLD="$VALGRIND $MYSQLD"
   fi
unknown's avatar
unknown committed
548 549 550 551 552 553 554
   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
555
   MYSQL_CLIENT_TEST="$BASEDIR/tests/mysql_client_test"
556
 fi
557
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
unknown's avatar
unknown committed
558
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
559
 else
unknown's avatar
unknown committed
560
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
561
 fi
562 563 564 565 566
 if [ -f "$BASEDIR/client/.libs/mysqlshow" ] ; then
   MYSQL_SHOW="$BASEDIR/client/.libs/mysqlshow"
 else
   MYSQL_SHOW="$BASEDIR/client/mysqlshow"
 fi
unknown's avatar
unknown committed
567
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
unknown's avatar
unknown committed
568
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
unknown's avatar
unknown committed
569
 else
unknown's avatar
unknown committed
570
   MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
unknown's avatar
unknown committed
571
 fi
unknown's avatar
unknown committed
572 573 574
 if [ -n "$STRACE_CLIENT" ]; then
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
 fi
unknown's avatar
unknown committed
575

unknown's avatar
unknown committed
576 577
 CLIENT_BINDIR="$BASEDIR/client"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
unknown's avatar
unknown committed
578
 WAIT_PID="$BASEDIR/extra/mysql_waitpid"
unknown's avatar
unknown committed
579
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
unknown's avatar
unknown committed
580
 MYSQL_MANAGER="$BASEDIR/tools/mysqlmanager"
unknown's avatar
unknown committed
581 582
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
 MYSQL="$CLIENT_BINDIR/mysql"
583
 LANGUAGE="$BASEDIR/sql/share/english/"
584
 CHARSETSDIR="$BASEDIR/sql/share/charsets"
585
 INSTALL_DB="./install_test_db"
586
 MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
587
 NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
588
 NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm"
unknown's avatar
unknown committed
589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613

 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

614
else
615 616 617 618 619 620 621 622

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

623 624
 if test -x "$BASEDIR/libexec/mysqld"
 then
unknown's avatar
unknown committed
625
   MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
626
 else
unknown's avatar
unknown committed
627
   MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
628
 fi
unknown's avatar
unknown committed
629
 CLIENT_BINDIR="$BASEDIR/bin"
630 631 632 633 634 635
 if test -d "$BASEDIR/tests"
 then
   TESTS_BINDIR="$BASEDIR/tests"
 else
   TESTS_BINDIR="$BASEDIR/bin"
 fi
unknown's avatar
unknown committed
636 637
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
 MYSQL_DUMP="$CLIENT_BINDIR/mysqldump"
638
 MYSQL_SHOW="$CLIENT_BINDIR/mysqlshow"
unknown's avatar
unknown committed
639 640 641 642 643 644 645
 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"
646
 INSTALL_DB="./install_test_db --bin"
unknown's avatar
unknown committed
647
 MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
648
 NDB_TOOLS_DIR="$CLIENT_BINDIR"
649
 NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
unknown's avatar
unknown committed
650
 if test -d "$BASEDIR/share/mysql/english"
651 652
 then
   LANGUAGE="$BASEDIR/share/mysql/english/"
653
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
654 655
 else
   LANGUAGE="$BASEDIR/share/english/"
656
   CHARSETSDIR="$BASEDIR/share/charsets"
657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673
 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
674 675
fi

676 677 678 679 680 681 682 683 684 685
if [ -z "$MASTER_MYSQLD" ]
then
MASTER_MYSQLD=$MYSQLD
fi

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

686 687 688 689
# If we should run all tests cases, we will use a local server for that

if [ -z "$1" ]
then
690
   USE_RUNNING_SERVER=0
691
fi
692
if [ $USE_RUNNING_SERVER -eq 1 ]
693
then
694
   MASTER_MYSOCK=$LOCAL_SOCKET;
695
   DBUSER=${DBUSER:-test}
696
else
697
   DBUSER=${DBUSER:-root}		# We want to do FLUSH xxx commands
698
fi
699 700 701

if [ -w / ]
then
unknown's avatar
unknown committed
702 703 704
  # 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"
705 706
fi

unknown's avatar
unknown committed
707
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
708
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
709
MYSQL_SHOW="$MYSQL_SHOW -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLSHOW_OPT"
710
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR  --character-sets-dir=$CHARSETSDIR $EXTRA_MYSQLBINLOG_OPT"
711 712
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"
713
export MYSQL MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
714
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
715
export NDB_TOOLS_DIR
716
export NDB_MGM
717
export NDB_BACKUP_DIR
718
export NDB_TOOLS_OUTPUT
unknown's avatar
unknown committed
719
export PURIFYOPTIONS
720 721
NDB_STATUS_OK=1
export NDB_STATUS_OK
722

723
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
724
 --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
unknown's avatar
unknown committed
725
 --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT $MYSQL_TEST_SSL_OPTS"
unknown's avatar
unknown committed
726 727 728
if [ x$USE_TIMER = x1 ] ; then
  MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS --timer-file=$MY_LOG_DIR/timer"
fi
729 730 731
MYSQL_TEST_BIN=$MYSQL_TEST
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
732 733 734
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
735 736 737 738
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
739
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
740 741 742
if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
  XTERM=`which xterm`
fi
743

744
export MYSQL MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR MASTER_MYSOCK
unknown's avatar
unknown committed
745

unknown's avatar
unknown committed
746 747 748 749
#++
# Function Definitions
#--

unknown's avatar
unknown committed
750 751
prompt_user ()
{
752
 $ECHO $1
753
 read unused
unknown's avatar
unknown committed
754 755
}

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

unknown's avatar
unknown committed
758 759 760 761
show_failed_diff ()
{
  reject_file=r/$1.reject
  result_file=r/$1.result
762
  eval_file=r/$1.eval
unknown's avatar
unknown committed
763

unknown's avatar
unknown committed
764 765 766 767 768 769 770
  # 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

771 772 773 774
  if [ -f $eval_file ]
  then
    result_file=$eval_file
  fi
unknown's avatar
unknown committed
775

unknown's avatar
unknown committed
776 777 778 779
  if [ -x "$DIFF" ] && [ -f $reject_file ]
  then
    echo "Below are the diffs between actual and expected results:"
    echo "-------------------------------------------------------"
unknown's avatar
unknown committed
780
    $DIFF -c $result_file $reject_file
unknown's avatar
unknown committed
781
    echo "-------------------------------------------------------"
782
    echo "Please follow the instructions outlined at"
783
    echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
784
    echo "to find the reason to this problem and how to report this."
785
    echo ""
unknown's avatar
unknown committed
786
  fi
unknown's avatar
unknown committed
787
}
unknown's avatar
unknown committed
788

789 790 791 792 793 794
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
795
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
796 797
}

unknown's avatar
unknown committed
798
error () {
unknown's avatar
unknown committed
799
    $ECHO  "Error:  $1"
unknown's avatar
unknown committed
800 801 802
    exit 1
}

803
error_is () {
804 805
    $ECHO "Errors are (from $TIMEFILE) :"
    $CAT < $TIMEFILE
806
    $ECHO "(the last lines may be the most important ones)"
807 808
}

unknown's avatar
unknown committed
809
prefix_to_8() {
810
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
unknown's avatar
unknown committed
811 812
}

unknown's avatar
unknown committed
813
pass_inc () {
unknown's avatar
unknown committed
814
    TOT_PASS=`$EXPR $TOT_PASS + 1`
unknown's avatar
unknown committed
815 816 817
}

fail_inc () {
unknown's avatar
unknown committed
818
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
unknown's avatar
unknown committed
819 820
}

821 822 823 824
skip_inc () {
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
}

unknown's avatar
unknown committed
825
total_inc () {
unknown's avatar
unknown committed
826
    TOT_TEST=`$EXPR $TOT_TEST + 1`
unknown's avatar
unknown committed
827 828
}

829 830 831 832 833 834

skip_test() {
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
835
   RES="$pname"
836 837 838 839
   skip_inc
   $ECHO "$RES$RES_SPACE [ skipped ]"
}

840 841 842 843 844 845 846 847 848 849 850

disable_test() {
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
   RES="$pname"
   skip_inc
   $ECHO "$RES$RES_SPACE [ disabled ]  $2"
}

unknown's avatar
Merge  
unknown committed
851

unknown's avatar
unknown committed
852 853 854 855 856 857 858 859 860 861 862
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
Merge  
unknown committed
863

unknown's avatar
unknown committed
864
report_stats () {
865
    if [ $TOT_FAIL = 0 ]; then
unknown's avatar
unknown committed
866
	$ECHO "All $TOT_TEST tests were successful."
unknown's avatar
unknown committed
867
    else
unknown's avatar
unknown committed
868 869 870 871 872 873
	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`
874
	$ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% were successful."
875
	$ECHO ""
876
        $ECHO "The log files in $MY_LOG_DIR may give you some hint"
877 878
	$ECHO "of what when wrong."
	$ECHO "If you want to report this error, please read first the documentation at"
879
        $ECHO "http://www.mysql.com/doc/en/MySQL_test_suite.html"
unknown's avatar
unknown committed
880
    fi
unknown's avatar
unknown committed
881

882
    if [ $USE_RUNNING_SERVER -eq 0 ]
unknown's avatar
unknown committed
883 884
    then

unknown's avatar
unknown committed
885 886 887 888
    # 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
889
    $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' \
890 891 892
        $MY_LOG_DIR/*.err \
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp
unknown's avatar
unknown committed
893 894 895 896 897

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x"
    do
unknown's avatar
unknown committed
898
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
unknown's avatar
unknown committed
899 900 901 902 903 904 905 906 907 908
      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
909
    fi
unknown's avatar
unknown committed
910
}
911

unknown's avatar
unknown committed
912
mysql_install_db () {
913
    $ECHO "Removing Stale Files"
914 915 916 917 918
    if [ -z "$USE_OLD_DATA" ]; then
      $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1"
      $ECHO "Installing Master Databases"
      $INSTALL_DB
      if [ $? != 0 ]; then
919
	error "Could not install master test DBs"
920 921
        exit 1
      fi
922
    fi
unknown's avatar
unknown committed
923 924 925 926 927 928 929 930 931
    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
932
    $ECHO "Installing Slave Databases"
933
    $RM -rf $SLAVE_MYDDIR $MY_LOG_DIR/* 
934
    $INSTALL_DB -slave
935
    if [ $? != 0 ]; then
936
	error "Could not install slave test DBs"
937
	exit 1
unknown's avatar
unknown committed
938
    fi
unknown's avatar
unknown committed
939

940 941
    for slave_num in 1 2 ;
    do
942
      $RM -rf var/slave$slave_num-data
943 944 945
      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
946
    done
unknown's avatar
unknown committed
947 948 949
    return 0
}

unknown's avatar
unknown committed
950 951
gprof_prepare ()
{
unknown's avatar
unknown committed
952 953
 $RM -rf $GPROF_DIR
 mkdir -p $GPROF_DIR
unknown's avatar
unknown committed
954 955 956 957 958
}

gprof_collect ()
{
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
959
   gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
unknown's avatar
unknown committed
960 961 962
   echo "Master execution profile has been saved in $GPROF_MASTER"
 fi
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
963
   gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
unknown's avatar
unknown committed
964 965 966 967
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
 fi
}

968
gcov_prepare () {
unknown's avatar
unknown committed
969 970
    $FIND $BASEDIR -name \*.gcov \
    -or -name \*.da | $XARGS $RM
unknown's avatar
unknown committed
971 972 973
}

gcov_collect () {
unknown's avatar
unknown committed
974
    $ECHO "Collecting source coverage info..."
unknown's avatar
unknown committed
975 976
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
unknown's avatar
unknown committed
977 978 979
    for d in $MYSQLD_SRC_DIRS; do
	cd $BASEDIR/$d
	for f in *.h *.cc *.c; do
unknown's avatar
unknown committed
980
	    $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
unknown's avatar
unknown committed
981
	done
982
	cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
983 984
    done

unknown's avatar
unknown committed
985
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
unknown's avatar
unknown committed
986 987
}

unknown's avatar
unknown committed
988 989 990 991 992
abort_if_failed()
{
 if [ ! $? = 0 ] ; then
  echo $1
  exit 1
unknown's avatar
unknown committed
993
 fi
unknown's avatar
unknown committed
994 995 996 997
}

start_manager()
{
unknown's avatar
unknown committed
998
 if [ $USE_MANAGER = 0 ] ; then
999 1000
   echo "Manager disabled, skipping manager start."
   $RM -f $MYSQL_MANAGER_LOG
1001 1002
  return
 fi
unknown's avatar
unknown committed
1003
 $ECHO "Starting MySQL Manager"
1004 1005 1006 1007 1008 1009 1010 1011 1012
 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
1013
 $RM -f $MANAGER_PID_FILE
unknown's avatar
unknown committed
1014 1015
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
unknown's avatar
unknown committed
1016
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
1017
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
unknown's avatar
unknown committed
1018
  abort_if_failed "Could not start MySQL manager"
1019 1020
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
1021 1022 1023 1024 1025
  --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"
1026 1027 1028 1029
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
unknown's avatar
unknown committed
1030 1031
}

unknown's avatar
unknown committed
1032 1033
stop_manager()
{
unknown's avatar
unknown committed
1034
 if [ $USE_MANAGER = 0 ] ; then
1035 1036
  return
 fi
unknown's avatar
unknown committed
1037 1038 1039 1040
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
1041 1042
 echo "Manager terminated"

unknown's avatar
unknown committed
1043 1044 1045
}

manager_launch()
unknown's avatar
unknown committed
1046
{
unknown's avatar
unknown committed
1047 1048
  ident=$1
  shift
unknown's avatar
unknown committed
1049
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1050
    echo $@ | /bin/sh  >> $CUR_MYERR 2>&1  &
unknown's avatar
unknown committed
1051 1052
    sleep 2 #hack
    return
1053
  fi
unknown's avatar
unknown committed
1054
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
unknown's avatar
unknown committed
1055
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1056
def_exec $ident "$@"
unknown's avatar
unknown committed
1057 1058 1059 1060
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
1061
EOF
unknown's avatar
unknown committed
1062
  abort_if_failed "Could not execute manager command"
unknown's avatar
unknown committed
1063
}
unknown's avatar
unknown committed
1064

unknown's avatar
unknown committed
1065 1066
manager_term()
{
1067 1068
  pid=$1
  ident=$2
unknown's avatar
unknown committed
1069
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1070
    # Shutdown time must be high as slave may be in reconnect
unknown's avatar
unknown committed
1071
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1
1072 1073
    res=$?
    # Some systems require an extra connect
unknown's avatar
unknown committed
1074
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1
1075 1076 1077 1078 1079
    if test $res = 0
    then
      wait_for_pid $pid
    fi
    return $res
1080
  fi
unknown's avatar
unknown committed
1081 1082
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1083
stop_exec $ident $STOP_WAIT_TIMEOUT
unknown's avatar
unknown committed
1084 1085 1086 1087
EOF
 abort_if_failed "Could not execute manager command"
}

1088 1089 1090 1091
start_ndbcluster()
{
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
unknown's avatar
merge  
unknown committed
1092
  rm -f $NDB_TOOLS_OUTPUT
1093 1094 1095 1096 1097
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
  then
    echo "Starting ndbcluster"
    if [ "$DO_BENCH" = 1 ]
    then
1098
      NDBCLUSTER_EXTRA_OPTS=""
1099
    else
1100
      NDBCLUSTER_EXTRA_OPTS="--small"
1101
    fi
1102 1103
    ./ndb/ndbcluster $NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --initial || NDB_STATUS_OK=0
    if [ x$NDB_STATUS_OK != x1 ] ; then
unknown's avatar
unknown committed
1104 1105 1106
      if [ x$FORCE != x1 ] ; then
        exit 1
      fi
1107 1108
      USE_NDBCLUSTER=
      return
unknown's avatar
unknown committed
1109
    fi
1110

1111
    NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
1112
  else
1113 1114
    NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
    echo "Using ndbcluster at $NDB_CONNECTSTRING"
1115
  fi
1116 1117
  USE_NDBCLUSTER="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\""
  export NDB_CONNECTSTRING
1118 1119 1120 1121 1122 1123 1124 1125 1126 1127
  fi
}

stop_ndbcluster()
{
 if [ ! -z "$USE_NDBCLUSTER" ]
 then
 if [ -z "$USE_RUNNING_NDBCLUSTER" ]
 then
   # Kill any running ndbcluster stuff
1128
   ./ndb/ndbcluster $NDBCLUSTER_OPTS --stop
1129 1130 1131 1132
 fi
 fi
}

unknown's avatar
unknown committed
1133 1134
# 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
1135

unknown's avatar
unknown committed
1136 1137
start_master()
{
unknown's avatar
unknown committed
1138 1139
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
unknown's avatar
unknown committed
1140 1141
    return
  fi
unknown's avatar
unknown committed
1142 1143 1144
  # 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
1145
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
unknown's avatar
unknown committed
1146 1147
  fi

1148
  # Remove old master.info and relay-log.info files
unknown's avatar
unknown committed
1149
  $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
1150 1151 1152 1153 1154 1155 1156 1157

  #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
1158 1159 1160
  if [ -n "$1" ] ; then
   id=`$EXPR $1 + 101`;
   this_master_myport=`$EXPR $MASTER_MYPORT + $1`
1161
   NOT_FIRST_MASTER_EXTRA_OPTS="--skip-innodb"
1162 1163
   eval "MASTER_MYPORT$1=$this_master_myport"
   export MASTER_MYPORT$1
unknown's avatar
unknown committed
1164 1165 1166
  else
   id=1;
   this_master_myport=$MASTER_MYPORT
1167
   NOT_FIRST_MASTER_EXTRA_OPTS=""
unknown's avatar
unknown committed
1168
  fi
1169 1170
  if [ -n "$EXTRA_MASTER_MYSQLD_TRACE" ] 
  then
1171
      CURR_MASTER_MYSQLD_TRACE="$EXTRA_MASTER_MYSQLD_TRACE$1"
1172
  fi
unknown's avatar
unknown committed
1173 1174
  if [ -z "$DO_BENCH" ]
  then
unknown's avatar
unknown committed
1175 1176
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
  	    --server-id=$id  \
1177
          --basedir=$MY_BASEDIR \
unknown's avatar
unknown committed
1178
          --port=$this_master_myport \
unknown's avatar
unknown committed
1179
          --local-infile \
unknown's avatar
unknown committed
1180 1181
          --exit-info=256 \
          --core \
unknown's avatar
unknown committed
1182
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1183 1184 1185 1186
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
          --log=$MASTER_MYLOG$1 \
unknown's avatar
unknown committed
1187 1188 1189 1190 1191
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1192
	  --open-files-limit=1024 \
1193
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1194
           $SMALL_SERVER \
1195
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
1196
           $NOT_FIRST_MASTER_EXTRA_OPTS $CURR_MASTER_MYSQLD_TRACE"
unknown's avatar
unknown committed
1197
  else
unknown's avatar
unknown committed
1198 1199
    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
1200
          --basedir=$MY_BASEDIR --init-rpl-role=master \
unknown's avatar
unknown committed
1201
          --port=$this_master_myport \
unknown's avatar
unknown committed
1202
          --local-infile \
unknown's avatar
unknown committed
1203 1204 1205
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
unknown's avatar
unknown committed
1206 1207 1208
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core \
unknown's avatar
unknown committed
1209
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1210 1211 1212
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1213
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1214
           $SMALL_SERVER \
1215 1216
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
           $NOT_FIRST_MASTER_EXTRA_OPTS"
unknown's avatar
unknown committed
1217 1218 1219 1220 1221
  fi

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

unknown's avatar
unknown committed
1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233
  # 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
1234 1235 1236 1237
  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
1238
    "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
unknown's avatar
unknown committed
1239 1240
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1241 1242 1243 1244
    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:"
1245
      $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
unknown's avatar
unknown committed
1246 1247 1248 1249
      wait_for_master=1500
    else
      ( $ECHO set args $master_args;
      if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1250
    cat <<EOF
unknown's avatar
unknown committed
1251 1252
b mysql_parse
commands 1
1253
disa 1
unknown's avatar
unknown committed
1254
end
unknown's avatar
unknown committed
1255 1256
r
EOF
unknown's avatar
unknown committed
1257 1258
      fi )  > $GDB_MASTER_INIT
      manager_launch master $XTERM -display $DISPLAY \
1259
      -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
unknown's avatar
unknown committed
1260
    fi
unknown's avatar
unknown committed
1261
  else
1262
    manager_launch master $MASTER_MYSQLD $master_args
unknown's avatar
unknown committed
1263
  fi
unknown's avatar
unknown committed
1264
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
unknown's avatar
unknown committed
1265
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
unknown's avatar
unknown committed
1266
  eval "MASTER$1_RUNNING=1"
unknown's avatar
unknown committed
1267 1268 1269 1270
}

start_slave()
{
unknown's avatar
unknown committed
1271 1272 1273
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
unknown's avatar
unknown committed
1274 1275
  # 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
1276 1277 1278 1279 1280 1281 1282 1283
  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"
1284
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
unknown's avatar
unknown committed
1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296
   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
1297
  # Remove stale binary logs and old master.info files
unknown's avatar
unknown committed
1298 1299 1300 1301 1302 1303
  # 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
1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314

  #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 \
1315
          --master-password="" \
unknown's avatar
unknown committed
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325
          --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 \
1326
          --relay-log=$MYSQL_TEST_DIR/var/log/$slave_ident-relay-bin \
unknown's avatar
unknown committed
1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338
          --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
1339
          --skip-innodb --skip-ndbcluster --skip-slave-start \
unknown's avatar
unknown committed
1340 1341 1342
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
          --report-host=127.0.0.1 --report-user=root \
          --report-port=$slave_port \
1343
          --master-retry-count=10 \
unknown's avatar
unknown committed
1344
          -O slave_net_timeout=10 \
unknown's avatar
unknown committed
1345 1346 1347 1348 1349 1350 1351
           $SMALL_SERVER \
           $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  CUR_MYERR=$slave_err
  CUR_MYSOCK=$slave_sock

  if [ x$DO_DDD = x1 ]
  then
1352
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1353 1354 1355 1356
    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
1357 1358
    if [ x$MANUAL_GDB = x1 ]
    then
unknown's avatar
unknown committed
1359
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1360
      echo "To start gdb for the slave, type in another window:"
1361
      echo "cd $CWD ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
unknown's avatar
unknown committed
1362 1363
      wait_for_slave=1500
    else
unknown's avatar
unknown committed
1364 1365 1366 1367 1368 1369 1370 1371 1372 1373
      ( $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
1374 1375 1376
      manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
      gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
    fi
unknown's avatar
unknown committed
1377 1378 1379 1380
  else
    manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
  fi
  eval "SLAVE$1_RUNNING=1"
1381
  sleep_until_file_created $slave_pid $wait_for_slave
unknown's avatar
unknown committed
1382
  wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
unknown's avatar
unknown committed
1383 1384
}

unknown's avatar
unknown committed
1385 1386
mysql_start ()
{
unknown's avatar
unknown committed
1387
# We should not start the daemon here as we don't know the arguments
unknown's avatar
unknown committed
1388
# for the test.  Better to let the test start the daemon
unknown's avatar
unknown committed
1389 1390 1391 1392

#  $ECHO "Starting MySQL daemon"
#  start_master
#  start_slave
unknown's avatar
unknown committed
1393
  cd $MYSQL_TEST_DIR
1394
  start_ndbcluster
unknown's avatar
unknown committed
1395
  return 1
unknown's avatar
unknown committed
1396 1397
}

unknown's avatar
unknown committed
1398 1399
stop_slave ()
{
1400 1401 1402
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ -n "$1" ] ;
unknown's avatar
unknown committed
1403
  then
1404 1405 1406
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
  else
   slave_pid=$SLAVE_MYPID
unknown's avatar
unknown committed
1407
  fi
1408 1409
  if [ x$this_slave_running = x1 ]
  then
1410 1411
    pid=`$CAT $slave_pid`
    manager_term $pid $slave_ident
1412
    if [ $? != 0 ] && [ -f $slave_pid ]
1413
    then # try harder!
1414
      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
1415 1416
      kill $pid
      sleep_until_file_deleted $pid $slave_pid
1417 1418 1419 1420 1421 1422 1423 1424 1425
      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
1426
    fi
1427
    eval "SLAVE$1_RUNNING=0"
unknown's avatar
unknown committed
1428
  fi
unknown's avatar
unknown committed
1429
}
unknown's avatar
unknown committed
1430

1431 1432 1433 1434 1435 1436 1437 1438 1439 1440
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
1441 1442
stop_master ()
{
unknown's avatar
unknown committed
1443 1444
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ]
unknown's avatar
unknown committed
1445
  then
unknown's avatar
unknown committed
1446 1447 1448
    # 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
1449
      pid=`$CAT $MASTER_MYPID$1`
unknown's avatar
unknown committed
1450
      manager_term $pid master $1
unknown's avatar
Merge  
unknown committed
1451
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
unknown's avatar
unknown committed
1452 1453 1454
      then # try harder!
	$ECHO "master not cooperating with mysqladmin, will try manual kill"
	kill $pid
unknown's avatar
Merge  
unknown committed
1455 1456
	sleep_until_file_deleted $pid $MASTER_MYPID$1
	if [ -f $MASTER_MYPID$1 ] ; then
unknown's avatar
unknown committed
1457
	  $ECHO "master refused to die. Sending SIGKILL"
unknown's avatar
Merge  
unknown committed
1458 1459
	  kill -9 `$CAT $MASTER_MYPID$1`
	  $RM -f $MASTER_MYPID$1
unknown's avatar
unknown committed
1460 1461 1462
	else
	  $ECHO "master responded to SIGTERM "
	fi
1463
      else
unknown's avatar
unknown committed
1464
	sleep $SLEEP_TIME_AFTER_RESTART
1465
      fi
unknown's avatar
unknown committed
1466
    fi
unknown's avatar
unknown committed
1467
    eval "MASTER$1_RUNNING=0"
unknown's avatar
unknown committed
1468 1469
  fi
}
unknown's avatar
unknown committed
1470

unknown's avatar
unknown committed
1471 1472
mysql_stop ()
{
1473 1474 1475 1476 1477 1478
  if [ "$MASTER_RUNNING" = 1 ]
  then
    $ECHO  "Ending Tests"
    $ECHO  "Shutting-down MySQL daemon"
    $ECHO  ""
    stop_master
unknown's avatar
unknown committed
1479
    stop_master 1
1480 1481 1482 1483 1484
    $ECHO "Master shutdown finished"
    stop_slave
    stop_slave 1
    stop_slave 2
    $ECHO "Slave shutdown finished"
unknown's avatar
unknown committed
1485
    stop_ndbcluster
1486 1487
  fi
  return 1
unknown's avatar
unknown committed
1488 1489
}

unknown's avatar
unknown committed
1490 1491 1492 1493 1494
mysql_restart ()
{
  mysql_stop
  mysql_start
  return 1
unknown's avatar
unknown committed
1495 1496 1497
}

mysql_loadstd () {
unknown's avatar
unknown committed
1498 1499

    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
unknown's avatar
unknown committed
1500 1501 1502
    return 1
}

unknown's avatar
unknown committed
1503 1504 1505
run_testcase ()
{
 tf=$1
unknown's avatar
unknown committed
1506
 tname=`$BASENAME $tf .test`
unknown's avatar
unknown committed
1507 1508
 master_opt_file=$TESTDIR/$tname-master.opt
 slave_opt_file=$TESTDIR/$tname-slave.opt
1509 1510
 master_init_script=$TESTDIR/$tname-master.sh
 slave_init_script=$TESTDIR/$tname-slave.sh
1511
 slave_master_info_file=$TESTDIR/$tname.slave-mi
unknown's avatar
unknown committed
1512 1513
 tsrcdir=$TESTDIR/$tname-src
 result_file="r/$tname.result"
1514
 echo $tname > $CURRENT_TEST
1515
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0 \& \( $tname : federated \) = 0`
unknown's avatar
unknown committed
1516 1517 1518
 if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then
   result_file="$result_file$RESULT_EXT"
 fi
1519
 if [ "$USE_MANAGER" = 1 ] ; then
unknown's avatar
unknown committed
1520
  many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)`
1521 1522 1523 1524
 fi
 if $EXPR "$tname" '<' "$START_FROM" > /dev/null ; then
   #skip_test $tname
   return
unknown's avatar
unknown committed
1525 1526
 fi

1527 1528 1529 1530
 if [ "$SKIP_TEST" ] ; then
   if $EXPR \( "$tname" : "$SKIP_TEST" \) > /dev/null ; then
     skip_test $tname
     return
unknown's avatar
unknown committed
1531
   fi
1532
 fi
1533

1534 1535
 if [ "$DO_TEST" ] ; then
   if $EXPR \( "$tname" : "$DO_TEST" \) > /dev/null ; then
unknown's avatar
unknown committed
1536
     : #empty command to keep some shells happy
1537 1538 1539
   else
     #skip_test $tname
     return
1540
   fi
1541
 fi
1542

1543 1544
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; then
   skip_test $tname
1545 1546 1547
   return
 fi

unknown's avatar
unknown committed
1548 1549 1550 1551 1552 1553
# if [ -f "$TESTDIR/$tname.disabled" ]
# then
#   comment=`$CAT $TESTDIR/$tname.disabled`;
#   disable_test $tname "$comment"
#   return
# fi
unknown's avatar
unknown committed
1554 1555 1556 1557 1558 1559 1560 1561
 if [ -f "$TESTDIR/disabled.def" ] ; then
   comment=`$GREP "^$tname *: *" $TESTDIR/disabled.def`;
   if [ -n "$comment" ]
   then
     comment=`echo $comment | sed 's/^[^:]*: *//'`
     disable_test $tname "$comment"
     return
   fi
unknown's avatar
unknown committed
1562 1563
 fi

unknown's avatar
unknown committed
1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575
 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 \
1576
        "alter_table" \
unknown's avatar
unknown committed
1577 1578
	"bdb-deadlock" \
	"connect" \
1579 1580
        "ctype_latin1_de" \
        "ctype_ucs" \
unknown's avatar
unknown committed
1581 1582 1583 1584 1585
	"flush_block_commit" \
	"grant2" \
	"grant_cache" \
	"grant" \
	"init_connect" \
1586 1587
	"init_file" \
        "innodb" \
unknown's avatar
unknown committed
1588 1589 1590 1591 1592 1593 1594
	"innodb-deadlock" \
	"innodb-lock" \
	"mix_innodb_myisam_binlog" \
	"mysqlbinlog2" \
	"mysqlbinlog" \
	"mysqldump" \
	"mysql_protocols" \
1595
        "packet" \
unknown's avatar
unknown committed
1596 1597 1598 1599
	"ps_1general" \
	"rename" \
	"show_check" \
        "system_mysql_db_fix" \
1600
        "timezone2" \
unknown's avatar
unknown committed
1601 1602 1603 1604 1605 1606 1607 1608 1609
	"user_var" \
	"variables"
   do
     if [ "$tname" = "$t" ] ; then
       skip_test $tname
       return
     fi
   done
 fi
1610

1611
 if [ $USE_RUNNING_SERVER -eq 0 ] ;
unknown's avatar
unknown committed
1612
 then
1613 1614
   if [ -f $master_opt_file ] ;
   then
unknown's avatar
unknown committed
1615
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1616 1617 1618 1619 1620 1621 1622
     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=" "
	 ;;
1623 1624
       --result-file=*)
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
unknown's avatar
unknown committed
1625 1626 1627 1628
         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
1629 1630 1631
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
         ;;
1632
     esac
1633
     stop_master
unknown's avatar
unknown committed
1634
     stop_master 1
unknown's avatar
unknown committed
1635
     report_current_test $tname
1636
     start_master
unknown's avatar
unknown committed
1637
     if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1638 1639
       start_master 1
     fi
1640
     TZ=$MY_TZ; export TZ
1641
   else
unknown's avatar
unknown committed
1642 1643 1644 1645 1646
     # 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 ]
1647 1648 1649
     then
       EXTRA_MASTER_OPT=""
       stop_master
unknown's avatar
unknown committed
1650
       stop_master 1
unknown's avatar
unknown committed
1651
       report_current_test $tname
1652
       start_master
unknown's avatar
unknown committed
1653
       if [ -n "$USE_NDBCLUSTER"  -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1654 1655
         start_master 1
       fi
unknown's avatar
unknown committed
1656
     else
unknown's avatar
unknown committed
1657
       report_current_test $tname
unknown's avatar
unknown committed
1658
     fi
1659
   fi
unknown's avatar
unknown committed
1660

unknown's avatar
unknown committed
1661 1662 1663 1664
   # 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 ] ;
1665
     then
unknown's avatar
unknown committed
1666
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
unknown's avatar
unknown committed
1667
       do_slave_restart=1
unknown's avatar
unknown committed
1668 1669 1670 1671 1672 1673
     else
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
      then
	EXTRA_SLAVE_OPT=""
	do_slave_restart=1
      fi
unknown's avatar
unknown committed
1674
     fi
1675

unknown's avatar
unknown committed
1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697
     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
1698
   fi
unknown's avatar
fixed  
unknown committed
1699
 fi
1700 1701 1702 1703 1704 1705

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

1706
 cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
1707

unknown's avatar
unknown committed
1708
 if [ -f $tf ] ; then
unknown's avatar
unknown committed
1709
    $RM -f r/$tname.*reject
unknown's avatar
unknown committed
1710
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1711
    if [ -z "$DO_CLIENT_GDB" ] ; then
1712
      `$MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1713
    else
1714
      do_gdb_test "$mysql_test_args" "$tf"
1715
    fi
unknown's avatar
unknown committed
1716

unknown's avatar
unknown committed
1717 1718
    res=$?

1719
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1720
    RES="$pname"
unknown's avatar
unknown committed
1721

1722 1723 1724 1725
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
unknown's avatar
unknown committed
1726

unknown's avatar
unknown committed
1727
    if [ $res = 0 ]; then
1728 1729
      total_inc
      pass_inc
unknown's avatar
unknown committed
1730
      TIMER=""
unknown's avatar
unknown committed
1731
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
unknown's avatar
unknown committed
1732 1733 1734 1735
	TIMER=`cat $MY_LOG_DIR/timer`
	TIMER=`$PRINTF "%13s" $TIMER`
      fi
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1736
    else
1737
      # why the following ``if'' ? That is why res==1 is special ?
1738 1739 1740 1741
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1742 1743 1744
        if [ $res -gt 2 ]; then
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
        fi
1745
	total_inc
unknown's avatar
unknown committed
1746
        fail_inc
1747
	$ECHO "$RES$RES_SPACE [ fail ]"
1748 1749
        $ECHO
	error_is
unknown's avatar
unknown committed
1750
	show_failed_diff $tname
unknown's avatar
unknown committed
1751
	$ECHO
1752
	if [ x$FORCE != x1 ] ; then
unknown's avatar
unknown committed
1753
	 $ECHO "Aborting: $tname failed in $TEST_MODE mode. To continue, re-run with '--force'."
1754
	 $ECHO
1755
         if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && \
unknown's avatar
unknown committed
1756
	    [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1757 1758
	 then
	   mysql_stop
unknown's avatar
unknown committed
1759
	   stop_manager
unknown's avatar
unknown committed
1760
   	 fi
1761 1762
	 exit 1
	fi
unknown's avatar
unknown committed
1763
	FAILED_CASES="$FAILED_CASES $tname"
1764
        if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && \
unknown's avatar
unknown committed
1765
	   [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1766 1767 1768
	then
	  mysql_restart
	fi
1769
      fi
unknown's avatar
unknown committed
1770
    fi
1771
  fi
unknown's avatar
unknown committed
1772 1773
}

unknown's avatar
unknown committed
1774 1775 1776 1777
######################################################################
# Main script starts here
######################################################################

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

unknown's avatar
unknown committed
1780 1781
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
unknown's avatar
unknown committed
1782

1783
if [ $USE_RUNNING_SERVER -eq 0 ]
1784
then
1785 1786 1787 1788
  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
1789
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1790 1791
    $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
1792
    $MYSQLADMIN --no-defaults --host=$hostname --port=`expr $MASTER_MYPORT+1` -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1793 1794 1795
    $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
1796
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
1797 1798
    sleep_until_file_deleted 0 $SLAVE_MYPID
  else
1799
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
1800
  fi
unknown's avatar
unknown committed
1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813

  # 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
1814
  stop_ndbcluster
unknown's avatar
unknown committed
1815

unknown's avatar
unknown committed
1816
  # Remove files that can cause problems
1817
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
unknown's avatar
unknown committed
1818 1819
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1820 1821
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
unknown's avatar
unknown committed
1822
  $RM -f $MASTER_MYDDIR"1"/log.*
1823

unknown's avatar
unknown committed
1824 1825
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
1826 1827
  $ECHO "Installing Test Databases"
  mysql_install_db
unknown's avatar
unknown committed
1828

unknown's avatar
unknown committed
1829
  start_manager
unknown's avatar
unknown committed
1830

unknown's avatar
unknown committed
1831
# Do not automagically start daemons if we are in gdb or running only one test
unknown's avatar
unknown committed
1832
# case
1833 1834 1835 1836 1837 1838
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
unknown's avatar
unknown committed
1839 1840
fi

1841
$ECHO  "Starting Tests"
unknown's avatar
unknown committed
1842

1843 1844 1845
# Some test cases need USE_RUNNING_SERVER
export USE_RUNNING_SERVER

1846 1847 1848
#
# This can probably be deleted
#
unknown's avatar
unknown committed
1849 1850
if [ "$DO_BENCH" = 1 ]
then
1851 1852
  start_master

1853 1854 1855 1856 1857
  if [ "$DO_SMALL_BENCH" = 1 ]
  then
    EXTRA_BENCH_ARGS="--small-test --small-tables"
  fi

1858 1859
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
1860
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
1861 1862
  fi 

unknown's avatar
unknown committed
1863 1864 1865 1866
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
unknown's avatar
unknown committed
1867
  then
1868
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
unknown's avatar
unknown committed
1869
  else
unknown's avatar
unknown committed
1870 1871
    if [ -x "./$1" ]
    then
1872
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
unknown's avatar
unknown committed
1873 1874 1875
    else
      echo "benchmark $1 not found"
    fi
unknown's avatar
unknown committed
1876
  fi
unknown's avatar
unknown committed
1877 1878 1879 1880
  cd $savedir
  mysql_stop
  stop_manager
  exit
unknown's avatar
unknown committed
1881 1882
fi

unknown's avatar
unknown committed
1883
$ECHO
unknown's avatar
unknown committed
1884
if [ x$USE_TIMER = x1 ] ; then
unknown's avatar
unknown committed
1885
$ECHO "TEST                            RESULT        TIME (ms)"
unknown's avatar
unknown committed
1886 1887 1888
else
$ECHO "TEST                            RESULT"
fi
unknown's avatar
unknown committed
1889 1890
$ECHO $DASH72

unknown's avatar
unknown committed
1891
if [ -z "$1" ] ;
unknown's avatar
unknown committed
1892
then
1893 1894 1895
  if [ x$RECORD = x1 ]; then
    $ECHO "Will not run in record mode without a specific test case."
  else
1896 1897 1898 1899
    for tf in $TESTDIR/*.$TESTSUFFIX
    do
      run_testcase $tf
    done
1900 1901
    $RM -f $TIMEFILE	# Remove for full test
  fi
unknown's avatar
unknown committed
1902
else
unknown's avatar
unknown committed
1903 1904 1905 1906 1907 1908 1909 1910 1911 1912
  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
1913
fi
unknown's avatar
unknown committed
1914

unknown's avatar
unknown committed
1915 1916
$ECHO $DASH72
$ECHO
1917

1918
if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && [ -z "$DO_DDD" ]
unknown's avatar
unknown committed
1919 1920 1921
then
    mysql_stop
fi
unknown's avatar
unknown committed
1922
stop_manager
unknown's avatar
unknown committed
1923
report_stats
unknown's avatar
unknown committed
1924
$ECHO
unknown's avatar
unknown committed
1925

unknown's avatar
unknown committed
1926
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
unknown's avatar
unknown committed
1927
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
unknown's avatar
unknown committed
1928

unknown's avatar
unknown committed
1929
if [ $TOT_FAIL -ne 0 ]; then
unknown's avatar
unknown committed
1930
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
unknown's avatar
unknown committed
1931 1932 1933 1934 1935
  $ECHO
  exit 1
else
  exit 0
fi