mysql-test-run.sh 47.2 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 7
# Fixed by Sergei
# :-)
unknown's avatar
unknown committed
8 9 10 11 12

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

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

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

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

43 44 45 46
# Standard functions

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


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

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

104 105 106 107 108
# For the future

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

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

unknown's avatar
unknown committed
114 115
SED=sed

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

# Are we using a source or a binary distribution?

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

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

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

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

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

unknown's avatar
fixed  
unknown committed
200
MASTER_RUNNING=0
unknown's avatar
unknown committed
201
MASTER1_RUNNING=0
202
MASTER_MYPORT=9306
unknown's avatar
unknown committed
203
MASTER_MYPORT1=9307
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=""
unknown's avatar
unknown committed
220 221
USE_NDBCLUSTER=""
USE_RUNNING_NDBCLUSTER=""
222 223
DO_GCOV=""
DO_GDB=""
unknown's avatar
unknown committed
224
MANUAL_GDB=""
225
DO_DDD=""
226
DO_CLIENT_GDB=""
unknown's avatar
unknown committed
227
SLEEP_TIME_AFTER_RESTART=1
unknown's avatar
unknown committed
228
SLEEP_TIME_FOR_DELETE=10
unknown's avatar
unknown committed
229
SLEEP_TIME_FOR_FIRST_MASTER=400		# Enough time to create innodb tables
unknown's avatar
unknown committed
230
SLEEP_TIME_FOR_SECOND_MASTER=30
unknown's avatar
unknown committed
231
SLEEP_TIME_FOR_FIRST_SLAVE=400
unknown's avatar
unknown committed
232
SLEEP_TIME_FOR_SECOND_SLAVE=30
unknown's avatar
unknown committed
233
CHARACTER_SET=latin1
234
DBUSER=""
235 236
START_WAIT_TIMEOUT=10
STOP_WAIT_TIMEOUT=10
unknown's avatar
unknown committed
237
MYSQL_TEST_SSL_OPTS=""
unknown's avatar
unknown committed
238
USE_TIMER=""
unknown's avatar
unknown committed
239 240
USE_EMBEDDED_SERVER=""
RESULT_EXT=""
241 242 243

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

unknown's avatar
unknown committed
433 434 435
#++
# mysqld Environment Parameters
#--
436

unknown's avatar
unknown committed
437
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
438 439
MANAGER_PID_FILE="$MYRUN_DIR/manager.pid"

440
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
unknown's avatar
unknown committed
441
MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
unknown's avatar
unknown committed
442
MASTER_MYSOCK1=$MYSQL_MYSOCK"1"
unknown's avatar
unknown committed
443 444 445
MASTER_MYPID="$MYRUN_DIR/master.pid"
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/master.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/master.err"
446 447

SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
unknown's avatar
unknown committed
448
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
unknown's avatar
unknown committed
449 450 451
SLAVE_MYPID="$MYRUN_DIR/slave.pid"
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/slave.err"
452

453
CURRENT_TEST="$MYSQL_TEST_DIR/var/log/current_test"
454
SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
455

unknown's avatar
unknown committed
456
export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
unknown's avatar
unknown committed
457

458 459 460 461
if [ x$SOURCE_DIST = x1 ] ; then
 MY_BASEDIR=$MYSQL_TEST_DIR
else
 MY_BASEDIR=$BASEDIR
unknown's avatar
unknown committed
462
fi
unknown's avatar
unknown committed
463

unknown's avatar
unknown committed
464 465 466 467 468 469 470 471
# 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
472
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
unknown's avatar
unknown committed
473

