mysql-test-run.sh 52.1 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
fixed  
unknown committed
204
SLAVE_RUNNING=0
unknown's avatar
unknown committed
205
SLAVE_MYPORT=9308 # leave room for 2 masters for cluster tests
unknown's avatar
unknown committed
206
MYSQL_MANAGER_PORT=9305 # needs to be out of the way of slaves
207
NDBCLUSTER_PORT=9350
unknown's avatar
unknown committed
208 209 210
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
211
NO_SLAVE=0
unknown's avatar
unknown committed
212
USER_TEST=
unknown's avatar
unknown committed
213
FAILED_CASES=
214

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

245
NDB_MGM_EXTRA_OPTS=
246 247 248
NDB_MGMD_EXTRA_OPTS=
NDBD_EXTRA_OPTS=

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

unknown's avatar
unknown committed
463 464 465 466 467 468 469
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
470 471 472
#++
# mysqld Environment Parameters
#--
473

unknown's avatar
unknown committed
474
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
475 476
MANAGER_PID_FILE="$MYRUN_DIR/manager.pid"

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

SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
unknown's avatar
unknown committed
485
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
unknown's avatar
unknown committed
486 487 488
SLAVE_MYPID="$MYRUN_DIR/slave.pid"
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/slave.err"
489

490
CURRENT_TEST="$MYSQL_TEST_DIR/var/log/current_test"
491
SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
492

unknown's avatar
unknown committed
493
export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
unknown's avatar
unknown committed
494

495
NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2`
496
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"
497
NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
498
NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
499

500 501 502 503
if [ x$SOURCE_DIST = x1 ] ; then
 MY_BASEDIR=$MYSQL_TEST_DIR
else
 MY_BASEDIR=$BASEDIR
unknown's avatar
unknown committed
504
fi
unknown's avatar
unknown committed
505

unknown's avatar
unknown committed
506 507 508 509 510 511 512 513
# 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
514
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
unknown's avatar
unknown committed
515

516
if test ${COLUMNS:-0} -lt 80 ; then COLUMNS=80 ; fi
517
E=`$EXPR $COLUMNS - 8`
unknown's avatar
unknown committed
518
DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c 1-$E`
519

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

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

 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

597
else
598 599 600 601 602 603 604 605

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

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

658 659 660 661 662 663 664 665 666 667
if [ -z "$MASTER_MYSQLD" ]
then
MASTER_MYSQLD=$MYSQLD
fi

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

668 669 670 671 672 673
# If we should run all tests cases, we will use a local server for that

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

if [ -w / ]
then
unknown's avatar
unknown committed
684 685 686
  # 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"
687 688
fi

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

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

unknown's avatar
unknown committed
725 726 727 728
#++
# Function Definitions
#--

unknown's avatar
unknown committed
729 730
prompt_user ()
{
731
 $ECHO $1
732
 read unused
unknown's avatar
unknown committed
733 734
}

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

unknown's avatar
unknown committed
737 738 739 740
show_failed_diff ()
{
  reject_file=r/$1.reject
  result_file=r/$1.result
741
  eval_file=r/$1.eval
unknown's avatar
unknown committed
742

unknown's avatar
unknown committed
743 744 745 746 747 748 749
  # 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

750 751 752 753
  if [ -f $eval_file ]
  then
    result_file=$eval_file
  fi
unknown's avatar
unknown committed
754

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

768 769 770 771 772 773
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
774
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
775 776
}

unknown's avatar
unknown committed
777
error () {
unknown's avatar
unknown committed
778
    $ECHO  "Error:  $1"
unknown's avatar
unknown committed
779 780 781
    exit 1
}

782
error_is () {
783 784
    $ECHO "Errors are (from $TIMEFILE) :"
    $CAT < $TIMEFILE
785
    $ECHO "(the last lines may be the most important ones)"
786 787
}

unknown's avatar
unknown committed
788
prefix_to_8() {
789
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
unknown's avatar
unknown committed
790 791
}

unknown's avatar
unknown committed
792
pass_inc () {
unknown's avatar
unknown committed
793
    TOT_PASS=`$EXPR $TOT_PASS + 1`
unknown's avatar
unknown committed
794 795 796
}

fail_inc () {
unknown's avatar
unknown committed
797
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
unknown's avatar
unknown committed
798 799
}

800 801 802 803
skip_inc () {
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
}

unknown's avatar
unknown committed
804
total_inc () {
unknown's avatar
unknown committed
805
    TOT_TEST=`$EXPR $TOT_TEST + 1`
unknown's avatar
unknown committed
806 807
}