474
if test ${COLUMNS:-0} -lt 80 ; then COLUMNS=80 ; fi
475
E=`$EXPR $COLUMNS - 8`
unknown's avatar
unknown committed
476
DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c 1-$E`
477

478 479 480
# 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
481 482 483 484 485 486 487
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
   if [ -f "$BASEDIR/libmysqld/examples/mysqltest" ] ; then
     MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest"
   else
     echo "Fatal error: Cannot find embedded server 'mysqltest'" 1>&2
     exit 1
   fi
488
 else
unknown's avatar
unknown committed
489 490 491 492 493 494 495 496
   MYSQLD="$VALGRIND $BASEDIR/sql/mysqld"
   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
497
 fi
498
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
unknown's avatar
unknown committed
499
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
500
 else
unknown's avatar
unknown committed
501
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
502
 fi
unknown's avatar
unknown committed
503
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
unknown's avatar
unknown committed
504
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
unknown's avatar
unknown committed
505
 else
unknown's avatar
unknown committed
506
   MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
unknown's avatar
unknown committed
507
 fi
unknown's avatar
unknown committed
508 509 510
 if [ -n "$STRACE_CLIENT" ]; then
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
 fi
unknown's avatar
unknown committed
511

unknown's avatar
unknown committed
512
 CLIENT_BINDIR="$BASEDIR/client"
unknown's avatar
unknown committed
513
 TESTS_BINDIR="$BASEDIR/tests"
unknown's avatar
unknown committed
514
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
unknown's avatar
unknown committed
515
 WAIT_PID="$BASEDIR/extra/mysql_waitpid"
unknown's avatar
unknown committed
516
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
unknown's avatar
unknown committed
517
 MYSQL_MANAGER="$BASEDIR/tools/mysqlmanager"
unknown's avatar
unknown committed
518 519
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
 MYSQL="$CLIENT_BINDIR/mysql"
520
 LANGUAGE="$BASEDIR/sql/share/english/"
521
 CHARSETSDIR="$BASEDIR/sql/share/charsets"
522
 INSTALL_DB="./install_test_db"
523
 MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
524
 NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
525
else
526 527
 if test -x "$BASEDIR/libexec/mysqld"
 then
unknown's avatar
unknown committed
528
   MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
529
 else
unknown's avatar
unknown committed
530
   MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
531
 fi
unknown's avatar
unknown committed
532
 CLIENT_BINDIR="$BASEDIR/bin"
533
 TESTS_BINDIR="$BASEDIR/bin"
unknown's avatar
unknown committed
534 535 536 537 538 539 540 541 542
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
 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"
543
 INSTALL_DB="./install_test_db --bin"
unknown's avatar
unknown committed
544
 MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
545
 NDB_TOOLS_DIR="$CLIENT_BINDIR"
unknown's avatar
unknown committed
546
 if test -d "$BASEDIR/share/mysql/english"
547 548
 then
   LANGUAGE="$BASEDIR/share/mysql/english/"
549
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
550 551
 else
   LANGUAGE="$BASEDIR/share/english/"
552
   CHARSETSDIR="$BASEDIR/share/charsets"
553
  fi
554 555
fi

556 557 558 559 560 561 562 563 564 565
if [ -z "$MASTER_MYSQLD" ]
then
MASTER_MYSQLD=$MYSQLD
fi

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

566 567 568 569 570 571
# If we should run all tests cases, we will use a local server for that

if [ -z "$1" ]
then
   USE_RUNNING_SERVER=""
fi
572 573
if [ -n "$USE_RUNNING_SERVER" ]
then
574
   MASTER_MYSOCK=$LOCAL_SOCKET;
575
   DBUSER=${DBUSER:-test}
576
else
577
   DBUSER=${DBUSER:-root}		# We want to do FLUSH xxx commands
578
fi
579 580 581

if [ -w / ]
then
unknown's avatar
unknown committed
582 583 584
  # 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"
585 586
fi

587

588 589 590 591
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"
unknown's avatar
unknown committed
592
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR TESTS_BINDIR
593
export NDB_TOOLS_DIR
594

595
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
596
 --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
unknown's avatar
unknown committed
597 598 599 600
 --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
601 602 603
MYSQL_TEST_BIN=$MYSQL_TEST
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
604 605 606
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
607 608 609 610
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
611
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
612 613 614
if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
  XTERM=`which xterm`
fi
615

unknown's avatar
unknown committed
616 617 618 619
#++
# Function Definitions
#--

unknown's avatar
unknown committed
620 621
prompt_user ()
{
622
 $ECHO $1
623
 read unused
unknown's avatar
unknown committed
624 625
}

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

unknown's avatar
unknown committed
628 629 630 631
show_failed_diff ()
{
  reject_file=r/$1.reject
  result_file=r/$1.result
632
  eval_file=r/$1.eval
unknown's avatar
unknown committed
633

unknown's avatar
unknown committed
634 635 636 637 638 639 640
  # 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

641 642 643 644
  if [ -f $eval_file ]
  then
    result_file=$eval_file
  fi
unknown's avatar
unknown committed
645

unknown's avatar
unknown committed
646 647 648 649
  if [ -x "$DIFF" ] && [ -f $reject_file ]
  then
    echo "Below are the diffs between actual and expected results:"
    echo "-------------------------------------------------------"
unknown's avatar
unknown committed
650
    $DIFF -c $result_file $reject_file
unknown's avatar
unknown committed
651
    echo "-------------------------------------------------------"
652
    echo "Please follow the instructions outlined at"
653
    echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
654
    echo "to find the reason to this problem and how to report this."
655
    echo ""
unknown's avatar
unknown committed
656
  fi
unknown's avatar
unknown committed
657
}
unknown's avatar
unknown committed
658

659 660 661 662 663 664
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
665
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
666 667
}

unknown's avatar
unknown committed
668
error () {
unknown's avatar
unknown committed
669
    $ECHO  "Error:  $1"
unknown's avatar
unknown committed
670 671 672
    exit 1
}

673
error_is () {
674 675
    $ECHO "Errors are (from $TIMEFILE) :"
    $CAT < $TIMEFILE
676
    $ECHO "(the last lines may be the most important ones)"
677 678
}

unknown's avatar
unknown committed
679
prefix_to_8() {
680
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
unknown's avatar
unknown committed
681 682
}

unknown's avatar
unknown committed
683
pass_inc () {
unknown's avatar
unknown committed
684
    TOT_PASS=`$EXPR $TOT_PASS + 1`
unknown's avatar
unknown committed
685 686 687
}

fail_inc () {
unknown's avatar
unknown committed
688
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
unknown's avatar
unknown committed
689 690
}

691 692 693 694
skip_inc () {
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
}

unknown's avatar
unknown committed
695
total_inc () {
unknown's avatar
unknown committed
696
    TOT_TEST=`$EXPR $TOT_TEST + 1`
unknown's avatar
unknown committed
697 698
}

699 700 701 702 703 704

skip_test() {
   USERT="    ...."
   SYST="    ...."
   REALT="    ...."
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
705
   RES="$pname"
706 707 708 709
   skip_inc
   $ECHO "$RES$RES_SPACE [ skipped ]"
}

unknown's avatar
unknown committed
710
report_stats () {
711
    if [ $TOT_FAIL = 0 ]; then
unknown's avatar
unknown committed
712
	$ECHO "All $TOT_TEST tests were successful."
unknown's avatar
unknown committed
713
    else
unknown's avatar
unknown committed
714 715 716 717 718 719
	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`
720
	$ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% successful."
721
	$ECHO ""
722
        $ECHO "The log files in $MY_LOG_DIR may give you some hint"
723 724
	$ECHO "of what when wrong."
	$ECHO "If you want to report this error, please read first the documentation at"
725
        $ECHO "http://www.mysql.com/doc/en/MySQL_test_suite.html"
unknown's avatar
unknown committed
726
    fi
unknown's avatar
unknown committed
727

unknown's avatar
unknown committed
728 729 730
    if test -z "$USE_RUNNING_SERVER"
    then

unknown's avatar
unknown committed
731 732 733 734
    # 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
735
    $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' \
736 737 738
        $MY_LOG_DIR/*.err \
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp
unknown's avatar
unknown committed
739 740 741 742 743

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x"
    do
unknown's avatar
unknown committed
744
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
unknown's avatar
unknown committed
745 746 747 748 749 750 751 752 753 754
      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
755
    fi
unknown's avatar
unknown committed
756
}
757

unknown's avatar
unknown committed
758
mysql_install_db () {
759
    $ECHO "Removing Stale Files"
unknown's avatar
unknown committed
760
    $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1" $SLAVE_MYDDIR $MY_LOG_DIR/* 
761
    $ECHO "Installing Master Databases"
762 763 764 765 766
    $INSTALL_DB
    if [ $? != 0 ]; then
	error "Could not install master test DBs"
	exit 1
    fi
unknown's avatar
unknown committed
767 768 769 770 771 772 773 774 775
    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
776
    $ECHO "Installing Slave Databases"
777
    $INSTALL_DB -slave
778
    if [ $? != 0 ]; then
779
	error "Could not install slave test DBs"
780
	exit 1
unknown's avatar
unknown committed
781
    fi
unknown's avatar
unknown committed
782

783 784
    for slave_num in 1 2 ;
    do
785
      $RM -rf var/slave$slave_num-data
786 787 788
      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
789
    done
unknown's avatar
unknown committed
790 791 792
    return 0
}

unknown's avatar
unknown committed
793 794
gprof_prepare ()
{
unknown's avatar
unknown committed
795 796
 $RM -rf $GPROF_DIR
 mkdir -p $GPROF_DIR
unknown's avatar
unknown committed
797 798 799 800 801
}

gprof_collect ()
{
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
802
   gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
unknown's avatar
unknown committed
803 804 805
   echo "Master execution profile has been saved in $GPROF_MASTER"
 fi
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
806
   gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
unknown's avatar
unknown committed
807 808 809 810
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
 fi
}

811
gcov_prepare () {
unknown's avatar
unknown committed
812 813
    $FIND $BASEDIR -name \*.gcov \
    -or -name \*.da | $XARGS $RM
unknown's avatar
unknown committed
814 815 816
}

gcov_collect () {
unknown's avatar
unknown committed
817
    $ECHO "Collecting source coverage info..."
unknown's avatar
unknown committed
818 819
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
unknown's avatar
unknown committed
820 821 822
    for d in $MYSQLD_SRC_DIRS; do
	cd $BASEDIR/$d
	for f in *.h *.cc *.c; do
unknown's avatar
unknown committed
823
	    $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
unknown's avatar
unknown committed
824
	done
825
	cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
826 827
    done

unknown's avatar
unknown committed
828
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
unknown's avatar
unknown committed
829 830
}

unknown's avatar
unknown committed
831 832 833 834 835
abort_if_failed()
{
 if [ ! $? = 0 ] ; then
  echo $1
  exit 1
unknown's avatar
unknown committed
836
 fi
unknown's avatar
unknown committed
837 838 839 840
}

start_manager()
{
unknown's avatar
unknown committed
841
 if [ $USE_MANAGER = 0 ] ; then
842 843
   echo "Manager disabled, skipping manager start."
   $RM -f $MYSQL_MANAGER_LOG
844 845
  return
 fi
unknown's avatar
unknown committed
846
 $ECHO "Starting MySQL Manager"
847 848 849 850 851 852 853 854 855
 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
856
 $RM -f $MANAGER_PID_FILE
unknown's avatar
unknown committed
857 858
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
unknown's avatar
unknown committed
859
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
860
  --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE
unknown's avatar
unknown committed
861
  abort_if_failed "Could not start MySQL manager"
862 863
  mysqltest_manager_args="--manager-host=localhost \
  --manager-user=$MYSQL_MANAGER_USER \
864 865 866 867 868
  --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"
869 870 871 872
  while [ ! -f $MANAGER_PID_FILE ] ; do
   sleep 1
  done
  echo "Manager started"
unknown's avatar
unknown committed
873 874
}

unknown's avatar
unknown committed
875 876
stop_manager()
{
unknown's avatar
unknown committed
877
 if [ $USE_MANAGER = 0 ] ; then
878 879
  return
 fi
unknown's avatar
unknown committed
880 881 882 883
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
884 885
 echo "Manager terminated"

unknown's avatar
unknown committed
886 887 888
}

manager_launch()
unknown's avatar
unknown committed
889
{
unknown's avatar
unknown committed
890 891
  ident=$1
  shift
unknown's avatar
unknown committed
892
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
893
    echo $@ | /bin/sh  >> $CUR_MYERR 2>&1  &
unknown's avatar
unknown committed
894 895
    sleep 2 #hack
    return
896
  fi
unknown's avatar
unknown committed
897
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
unknown's avatar
unknown committed
898
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
899
def_exec $ident "$@"
unknown's avatar
unknown committed
900 901 902 903
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
904
EOF
unknown's avatar
unknown committed
905
  abort_if_failed "Could not execute manager command"
unknown's avatar
unknown committed
906
}
unknown's avatar
unknown committed
907

unknown's avatar
unknown committed
908 909
manager_term()
{
910 911
  pid=$1
  ident=$2
unknown's avatar
unknown committed
912
  if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
913
    # Shutdown time must be high as slave may be in reconnect
unknown's avatar
unknown committed
914
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1
915 916
    res=$?
    # Some systems require an extra connect
unknown's avatar
unknown committed
917
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1
918 919 920 921 922
    if test $res = 0
    then
      wait_for_pid $pid
    fi
    return $res
923
  fi
unknown's avatar
unknown committed
924 925
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
926
stop_exec $ident $STOP_WAIT_TIMEOUT
unknown's avatar
unknown committed
927 928 929 930
EOF
 abort_if_failed "Could not execute manager command"
}

931 932 933 934 935 936 937 938 939 940 941 942 943 944
start_ndbcluster()
{
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
  then
    echo "Starting ndbcluster"
    if [ "$DO_BENCH" = 1 ]
    then
      NDBCLUSTER_OPTS=""
    else
      NDBCLUSTER_OPTS="--small"
    fi
    ./ndb/ndbcluster --port-base=$NDBCLUSTER_PORT $NDBCLUSTER_OPTS --diskless --initial --data-dir=$MYSQL_TEST_DIR/var || exit 1
945
    NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
946
  else
947 948
    NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
    echo "Using ndbcluster at $NDB_CONNECTSTRING"
949
  fi
950 951
  USE_NDBCLUSTER="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\""
  export NDB_CONNECTSTRING
952 953 954 955 956 957 958 959 960 961 962 963 964 965 966
  fi
}

stop_ndbcluster()
{
 if [ ! -z "$USE_NDBCLUSTER" ]
 then
 if [ -z "$USE_RUNNING_NDBCLUSTER" ]
 then
   # Kill any running ndbcluster stuff
   ./ndb/ndbcluster --data-dir=$MYSQL_TEST_DIR/var --port-base=$NDBCLUSTER_PORT --stop
 fi
 fi
}

unknown's avatar
unknown committed
967 968
# 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
969

unknown's avatar
unknown committed
970 971
start_master()
{
unknown's avatar
unknown committed
972 973
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
unknown's avatar
unknown committed
974 975
    return
  fi
unknown's avatar
unknown committed
976 977 978
  # 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
979
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
unknown's avatar
unknown committed
980 981
  fi

982
  # Remove old master.info and relay-log.info files
unknown's avatar
unknown committed
983
  $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
984 985 986 987 988 989 990 991

  #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
992 993 994 995 996 997 998
  if [ -n "$1" ] ; then
   id=`$EXPR $1 + 101`;
   this_master_myport=`$EXPR $MASTER_MYPORT + $1`
  else
   id=1;
   this_master_myport=$MASTER_MYPORT
  fi
unknown's avatar
unknown committed
999 1000
  if [ -z "$DO_BENCH" ]
  then
unknown's avatar
unknown committed
1001 1002
    master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
  	    --server-id=$id  \
1003
          --basedir=$MY_BASEDIR \
unknown's avatar
unknown committed
1004
          --port=$this_master_myport \
unknown's avatar
unknown committed
1005
          --local-infile \
unknown's avatar
unknown committed
1006 1007
          --exit-info=256 \
          --core \
unknown's avatar
unknown committed
1008
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1009 1010 1011 1012
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
          --log=$MASTER_MYLOG$1 \
unknown's avatar
unknown committed
1013 1014 1015 1016 1017
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1018
	  --open-files-limit=1024 \
1019
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1020 1021 1022
           $SMALL_SERVER \
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
  else
unknown's avatar
unknown committed
1023 1024
    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
1025
          --basedir=$MY_BASEDIR --init-rpl-role=master \
unknown's avatar
unknown committed
1026
          --port=$this_master_myport \
unknown's avatar
unknown committed
1027
          --local-infile \
unknown's avatar
unknown committed
1028 1029 1030
          --datadir=$MASTER_MYDDIR$1 \
          --pid-file=$MASTER_MYPID$1 \
          --socket=$MASTER_MYSOCK$1 \
unknown's avatar
unknown committed
1031 1032 1033
          --character-sets-dir=$CHARSETSDIR \
          --default-character-set=$CHARACTER_SET \
          --core \
unknown's avatar
unknown committed
1034
          $USE_NDBCLUSTER \
unknown's avatar
unknown committed
1035 1036 1037
          --tmpdir=$MYSQL_TMP_DIR \
          --language=$LANGUAGE \
          --innodb_data_file_path=ibdata1:50M \
1038
	   $MASTER_40_ARGS \
unknown's avatar
unknown committed
1039 1040 1041 1042 1043 1044 1045
           $SMALL_SERVER \
           $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
  fi

  CUR_MYERR=$MASTER_MYERR
  CUR_MYSOCK=$MASTER_MYSOCK

unknown's avatar
unknown committed
1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057
  # 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
1058 1059 1060 1061
  if [ x$DO_DDD = x1 ]
  then
    $ECHO "set args $master_args" > $GDB_MASTER_INIT
    manager_launch master ddd -display $DISPLAY --debugger \
1062
    "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
unknown's avatar
unknown committed
1063 1064
  elif [ x$DO_GDB = x1 ]
  then
unknown's avatar
unknown committed
1065 1066 1067 1068
    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:"
1069
      $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
unknown's avatar
unknown committed
1070 1071 1072 1073
      wait_for_master=1500
    else
      ( $ECHO set args $master_args;
      if [ $USE_MANAGER = 0 ] ; then
unknown's avatar
unknown committed
1074
    cat <<EOF
unknown's avatar
unknown committed
1075 1076
b mysql_parse
commands 1
1077
disa 1
unknown's avatar
unknown committed
1078
end
unknown's avatar
unknown committed
1079 1080
r
EOF
unknown's avatar
unknown committed
1081 1082
      fi )  > $GDB_MASTER_INIT
      manager_launch master $XTERM -display $DISPLAY \
1083
      -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
unknown's avatar
unknown committed
1084
    fi
unknown's avatar
unknown committed
1085
  else
1086
    manager_launch master $MASTER_MYSQLD $master_args
unknown's avatar
unknown committed
1087
  fi
unknown's avatar
unknown committed
1088
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
unknown's avatar
unknown committed
1089
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
unknown's avatar
unknown committed
1090
  eval "MASTER$1_RUNNING=1"
unknown's avatar
unknown committed
1091 1092 1093 1094
}

start_slave()
{
unknown's avatar
unknown committed
1095 1096 1097
  [ x$SKIP_SLAVE = x1 ] && return
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  [ x$this_slave_running = 1 ] && return
unknown's avatar
unknown committed
1098 1099
  # 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
1100 1101 1102 1103 1104 1105 1106 1107
  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"
1108
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
unknown's avatar
unknown committed
1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120
   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
1121
  # Remove stale binary logs and old master.info files
unknown's avatar
unknown committed
1122 1123 1124 1125 1126 1127
  # 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
1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138

  #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 \
1139
          --master-password="" \
unknown's avatar
unknown committed
1140 1141 1142 1143 1144 1145 1146 1147 1148 1149
          --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 \
1150
          --relay-log=$MYSQL_TEST_DIR/var/log/$slave_ident-relay-bin \
unknown's avatar
unknown committed
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162
          --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
1163
          --skip-innodb --skip-ndbcluster --skip-slave-start \
unknown's avatar
unknown committed
1164 1165 1166
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
          --report-host=127.0.0.1 --report-user=root \
          --report-port=$slave_port \
1167
          --master-retry-count=10 \
unknown's avatar
unknown committed
1168
          -O slave_net_timeout=10 \
unknown's avatar
unknown committed
1169 1170 1171 1172 1173 1174 1175
           $SMALL_SERVER \
           $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
  CUR_MYERR=$slave_err
  CUR_MYSOCK=$slave_sock

  if [ x$DO_DDD = x1 ]
  then
1176
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1177 1178 1179 1180
    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
1181 1182
    if [ x$MANUAL_GDB = x1 ]
    then
unknown's avatar
unknown committed
1183
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
unknown's avatar
unknown committed
1184
      echo "To start gdb for the slave, type in another window:"
1185
      echo "cd $CWD ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
unknown's avatar
unknown committed
1186 1187
      wait_for_slave=1500
    else
unknown's avatar
unknown committed
1188 1189 1190 1191 1192 1193 1194 1195 1196 1197
      ( $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
1198 1199 1200
      manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
      gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
    fi
unknown's avatar
unknown committed
1201 1202 1203 1204
  else
    manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
  fi
  eval "SLAVE$1_RUNNING=1"
1205
  sleep_until_file_created $slave_pid $wait_for_slave
unknown's avatar
unknown committed
1206
  wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
unknown's avatar
unknown committed
1207 1208
}

unknown's avatar
unknown committed
1209 1210
mysql_start ()
{
unknown's avatar
unknown committed
1211
# We should not start the daemon here as we don't know the arguments
unknown's avatar
unknown committed
1212
# for the test.  Better to let the test start the daemon
unknown's avatar
unknown committed
1213 1214 1215 1216

#  $ECHO "Starting MySQL daemon"
#  start_master
#  start_slave
unknown's avatar
unknown committed
1217
  cd $MYSQL_TEST_DIR
1218
  start_ndbcluster
unknown's avatar
unknown committed
1219
  return 1
unknown's avatar
unknown committed
1220 1221
}

unknown's avatar
unknown committed
1222 1223
stop_slave ()
{
1224 1225 1226
  eval "this_slave_running=\$SLAVE$1_RUNNING"
  slave_ident="slave$1"
  if [ -n "$1" ] ;
unknown's avatar
unknown committed
1227
  then
1228 1229 1230
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
  else
   slave_pid=$SLAVE_MYPID
unknown's avatar
unknown committed
1231
  fi
1232 1233
  if [ x$this_slave_running = x1 ]
  then
1234 1235
    pid=`$CAT $slave_pid`
    manager_term $pid $slave_ident
1236
    if [ $? != 0 ] && [ -f $slave_pid ]
1237
    then # try harder!
1238
      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
1239 1240
      kill $pid
      sleep_until_file_deleted $pid $slave_pid
1241 1242 1243 1244 1245 1246 1247 1248 1249
      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
1250
    fi
1251
    eval "SLAVE$1_RUNNING=0"
unknown's avatar
unknown committed
1252
  fi
unknown's avatar
unknown committed
1253
}
unknown's avatar
unknown committed
1254

1255 1256 1257 1258 1259 1260 1261 1262 1263 1264
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
1265 1266
stop_master ()
{
unknown's avatar
unknown committed
1267 1268
  eval "this_master_running=\$MASTER$1_RUNNING"
  if [ x$this_master_running = x1 ]
unknown's avatar
unknown committed
1269
  then
unknown's avatar
unknown committed
1270 1271 1272
    # 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
1273
      pid=`$CAT $MASTER_MYPID$1`
unknown's avatar
unknown committed
1274
      manager_term $pid master $1
unknown's avatar
Merge  
unknown committed
1275
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
unknown's avatar
unknown committed
1276 1277 1278
      then # try harder!
	$ECHO "master not cooperating with mysqladmin, will try manual kill"
	kill $pid
unknown's avatar
Merge  
unknown committed
1279 1280
	sleep_until_file_deleted $pid $MASTER_MYPID$1
	if [ -f $MASTER_MYPID$1 ] ; then
unknown's avatar
unknown committed
1281
	  $ECHO "master refused to die. Sending SIGKILL"
unknown's avatar
Merge  
unknown committed
1282 1283
	  kill -9 `$CAT $MASTER_MYPID$1`
	  $RM -f $MASTER_MYPID$1
unknown's avatar
unknown committed
1284 1285 1286
	else
	  $ECHO "master responded to SIGTERM "
	fi
1287
      else
unknown's avatar
unknown committed
1288
	sleep $SLEEP_TIME_AFTER_RESTART
1289
      fi
unknown's avatar
unknown committed
1290
    fi
unknown's avatar
unknown committed
1291
    eval "MASTER$1_RUNNING=0"
unknown's avatar
unknown committed
1292 1293
  fi
}
unknown's avatar
unknown committed
1294

unknown's avatar
unknown committed
1295 1296
mysql_stop ()
{
1297 1298
 $ECHO  "Ending Tests"
 $ECHO  "Shutting-down MySQL daemon"
1299
 $ECHO  ""
unknown's avatar
unknown committed
1300
 stop_master
unknown's avatar
unknown committed
1301
 stop_master 1
unknown's avatar
unknown committed
1302
 $ECHO "Master shutdown finished"
unknown's avatar
unknown committed
1303
 stop_slave
1304 1305
 stop_slave 1
 stop_slave 2
unknown's avatar
unknown committed
1306
 $ECHO "Slave shutdown finished"
1307
 stop_ndbcluster
unknown's avatar
unknown committed
1308
 return 1
unknown's avatar
unknown committed
1309 1310
}

unknown's avatar
unknown committed
1311 1312 1313 1314 1315
mysql_restart ()
{
  mysql_stop
  mysql_start
  return 1
unknown's avatar
unknown committed
1316 1317 1318
}

mysql_loadstd () {
unknown's avatar
unknown committed
1319 1320

    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
unknown's avatar
unknown committed
1321 1322 1323
    return 1
}

unknown's avatar
unknown committed
1324 1325 1326
run_testcase ()
{
 tf=$1
unknown's avatar
unknown committed
1327
 tname=`$BASENAME $tf .test`
unknown's avatar
unknown committed
1328 1329
 master_opt_file=$TESTDIR/$tname-master.opt
 slave_opt_file=$TESTDIR/$tname-slave.opt
1330 1331
 master_init_script=$TESTDIR/$tname-master.sh
 slave_init_script=$TESTDIR/$tname-slave.sh
1332
 slave_master_info_file=$TESTDIR/$tname.slave-mi
unknown's avatar
unknown committed
1333 1334
 tsrcdir=$TESTDIR/$tname-src
 result_file="r/$tname.result"
1335
 echo $tname > $CURRENT_TEST
unknown's avatar
unknown committed
1336
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
unknown's avatar
unknown committed
1337 1338 1339
 if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then
   result_file="$result_file$RESULT_EXT"
 fi
1340
 if [ "$USE_MANAGER" = 1 ] ; then
1341 1342 1343 1344 1345
   many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)`
 fi
 if $EXPR "$tname" '<' "$START_FROM" > /dev/null ; then
   #skip_test $tname
   return
unknown's avatar
unknown committed
1346 1347
 fi

1348 1349 1350 1351
 if [ "$SKIP_TEST" ] ; then
   if $EXPR \( "$tname" : "$SKIP_TEST" \) > /dev/null ; then
     skip_test $tname
     return
unknown's avatar
unknown committed
1352
   fi
1353
 fi
1354

1355 1356
 if [ "$DO_TEST" ] ; then
   if $EXPR \( "$tname" : "$DO_TEST" \) > /dev/null ; then
unknown's avatar
unknown committed
1357
     : #empty command to keep some shells happy
1358 1359 1360
   else
     #skip_test $tname
     return
1361
   fi
1362
 fi
1363

1364 1365
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; then
   skip_test $tname
1366 1367 1368
   return
 fi

unknown's avatar
unknown committed
1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407
 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 \
	"bdb-deadlock" \
	"connect" \
	"flush_block_commit" \
	"grant2" \
	"grant_cache" \
	"grant" \
	"init_connect" \
	"innodb-deadlock" \
	"innodb-lock" \
	"mix_innodb_myisam_binlog" \
	"mysqlbinlog2" \
	"mysqlbinlog" \
	"mysqldump" \
	"mysql_protocols" \
	"ps_1general" \
	"rename" \
	"show_check" \
        "system_mysql_db_fix" \
	"user_var" \
	"variables"
   do
     if [ "$tname" = "$t" ] ; then
       skip_test $tname
       return
     fi
   done
 fi
1408

1409
 if [ -z "$USE_RUNNING_SERVER" ] ;
unknown's avatar
unknown committed
1410
 then
1411 1412
   if [ -f $master_opt_file ] ;
   then
unknown's avatar
unknown committed
1413
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1414 1415 1416 1417 1418 1419 1420
     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=" "
	 ;;
1421 1422
       --result-file=*)
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
unknown's avatar
unknown committed
1423 1424 1425 1426
         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
1427 1428 1429
	 # Note that this must be set to space, not "" for test-reset to work
	 EXTRA_MASTER_OPT=" "
         ;;
1430
     esac
1431
     stop_master
unknown's avatar
unknown committed
1432
     stop_master 1
unknown's avatar
unknown committed
1433
     echo "CURRENT_TEST: $tname" >> $MASTER_MYERR
1434
     start_master
unknown's avatar
unknown committed
1435
     if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1436 1437
       start_master 1
     fi
1438
     TZ=$MY_TZ; export TZ
1439
   else
unknown's avatar
unknown committed
1440 1441 1442 1443 1444
     # 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 ]
1445 1446 1447
     then
       EXTRA_MASTER_OPT=""
       stop_master
unknown's avatar
unknown committed
1448
       stop_master 1
unknown's avatar
unknown committed
1449
       echo "CURRENT_TEST: $tname" >> $MASTER_MYERR
1450
       start_master
unknown's avatar
unknown committed
1451
       if [ -n "$USE_NDBCLUSTER"  -a -z "$DO_BENCH" ] ; then
unknown's avatar
unknown committed
1452 1453
         start_master 1
       fi
unknown's avatar
unknown committed
1454 1455
     else
       echo "CURRENT_TEST: $tname" >> $MASTER_MYERR
unknown's avatar
unknown committed
1456
     fi
1457
   fi
unknown's avatar
unknown committed
1458

unknown's avatar
unknown committed
1459 1460 1461 1462
   # 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 ] ;
1463
     then
unknown's avatar
unknown committed
1464
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
unknown's avatar
unknown committed
1465
       do_slave_restart=1
unknown's avatar
unknown committed
1466 1467 1468 1469 1470 1471
     else
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
      then
	EXTRA_SLAVE_OPT=""
	do_slave_restart=1
      fi
unknown's avatar
unknown committed
1472
     fi
1473

unknown's avatar
unknown committed
1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
     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
1496
   fi
unknown's avatar
fixed  
unknown committed
1497
 fi
1498
 cd $MYSQL_TEST_DIR
unknown's avatar
unknown committed
1499

unknown's avatar
unknown committed
1500
 if [ -f $tf ] ; then
unknown's avatar
unknown committed
1501
    $RM -f r/$tname.*reject
unknown's avatar
unknown committed
1502
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1503
    if [ -z "$DO_CLIENT_GDB" ] ; then
1504
      `$MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1505
    else
1506
      do_gdb_test "$mysql_test_args" "$tf"
1507
    fi
unknown's avatar
unknown committed
1508

unknown's avatar
unknown committed
1509 1510
    res=$?

1511
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1512
    RES="$pname"
unknown's avatar
unknown committed
1513

1514 1515 1516 1517
    if [ x$many_slaves = x1 ] ; then
     stop_slave 1
     stop_slave 2
    fi
unknown's avatar
unknown committed
1518

unknown's avatar
unknown committed
1519
    if [ $res = 0 ]; then
1520 1521
      total_inc
      pass_inc
unknown's avatar
unknown committed
1522
      TIMER=""
unknown's avatar
unknown committed
1523
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
unknown's avatar
unknown committed
1524 1525 1526 1527
	TIMER=`cat $MY_LOG_DIR/timer`
	TIMER=`$PRINTF "%13s" $TIMER`
      fi
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1528
    else
1529
      # why the following ``if'' ? That is why res==1 is special ?
1530 1531 1532 1533
      if [ $res = 2 ]; then
        skip_inc
	$ECHO "$RES$RES_SPACE [ skipped ]"
      else
1534 1535 1536
        if [ $res -gt 2 ]; then
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
        fi
1537
	total_inc
unknown's avatar
unknown committed
1538
        fail_inc
1539
	$ECHO "$RES$RES_SPACE [ fail ]"
1540 1541
        $ECHO
	error_is
unknown's avatar
unknown committed
1542
	show_failed_diff $tname
unknown's avatar
unknown committed
1543
	$ECHO
1544
	if [ x$FORCE != x1 ] ; then
1545
	 $ECHO "Aborting: $tname failed. To continue, re-run with '--force'."
1546
	 $ECHO
unknown's avatar
unknown committed
1547 1548
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	    [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1549 1550
	 then
	   mysql_stop
unknown's avatar
unknown committed
1551
	   stop_manager
unknown's avatar
unknown committed
1552
   	 fi
1553 1554
	 exit 1
	fi
unknown's avatar
unknown committed
1555
	FAILED_CASES="$FAILED_CASES $tname"
unknown's avatar
unknown committed
1556 1557
        if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && \
	   [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
unknown's avatar
unknown committed
1558 1559 1560
	then
	  mysql_restart
	fi
1561
	$ECHO "Resuming Tests"
1562
	$ECHO ""
1563
      fi
unknown's avatar
unknown committed
1564
    fi
1565
  fi
unknown's avatar
unknown committed
1566 1567
}

unknown's avatar
unknown committed
1568 1569 1570 1571
######################################################################
# Main script starts here
######################################################################

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

unknown's avatar
unknown committed
1574 1575
[ "$DO_GCOV" ] && gcov_prepare
[ "$DO_GPROF" ] && gprof_prepare
unknown's avatar
unknown committed
1576

1577 1578
if [ -z "$USE_RUNNING_SERVER" ]
then
1579 1580 1581 1582
  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
1583
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1584 1585
    $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
1586
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
1587 1588 1589
    $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
1590
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
1591 1592
    sleep_until_file_deleted 0 $SLAVE_MYPID
  else
1593
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
1594
  fi
unknown's avatar
unknown committed
1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607

  # 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
1608
  stop_ndbcluster
unknown's avatar
unknown committed
1609

unknown's avatar
unknown committed
1610
  # Remove files that can cause problems
1611
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
unknown's avatar
unknown committed
1612 1613
  $RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*

1614 1615
  # Remove old berkeley db log files that can confuse the server
  $RM -f $MASTER_MYDDIR/log.*
unknown's avatar
unknown committed
1616
  $RM -f $MASTER_MYDDIR"1"/log.*
1617

unknown's avatar
unknown committed
1618 1619
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
1620 1621
  $ECHO "Installing Test Databases"
  mysql_install_db
unknown's avatar
unknown committed
1622

unknown's avatar
unknown committed
1623
  start_manager
unknown's avatar
unknown committed
1624

unknown's avatar
unknown committed
1625
# Do not automagically start daemons if we are in gdb or running only one test
unknown's avatar
unknown committed
1626
# case
1627 1628 1629 1630 1631 1632
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
  then
    mysql_start
  fi
  $ECHO  "Loading Standard Test Databases"
  mysql_loadstd
unknown's avatar
unknown committed
1633 1634
fi

1635 1636 1637 1638
if [ "x$START_AND_EXIT" = "x1" ] ; then
 echo "Servers started, exiting"
 exit
fi
unknown's avatar
unknown committed
1639

1640
$ECHO  "Starting Tests"
unknown's avatar
unknown committed
1641

1642 1643 1644
#
# This can probably be deleted
#
unknown's avatar
unknown committed
1645 1646
if [ "$DO_BENCH" = 1 ]
then
1647 1648
  start_master

1649 1650 1651 1652 1653
  if [ "$DO_SMALL_BENCH" = 1 ]
  then
    EXTRA_BENCH_ARGS="--small-test --small-tables"
  fi

1654 1655
  if [ ! -z "$USE_NDBCLUSTER" ]
  then
1656
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
1657 1658
  fi 

unknown's avatar
unknown committed
1659 1660 1661 1662
  BENCHDIR=$BASEDIR/sql-bench/
  savedir=`pwd`
  cd $BENCHDIR
  if [ -z "$1" ]
unknown's avatar
unknown committed
1663
  then
1664
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
unknown's avatar
unknown committed
1665
  else
unknown's avatar
unknown committed
1666 1667
    if [ -x "./$1" ]
    then
1668
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
unknown's avatar
unknown committed
1669 1670 1671
    else
      echo "benchmark $1 not found"
    fi
unknown's avatar
unknown committed
1672
  fi
unknown's avatar
unknown committed
1673 1674 1675 1676
  cd $savedir
  mysql_stop
  stop_manager
  exit
unknown's avatar
unknown committed
1677 1678
fi

unknown's avatar
unknown committed
1679
$ECHO
unknown's avatar
unknown committed
1680
if [ x$USE_TIMER = x1 ] ; then
unknown's avatar
unknown committed
1681
$ECHO "TEST                            RESULT        TIME (ms)"
unknown's avatar
unknown committed
1682 1683 1684
else
$ECHO "TEST                            RESULT"
fi
unknown's avatar
unknown committed
1685 1686
$ECHO $DASH72

unknown's avatar
unknown committed
1687
if [ -z "$1" ] ;
unknown's avatar
unknown committed
1688
then
1689 1690 1691
  if [ x$RECORD = x1 ]; then
    $ECHO "Will not run in record mode without a specific test case."
  else
1692 1693 1694 1695
    for tf in $TESTDIR/*.$TESTSUFFIX
    do
      run_testcase $tf
    done
1696 1697
    $RM -f $TIMEFILE	# Remove for full test
  fi
unknown's avatar
unknown committed
1698
else
unknown's avatar
unknown committed
1699 1700 1701 1702 1703 1704 1705 1706 1707 1708
  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
1709
fi
unknown's avatar
unknown committed
1710

unknown's avatar
unknown committed
1711 1712
$ECHO $DASH72
$ECHO
1713

1714
if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
unknown's avatar
unknown committed
1715 1716 1717
then
    mysql_stop
fi
unknown's avatar
unknown committed
1718
stop_manager
unknown's avatar
unknown committed
1719
report_stats
unknown's avatar
unknown committed
1720
$ECHO
unknown's avatar
unknown committed
1721

unknown's avatar
unknown committed
1722
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
unknown's avatar
unknown committed
1723
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
unknown's avatar
unknown committed
1724

unknown's avatar
unknown committed
1725 1726 1727 1728 1729 1730 1731
if [ $TOT_FAIL -ne 0 ]; then
  $ECHO "mysql-test-run: *** Failing the test(s):$FAILED_CASES"
  $ECHO
  exit 1
else
  exit 0
fi