808 809 810 811 812 813

skip_test() {
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
814
   RES="$pname"
815 816 817 818
   skip_inc
   $ECHO "$RES$RES_SPACE [ skipped ]"
}

819 820 821 822 823 824 825 826 827 828 829 830

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

unknown's avatar
unknown committed
860 861 862
    if test -z "$USE_RUNNING_SERVER"
    then

unknown's avatar
unknown committed
863 864 865 866
    # 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
867
    $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' \
868 869 870
        $MY_LOG_DIR/*.err \
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp
unknown's avatar
unknown committed
871 872 873 874 875

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x"
    do
unknown's avatar
unknown committed
876
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
unknown's avatar
unknown committed
877 878 879 880 881 882 883 884 885 886
      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
887
    fi
unknown's avatar
unknown committed
888
}
889

unknown's avatar
unknown committed
890
mysql_install_db () {
891
    $ECHO "Removing Stale Files"
unknown's avatar
unknown committed
892
    $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1" $SLAVE_MYDDIR $MY_LOG_DIR/* 
893
    $ECHO "Installing Master Databases"
894 895 896 897 898
    $INSTALL_DB
    if [ $? != 0 ]; then
	error "Could not install master test DBs"
	exit 1
    fi
unknown's avatar
unknown committed
899 900 901 902 903 904 905 906 907
    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
908
    $ECHO "Installing Slave Databases"
909
    $INSTALL_DB -slave
910
    if [ $? != 0 ]; then
911
	error "Could not install slave test DBs"
912
	exit 1
unknown's avatar
unknown committed
913
    fi
unknown's avatar
unknown committed
914

915 916
    for slave_num in 1 2 ;
    do
917
      $RM -rf var/slave$slave_num-data
918 919 920
      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
921
    done
unknown's avatar
unknown committed
922 923 924
    return 0
}

unknown's avatar
unknown committed
925 926
gprof_prepare ()
{
unknown's avatar
unknown committed
927 928
 $RM -rf $GPROF_DIR
 mkdir -p $GPROF_DIR
unknown's avatar
unknown committed
929 930 931 932 933
}

gprof_collect ()
{
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
934
   gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
unknown's avatar
unknown committed
935 936 937
   echo "Master execution profile has been saved in $GPROF_MASTER"
 fi
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
938
   gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
unknown's avatar
unknown committed
939 940 941 942
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
 fi
}

943
gcov_prepare () {
unknown's avatar
unknown committed
944 945
    $FIND $BASEDIR -name \*.gcov \
    -or -name \*.da | $XARGS $RM
unknown's avatar
unknown committed
946 947 948
}

gcov_collect () {
unknown's avatar
unknown committed
949
    $ECHO "Collecting source coverage info..."
unknown's avatar
unknown committed
950 951
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
unknown's avatar
unknown committed
952 953 954
    for d in $MYSQLD_SRC_DIRS; do
	cd $BASEDIR/$d
	for f in *.h *.cc *.c; do
unknown's avatar
unknown committed
955
	    $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
unknown's avatar
unknown committed
956
	done
957
	cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
958 959
    done

unknown's avatar
unknown committed
960
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
unknown's avatar
unknown committed
961 962
}

unknown's avatar
unknown committed
963 964 965 966 967
abort_if_failed()
{
 if [ ! $? = 0 ] ; then
  echo $1
  exit 1
unknown's avatar
unknown committed
968
 fi
unknown's avatar
unknown committed
969 970 971 972
}

start_manager()
{
unknown's avatar
unknown committed
973
 if [ $USE_MANAGER = 0 ] ; then
974 975
   echo "Manager disabled, skipping manager start."
   $RM -f $MYSQL_MANAGER_LOG
976 977
  return
 fi
unknown's avatar
unknown committed
978
 $ECHO "Starting MySQL Manager"
979 980 981 982 983 984 985 986 987
 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
988
 $RM -f $MANAGER_PID_FILE
unknown's avatar
unknown committed
989 990
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
unknown's avatar
unknown committed
991
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
992
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
unknown's avatar
unknown committed
993
  abort_if_failed "Could not start MySQL manager"
994 995
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
996 997 998 999 1000
  --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"
1001 1002 1003 1004
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
unknown's avatar
unknown committed
1005 1006
}

unknown's avatar
unknown committed
1007 1008
stop_manager()
{
unknown's avatar
unknown committed
1009
 if [ $USE_MANAGER = 0 ] ; then
1010 1011
  return
 fi
unknown's avatar
unknown committed
1012 1013 1014 1015
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
1016 1017
 echo "Manager terminated"

unknown's avatar
unknown committed
1018 1019 1020
}

manager_launch()
unknown's avatar
unknown committed
1021
{
unknown's avatar
unknown committed
1022 1023
  ident=$1
  shift
unknown's avatar
unknown committed
1024
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1025
    echo $@ | /bin/sh  >> $CUR_MYERR 2>&1  &
unknown's avatar
unknown committed
1026 1027
    sleep 2 #hack
    return
1028
  fi
unknown's avatar
unknown committed
1029
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
unknown's avatar
unknown committed
1030
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1031
def_exec $ident "$@"
unknown's avatar
unknown committed
1032 1033 1034 1035
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
1036
EOF
unknown's avatar
unknown committed
1037
  abort_if_failed "Could not execute manager command"
unknown's avatar
unknown committed
1038
}
unknown's avatar
unknown committed
1039

unknown's avatar
unknown committed
1040 1041
manager_term()
{
1042 1043
  pid=$1
  ident=$2
unknown's avatar
unknown committed
1044
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1045
    # Shutdown time must be high as slave may be in reconnect
unknown's avatar
unknown committed
1046
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1
1047 1048
    res=$?
    # Some systems require an extra connect
unknown's avatar
unknown committed
1049
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1
1050 1051 1052 1053 1054
    if test $res = 0
    then
      wait_for_pid $pid
    fi
    return $res
1055
  fi
unknown's avatar
unknown committed
1056 1057
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
1058
stop_exec $ident $STOP_WAIT_TIMEOUT
unknown's avatar
unknown committed
1059 1060 1061 1062
EOF
 abort_if_failed "Could not execute manager command"
}

1063 1064 1065 1066
start_ndbcluster()
{
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
unknown's avatar
merge  
unknown committed
1067
  rm -f $NDB_TOOLS_OUTPUT
1068 1069 1070 1071 1072
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
  then
    echo "Starting ndbcluster"
    if [ "$DO_BENCH" = 1 ]
    then
1073
      NDBCLUSTER_EXTRA_OPTS=""
1074
    else
1075
      NDBCLUSTER_EXTRA_OPTS="--small"
1076
    fi
1077 1078 1079 1080 1081 1082 1083 1084 1085
    ./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

1086
    NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
1087
  else
1088 1089
    NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
    echo "Using ndbcluster at $NDB_CONNECTSTRING"
1090
  fi
1091 1092
  USE_NDBCLUSTER="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\""
  export NDB_CONNECTSTRING
1093 1094 1095 1096 1097 1098 1099 1100 1101 1102
  fi
}

stop_ndbcluster()
{
 if [ ! -z "$USE_NDBCLUSTER" ]
 then
 if [ -z "$USE_RUNNING_NDBCLUSTER" ]
 then
   # Kill any running ndbcluster stuff
1103
   ./ndb/ndbcluster $NDBCLUSTER_OPTS --stop
1104 1105 1106 1107
 fi
 fi
}

unknown's avatar
unknown committed
1108 1109
# 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
1110

unknown's avatar
unknown committed
1111 1112
start_master()
{
unknown's avatar
unknown committed
1113 1114
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
unknown's avatar
unknown committed
1115 1116
    return
  fi
unknown's avatar
unknown committed
1117 1118 1119
  # 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
1120
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
unknown's avatar
unknown committed
1121 1122
  fi

1123
  # Remove old master.info and relay-log.info files
unknown's avatar
unknown committed
1124
  $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
1125 1126 1127 1128 1129 1130 1131 1132

  #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
1133 1134 1135
  if [ -n "$1" ] ; then
   id=`$EXPR $1 + 101`;
   this_master_myport=`$EXPR $MASTER_MYPORT + $1`
1136
   NOT_FIRST_MASTER_EXTRA_OPTS="--skip-innodb"
1137 1138
   eval "MASTER_MYPORT$1=$this_master_myport"
   export MASTER_MYPORT$1
unknown's avatar
unknown committed
1139 1140 1141
  else
   id=1;
   this_master_myport=$MASTER_MYPORT
1142
   NOT_FIRST_MASTER_EXTRA_OPTS=""
unknown's avatar
unknown committed
1143
  fi
unknown's avatar
unknown committed
1144 1145
  if [ -z "$DO_BENCH" ]
  then
unknown's avatar
unknown committed
1146 1147
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
  	    --server-id=$id  \
1148
          --basedir=$MY_BASEDIR \
unknown's avatar
unknown committed
1149
          --port=$this_master_myport \
unknown's avatar
unknown committed
1150
          --local-infile \
unknown's avatar
unknown committed
1151 1152
          --exit-info=256 \
          --core \
unknown's avatar
unknown committed
1153
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1154 1155 1156 1157
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
          --log=$MASTER_MYLOG$1 \
unknown's avatar
unknown committed
1158 1159 1160 1161 1162
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1163
	  --open-files-limit=1024 \
1164
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1165
           $SMALL_SERVER \
1166 1167
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
           $NOT_FIRST_MASTER_EXTRA_OPTS"
unknown's avatar
unknown committed
1168
  else
unknown's avatar
unknown committed
1169 1170
    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
1171
          --basedir=$MY_BASEDIR --init-rpl-role=master \
unknown's avatar
unknown committed
1172
          --port=$this_master_myport \
unknown's avatar
unknown committed
1173
          --local-infile \
unknown's avatar
unknown committed
1174 1175 1176
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
unknown's avatar
unknown committed
1177 1178 1179
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core \
unknown's avatar
unknown committed
1180
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1181 1182 1183
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1184
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1185
           $SMALL_SERVER \
1186 1187
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
           $NOT_FIRST_MASTER_EXTRA_OPTS"
unknown's avatar
unknown committed
1188 1189 1190 1191 1192
  fi

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

unknown's avatar
unknown committed
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204
  # 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
1205 1206 1207 1208
  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
1209
    "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
unknown's avatar
unknown committed
1210 1211
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1212 1213 1214 1215
    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:"
1216
      $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
unknown's avatar
unknown committed
1217 1218 1219 1220
      wait_for_master=1500
    else
      ( $ECHO set args $master_args;
      if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1221
    cat <<EOF
unknown's avatar
unknown committed
1222 1223
b mysql_parse
commands 1
1224
disa 1
unknown's avatar
unknown committed
1225
end
unknown's avatar
unknown committed
1226 1227
r
EOF
unknown's avatar
unknown committed
1228 1229
      fi )  > $GDB_MASTER_INIT
      manager_launch master $XTERM -display $DISPLAY \
1230
      -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
unknown's avatar
unknown committed
1231
    fi
unknown's avatar
unknown committed
1232
  else
1233
    manager_launch master $MASTER_MYSQLD $master_args
unknown's avatar
unknown committed
1234
  fi
unknown's avatar
unknown committed
1235
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
unknown's avatar
unknown committed
1236
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
unknown's avatar
unknown committed
1237
  eval "MASTER$1_RUNNING=1"
unknown's avatar
unknown committed
1238 1239 1240 1241
}

start_slave()
{
unknown's avatar
unknown committed
1242 1243 1244
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
unknown's avatar
unknown committed
1245 1246
  # 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
1247 1248 1249 1250 1251 1252 1253 1254
  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"
1255
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
unknown's avatar
unknown committed
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267
   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
1268
  # Remove stale binary logs and old master.info files
unknown's avatar
unknown committed
1269 1270 1271 1272 1273 1274
  # 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
1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285

  #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 \
1286
          --master-password="" \
unknown's avatar
unknown committed
1287 1288 1289 1290 1291 1292 1293 1294 1295 1296
          --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 \
1297
          --relay-log=$MYSQL_TEST_DIR/var/log/$slave_ident-relay-bin \
unknown's avatar
unknown committed
1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309
          --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
1310
          --skip-innodb --skip-ndbcluster --skip-slave-start \
unknown's avatar
unknown committed
1311 1312 1313
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
          --report-host=127.0.0.1 --report-user=root \
          --report-port=$slave_port \
1314
          --master-retry-count=10 \
unknown's avatar
unknown committed
1315
          -O slave_net_timeout=10 \
unknown's avatar
unknown committed
1316 1317 1318 1319 1320 1321 1322
           $SMALL_SERVER \
           $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  CUR_MYERR=$slave_err
  CUR_MYSOCK=$slave_sock

  if [ x$DO_DDD = x1 ]
  then
1323
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1324 1325 1326 1327
    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
1328 1329
    if [ x$MANUAL_GDB = x1 ]
    then
unknown's avatar
unknown committed
1330
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1331
      echo "To start gdb for the slave, type in another window:"
1332
      echo "cd $CWD ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
unknown's avatar
unknown committed
1333 1334
      wait_for_slave=1500
    else
unknown's avatar
unknown committed
1335 1336 1337 1338 1339 1340 1341 1342 1343 1344
      ( $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
1345 1346 1347
      manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
      gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
    fi
unknown's avatar
unknown committed
1348 1349 1350 1351
  else
    manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
  fi
  eval "SLAVE$1_RUNNING=1"
1352
  sleep_until_file_created $slave_pid $wait_for_slave
unknown's avatar
unknown committed
1353
  wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
unknown's avatar
unknown committed
1354 1355
}

unknown's avatar
unknown committed
1356 1357
mysql_start ()
{
unknown's avatar
unknown committed
1358
# We should not start the daemon here as we don't know the arguments
unknown's avatar
unknown committed
1359
# for the test.  Better to let the test start the daemon
unknown's avatar
unknown committed
1360 1361 1362 1363

#  $ECHO "Starting MySQL daemon"
#  start_master
#  start_slave
unknown's avatar
unknown committed
1364
  cd $MYSQL_TEST_DIR
1365
  start_ndbcluster
unknown's avatar
unknown committed
1366
  return 1
unknown's avatar
unknown committed
1367 1368
}

unknown's avatar
unknown committed
1369 1370
stop_slave ()
{
1371 1372 1373
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ -n "$1" ] ;
unknown's avatar
unknown committed
1374
  then
1375 1376 1377
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
  else
   slave_pid=$SLAVE_MYPID
unknown's avatar
unknown committed
1378
  fi
1379 1380
  if [ x$this_slave_running = x1 ]
  then
1381 1382
    pid=`$CAT $slave_pid`
    manager_term $pid $slave_ident
1383
    if [ $? != 0 ] && [ -f $slave_pid ]
1384
    then # try harder!
1385
      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
1386 1387
      kill $pid
      sleep_until_file_deleted $pid $slave_pid
1388 1389 1390 1391 1392 1393 1394 1395 1396
      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
1397
    fi
1398
    eval "SLAVE$1_RUNNING=0"
unknown's avatar
unknown committed
1399
  fi
unknown's avatar
unknown committed
1400
}
unknown's avatar
unknown committed
1401

1402 1403 1404 1405 1406 1407 1408 1409 1410 1411
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
1412 1413
stop_master ()
{
unknown's avatar
unknown committed
1414 1415
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ]
unknown's avatar
unknown committed
1416
  then
unknown's avatar
unknown committed
1417 1418 1419
    # 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
1420
      pid=`$CAT $MASTER_MYPID$1`
unknown's avatar
unknown committed
1421
      manager_term $pid master $1
unknown's avatar
Merge  
unknown committed
1422
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
unknown's avatar
unknown committed
1423 1424 1425
      then # try harder!
	$ECHO "master not cooperating with mysqladmin, will try manual kill"
	kill $pid
unknown's avatar
Merge  
unknown committed
1426 1427
	sleep_until_file_deleted $pid $MASTER_MYPID$1
	if [ -f $MASTER_MYPID$1 ] ; then
unknown's avatar
unknown committed
1428
	  $ECHO "master refused to die. Sending SIGKILL"
unknown's avatar
Merge  
unknown committed
1429 1430
	  kill -9 `$CAT $MASTER_MYPID$1`
	  $RM -f $MASTER_MYPID$1
unknown's avatar
unknown committed
1431 1432 1433
	else
	  $ECHO "master responded to SIGTERM "
	fi
1434
      else
unknown's avatar
unknown committed
1435
	sleep $SLEEP_TIME_AFTER_RESTART
1436
      fi
unknown's avatar
unknown committed
1437
    fi
unknown's avatar
unknown committed
1438
    eval "MASTER$1_RUNNING=0"
unknown's avatar
unknown committed
1439 1440
  fi
}
unknown's avatar
unknown committed
1441

unknown's avatar
unknown committed
1442 1443
mysql_stop ()
{
1444 1445
 $ECHO  "Ending Tests"
 $ECHO  "Shutting-down MySQL daemon"
1446
 $ECHO  ""
unknown's avatar
unknown committed
1447
 stop_master
unknown's avatar
unknown committed
1448
 stop_master 1
unknown's avatar
unknown committed
1449
 $ECHO "Master shutdown finished"
unknown's avatar
unknown committed
1450
 stop_slave
1451 1452
 stop_slave 1
 stop_slave 2
unknown's avatar
unknown committed
1453
 $ECHO "Slave shutdown finished"
1454
 stop_ndbcluster
unknown's avatar
unknown committed
1455
 return 1
unknown's avatar
unknown committed
1456 1457
}

unknown's avatar
unknown committed
1458 1459 1460 1461 1462
mysql_restart ()
{
  mysql_stop
  mysql_start
  return 1
unknown's avatar
unknown committed
1463 1464 1465
}

mysql_loadstd () {
unknown's avatar
unknown committed
1466 1467

    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
unknown's avatar
unknown committed
1468 1469 1470
    return 1
}

unknown's avatar
unknown committed
1471 1472 1473
run_testcase ()
{
 tf=$1
unknown's avatar
unknown committed
1474
 tname=`$BASENAME $tf .test`
unknown's avatar
unknown committed
1475 1476
 master_opt_file=$TESTDIR/$tname-master.opt
 slave_opt_file=$TESTDIR/$tname-slave.opt
1477 1478
 master_init_script=$TESTDIR/$tname-master.sh
 slave_init_script=$TESTDIR/$tname-slave.sh
1479
 slave_master_info_file=$TESTDIR/$tname.slave-mi
unknown's avatar
unknown committed
1480 1481
 tsrcdir=$TESTDIR/$tname-src
 result_file="r/$tname.result"
1482
 echo $tname > $CURRENT_TEST
unknown's avatar
unknown committed
1483
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
unknown's avatar
unknown committed
1484 1485 1486
 if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then
   result_file="$result_file$RESULT_EXT"
 fi
1487 1488 1489 1490 1491 1492
 if [ -f "$TESTDIR/$tname.disabled" ]
 then
   comment=`$CAT $TESTDIR/$tname.disabled`;
   disable_test $tname "$comment"
   return
 fi
1493
 if [ "$USE_MANAGER" = 1 ] ; then
unknown's avatar
unknown committed
1494
  many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)`
1495 1496 1497 1498
 fi
 if $EXPR "$tname" '<' "$START_FROM" > /dev/null ; then
   #skip_test $tname
   return
unknown's avatar
unknown committed
1499 1500
 fi

1501 1502 1503 1504
 if [ "$SKIP_TEST" ] ; then
   if $EXPR \( "$tname" : "$SKIP_TEST" \) > /dev/null ; then
     skip_test $tname
     return
unknown's avatar
unknown committed
1505
   fi
1506
 fi
1507

1508 1509
 if [ "$DO_TEST" ] ; then
   if $EXPR \( "$tname" : "$DO_TEST" \) > /dev/null ; then
unknown's avatar
unknown committed
1510
     : #empty command to keep some shells happy
1511 1512 1513
   else
     #skip_test $tname
     return
1514
   fi
1515
 fi
1516

1517 1518
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; then
   skip_test $tname
1519 1520 1521
   return
 fi

unknown's avatar
unknown committed
1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533
 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 \
1534
        "alter_table" \
unknown's avatar
unknown committed
1535 1536
	"bdb-deadlock" \
	"connect" \
1537 1538
        "ctype_latin1_de" \
        "ctype_ucs" \
unknown's avatar
unknown committed
1539 1540 1541 1542 1543
	"flush_block_commit" \
	"grant2" \
	"grant_cache" \
	"grant" \
	"init_connect" \
1544 1545
	"init_file" \
        "innodb" \
unknown's avatar
unknown committed
1546 1547 1548 1549 1550 1551 1552
	"innodb-deadlock" \
	"innodb-lock" \
	"mix_innodb_myisam_binlog" \
	"mysqlbinlog2" \
	"mysqlbinlog" \
	"mysqldump" \
	"mysql_protocols" \
1553
        "packet" \
unknown's avatar
unknown committed
1554 1555 1556 1557
	"ps_1general" \
	"rename" \
	"show_check" \
        "system_mysql_db_fix" \
1558
        "timezone2" \
unknown's avatar
unknown committed
1559 1560 1561 1562 1563 1564 1565 1566 1567
	"user_var" \
	"variables"
   do
     if [ "$tname" = "$t" ] ; then
       skip_test $tname
       return
     fi
   done
 fi
1568

1569
 if [ -z "$USE_RUNNING_SERVER" ] ;
unknown's avatar
unknown committed
1570
 then
1571 1572
   if [ -f $master_opt_file ] ;
   then
unknown's avatar
unknown committed
1573
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1574 1575 1576 1577 1578 1579 1580
     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=" "
	 ;;
1581 1582
       --result-file=*)
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
unknown's avatar
unknown committed
1583 1584 1585 1586
         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
1587 1588 1589
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
         ;;
1590
     esac
1591
     stop_master
unknown's avatar
unknown committed
1592
     stop_master 1
unknown's avatar
unknown committed
1593
     report_current_test $tname
1594
     start_master
unknown's avatar
unknown committed
1595
     if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1596 1597
       start_master 1
     fi
1598
     TZ=$MY_TZ; export TZ
1599
   else
unknown's avatar
unknown committed
1600 1601 1602 1603 1604
     # 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 ]
1605 1606 1607
     then
       EXTRA_MASTER_OPT=""
       stop_master
unknown's avatar
unknown committed
1608
       stop_master 1
unknown's avatar
unknown committed
1609
       report_current_test $tname
1610
       start_master
unknown's avatar
unknown committed
1611
       if [ -n "$USE_NDBCLUSTER"  -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1612 1613
         start_master 1
       fi
unknown's avatar
unknown committed
1614
     else
unknown's avatar
unknown committed
1615
       report_current_test $tname
unknown's avatar
unknown committed
1616
     fi
1617
   fi
unknown's avatar
unknown committed
1618

unknown's avatar
unknown committed
1619 1620 1621 1622
   # 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 ] ;
1623
     then
unknown's avatar
unknown committed
1624
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
unknown's avatar
unknown committed
1625
       do_slave_restart=1
unknown's avatar
unknown committed
1626 1627 1628 1629 1630 1631
     else
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
      then
	EXTRA_SLAVE_OPT=""
	do_slave_restart=1
      fi
unknown's avatar
unknown committed
1632
     fi
1633

unknown's avatar
unknown committed
1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655
     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
1656
   fi
unknown's avatar
fixed  
unknown committed
1657
 fi
unknown's avatar
unknown committed
1658 1659 1660 1661 1662 1663

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

1664
 cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
1665

unknown's avatar
unknown committed
1666
 if [ -f $tf ] ; then
unknown's avatar
unknown committed
1667
    $RM -f r/$tname.*reject
unknown's avatar
unknown committed
1668
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1669
    if [ -z "$DO_CLIENT_GDB" ] ; then
1670
      `$MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1671
    else
1672
      do_gdb_test "$mysql_test_args" "$tf"
1673
    fi
unknown's avatar
unknown committed
1674

unknown's avatar
unknown committed
1675 1676
    res=$?

1677
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1678
    RES="$pname"
unknown's avatar
unknown committed
1679

1680 1681 1682 1683
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
unknown's avatar
unknown committed
1684

unknown's avatar
unknown committed
1685
    if [ $res = 0 ]; then
1686 1687
      total_inc
      pass_inc
unknown's avatar
unknown committed
1688
      TIMER=""
unknown's avatar
unknown committed
1689
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
unknown's avatar
unknown committed
1690 1691 1692 1693
	TIMER=`cat $MY_LOG_DIR/timer`
	TIMER=`$PRINTF "%13s" $TIMER`
      fi
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1694
    else
1695
      # why the following ``if'' ? That is why res==1 is special ?
1696 1697 1698 1699
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1700 1701 1702
        if [ $res -gt 2 ]; then
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
        fi
1703
	total_inc
unknown's avatar
unknown committed
1704
        fail_inc
1705
	$ECHO "$RES$RES_SPACE [ fail ]"
1706 1707
        $ECHO
	error_is
unknown's avatar
unknown committed
1708
	show_failed_diff $tname
unknown's avatar
unknown committed
1709
	$ECHO
1710
	if [ x$FORCE != x1 ] ; then
unknown's avatar
unknown committed
1711
	 $ECHO "Aborting: $tname failed in $TEST_MODE mode. To continue, re-run with '--force'."
1712
	 $ECHO
unknown's avatar
unknown committed
1713 1714
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	    [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1715 1716
	 then
	   mysql_stop
unknown's avatar
unknown committed
1717
	   stop_manager
unknown's avatar
unknown committed
1718
   	 fi
1719 1720
	 exit 1
	fi
unknown's avatar
unknown committed
1721
	FAILED_CASES="$FAILED_CASES $tname"
unknown's avatar
unknown committed
1722 1723
        if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	   [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1724 1725 1726
	then
	  mysql_restart
	fi
1727
	$ECHO "Resuming Tests"
1728
	$ECHO ""
1729
      fi
unknown's avatar
unknown committed
1730
    fi
1731
  fi
unknown's avatar
unknown committed
1732 1733
}

unknown's avatar
unknown committed
1734 1735 1736 1737
######################################################################
# Main script starts here
######################################################################

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

unknown's avatar
unknown committed
1740 1741
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
unknown's avatar
unknown committed
1742

1743 1744
if [ -z "$USE_RUNNING_SERVER" ]
then
1745 1746 1747 1748
  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
1749
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1750 1751
    $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
1752
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT+1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1753 1754 1755
    $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
1756
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
1757 1758
    sleep_until_file_deleted 0 $SLAVE_MYPID
  else
1759
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
1760
  fi
unknown's avatar
unknown committed
1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773

  # 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
1774
  stop_ndbcluster
unknown's avatar
unknown committed
1775

unknown's avatar
unknown committed
1776
  # Remove files that can cause problems
1777
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
unknown's avatar
unknown committed
1778 1779
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1780 1781
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
unknown's avatar
unknown committed
1782
  $RM -f $MASTER_MYDDIR"1"/log.*
1783

unknown's avatar
unknown committed
1784 1785
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
1786 1787
  $ECHO "Installing Test Databases"
  mysql_install_db
unknown's avatar
unknown committed
1788

unknown's avatar
unknown committed
1789
  start_manager
unknown's avatar
unknown committed
1790

unknown's avatar
unknown committed
1791
# Do not automagically start daemons if we are in gdb or running only one test
unknown's avatar
unknown committed
1792
# case
1793 1794 1795 1796 1797 1798
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
unknown's avatar
unknown committed
1799 1800
fi

1801
$ECHO  "Starting Tests"
unknown's avatar
unknown committed
1802

1803 1804 1805
#
# This can probably be deleted
#
unknown's avatar
unknown committed
1806 1807
if [ "$DO_BENCH" = 1 ]
then
1808 1809
  start_master

1810 1811 1812 1813 1814
  if [ "$DO_SMALL_BENCH" = 1 ]
  then
    EXTRA_BENCH_ARGS="--small-test --small-tables"
  fi

1815 1816
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
1817
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
1818 1819
  fi 

unknown's avatar
unknown committed
1820 1821 1822 1823
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
unknown's avatar
unknown committed
1824
  then
1825
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
unknown's avatar
unknown committed
1826
  else
unknown's avatar
unknown committed
1827 1828
    if [ -x "./$1" ]
    then
1829
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
unknown's avatar
unknown committed
1830 1831 1832
    else
      echo "benchmark $1 not found"
    fi
unknown's avatar
unknown committed
1833
  fi
unknown's avatar
unknown committed
1834 1835 1836 1837
  cd $savedir
  mysql_stop
  stop_manager
  exit
unknown's avatar
unknown committed
1838 1839
fi

unknown's avatar
unknown committed
1840
$ECHO
unknown's avatar
unknown committed
1841
if [ x$USE_TIMER = x1 ] ; then
unknown's avatar
unknown committed
1842
$ECHO "TEST                            RESULT        TIME (ms)"
unknown's avatar
unknown committed
1843 1844 1845
else
$ECHO "TEST                            RESULT"
fi
unknown's avatar
unknown committed
1846 1847
$ECHO $DASH72

unknown's avatar
unknown committed
1848
if [ -z "$1" ] ;
unknown's avatar
unknown committed
1849
then
1850 1851 1852
  if [ x$RECORD = x1 ]; then
    $ECHO "Will not run in record mode without a specific test case."
  else
1853 1854 1855 1856
    for tf in $TESTDIR/*.$TESTSUFFIX
    do
      run_testcase $tf
    done
1857 1858
    $RM -f $TIMEFILE	# Remove for full test
  fi
unknown's avatar
unknown committed
1859
else
unknown's avatar
unknown committed
1860 1861 1862 1863 1864 1865 1866 1867 1868 1869
  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
1870
fi
unknown's avatar
unknown committed
1871

unknown's avatar
unknown committed
1872 1873
$ECHO $DASH72
$ECHO
1874

1875
if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
unknown's avatar
unknown committed
1876 1877 1878
then
    mysql_stop
fi
unknown's avatar
unknown committed
1879
stop_manager
unknown's avatar
unknown committed
1880
report_stats
unknown's avatar
unknown committed
1881
$ECHO
unknown's avatar
unknown committed
1882

unknown's avatar
unknown committed
1883
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
unknown's avatar
unknown committed
1884
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
unknown's avatar
unknown committed
1885

unknown's avatar
unknown committed
1886
if [ $TOT_FAIL -ne 0 ]; then
unknown's avatar
unknown committed
1887
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
unknown's avatar
unknown committed
1888 1889 1890 1891 1892
  $ECHO
  exit 1
else
  exit 0
fi