~mathiaz/ubuntu/lucid/mysql-dfsg-5.1/zap-bug-552053

« back to all changes in this revision

Viewing changes to mysql-test/mysql-test-run-shell.sh

  • Committer: Bazaar Package Importer
  • Author(s): Mathias Gug
  • Date: 2009-06-25 12:55:45 UTC
  • mfrom: (1.1.2 upstream) (0.1.3 experimental)
  • Revision ID: james.westby@ubuntu.com-20090625125545-m8ogs96zzsri74xe
Tags: 5.1.34-1ubuntu1
* Merge from debian experimental (and 5.0 from main), remaining changes:
  - debian/mysql-server-5.1.config:
    + ask for MySQL root password at priority high instead of medium so
      that the password prompt is seen on a default install. (LP: #319843)
    + don't ask for root password when upgrading from a 5.0 install.
  - debian/control:
    + Make libmysqlclient16-dev a transitional package depending on
      libmysqlclient-dev.
    + Make libmysqlclient-dev conflict with libmysqlclient15-dev.
    + Don't build mysql-server, mysql-client, mysql-common and
      libmysqlclient15-dev binary packages since they're still provided
      by mysql-dfsg-5.0.
    + Make mysql-{client,server}-5.1 packages conflict and
      replace mysql-{client,server}-5.0, but not provide
      mysql-{client,server}.
    + Depend on a specific version of mysql-common rather than the src
      version of mysql-dfsg-5.1 since mysql-common is currently part of
      mysql-dfsg-5.0.
    + Lower mailx from a Recommends to a Suggests to avoid pulling in
      a full MTA on all installs of mysql-server. (LP: #259477)
  - debian/rules:
    + added -fno-strict-aliasing to CFLAGS to get around mysql testsuite
      build failures.
    + install mysql-test and sql-bench to /usr/share/mysql/ rather than
      /usr/.
  - debian/additions/debian-start.inc.sh: support ANSI mode (LP: #310211)
  - Add AppArmor profile:
    - debian/apparmor-profile: apparmor profile.
    - debian/rules, debian/mysql-server-5.0.files: install apparmor profile.
    - debian/mysql-server-5.0.dirs: add etc/apparmor.d/force-complain
    - debian/mysql-server-5.0.postrm: remove symlink in force-complain/ on
      purge.
    - debian/mysql-server-5.1.README.Debian: add apparmor documentation.
    - debian/additions/my.cnf: Add warning about apparmor. (LP: #201799)
    - debian/mysql-server-5.1.postinst: reload apparmor profiles.
  - debian/additions/my.cnf: remove language option. Error message files are
    located in a different directory in MySQL 5.0. Setting the language
    option to use /usr/share/mysql/english breaks 5.0. Both 5.0 and 5.1
    use a default value that works. (LP: #316974)
  - debian/mysql-server-5.1.mysql.init:
    + Clearly indicate that we do not support running multiple instances
      of mysqld by duplicating the init script.
      (closes: #314785, #324834, #435165, #444216)
    + Properly parameterize all existing references to the mysql config
      file (/etc/mysql/my.cnf).
  - debian/mysql-server-5.0.postinst: Clear out the second password
    when setting up mysql. (LP: #344816)
  - mysql-server-core-5.1 package for files needed by Akonadi:
    + debian/control: create mysql-server-core-5.1 package.
    + debian/mysql-server-core-5.1.files, debian/mysql-server-5.1.files:
      move core mysqld files to mysql-server-core-5.1 package.
  - Don't package sql-bench and mysql-test file.
* Dropped changes:
  - debian/patches/92_ssl_test_cert.dpatch: certificate expiration in
    test suite (LP: #323755). Included upstream.
* Dropped from 5.0:
  - apparmor profile:
    - debian/control: Recommends apparmor >= 2.1+1075-0ubuntu6. All version
      of apparmor-profile (>hardy) are higher than this version.
    - debian/mysql-server-5.0.preinst: create symlink for force-complain/
      on pre-feisty upgrades, upgrades where apparmor-profiles profile is
      unchanged (ie non-enforcing) and upgrades where the profile
      doesn't exist. Support for pre-hardy upgrades is no longer needed.
* debian/mysql-server-5.1.postinst: fix debian-sys-maint user creation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/sh
2
 
# mysql-test-run - originally written by Matt Wagner <matt@mysql.com>
3
 
# modified by Sasha Pachev <sasha@mysql.com>
4
 
# Slightly updated by Monty
5
 
# Cleaned up again by Matt
6
 
# Fixed by Sergei
7
 
# List of failed cases (--force) backported from 4.1 by Joerg
8
 
# :-)
9
 
 
10
 
#echo "##################################################";
11
 
#echo "This script is deprecated and will soon be removed";
12
 
#echo "Use mysql-test-run.pl instead";
13
 
#echo "##################################################";
14
 
#echo
15
 
 
16
 
#++
17
 
# Access Definitions
18
 
#--
19
 
DB=test
20
 
DBPASSWD=""
21
 
VERBOSE=""
22
 
USE_MANAGER=0
23
 
MY_TZ=GMT-3
24
 
TZ=$MY_TZ; export TZ # for UNIX_TIMESTAMP tests to work
25
 
LOCAL_SOCKET=@MYSQL_UNIX_ADDR@
26
 
 
27
 
if [ -z "$MYSQL_TCP_PORT" ]; then
28
 
  MYSQL_TCP_PORT=@MYSQL_TCP_PORT@
29
 
  if [ @MYSQL_TCP_PORT_DEFAULT@ -eq 0 ]; then
30
 
    ESP=`getent services mysql/tcp`
31
 
    if [ $? -eq 0 ]; then
32
 
      MYSQL_TCP_PORT=`echo "$ESP"|sed -e's-^[a-z]*[ ]*\([0-9]*\)/[a-z]*$-\1-g'`
33
 
    fi
34
 
  fi
35
 
fi
36
 
 
37
 
umask 022
38
 
 
39
 
# For query_cache test
40
 
case `uname` in
41
 
    SCO_SV | UnixWare | OpenUNIX )
42
 
        # do nothing (Causes strange behavior)
43
 
        ;;
44
 
    QNX)
45
 
        # do nothing (avoid error message)
46
 
        ;;
47
 
    * )
48
 
        ulimit -n 1024
49
 
        ;;
50
 
esac
51
 
 
52
 
#++
53
 
# Program Definitions
54
 
#--
55
 
 
56
 
LC_COLLATE=C
57
 
export LC_COLLATE
58
 
PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$PATH
59
 
MASTER_40_ARGS="--rpl-recovery-rank=1 --init-rpl-role=master"
60
 
 
61
 
# Standard functions
62
 
 
63
 
which ()
64
 
{
65
 
  IFS="${IFS=   }"; save_ifs="$IFS"; IFS=':'
66
 
  for file
67
 
  do
68
 
    for dir in $PATH
69
 
    do
70
 
      if test -f $dir/$file
71
 
      then
72
 
        echo "$dir/$file"
73
 
        continue 2
74
 
      fi
75
 
    done
76
 
    echo "Fatal error: Cannot find program $file in $PATH" 1>&2
77
 
    exit 1
78
 
  done
79
 
  IFS="$save_ifs"
80
 
  exit 0
81
 
}
82
 
 
83
 
 
84
 
sleep_until_file_deleted ()
85
 
{
86
 
  pid=$1;
87
 
  file=$2
88
 
  loop=$SLEEP_TIME_FOR_DELETE
89
 
  while (test $loop -gt 0)
90
 
  do
91
 
    if [ ! -r $file ]
92
 
    then
93
 
      if test $pid != "0"
94
 
      then
95
 
        wait_for_pid $pid
96
 
      fi
97
 
      return
98
 
    fi
99
 
    sleep 1
100
 
    loop=`expr $loop - 1`
101
 
  done
102
 
}
103
 
 
104
 
sleep_until_file_created ()
105
 
{
106
 
  file=$1
107
 
  loop=$2
108
 
  org_time=$2
109
 
  while (test $loop -gt 0)
110
 
  do
111
 
    if [ -r $file ]
112
 
    then
113
 
      return 0
114
 
    fi
115
 
    sleep 1
116
 
    loop=`expr $loop - 1`
117
 
  done
118
 
  echo "ERROR: $file was not created in $org_time seconds;  Aborting"
119
 
  exit 1;
120
 
}
121
 
 
122
 
# For the future
123
 
 
124
 
wait_for_pid()
125
 
{
126
 
  pid=$1
127
 
  #$WAIT_PID pid $SLEEP_TIME_FOR_DELETE
128
 
}
129
 
 
130
 
# Check that valgrind is installed
131
 
find_valgrind()
132
 
{
133
 
  FIND_VALGRIND=`which valgrind` # this will print an error if not found
134
 
  # Give good warning to the user and stop
135
 
  if [ -z "$FIND_VALGRIND" ] ; then
136
 
    $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 ."
137
 
    exit 1
138
 
  fi
139
 
  # >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
140
 
  valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && FIND_VALGRIND="$FIND_VALGRIND --tool=memcheck"
141
 
  FIND_VALGRIND="$FIND_VALGRIND --alignment=8 --leak-check=yes --num-callers=16 --suppressions=$MYSQL_TEST_DIR/valgrind.supp"
142
 
}
143
 
 
144
 
# No paths below as we can't be sure where the program is!
145
 
 
146
 
SED=sed
147
 
 
148
 
BASENAME=`which basename`
149
 
if test $? != 0; then exit 1; fi
150
 
DIFF=`which diff | $SED q`
151
 
if test $? != 0; then exit 1; fi
152
 
CAT=cat
153
 
CUT=cut
154
 
HEAD=head
155
 
TAIL=tail
156
 
ECHO=echo # use internal echo if possible
157
 
EXPR=expr # use internal if possible
158
 
FIND=find
159
 
GREP=grep
160
 
if test $? != 0; then exit 1; fi
161
 
PRINTF=printf
162
 
RM=rm
163
 
if test $? != 0; then exit 1; fi
164
 
TR=tr
165
 
XARGS=`which xargs`
166
 
if test $? != 0; then exit 1; fi
167
 
SORT=sort
168
 
 
169
 
# Are we using a source or a binary distribution?
170
 
 
171
 
testdir=@testdir@
172
 
if [ -d bin/mysqld ] && [ -d mysql-test ] ; then
173
 
 cd mysql-test
174
 
else
175
 
 if [ -d $testdir/mysql-test ] ; then
176
 
   cd $testdir
177
 
 fi
178
 
fi
179
 
 
180
 
if [ ! -f ./mysql-test-run ] ; then
181
 
  $ECHO "Can't find the location for the mysql-test-run script"
182
 
 
183
 
  $ECHO "Go to to the mysql-test directory and execute the script as follows:"
184
 
  $ECHO "./mysql-test-run."
185
 
  exit 1
186
 
fi
187
 
 
188
 
#++
189
 
# Misc. Definitions
190
 
#--
191
 
 
192
 
# BASEDIR is always above mysql-test directory ...
193
 
MYSQL_TEST_DIR=`pwd`
194
 
cd ..
195
 
 
196
 
if [ -d ./sql ] ; then
197
 
   SOURCE_DIST=1
198
 
else
199
 
   BINARY_DIST=1
200
 
 
201
 
  # ... one level for tar.gz, two levels for a RPM installation
202
 
  if [ ! -f ./bin/mysql_upgrade ] ; then
203
 
     # Has to be RPM installation
204
 
    cd ..
205
 
  fi
206
 
fi
207
 
BASEDIR=`pwd`
208
 
 
209
 
cd $MYSQL_TEST_DIR
210
 
MYSQL_TEST_WINDIR=$MYSQL_TEST_DIR
211
 
MYSQLTEST_VARDIR=$MYSQL_TEST_DIR/var
212
 
export MYSQL_TEST_DIR MYSQL_TEST_WINDIR MYSQLTEST_VARDIR
213
 
STD_DATA=$MYSQL_TEST_DIR/std_data
214
 
hostname=`hostname`             # Installed in the mysql privilege table
215
 
 
216
 
MANAGER_QUIET_OPT="-q"
217
 
TESTDIR="$MYSQL_TEST_DIR/t"
218
 
TESTSUFFIX=test
219
 
TOT_SKIP=0
220
 
TOT_PASS=0
221
 
TOT_FAIL=0
222
 
TOT_TEST=0
223
 
GOT_WARNINGS=0
224
 
USERT=0
225
 
SYST=0
226
 
REALT=0
227
 
FAST_START=""
228
 
MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
229
 
export MYSQL_TMP_DIR
230
 
 
231
 
# Use a relative path for where the slave will find the dumps
232
 
# generated by "LOAD DATA" on the master. The path is relative
233
 
# since it must have fixed length to test logging
234
 
# i.e otherwise the output from "SHOW MASTER STATUS" will vary
235
 
# with the strlen() of MYSQL_TEST_DIR
236
 
SLAVE_LOAD_TMPDIR=../tmp
237
 
 
238
 
RES_SPACE="      "
239
 
MYSQLD_SRC_DIRS="strings mysys include extra regex myisam \
240
 
 myisammrg heap sql"
241
 
MY_LOG_DIR="$MYSQL_TEST_DIR/var/log" 
242
 
#
243
 
# Set LD_LIBRARY_PATH if we are using shared libraries
244
 
#
245
 
LD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$BASEDIR/libmysql_r/.libs:$BASEDIR/zlib/.libs:$LD_LIBRARY_PATH"
246
 
DYLD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$BASEDIR/libmysql_r/.libs:$BASEDIR/zlib/.libs:$DYLD_LIBRARY_PATH"
247
 
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH
248
 
 
249
 
#
250
 
# Allow anyone in the group to see the generated database files
251
 
#
252
 
UMASK=0660
253
 
UMASK_DIR=0770
254
 
export UMASK UMASK_DIR
255
 
 
256
 
MASTER_RUNNING=0
257
 
MASTER1_RUNNING=0
258
 
MASTER_MYHOST=127.0.0.1
259
 
MASTER_MYPORT=9306
260
 
SLAVE_RUNNING=0
261
 
SLAVE_MYHOST=127.0.0.1
262
 
SLAVE_MYPORT=9308 # leave room for 2 masters for cluster tests
263
 
MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log
264
 
NDBCLUSTER_PORT=9350
265
 
NDBCLUSTER_PORT_SLAVE=9358
266
 
 
267
 
#
268
 
# To make it easier for different devs to work on the same host,
269
 
# an environment variable can be used to control all ports. A small
270
 
# number is to be used, 0 - 16 or similar.
271
 
#
272
 
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
273
 
# versions of this script, else a 4.0 test run might conflict with a
274
 
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
275
 
# all port numbers might not be used in this version of the script.
276
 
#
277
 
if [ -n "$MTR_BUILD_THREAD" ] ; then
278
 
  MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 10 + 10000`
279
 
  SLAVE_MYPORT=`expr $MASTER_MYPORT + 3`
280
 
  NDBCLUSTER_PORT=`expr $MASTER_MYPORT + 6`
281
 
  NDBCLUSTER_PORT_SLAVE=`expr $MASTER_MYPORT + 7`
282
 
 
283
 
  echo "Using MTR_BUILD_THREAD      = $MTR_BUILD_THREAD"
284
 
  echo "Using MASTER_MYPORT         = $MASTER_MYPORT"
285
 
  echo "Using SLAVE_MYPORT          = $SLAVE_MYPORT"
286
 
  echo "Using NDBCLUSTER_PORT       = $NDBCLUSTER_PORT"
287
 
  echo "Using NDBCLUSTER_PORT_SLAVE = $NDBCLUSTER_PORT_SLAVE"
288
 
fi
289
 
 
290
 
NO_SLAVE=0
291
 
USER_TEST=
292
 
FAILED_CASES=
293
 
 
294
 
EXTRA_MASTER_OPT=""
295
 
EXTRA_MYSQL_TEST_OPT=""
296
 
EXTRA_MYSQLCHECK_OPT=""
297
 
EXTRA_MYSQLDUMP_OPT=""
298
 
EXTRA_MYSQLSLAP_OPT=""
299
 
EXTRA_MYSQLSHOW_OPT=""
300
 
EXTRA_MYSQLBINLOG_OPT=""
301
 
USE_RUNNING_SERVER=0
302
 
USE_NDBCLUSTER=@USE_NDBCLUSTER@
303
 
USE_NDBCLUSTER_SLAVE=@USE_NDBCLUSTER@
304
 
USE_NDBCLUSTER_ALL=0
305
 
USE_NDBCLUSTER_ONLY=0
306
 
USE_RUNNING_NDBCLUSTER=""
307
 
USE_RUNNING_NDBCLUSTER_SLAVE=""
308
 
NDB_EXTRA_TEST=0
309
 
NDB_VERBOSE=0
310
 
NDBCLUSTER_EXTRA_OPTS=""
311
 
USE_PURIFY=""
312
 
PURIFY_LOGS=""
313
 
DO_GCOV=""
314
 
DO_GDB=""
315
 
MANUAL_GDB=""
316
 
DO_DDD=""
317
 
DO_CLIENT_GDB=""
318
 
SLEEP_TIME_AFTER_RESTART=1
319
 
SLEEP_TIME_FOR_DELETE=10
320
 
SLEEP_TIME_FOR_FIRST_MASTER=400         # Enough time to create innodb tables
321
 
SLEEP_TIME_FOR_SECOND_MASTER=400
322
 
SLEEP_TIME_FOR_FIRST_SLAVE=400
323
 
SLEEP_TIME_FOR_SECOND_SLAVE=300
324
 
CHARACTER_SET=latin1
325
 
DBUSER=""
326
 
START_WAIT_TIMEOUT=10
327
 
STOP_WAIT_TIMEOUT=10
328
 
MYSQL_TEST_SSL_OPTS=""
329
 
USE_TIMER=""
330
 
USE_EMBEDDED_SERVER=""
331
 
TEST_MODE=""
332
 
 
333
 
NDB_MGM_EXTRA_OPTS=
334
 
NDB_MGMD_EXTRA_OPTS=
335
 
NDBD_EXTRA_OPTS=
336
 
MASTER_MYSQLDBINLOG=1
337
 
SLAVE_MYSQLDBINLOG=1
338
 
 
339
 
DO_STRESS=""
340
 
STRESS_SUITE="main"
341
 
STRESS_MODE="random"
342
 
STRESS_THREADS=5
343
 
STRESS_TEST_COUNT=""
344
 
STRESS_LOOP_COUNT=""
345
 
STRESS_TEST_DURATION=""
346
 
STRESS_INIT_FILE=""
347
 
STRESS_TEST_FILE=""
348
 
STRESS_TEST=""
349
 
 
350
 
$ECHO "Logging: $0 $*"   # To ensure we see all arguments in the output, for the test analysis tool
351
 
 
352
 
while test $# -gt 0; do
353
 
  case "$1" in
354
 
    --embedded-server)
355
 
      USE_EMBEDDED_SERVER=1
356
 
      USE_MANAGER=0 NO_SLAVE=1
357
 
      USE_RUNNING_SERVER=0
358
 
      USE_NDBCLUSTER=""
359
 
      USE_NDBCLUSTER_SLAVE=""
360
 
      TEST_MODE="$TEST_MODE embedded" ;;
361
 
    --purify)
362
 
      USE_PURIFY=1
363
 
      USE_MANAGER=0
364
 
      USE_RUNNING_SERVER=0
365
 
      TEST_MODE="$TEST_MODE purify" ;;
366
 
    --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
367
 
    --force)  FORCE=1 ;;
368
 
    --timer)  USE_TIMER=1 ;;
369
 
    --old-master) MASTER_40_ARGS="";;
370
 
    --master-binary=*)
371
 
      MASTER_MYSQLD=`$ECHO "$1" | $SED -e "s;--master-binary=;;"` ;;
372
 
    --slave-binary=*)
373
 
      SLAVE_MYSQLD=`$ECHO "$1" | $SED -e "s;--slave-binary=;;"` ;;
374
 
    --local)   USE_RUNNING_SERVER=0 ;;
375
 
    --extern)  USE_RUNNING_SERVER=1 ;;
376
 
    --with-ndbcluster)
377
 
      USE_NDBCLUSTER="--ndbcluster" ;;
378
 
    --with-ndbcluster-slave)
379
 
      USE_NDBCLUSTER_SLAVE="--ndbcluster" ;;
380
 
    --with-ndbcluster-all)
381
 
      USE_NDBCLUSTER="--ndbcluster"
382
 
      USE_NDBCLUSTER_SLAVE="--ndbcluster"
383
 
      USE_NDBCLUSTER_ALL=1 ;;
384
 
    --with-ndbcluster-only)
385
 
      USE_NDBCLUSTER="--ndbcluster"
386
 
      USE_NDBCLUSTER_SLAVE="--ndbcluster"
387
 
      USE_NDBCLUSTER_ONLY=1 ;;
388
 
    --ndb-connectstring=*)
389
 
      USE_NDBCLUSTER="--ndbcluster" ;
390
 
      USE_RUNNING_NDBCLUSTER=`$ECHO "$1" | $SED -e "s;--ndb-connectstring=;;"` ;;
391
 
    --ndb-connectstring-slave=*)
392
 
      USE_NDBCLUSTER_SLAVE="--ndbcluster" ;
393
 
      USE_RUNNING_NDBCLUSTER_SLAVE=`$ECHO "$1" | $SED -e "s;--ndb-connectstring-slave=;;"` ;;
394
 
    --ndb-extra-test)
395
 
      NDBCLUSTER_EXTRA_OPTS=" "
396
 
      NDB_EXTRA_TEST=1 ;
397
 
      ;;
398
 
    --ndb-verbose)
399
 
      NDB_VERBOSE=2 ;;
400
 
    --ndb_mgm-extra-opts=*)
401
 
      NDB_MGM_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgm-extra-opts=;;"` ;;
402
 
    --ndb_mgmd-extra-opts=*)
403
 
      NDB_MGMD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgmd-extra-opts=;;"` ;;
404
 
    --ndbd-extra-opts=*)
405
 
      NDBD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndbd-extra-opts=;;"` ;;
406
 
    --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
407
 
    --local-master)
408
 
      MASTER_MYPORT=3306;
409
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --host=127.0.0.1 \
410
 
      --port=$MYSQL_MYPORT"
411
 
      LOCAL_MASTER=1 ;;
412
 
    --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
413
 
    --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;;
414
 
    --ndbcluster_port=*) NDBCLUSTER_PORT=`$ECHO "$1" | $SED -e "s;--ndbcluster_port=;;"` ;;
415
 
    --ndbcluster-port=*) NDBCLUSTER_PORT=`$ECHO "$1" | $SED -e "s;--ndbcluster-port=;;"` ;;
416
 
    --ndbcluster-port-slave=*) NDBCLUSTER_PORT_SLAVE=`$ECHO "$1" | $SED -e "s;--ndbcluster-port-slave=;;"` ;;
417
 
    --with-openssl)
418
 
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
419
 
     --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem \
420
 
     --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert.pem \
421
 
     --ssl-key=$MYSQL_TEST_DIR/std_data/server-key.pem"
422
 
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
423
 
     --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem \
424
 
     --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert.pem \
425
 
     --ssl-key=$MYSQL_TEST_DIR/std_data/server-key.pem"
426
 
     MYSQL_TEST_SSL_OPTS="--ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem \
427
 
     --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem \
428
 
     --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem" ;;
429
 
    --start-and-exit)
430
 
     START_AND_EXIT=1
431
 
     ;;
432
 
    --socket=*) LOCAL_SOCKET=`$ECHO "$1" | $SED -e "s;--socket=;;"` ;;
433
 
    --skip-rpl) NO_SLAVE=1 ;;
434
 
    --skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
435
 
    --do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
436
 
    --start-from=* ) START_FROM=`$ECHO "$1" | $SED -e "s;--start-from=;;"` ;;
437
 
    --warnings | --log-warnings)
438
 
     EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --log-warnings"
439
 
     EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --log-warnings"
440
 
     ;;
441
 
    --wait-timeout=*)
442
 
     START_WAIT_TIMEOUT=`$ECHO "$1" | $SED -e "s;--wait-timeout=;;"`
443
 
     STOP_WAIT_TIMEOUT=$START_WAIT_TIMEOUT;;
444
 
    --record)
445
 
      RECORD=1;
446
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
447
 
    --small-bench)
448
 
      DO_SMALL_BENCH=1
449
 
      DO_BENCH=1
450
 
      NO_SLAVE=1
451
 
      ;;
452
 
    --bench)
453
 
      DO_BENCH=1
454
 
      NO_SLAVE=1
455
 
      ;;
456
 
    --stress)
457
 
      DO_STRESS=1
458
 
      NO_SLAVE=1
459
 
      SKIP_SLAVE=1
460
 
      ;;
461
 
    --stress-suite=*)
462
 
      STRESS_SUITE=`$ECHO "$1" | $SED -e "s;--stress-suite=;;"`
463
 
      ;;
464
 
    --stress-threads=*)
465
 
      STRESS_THREADS=`$ECHO "$1" | $SED -e "s;--stress-threads=;;"`
466
 
      ;;
467
 
    --stress-test-file=*)
468
 
      STRESS_TEST_FILE=`$ECHO "$1" | $SED -e "s;--stress-test-file=;;"`
469
 
      ;;
470
 
    --stress-init-file=*)
471
 
      STRESS_INIT_FILE=`$ECHO "$1" | $SED -e "s;--stress-init-file=;;"`
472
 
      ;; 
473
 
    --stress-mode=*)
474
 
      STRESS_MODE=`$ECHO "$1" | $SED -e "s;--stress-mode=;;"`
475
 
      ;;
476
 
    --stress-loop-count=*)
477
 
      STRESS_LOOP_COUNT=`$ECHO "$1" | $SED -e "s;--stress-loop-count=;;"`
478
 
      ;;
479
 
    --stress-test-count=*)
480
 
      STRESS_TEST_COUNT=`$ECHO "$1" | $SED -e "s;--stress-test-count=;;"`
481
 
      ;;      
482
 
    --stress-test-duration=*)
483
 
      STRESS_TEST_DURATION=`$ECHO "$1" | $SED -e "s;--stress-test-duration=;;"`
484
 
      ;;
485
 
    --big*)                     # Actually --big-test
486
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
487
 
    --compress)
488
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
489
 
    --sleep=*)
490
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
491
 
      SLEEP_TIME_AFTER_RESTART=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
492
 
      ;;
493
 
    --ps-protocol)
494
 
      TEST_MODE="$TEST_MODE ps-protocol" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
495
 
    --user-test=*)
496
 
      USER_TEST=`$ECHO "$1" | $SED -e "s;--user-test=;;"`
497
 
      ;;
498
 
    --mysqld=*)
499
 
       TMP=`$ECHO "$1" | $SED -e "s;--mysqld=;;"`
500
 
       EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $TMP"
501
 
       EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $TMP"
502
 
       ;;
503
 
    --gcov )
504
 
      if [ x$BINARY_DIST = x1 ] ; then
505
 
        $ECHO "Cannot do coverage test without the source - please use source dist"
506
 
        exit 1
507
 
      fi
508
 
      DO_GCOV=1
509
 
      GCOV=`which gcov`
510
 
      ;;
511
 
    --gprof )
512
 
      DO_GPROF=1
513
 
      ;;
514
 
    --gdb )
515
 
      START_WAIT_TIMEOUT=300
516
 
      STOP_WAIT_TIMEOUT=300
517
 
      if [ x$BINARY_DIST = x1 ] ; then
518
 
        $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
519
 
      fi
520
 
      DO_GDB=1
521
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
522
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
523
 
      # This needs to be checked properly
524
 
      # USE_MANAGER=1
525
 
      USE_RUNNING_SERVER=0
526
 
      ;;
527
 
    --client-gdb )
528
 
      if [ x$BINARY_DIST = x1 ] ; then
529
 
        $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --client-gdb option"
530
 
      fi
531
 
      DO_CLIENT_GDB=1
532
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
533
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
534
 
      ;;
535
 
    --manual-gdb )
536
 
      DO_GDB=1
537
 
      MANUAL_GDB=1
538
 
      USE_RUNNING_SERVER=0
539
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
540
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
541
 
      ;;
542
 
    --ddd )
543
 
      if [ x$BINARY_DIST = x1 ] ; then
544
 
        $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --ddd option"
545
 
      fi
546
 
      DO_DDD=1
547
 
      USE_RUNNING_SERVER=0
548
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --gdb"
549
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
550
 
      ;;
551
 
    --valgrind | --valgrind-all)
552
 
      find_valgrind;
553
 
      VALGRIND=$FIND_VALGRIND
554
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-safemalloc"
555
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-safemalloc"
556
 
      SLEEP_TIME_AFTER_RESTART=10
557
 
      SLEEP_TIME_FOR_DELETE=60
558
 
      USE_RUNNING_SERVER=0
559
 
      if test "$1" = "--valgrind-all"
560
 
      then
561
 
        VALGRIND="$VALGRIND -v --show-reachable=yes"
562
 
      fi
563
 
      ;;
564
 
    --valgrind-options=*)
565
 
      TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"`
566
 
      VALGRIND="$VALGRIND $TMP"
567
 
      ;;
568
 
    --skip-ndbcluster-slave | --skip-ndb-slave)
569
 
      USE_NDBCLUSTER_SLAVE=""
570
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-ndbcluster"
571
 
      ;;
572
 
    --valgrind-mysqltest | --valgrind-mysqltest-all)
573
 
      find_valgrind;
574
 
      VALGRIND_MYSQLTEST=$FIND_VALGRIND
575
 
      if test "$1" = "--valgrind-mysqltest-all"
576
 
      then
577
 
        VALGRIND_MYSQLTEST="$VALGRIND_MYSQLTEST -v --show-reachable=yes"
578
 
      fi
579
 
      ;;
580
 
    --skip-ndbcluster | --skip-ndb)
581
 
      USE_NDBCLUSTER=""
582
 
      USE_NDBCLUSTER_SLAVE=""
583
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-ndbcluster"
584
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-ndbcluster"
585
 
      ;;
586
 
    --skip-master-binlog) MASTER_MYSQLDBINLOG=0 ;;
587
 
    --skip-slave-binlog) SLAVE_MYSQLDBINLOG=0 ;;
588
 
    --skip-*)
589
 
      EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1"
590
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1"
591
 
      ;;
592
 
    --strace-client )
593
 
      STRACE_CLIENT=1
594
 
      ;;
595
 
    --debug)
596
 
      EXTRA_MASTER_MYSQLD_TRACE=" \
597
 
       --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/master.trace"
598
 
      EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
599
 
       --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/slave.trace"
600
 
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT \
601
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqltest.trace"
602
 
      EXTRA_MYSQLCHECK_OPT="$EXTRA_MYSQLCHECK_OPT \
603
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlcheck.trace"
604
 
      EXTRA_MYSQLDUMP_OPT="$EXTRA_MYSQLDUMP_OPT \
605
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqldump.trace"
606
 
      EXTRA_MYSQLSLAP_OPT="$EXTRA_MYSQLSLAP_OPT \
607
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlslap.trace"
608
 
      EXTRA_MYSQLSHOW_OPT="$EXTRA_MYSQLSHOW_OPT \
609
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlshow.trace"
610
 
      EXTRA_MYSQLBINLOG_OPT="$EXTRA_MYSQLBINLOG_OPT \
611
 
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlbinlog.trace"
612
 
      EXTRA_MYSQL_CLIENT_TEST_OPT="--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysql_client_test.trace"
613
 
      ;;
614
 
    --fast)
615
 
      FAST_START=1
616
 
      ;;
617
 
    --use-old-data)
618
 
      USE_OLD_DATA=1
619
 
      ;;
620
 
    --comment=*)
621
 
      TMP=`$ECHO "$1" | $SED -e "s;--comment=;;"`
622
 
      echo
623
 
      echo '############################################'
624
 
      echo "# $TMP"
625
 
      echo '############################################'
626
 
      ;;
627
 
    -- )  shift; break ;;
628
 
    --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
629
 
    * ) break ;;
630
 
  esac
631
 
  shift
632
 
done
633
 
 
634
 
if [ -z "$TEST_MODE" ] ; then
635
 
  TEST_MODE="default"
636
 
else
637
 
  # Remove the leading space if any
638
 
  TEST_MODE=`echo $TEST_MODE | sed 's/^ *//'`
639
 
fi
640
 
 
641
 
#
642
 
# Skip tests that doesn't work with shell version
643
 
#
644
 
SKIP_TEST="$SKIP_TEST bootstrap"
645
 
 
646
 
#++
647
 
# mysqld Environment Parameters
648
 
#--
649
 
 
650
 
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
651
 
 
652
 
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
653
 
MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
654
 
MASTER_MYSOCK1=$MYSQL_MYSOCK"1"
655
 
MASTER_MYPID="$MYRUN_DIR/master.pid"
656
 
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/master.log"
657
 
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/master.err"
658
 
 
659
 
SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
660
 
SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
661
 
SLAVE_MYPID="$MYRUN_DIR/slave.pid"
662
 
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/slave.log"
663
 
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/slave.err"
664
 
 
665
 
CURRENT_TEST="$MYSQL_TEST_DIR/var/log/current_test"
666
 
SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
667
 
 
668
 
export MASTER_MYHOST MASTER_MYPORT SLAVE_MYHOST SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
669
 
 
670
 
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgm-extra-opts=$NDB_MGM_EXTRA_OPTS --ndb_mgmd-extra-opts=$NDB_MGMD_EXTRA_OPTS --ndbd-extra-opts=$NDBD_EXTRA_OPTS"
671
 
NDBCLUSTER_OPTS_SLAVE="--port=$NDBCLUSTER_PORT_SLAVE --data-dir=$MYSQL_TEST_DIR/var"
672
 
if [ -n "$USE_NDBCLUSTER_SLAVE" ] ; then
673
 
  USE_NDBCLUSTER_SLAVE="$USE_NDBCLUSTER_SLAVE --ndb-connectstring=localhost:$NDBCLUSTER_PORT_SLAVE --ndb-extra-logging"
674
 
fi
675
 
NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
676
 
NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
677
 
 
678
 
if [ x$SOURCE_DIST = x1 ] ; then
679
 
 MY_BASEDIR=$MYSQL_TEST_DIR
680
 
else
681
 
 MY_BASEDIR=$BASEDIR
682
 
fi
683
 
 
684
 
# Create the directories
685
 
 
686
 
# This should be fixed to be not be dependent on the contence of MYSQL_TMP_DIR
687
 
# or MYRUN_DIR
688
 
# (mkdir -p is not portable)
689
 
[ -d $MYSQL_TEST_DIR/var ] || mkdir $MYSQL_TEST_DIR/var
690
 
[ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp
691
 
[ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run
692
 
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
693
 
 
694
 
# Use 'test', not '[' as the shell builtin might not have '-L
695
 
if test ! -L "$MYSQL_TEST_DIR/var/std_data_ln" ; then
696
 
  ln -s $MYSQL_TEST_DIR/std_data/ $MYSQL_TEST_DIR/var/std_data_ln
697
 
fi
698
 
 
699
 
if test ${COLUMNS:-0} -lt 80 ; then COLUMNS=80 ; fi
700
 
E=`$EXPR $COLUMNS - 8`
701
 
DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c 1-$E`
702
 
 
703
 
# on source dist, we pick up freshly build executables
704
 
# on binary, use what is installed
705
 
if [ x$SOURCE_DIST = x1 ] ; then
706
 
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
707
 
   if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then
708
 
     MYSQL_TEST="$BASEDIR/libmysqld/examples/mysqltest_embedded"
709
 
   else
710
 
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
711
 
     exit 1
712
 
   fi
713
 
   MYSQL_CLIENT_TEST="$BASEDIR/libmysqld/examples/mysql_client_test_embedded"
714
 
 else
715
 
   MYSQLD="$BASEDIR/sql/mysqld"
716
 
   if [ -n "$VALGRIND" ] ; then
717
 
     MYSQLD="$VALGRIND $MYSQLD"
718
 
   fi
719
 
   if [ -f "$BASEDIR/client/.libs/lt-mysqltest" ] ; then
720
 
     MYSQL_TEST="$BASEDIR/client/.libs/lt-mysqltest"
721
 
   elif [ -f "$BASEDIR/client/.libs/mysqltest" ] ; then
722
 
     MYSQL_TEST="$BASEDIR/client/.libs/mysqltest"
723
 
   else
724
 
     MYSQL_TEST="$BASEDIR/client/mysqltest"
725
 
   fi
726
 
   MYSQL_CLIENT_TEST="$BASEDIR/tests/mysql_client_test"
727
 
 fi
728
 
 if [ -f "$BASEDIR/client/.libs/mysqlcheck" ] ; then
729
 
   MYSQL_CHECK="$BASEDIR/client/.libs/mysqlcheck"
730
 
 else
731
 
   MYSQL_CHECK="$BASEDIR/client/mysqlcheck"
732
 
 fi
733
 
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
734
 
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
735
 
 else
736
 
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
737
 
 fi
738
 
 if [ -f "$BASEDIR/client/.libs/mysqlslap" ] ; then
739
 
   MYSQL_SLAP="$BASEDIR/client/.libs/mysqlslap"
740
 
 else
741
 
   MYSQL_SLAP="$BASEDIR/client/mysqlslap"
742
 
 fi
743
 
 if [ -f "$BASEDIR/client/.libs/mysqlimport" ] ; then
744
 
   MYSQL_IMPORT="$BASEDIR/client/.libs/mysqlimport"
745
 
 else
746
 
   MYSQL_IMPORT="$BASEDIR/client/mysqlimport"
747
 
 fi
748
 
 if [ -f "$BASEDIR/client/.libs/mysqlshow" ] ; then
749
 
   MYSQL_SHOW="$BASEDIR/client/.libs/mysqlshow"
750
 
 else
751
 
   MYSQL_SHOW="$BASEDIR/client/mysqlshow"
752
 
 fi
753
 
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
754
 
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
755
 
 else
756
 
   MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
757
 
 fi
758
 
 if [ -n "$STRACE_CLIENT" ]; then
759
 
  MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
760
 
 fi
761
 
 
762
 
 CLIENT_BINDIR="$BASEDIR/client"
763
 
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
764
 
 WAIT_PID="$BASEDIR/extra/mysql_waitpid"
765
 
 MYSQL_MY_PRINT_DEFAULTS="$BASEDIR/extra/my_print_defaults"
766
 
 MYSQL="$CLIENT_BINDIR/mysql"
767
 
 LANGUAGE="$BASEDIR/sql/share/english/"
768
 
 CHARSETSDIR="$BASEDIR/sql/share/charsets"
769
 
 INSTALL_DB="./install_test_db"
770
 
 MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
771
 
 NDB_TOOLS_DIR="$BASEDIR/storage/ndb/tools"
772
 
 NDB_MGM="$BASEDIR/storage/ndb/src/mgmclient/ndb_mgm"
773
 
 
774
 
 if [ -n "$USE_PURIFY" ] ; then
775
 
   PSUP="$MYSQL_TEST_DIR/suppress.purify"
776
 
   PURIFYOPTIONS="-windows=no -log-file=%v.purifylog -append-logfile -add-suppression-files=$PSUP"
777
 
   if [ -f "${MYSQL_TEST}-purify" ] ; then
778
 
     MYSQL_TEST="${MYSQL_TEST}-purify"
779
 
     PLOG="$MYSQL_TEST.purifylog"
780
 
     if [ -f $PLOG ]; then
781
 
       mv $PLOG $PLOG.$$
782
 
     fi
783
 
     PURIFY_LOGS="$PLOG"
784
 
   fi
785
 
   if [ -f "${MYSQLD}-purify" ] ; then
786
 
     MYSQLD="${MYSQLD}-purify"
787
 
     PLOG="$MYSQLD.purifylog"
788
 
     if [ -f $PLOG ]; then
789
 
       mv $PLOG $PLOG.$$
790
 
     fi
791
 
     PURIFY_LOGS="$PURIFY_LOGS $PLOG"
792
 
   fi
793
 
 fi
794
 
 
795
 
else
796
 
 
797
 
 # We have a binary installation. Note that this can be both from
798
 
 # unpacking a MySQL AB binary distribution (created using
799
 
 # "scripts/make_binary_distribution", and from a "make install".
800
 
 # Unfortunately the structure differs a bit, for a "make install"
801
 
 # currently all binaries are in "bin", for a MySQL AB packaging
802
 
 # some are in "tests".
803
 
 
804
 
 if test -x "$BASEDIR/libexec/mysqld"
805
 
 then
806
 
   MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
807
 
 elif test -x "$BASEDIR/bin/mysqld"
808
 
 then
809
 
   MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
810
 
 elif test -x "$BASEDIR/sbin/mysqld"
811
 
 then
812
 
   MYSQLD="$VALGRIND $BASEDIR/sbin/mysqld"
813
 
 else
814
 
   $ECHO "Fatal error: Cannot find program mysqld in $BASEDIR/{libexec,bin,sbin}" 1>&2
815
 
   exit 1
816
 
 fi
817
 
 CLIENT_BINDIR="$BASEDIR/bin"
818
 
 if test -d "$BASEDIR/tests"
819
 
 then
820
 
   TESTS_BINDIR="$BASEDIR/tests"
821
 
 else
822
 
   TESTS_BINDIR="$BASEDIR/bin"
823
 
 fi
824
 
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
825
 
 MYSQL_CHECK="$CLIENT_BINDIR/mysqlcheck"
826
 
 MYSQL_SLAP="$CLIENT_BINDIR/mysqlslap"
827
 
 MYSQL_SHOW="$CLIENT_BINDIR/mysqlshow"
828
 
 MYSQL_IMPORT="$CLIENT_BINDIR/mysqlimport"
829
 
 MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
830
 
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
831
 
 WAIT_PID="$CLIENT_BINDIR/mysql_waitpid"
832
 
 MYSQL_MY_PRINT_DEFAULTS="$CLIENT_BINDIR/my_print_defaults"
833
 
 MYSQL="$CLIENT_BINDIR/mysql"
834
 
 INSTALL_DB="./install_test_db --bin"
835
 
 MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
836
 
 NDB_TOOLS_DIR="$CLIENT_BINDIR"
837
 
 NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
838
 
 if test -d "$BASEDIR/share/mysql/english"
839
 
 then
840
 
   LANGUAGE="$BASEDIR/share/mysql/english/"
841
 
   CHARSETSDIR="$BASEDIR/share/mysql/charsets"
842
 
 else
843
 
   LANGUAGE="$BASEDIR/share/english/"
844
 
   CHARSETSDIR="$BASEDIR/share/charsets"
845
 
 fi
846
 
 if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
847
 
   if [ -f "$CLIENT_BINDIR/mysqltest_embedded" ] ; then
848
 
     MYSQL_TEST="$CLIENT_BINDIR/mysqltest_embedded"
849
 
   else
850
 
     echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
851
 
     exit 1
852
 
   fi
853
 
   if [ -d "$BASEDIR/tests/mysql_client_test_embedded" ] ; then
854
 
     MYSQL_CLIENT_TEST="$TESTS_BINDIR/mysql_client_test_embedded"
855
 
   else
856
 
     MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test_embedded"
857
 
   fi
858
 
 else
859
 
   MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
860
 
   MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test"
861
 
 fi
862
 
 if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then
863
 
   MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump"
864
 
 elif  [ -f "$BASEDIR/client/mysqldump" ] ; then
865
 
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
866
 
 else
867
 
   MYSQL_DUMP="$BASEDIR/bin/mysqldump"
868
 
 fi
869
 
fi
870
 
 
871
 
if [ -z "$MASTER_MYSQLD" ]
872
 
then
873
 
MASTER_MYSQLD=$MYSQLD
874
 
fi
875
 
 
876
 
if [ -z "$SLAVE_MYSQLD" ]
877
 
then
878
 
SLAVE_MYSQLD=$MYSQLD
879
 
fi
880
 
 
881
 
# If we should run all tests cases, we will use a local server for that
882
 
 
883
 
if [ -z "$1" -a -z "$DO_STRESS" ]
884
 
then
885
 
   USE_RUNNING_SERVER=0
886
 
fi
887
 
if [ $USE_RUNNING_SERVER -eq 1 ]
888
 
then
889
 
   MASTER_MYSOCK=$LOCAL_SOCKET;
890
 
   DBUSER=${DBUSER:-test}
891
 
else
892
 
   DBUSER=${DBUSER:-root}               # We want to do FLUSH xxx commands
893
 
fi
894
 
 
895
 
if [ -w / ]
896
 
then
897
 
  # We are running as root;  We need to add the --root argument
898
 
  EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --user=root"
899
 
  EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --user=root"
900
 
fi
901
 
 
902
 
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
903
 
# Need to pass additional arguments to MYSQL_CLIENT_TEST for embedded server
904
 
# -A marks each argument for passing to the function which initializes the
905
 
# embedded library
906
 
if [ "x$USE_EMBEDDED_SERVER" = "x1" ]; then
907
 
  MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST -A --language=$LANGUAGE -A --datadir=$SLAVE_MYDDIR -A --character-sets-dir=$CHARSETSDIR"
908
 
fi
909
 
# Save path and name of mysqldump
910
 
MYSQL_DUMP_DIR="$MYSQL_DUMP"
911
 
export MYSQL_DUMP_DIR
912
 
MYSQL_CHECK="$MYSQL_CHECK --no-defaults --debug-info -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLCHECK_OPT"
913
 
MYSQL_DUMP="$MYSQL_DUMP --no-defaults --debug-info -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
914
 
MYSQL_SLAP="$MYSQL_SLAP -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLSLAP_OPT"
915
 
MYSQL_DUMP_SLAVE="$MYSQL_DUMP_DIR --no-defaults -uroot --socket=$SLAVE_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
916
 
MYSQL_SHOW="$MYSQL_SHOW --no-defaults --debug-info -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLSHOW_OPT"
917
 
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --debug-info --local-load=$MYSQL_TMP_DIR  --character-sets-dir=$CHARSETSDIR $EXTRA_MYSQLBINLOG_OPT"
918
 
MYSQL_IMPORT="$MYSQL_IMPORT --no-defaults --debug-info -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
919
 
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"
920
 
MYSQL="$MYSQL --no-defaults --debug-info --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD"
921
 
export MYSQL MYSQL_CHECK MYSQL_DUMP MYSQL_DUMP_SLAVE MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES MYSQL_IMPORT
922
 
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR MYSQL_MY_PRINT_DEFAULTS
923
 
export MYSQL_SLAP
924
 
export NDB_TOOLS_DIR
925
 
export NDB_MGM
926
 
export NDB_BACKUP_DIR
927
 
export NDB_TOOLS_OUTPUT
928
 
export PURIFYOPTIONS
929
 
NDB_STATUS_OK=1
930
 
export NDB_STATUS_OK
931
 
NDB_SLAVE_STATUS_OK=1
932
 
export NDB_SLAVE_STATUS_OK
933
 
export NDB_EXTRA_TEST NDBCLUSTER_PORT NDBCLUSTER_PORT_SLAVE
934
 
 
935
 
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
936
 
 --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
937
 
 --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT $MYSQL_TEST_SSL_OPTS"
938
 
if [ x$USE_TIMER = x1 ] ; then
939
 
  MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS --timer-file=$MY_LOG_DIR/timer"
940
 
fi
941
 
MYSQL_TEST_BIN=$MYSQL_TEST
942
 
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
943
 
 
944
 
# Export MYSQL_TEST variable for use from .test files
945
 
export MYSQL_TEST
946
 
 
947
 
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
948
 
GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
949
 
GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
950
 
GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out
951
 
GCOV_ERR=$MYSQL_TMP_DIR/mysqld-gcov.err
952
 
GPROF_DIR=$MYSQL_TMP_DIR/gprof
953
 
GPROF_MASTER=$GPROF_DIR/master.gprof
954
 
GPROF_SLAVE=$GPROF_DIR/slave.gprof
955
 
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
956
 
MYSQLTEST_LOG="$MYSQL_TEST_DIR/var/log/mysqltest.log"
957
 
if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
958
 
  XTERM=`which xterm`
959
 
fi
960
 
 
961
 
export MYSQL MYSQL_CHECK MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR MASTER_MYSOCK
962
 
 
963
 
#++
964
 
# Function Definitions
965
 
#--
966
 
 
967
 
prompt_user ()
968
 
{
969
 
 $ECHO $1
970
 
 read unused
971
 
}
972
 
 
973
 
# We can't use diff -u or diff -a as these are not portable
974
 
 
975
 
show_failed_diff ()
976
 
{
977
 
  reject_file=r/$1.reject
978
 
  result_file=r/$1.result
979
 
  eval_file=r/$1.eval
980
 
 
981
 
  if [ -f $eval_file ]
982
 
  then
983
 
    result_file=$eval_file
984
 
  fi
985
 
 
986
 
  if [ -x "$DIFF" ] && [ -f $reject_file ]
987
 
  then
988
 
    echo "Below are the diffs between actual and expected results:"
989
 
    echo "-------------------------------------------------------"
990
 
    $DIFF -c $result_file $reject_file
991
 
    echo "-------------------------------------------------------"
992
 
    echo "Please follow the instructions outlined at"
993
 
    echo "http://forge.mysql.com/wiki/MySQL_Internals_Porting#Debugging_a_MySQL_Server"
994
 
    echo "to find the reason to this problem and how to report this."
995
 
    echo ""
996
 
  fi
997
 
}
998
 
 
999
 
do_gdb_test ()
1000
 
{
1001
 
  mysql_test_args="$MYSQL_TEST_ARGS $1"
1002
 
  $ECHO "set args $mysql_test_args < $2" > $GDB_CLIENT_INIT
1003
 
  echo "Set breakpoints ( if needed) and type 'run' in gdb window"
1004
 
  #this xterm should not be backgrounded
1005
 
  $XTERM -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
1006
 
}
1007
 
 
1008
 
error () {
1009
 
    $ECHO  "Error:  $1"
1010
 
    exit 1
1011
 
}
1012
 
 
1013
 
error_is () {
1014
 
    $ECHO "Errors are (from $TIMEFILE) :"
1015
 
    $CAT < $TIMEFILE
1016
 
    $ECHO "(the last lines may be the most important ones)"
1017
 
}
1018
 
 
1019
 
prefix_to_8() {
1020
 
 $ECHO "        $1" | $SED -e 's:.*\(........\)$:\1:'
1021
 
}
1022
 
 
1023
 
pass_inc () {
1024
 
    TOT_PASS=`$EXPR $TOT_PASS + 1`
1025
 
}
1026
 
 
1027
 
fail_inc () {
1028
 
    TOT_FAIL=`$EXPR $TOT_FAIL + 1`
1029
 
}
1030
 
 
1031
 
skip_inc () {
1032
 
    TOT_SKIP=`$EXPR $TOT_SKIP + 1`
1033
 
}
1034
 
 
1035
 
total_inc () {
1036
 
    TOT_TEST=`$EXPR $TOT_TEST + 1`
1037
 
}
1038
 
 
1039
 
 
1040
 
skip_test() {
1041
 
   USERT="    ...."
1042
 
   SYST="    ...."
1043
 
   REALT="    ...."
1044
 
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
1045
 
   RES="$pname"
1046
 
   skip_inc
1047
 
   $ECHO "$RES$RES_SPACE [ skipped ]"
1048
 
}
1049
 
 
1050
 
 
1051
 
disable_test() {
1052
 
   USERT="    ...."
1053
 
   SYST="    ...."
1054
 
   REALT="    ...."
1055
 
   pname=`$ECHO "$1                        "|$CUT -c 1-24`
1056
 
   RES="$pname"
1057
 
   skip_inc
1058
 
   $ECHO "$RES$RES_SPACE [ disabled ]  $2"
1059
 
}
1060
 
 
1061
 
 
1062
 
report_current_test () {
1063
 
   tname=$1
1064
 
   echo "CURRENT_TEST: $tname" >> $MASTER_MYERR
1065
 
   eval "master1_running=\$MASTER1_RUNNING"
1066
 
   if [ x$master1_running = x1 ] ; then
1067
 
     echo "CURRENT_TEST: $tname" >> $MASTER_MYERR"1"
1068
 
   fi
1069
 
   if [ -n "$PURIFY_LOGS" ] ; then
1070
 
     for log in $PURIFY_LOGS
1071
 
     do
1072
 
       echo "CURRENT_TEST: $tname" >> $log
1073
 
     done
1074
 
   fi
1075
 
}
1076
 
 
1077
 
 
1078
 
report_stats () {
1079
 
    if [ $TOT_FAIL = 0 ]; then
1080
 
        $ECHO "All $TOT_TEST tests were successful."
1081
 
    else
1082
 
        xten=`$EXPR $TOT_PASS \* 10000`
1083
 
        raw=`$EXPR $xten / $TOT_TEST`
1084
 
        raw=`$PRINTF %.4d $raw`
1085
 
        whole=`$PRINTF %.2s $raw`
1086
 
        xwhole=`$EXPR $whole \* 100`
1087
 
        deci=`$EXPR $raw - $xwhole`
1088
 
        $ECHO  "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% were successful."
1089
 
        $ECHO ""
1090
 
        $ECHO "The log files in $MY_LOG_DIR may give you some hint"
1091
 
        $ECHO "of what went wrong."
1092
 
        $ECHO "If you want to report this error, please read first the documentation at"
1093
 
        $ECHO "http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html"
1094
 
    fi
1095
 
 
1096
 
    if [ $USE_RUNNING_SERVER -eq 0 ]
1097
 
    then
1098
 
 
1099
 
    # Report if there was any fatal warnings/errors in the log files
1100
 
    #
1101
 
    $RM -f $MY_LOG_DIR/warnings $MY_LOG_DIR/warnings.tmp
1102
 
    # Remove some non fatal warnings from the log files
1103
 
    $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' -e 's|InnoDB: Warning: we did not need to do crash recovery||g' \
1104
 
        $MY_LOG_DIR/*.err \
1105
 
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
1106
 
        > $MY_LOG_DIR/warnings.tmp
1107
 
 
1108
 
    # Find errors
1109
 
    for i in "^Warning:" "^Error:" "^==.* at 0x" "InnoDB: Warning" "missing DBUG_RETURN" "mysqld: Warning" "Attempting backtrace" "Assertion .* failed"
1110
 
    do
1111
 
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
1112
 
      then
1113
 
        GOT_WARNINGS=1
1114
 
      fi
1115
 
    done
1116
 
    $RM -f $MY_LOG_DIR/warnings.tmp
1117
 
    if [ $GOT_WARNINGS = "1" ]
1118
 
    then
1119
 
      echo "WARNING: Got errors/warnings while running tests. Please examine"
1120
 
      echo "$MY_LOG_DIR/warnings for details."
1121
 
    fi
1122
 
 
1123
 
    fi # USE_RUNNING_SERVER
1124
 
 
1125
 
    # Check valgrind errors from mysqltest
1126
 
    if [ ! -z "$VALGRIND_MYSQLTEST" ]
1127
 
    then
1128
 
      if $GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors" > /dev/null
1129
 
      then
1130
 
          $ECHO "Valgrind detected errors!"
1131
 
          $GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors"
1132
 
          $ECHO "See $MYSQLTEST_LOG"
1133
 
      fi
1134
 
    fi
1135
 
}
1136
 
 
1137
 
mysql_install_db () {
1138
 
    $ECHO "Removing Stale Files"
1139
 
    if [ -z "$USE_OLD_DATA" ]; then
1140
 
      $RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1"
1141
 
      $ECHO "Installing Master Databases"
1142
 
      $INSTALL_DB
1143
 
      if [ $? != 0 ]; then
1144
 
        error "Could not install master test DBs"
1145
 
        exit 1
1146
 
      fi
1147
 
    fi
1148
 
    if [ ! -z "$USE_NDBCLUSTER" ]
1149
 
    then
1150
 
      $ECHO "Installing Master Databases 1"
1151
 
#     $INSTALL_DB -1
1152
 
      $RM -rf var/master-data1
1153
 
      mkdir var/master-data1
1154
 
      cp -r var/master-data/* var/master-data1
1155
 
      if [ $? != 0 ]; then
1156
 
        error "Could not install master test DBs 1"
1157
 
        exit 1
1158
 
      fi
1159
 
    fi
1160
 
    $ECHO "Installing Slave Databases"
1161
 
    $RM -rf $SLAVE_MYDDIR $MY_LOG_DIR/* 
1162
 
#    $INSTALL_DB -slave
1163
 
    mkdir var/slave-data
1164
 
    cp -r var/master-data/* var/slave-data
1165
 
    if [ $? != 0 ]; then
1166
 
        error "Could not install slave test DBs"
1167
 
        exit 1
1168
 
    fi
1169
 
 
1170
 
    for slave_num in 1 2 ;
1171
 
    do
1172
 
      $RM -rf var/slave$slave_num-data
1173
 
      mkdir -p var/slave$slave_num-data/mysql
1174
 
      mkdir -p var/slave$slave_num-data/test
1175
 
      cp var/slave-data/mysql/* var/slave$slave_num-data/mysql
1176
 
    done
1177
 
    return 0
1178
 
}
1179
 
 
1180
 
gprof_prepare ()
1181
 
{
1182
 
 $RM -rf $GPROF_DIR
1183
 
 mkdir -p $GPROF_DIR
1184
 
}
1185
 
 
1186
 
gprof_collect ()
1187
 
{
1188
 
 if [ -f $MASTER_MYDDIR/gmon.out ]; then
1189
 
   gprof $MASTER_MYSQLD $MASTER_MYDDIR/gmon.out > $GPROF_MASTER
1190
 
   echo "Master execution profile has been saved in $GPROF_MASTER"
1191
 
 fi
1192
 
 if [ -f $SLAVE_MYDDIR/gmon.out ]; then
1193
 
   gprof $SLAVE_MYSQLD $SLAVE_MYDDIR/gmon.out > $GPROF_SLAVE
1194
 
   echo "Slave execution profile has been saved in $GPROF_SLAVE"
1195
 
 fi
1196
 
}
1197
 
 
1198
 
gcov_prepare () {
1199
 
    $FIND $BASEDIR -name \*.gcov \
1200
 
    -or -name \*.da | $XARGS $RM
1201
 
}
1202
 
 
1203
 
gcov_collect () {
1204
 
    $ECHO "Collecting source coverage info..."
1205
 
    [ -f $GCOV_MSG ] && $RM $GCOV_MSG
1206
 
    [ -f $GCOV_ERR ] && $RM $GCOV_ERR
1207
 
    for d in $MYSQLD_SRC_DIRS; do
1208
 
        cd $BASEDIR/$d
1209
 
        for f in *.h *.cc *.c; do
1210
 
            $GCOV $f 2>>$GCOV_ERR  >>$GCOV_MSG
1211
 
        done
1212
 
        cd $MYSQL_TEST_DIR
1213
 
    done
1214
 
 
1215
 
    $ECHO "gcov info in $GCOV_MSG, errors in $GCOV_ERR"
1216
 
}
1217
 
 
1218
 
abort_if_failed()
1219
 
{
1220
 
 if [ ! $? = 0 ] ; then
1221
 
  echo $1
1222
 
  exit 1
1223
 
 fi
1224
 
}
1225
 
 
1226
 
launch_in_background()
1227
 
{
1228
 
  shift
1229
 
  echo $@ | /bin/sh  >> $CUR_MYERR 2>&1  &
1230
 
  sleep 2 #hack
1231
 
  return
1232
 
}
1233
 
 
1234
 
shutdown_mysqld()
1235
 
{
1236
 
  pid=$1
1237
 
  ident=$2
1238
 
  # Shutdown time must be high as slave may be in reconnect
1239
 
  $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1
1240
 
  res=$?
1241
 
  # Some systems require an extra connect
1242
 
  $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1
1243
 
  if test $res = 0
1244
 
  then
1245
 
    wait_for_pid $pid
1246
 
  fi
1247
 
  return $res
1248
 
}
1249
 
 
1250
 
start_ndbcluster()
1251
 
{
1252
 
  if [ ! -n "$USE_NDBCLUSTER" ] ;
1253
 
  then
1254
 
    USING_NDBCLUSTER=0
1255
 
    USE_NDBCLUSTER_OPT=
1256
 
  fi
1257
 
  
1258
 
  if [ x$USING_NDBCLUSTER = x1 -a -z "$USE_NDBCLUSTER_OPT" ]
1259
 
  then
1260
 
  rm -f $NDB_TOOLS_OUTPUT
1261
 
  if [ -z "$USE_RUNNING_NDBCLUSTER" ]
1262
 
  then
1263
 
    if [ "$DO_BENCH" != 1 -a -z "$NDBCLUSTER_EXTRA_OPTS" ]
1264
 
    then
1265
 
      NDBCLUSTER_EXTRA_OPTS="--small"
1266
 
    fi
1267
 
    OPTS="$NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --character-sets-dir=$CHARSETSDIR --verbose=$NDB_VERBOSE --initial --relative-config-data-dir --core"
1268
 
    if [ "x$NDB_VERBOSE" != "x0" ] ; then
1269
 
      echo "Starting master ndbcluster " $OPTS
1270
 
    fi
1271
 
    ./ndb/ndbcluster $OPTS || NDB_STATUS_OK=0
1272
 
    if [ x$NDB_STATUS_OK != x1 ] ; then
1273
 
      if [ x$FORCE != x1 ] ; then
1274
 
        exit 1
1275
 
      fi
1276
 
      USING_NDBCLUSTER=0
1277
 
      USE_NDBCLUSTER_OPT=
1278
 
      return
1279
 
    fi
1280
 
 
1281
 
    NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
1282
 
  else
1283
 
    NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
1284
 
    echo "Using ndbcluster at $NDB_CONNECTSTRING"
1285
 
  fi
1286
 
  USE_NDBCLUSTER_OPT="$USE_NDBCLUSTER --ndb-connectstring=\"$NDB_CONNECTSTRING\" --ndb-extra-logging"
1287
 
  export NDB_CONNECTSTRING
1288
 
  fi
1289
 
}
1290
 
 
1291
 
rm_ndbcluster_tables()
1292
 
{
1293
 
  $RM -f $1/mysql/apply_status*
1294
 
  $RM -f $1/mysql/schema*
1295
 
}
1296
 
 
1297
 
stop_ndbcluster()
1298
 
{
1299
 
 if [ -n "$USE_NDBCLUSTER_OPT" ]
1300
 
 then
1301
 
 USE_NDBCLUSTER_OPT=
1302
 
 if [ -z "$USE_RUNNING_NDBCLUSTER" ]
1303
 
 then
1304
 
   # Kill any running ndbcluster stuff
1305
 
   $ECHO "Stopping master cluster"
1306
 
   ./ndb/ndbcluster $NDBCLUSTER_OPTS --stop
1307
 
   # remove ndb table the hard way as not to upset later tests
1308
 
   rm_ndbcluster_tables $MASTER_MYDDIR
1309
 
   rm_ndbcluster_tables $MASTER_MYDDIR"1"
1310
 
 fi
1311
 
 fi
1312
 
}
1313
 
 
1314
 
# The embedded server needs the cleanup so we do some of the start work
1315
 
# but stop before actually running mysqld or anything.
1316
 
 
1317
 
start_master()
1318
 
{
1319
 
  eval "this_master_running=\$MASTER$1_RUNNING"
1320
 
  if [ x$this_master_running = x1 ] || [ x$LOCAL_MASTER = x1 ] ; then
1321
 
    return
1322
 
  fi
1323
 
  # Remove stale binary logs except for 2 tests which need them
1324
 
  if [ "$tname" != "rpl_crash_binlog_ib_1b" ] && [ "$tname" != "rpl_crash_binlog_ib_2b" ] && [ "$tname" != "rpl_crash_binlog_ib_3b" ] 
1325
 
  then
1326
 
    $RM -f $MYSQL_TEST_DIR/var/log/master-bin$1.*
1327
 
  fi
1328
 
 
1329
 
  # Remove old master.info and relay-log.info files
1330
 
  $RM -f $MYSQL_TEST_DIR/var/master-data$1/master.info $MYSQL_TEST_DIR/var/master-data$1/relay-log.info
1331
 
 
1332
 
  #run master initialization shell script if one exists
1333
 
 
1334
 
  if [ -f "$master_init_script" ] ;
1335
 
  then
1336
 
      /bin/sh $master_init_script
1337
 
  fi
1338
 
  cd $BASEDIR # for gcov
1339
 
  if [ -n "$1" ] ; then
1340
 
   id=`$EXPR $1 + 101`;
1341
 
   this_master_myport=`$EXPR $MASTER_MYPORT + $1`
1342
 
   NOT_FIRST_MASTER_EXTRA_OPTS="--skip-innodb"
1343
 
   eval "MASTER_MYPORT$1=$this_master_myport"
1344
 
   export MASTER_MYPORT$1
1345
 
  else
1346
 
   id=1;
1347
 
   this_master_myport=$MASTER_MYPORT
1348
 
   NOT_FIRST_MASTER_EXTRA_OPTS=""
1349
 
  fi
1350
 
  if [ -n "$EXTRA_MASTER_MYSQLD_TRACE" ] 
1351
 
  then
1352
 
      CURR_MASTER_MYSQLD_TRACE="$EXTRA_MASTER_MYSQLD_TRACE$1"
1353
 
  fi
1354
 
  if [ x$MASTER_MYSQLDBINLOG = x1 ]
1355
 
  then
1356
 
    MASTER_MYSQLD_BINLOG_OPT="--log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1"
1357
 
  fi
1358
 
  if [ -z "$DO_BENCH" -a -z "$DO_STRESS"  ]
1359
 
  then
1360
 
    master_args="--no-defaults \
1361
 
            --server-id=$id  \
1362
 
          --basedir=$MY_BASEDIR \
1363
 
          --port=$this_master_myport \
1364
 
          --port-open-timeout=380 \
1365
 
          --local-infile \
1366
 
          --exit-info=256 \
1367
 
          --core \
1368
 
          $USE_NDBCLUSTER_OPT \
1369
 
          --datadir=$MASTER_MYDDIR$1 \
1370
 
          --pid-file=$MASTER_MYPID$1 \
1371
 
          --socket=$MASTER_MYSOCK$1 \
1372
 
          --log=$MASTER_MYLOG$1 \
1373
 
          --character-sets-dir=$CHARSETSDIR \
1374
 
          --default-character-set=$CHARACTER_SET \
1375
 
          --tmpdir=$MYSQL_TMP_DIR \
1376
 
          --language=$LANGUAGE \
1377
 
          --innodb_data_file_path=ibdata1:128M:autoextend \
1378
 
          --open-files-limit=1024 \
1379
 
          --log-bin-trust-function-creators \
1380
 
           $MASTER_40_ARGS \
1381
 
           $SMALL_SERVER \
1382
 
           $MASTER_MYSQLD_BINLOG_OPT \
1383
 
           $EXTRA_MASTER_MYSQLD_OPT $EXTRA_MASTER_OPT \
1384
 
           $NOT_FIRST_MASTER_EXTRA_OPTS $CURR_MASTER_MYSQLD_TRACE"
1385
 
  else
1386
 
    master_args="--no-defaults \
1387
 
          --server-id=$id --rpl-recovery-rank=1 \
1388
 
          --basedir=$MY_BASEDIR --init-rpl-role=master \
1389
 
          --port=$this_master_myport \
1390
 
          --port-open-timeout=380 \
1391
 
          --local-infile \
1392
 
          --datadir=$MASTER_MYDDIR$1 \
1393
 
          --pid-file=$MASTER_MYPID$1 \
1394
 
          --socket=$MASTER_MYSOCK$1 \
1395
 
          --character-sets-dir=$CHARSETSDIR \
1396
 
          --default-character-set=$CHARACTER_SET \
1397
 
          --core \
1398
 
          $USE_NDBCLUSTER_OPT \
1399
 
          --tmpdir=$MYSQL_TMP_DIR \
1400
 
          --language=$LANGUAGE \
1401
 
          --innodb_data_file_path=ibdata1:128M:autoextend \
1402
 
          --log-bin-trust-function-creators \
1403
 
           $MASTER_40_ARGS \
1404
 
           $SMALL_SERVER \
1405
 
           $MASTER_MYSQLD_BINLOG_OPT \
1406
 
           $EXTRA_MASTER_MYSQLD_OPT $EXTRA_MASTER_OPT \
1407
 
           $NOT_FIRST_MASTER_EXTRA_OPTS"
1408
 
  fi
1409
 
 
1410
 
  CUR_MYERR=$MASTER_MYERR$1
1411
 
  CUR_MYSOCK=$MASTER_MYSOCK$1
1412
 
 
1413
 
  # For embedded server we collect the server flags and return
1414
 
  if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
1415
 
    # Add a -A to each argument to pass it to embedded server
1416
 
    EMBEDDED_SERVER_OPTS=""
1417
 
    for opt in $master_args
1418
 
    do
1419
 
      EMBEDDED_SERVER_OPTS="$EMBEDDED_SERVER_OPTS -A $opt"
1420
 
    done
1421
 
    EXTRA_MYSQL_TEST_OPT="$EMBEDDED_SERVER_OPTS"
1422
 
    return
1423
 
  fi
1424
 
 
1425
 
  if [ x$DO_DDD = x1 ]
1426
 
  then
1427
 
    $ECHO "set args $master_args" > $GDB_MASTER_INIT$1
1428
 
    launch_in_background master ddd -display $DISPLAY --debugger \
1429
 
    "gdb -x $GDB_MASTER_INIT$1" $MASTER_MYSQLD
1430
 
  elif [ x$DO_GDB = x1 ]
1431
 
  then
1432
 
    if [ x$MANUAL_GDB = x1 ]
1433
 
    then
1434
 
      $ECHO "set args $master_args" > $GDB_MASTER_INIT$1
1435
 
      $ECHO "To start gdb for the master , type in another window:"
1436
 
      $ECHO "cd $MYSQL_TEST_DIR ; gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD"
1437
 
      wait_for_master=1500
1438
 
    else
1439
 
      ( $ECHO set args $master_args;
1440
 
      if [ $USE_MANAGER = 0 ] ; then
1441
 
    cat <<EOF
1442
 
b mysql_parse
1443
 
commands 1
1444
 
disa 1
1445
 
end
1446
 
r
1447
 
EOF
1448
 
      fi )  > $GDB_MASTER_INIT$1
1449
 
      launch_in_background master $XTERM -display $DISPLAY \
1450
 
      -title "Master" -e gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD
1451
 
    fi
1452
 
  else
1453
 
    launch_in_background master $MASTER_MYSQLD $master_args
1454
 
  fi
1455
 
  sleep_until_file_created $MASTER_MYPID$1 $wait_for_master
1456
 
  wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
1457
 
  eval "MASTER$1_RUNNING=1"
1458
 
}
1459
 
 
1460
 
start_slave()
1461
 
{
1462
 
  [ x$SKIP_SLAVE = x1 ] && return
1463
 
  eval "this_slave_running=\$SLAVE$1_RUNNING"
1464
 
  [ x$this_slave_running = 1 ] && return
1465
 
 
1466
 
  # When testing fail-safe replication, we will have more than one slave
1467
 
  # in this case, we start secondary slaves with an argument
1468
 
  slave_ident="slave$1"
1469
 
  if [ -n "$1" ] ;
1470
 
  then
1471
 
   slave_server_id=`$EXPR 2 + $1`
1472
 
   slave_rpl_rank=$slave_server_id
1473
 
   slave_port=`expr $SLAVE_MYPORT + $1`
1474
 
   slave_log="$SLAVE_MYLOG.$1"
1475
 
   slave_err="$SLAVE_MYERR.$1"
1476
 
   slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/"
1477
 
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
1478
 
   slave_sock="$SLAVE_MYSOCK-$1"
1479
 
  else
1480
 
   slave_server_id=2
1481
 
   slave_rpl_rank=2
1482
 
   slave_port=$SLAVE_MYPORT
1483
 
   slave_log=$SLAVE_MYLOG
1484
 
   slave_err=$SLAVE_MYERR
1485
 
   slave_datadir=$SLAVE_MYDDIR
1486
 
   slave_pid=$SLAVE_MYPID
1487
 
   slave_sock="$SLAVE_MYSOCK"
1488
 
 fi
1489
 
 
1490
 
  #
1491
 
  if [ x$USING_NDBCLUSTER = x1 -a -n "$USE_NDBCLUSTER_SLAVE" ] ; then
1492
 
    if [ $slave_server_id -eq 2 ] ; then
1493
 
      savedir=`pwd`
1494
 
      cd $MYSQL_TEST_DIR
1495
 
      if [ "$DO_BENCH" != 1 -a -z "$NDBCLUSTER_EXTRA_OPTS" ]
1496
 
       then
1497
 
         NDBCLUSTER_EXTRA_OPTS="--small"
1498
 
      fi
1499
 
 
1500
 
      OPTS="$NDBCLUSTER_OPTS_SLAVE --initial $NDBCLUSTER_EXTRA_OPTS --ndbd-nodes=1 --verbose=$NDB_VERBOSE --relative-config-data-dir --core"
1501
 
      if [ "x$NDB_VERBOSE" != "x0" ] ; then
1502
 
        echo "Starting slave ndbcluster " $OPTS
1503
 
      fi
1504
 
      ./ndb/ndbcluster $OPTS \
1505
 
                      || NDB_SLAVE_STATUS_OK=0
1506
 
      #                > /dev/null 2>&1 || NDB_SLAVE_STATUS_OK=0
1507
 
      cd $savedir
1508
 
      if [ x$NDB_SLAVE_STATUS_OK != x1 ] ; then
1509
 
        if [ x$FORCE != x1 ] ; then
1510
 
          exit 1
1511
 
        fi
1512
 
        USE_NDBCLUSTER_SLAVE_OPT=
1513
 
        USE_NDBCLUSTER_SLAVE=
1514
 
      fi
1515
 
      USE_NDBCLUSTER_SLAVE_OPT=$USE_NDBCLUSTER_SLAVE
1516
 
    fi
1517
 
  else
1518
 
    USE_NDBCLUSTER_SLAVE_OPT=
1519
 
  fi
1520
 
 
1521
 
  # Remove stale binary logs and old master.info files
1522
 
  # except for too tests which need them
1523
 
  if [ "$tname" != "rpl_crash_binlog_ib_1b" ] && [ "$tname" != "rpl_crash_binlog_ib_2b" ] && [ "$tname" != "rpl_crash_binlog_ib_3b" ]
1524
 
  then
1525
 
    $RM -f $MYSQL_TEST_DIR/var/log/$slave_ident-*bin.*
1526
 
    $RM -f $slave_datadir/master.info $slave_datadir/relay-log.info
1527
 
  fi
1528
 
 
1529
 
  #run slave initialization shell script if one exists
1530
 
  if [ -f "$slave_init_script" ] ;
1531
 
  then
1532
 
        /bin/sh $slave_init_script
1533
 
  fi
1534
 
 
1535
 
  if [ -z "$SLAVE_MASTER_INFO" ] ; then
1536
 
    master_info="--master-user=root \
1537
 
          --master-connect-retry=1 \
1538
 
          --master-host=127.0.0.1 \
1539
 
          --master-password="" \
1540
 
          --master-port=$MASTER_MYPORT \
1541
 
          --server-id=$slave_server_id --rpl-recovery-rank=$slave_rpl_rank"
1542
 
 else
1543
 
   master_info=$SLAVE_MASTER_INFO
1544
 
 fi
1545
 
 
1546
 
  if [ x$SLAVE_MYSQLDBINLOG = x1 ]
1547
 
  then
1548
 
    SLAVE_MYSQLD_BINLOG_OPT="--log-bin=$MYSQL_TEST_DIR/var/log/$slave_ident-bin --log-slave-updates"
1549
 
  fi
1550
 
 
1551
 
  $RM -f $slave_datadir/log.*
1552
 
  slave_args="--no-defaults $master_info \
1553
 
            --exit-info=256 \
1554
 
          $SLAVE_MYSQLDBINLOG_OPT \
1555
 
          --relay-log=$MYSQL_TEST_DIR/var/log/$slave_ident-relay-bin \
1556
 
          --log=$slave_log \
1557
 
          --basedir=$MY_BASEDIR \
1558
 
          --datadir=$slave_datadir \
1559
 
          --pid-file=$slave_pid \
1560
 
          --port=$slave_port \
1561
 
          --port-open-timeout=380 \
1562
 
          --socket=$slave_sock \
1563
 
          --character-sets-dir=$CHARSETSDIR \
1564
 
          --default-character-set=$CHARACTER_SET \
1565
 
          --core --init-rpl-role=slave \
1566
 
          --tmpdir=$MYSQL_TMP_DIR \
1567
 
          --language=$LANGUAGE \
1568
 
          --skip-innodb --skip-ndbcluster --skip-slave-start \
1569
 
          --slave-load-tmpdir=$SLAVE_LOAD_TMPDIR \
1570
 
          --report-host=127.0.0.1 --report-user=root \
1571
 
          --report-port=$slave_port \
1572
 
          --master-retry-count=10 \
1573
 
          -O slave_net_timeout=10 \
1574
 
          --log-bin-trust-function-creators \
1575
 
           $SMALL_SERVER \
1576
 
           $SLAVE_MYSQLD_BINLOG_OPT \
1577
 
           $EXTRA_SLAVE_MYSQLD_OPT $EXTRA_SLAVE_OPT \
1578
 
           $USE_NDBCLUSTER_SLAVE_OPT"
1579
 
  CUR_MYERR=$slave_err
1580
 
  CUR_MYSOCK=$slave_sock
1581
 
 
1582
 
  if [ x$DO_DDD = x1 ]
1583
 
  then
1584
 
    $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
1585
 
    launch_in_background $slave_ident ddd -display $DISPLAY --debugger \
1586
 
     "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD
1587
 
  elif [ x$DO_GDB = x1 ]
1588
 
  then
1589
 
    if [ x$MANUAL_GDB = x1 ]
1590
 
    then
1591
 
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
1592
 
      echo "To start gdb for the slave, type in another window:"
1593
 
      echo "cd $MYSQL_TEST_DIR ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
1594
 
      wait_for_slave=1500
1595
 
    else
1596
 
      ( $ECHO set args $slave_args;
1597
 
      if [ $USE_MANAGER = 0 ] ; then
1598
 
    cat <<EOF
1599
 
b mysql_parse
1600
 
commands 1
1601
 
disa 1
1602
 
end
1603
 
r
1604
 
EOF
1605
 
      fi )  > $GDB_SLAVE_INIT
1606
 
      launch_in_background $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \
1607
 
      gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD
1608
 
    fi
1609
 
  else
1610
 
    launch_in_background $slave_ident $SLAVE_MYSQLD $slave_args
1611
 
  fi
1612
 
  eval "SLAVE$1_RUNNING=1"
1613
 
  sleep_until_file_created $slave_pid $wait_for_slave
1614
 
  wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
1615
 
}
1616
 
 
1617
 
mysql_start ()
1618
 
{
1619
 
# We should not start the daemon here as we don't know the arguments
1620
 
# for the test.  Better to let the test start the daemon
1621
 
 
1622
 
#  $ECHO "Starting MySQL daemon"
1623
 
#  start_master
1624
 
#  start_slave
1625
 
  cd $MYSQL_TEST_DIR
1626
 
  return 1
1627
 
}
1628
 
 
1629
 
stop_slave ()
1630
 
{
1631
 
  eval "this_slave_running=\$SLAVE$1_RUNNING"
1632
 
  slave_ident="slave$1"
1633
 
  if [ -n "$1" ] ;
1634
 
  then
1635
 
   slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid"
1636
 
  else
1637
 
   slave_pid=$SLAVE_MYPID
1638
 
  fi
1639
 
  if [ x$this_slave_running = x1 ]
1640
 
  then
1641
 
    pid=`$CAT $slave_pid`
1642
 
    shutdown_mysqld $pid $slave_ident
1643
 
    if [ $? != 0 ] && [ -f $slave_pid ]
1644
 
    then # try harder!
1645
 
      $ECHO "slave not cooperating with mysqladmin, will try manual kill"
1646
 
      kill $pid
1647
 
      sleep_until_file_deleted $pid $slave_pid
1648
 
      if [ -f $slave_pid ] ; then
1649
 
        $ECHO "slave refused to die. Sending SIGKILL"
1650
 
        kill -9 `$CAT $slave_pid`
1651
 
        $RM -f $slave_pid
1652
 
      else
1653
 
        $ECHO "slave responded to SIGTERM "
1654
 
      fi
1655
 
    else
1656
 
      sleep $SLEEP_TIME_AFTER_RESTART
1657
 
    fi
1658
 
    eval "SLAVE$1_RUNNING=0"
1659
 
    if [ -n "$USE_NDBCLUSTER_SLAVE_OPT" ] ; then
1660
 
      savedir=`pwd`
1661
 
      cd $MYSQL_TEST_DIR
1662
 
        $ECHO "Stopping slave cluster"
1663
 
      ./ndb/ndbcluster $NDBCLUSTER_OPTS_SLAVE --stop
1664
 
      rm_ndbcluster_tables $SLAVE_MYDDIR
1665
 
      cd $savedir
1666
 
    fi
1667
 
  fi
1668
 
}
1669
 
 
1670
 
stop_slave_threads ()
1671
 
{
1672
 
  eval "this_slave_running=\$SLAVE$1_RUNNING"
1673
 
  slave_ident="slave$1"
1674
 
  if [ x$this_slave_running = x1 ]
1675
 
  then
1676
 
    $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$slave_ident.sock stop-slave > /dev/null 2>&1
1677
 
  fi
1678
 
}
1679
 
 
1680
 
stop_master ()
1681
 
{
1682
 
  eval "this_master_running=\$MASTER$1_RUNNING"
1683
 
  if [ x$this_master_running = x1 ]
1684
 
  then
1685
 
    # For embedded server we don't stop anyting but mark that
1686
 
    # MASTER_RUNNING=0 to get cleanup when calling start_master().
1687
 
    if [ x$USE_EMBEDDED_SERVER != x1 ] ; then
1688
 
      pid=`$CAT $MASTER_MYPID$1`
1689
 
      shutdown_mysqld $pid master $1
1690
 
      if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ]
1691
 
      then # try harder!
1692
 
        $ECHO "master not cooperating with mysqladmin, will try manual kill"
1693
 
        kill $pid
1694
 
        sleep_until_file_deleted $pid $MASTER_MYPID$1
1695
 
        if [ -f $MASTER_MYPID$1 ] ; then
1696
 
          $ECHO "master refused to die. Sending SIGKILL"
1697
 
          kill -9 `$CAT $MASTER_MYPID$1`
1698
 
          $RM -f $MASTER_MYPID$1
1699
 
        else
1700
 
          $ECHO "master responded to SIGTERM "
1701
 
        fi
1702
 
      else
1703
 
        sleep $SLEEP_TIME_AFTER_RESTART
1704
 
      fi
1705
 
    fi
1706
 
    eval "MASTER$1_RUNNING=0"
1707
 
  fi
1708
 
}
1709
 
 
1710
 
mysql_stop ()
1711
 
{
1712
 
  if [ "$MASTER_RUNNING" = 1 ]
1713
 
  then
1714
 
    $ECHO  "Ending Tests"
1715
 
    $ECHO  "Shutting-down MySQL daemon"
1716
 
    $ECHO  ""
1717
 
    stop_master
1718
 
    stop_master 1
1719
 
    $ECHO "Master shutdown finished"
1720
 
    stop_slave
1721
 
    stop_slave 1
1722
 
    stop_slave 2
1723
 
    $ECHO "Slave shutdown finished"
1724
 
    stop_ndbcluster
1725
 
  fi
1726
 
  return 1
1727
 
}
1728
 
 
1729
 
mysql_restart ()
1730
 
{
1731
 
  mysql_stop
1732
 
  mysql_start
1733
 
  return 1
1734
 
}
1735
 
 
1736
 
mysql_loadstd () {
1737
 
 
1738
 
    # cp $STD_DATA/*.frm $STD_DATA/*.MRG $MASTER_MYDDIR/test
1739
 
    return 1
1740
 
}
1741
 
 
1742
 
run_testcase ()
1743
 
{
1744
 
 tf=$1
1745
 
 tname=`$BASENAME $tf .test`
1746
 
 master_opt_file=$TESTDIR/$tname-master.opt
1747
 
 slave_opt_file=$TESTDIR/$tname-slave.opt
1748
 
 master_init_script=$TESTDIR/$tname-master.sh
1749
 
 slave_init_script=$TESTDIR/$tname-slave.sh
1750
 
 slave_master_info_file=$TESTDIR/$tname.slave-mi
1751
 
 tsrcdir=$TESTDIR/$tname-src
1752
 
 result_file="r/$tname.result"
1753
 
 echo $tname > $CURRENT_TEST
1754
 
 SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0 \& \( $tname : federated \) = 0`
1755
 
 NDBCLUSTER_TEST=`$EXPR \( $tname : '.*ndb.*' \) != 0`
1756
 
 if [ "x$USE_NDBCLUSTER_ALL" = "x1" ] ; then
1757
 
   NDBCLUSTER_TEST=1
1758
 
 fi
1759
 
 if [ "x$USE_NDBCLUSTER_ONLY" = "x1" -a "x$NDBCLUSTER_TEST" != "x1" ] ; then
1760
 
   skip_test $tname
1761
 
   return
1762
 
 fi
1763
 
 if [ "$USE_MANAGER" = 1 ] ; then
1764
 
  many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)`
1765
 
 fi
1766
 
 if $EXPR "$tname" '<' "$START_FROM" > /dev/null ; then
1767
 
   #skip_test $tname
1768
 
   return
1769
 
 fi
1770
 
 
1771
 
 if [ "$SKIP_TEST" ] ; then
1772
 
   if $EXPR \( "$tname" : "$SKIP_TEST" \) > /dev/null ; then
1773
 
     skip_test $tname
1774
 
     return
1775
 
   fi
1776
 
 fi
1777
 
 
1778
 
 if [ "$DO_TEST" ] ; then
1779
 
   if $EXPR \( "$tname" : "$DO_TEST" \) > /dev/null ; then
1780
 
     : #empty command to keep some shells happy
1781
 
   else
1782
 
     #skip_test $tname
1783
 
     return
1784
 
   fi
1785
 
 fi
1786
 
 
1787
 
 if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; then
1788
 
   skip_test $tname
1789
 
   return
1790
 
 fi
1791
 
 
1792
 
# if [ -f "$TESTDIR/$tname.disabled" ]
1793
 
# then
1794
 
#   comment=`$CAT $TESTDIR/$tname.disabled`;
1795
 
#   disable_test $tname "$comment"
1796
 
#   return
1797
 
# fi
1798
 
 if [ -f "$TESTDIR/disabled.def" ] ; then
1799
 
   comment=`$GREP "^$tname *: *" $TESTDIR/disabled.def`;
1800
 
   if [ -n "$comment" ]
1801
 
   then
1802
 
     comment=`echo $comment | sed 's/^[^:]*: *//'`
1803
 
     disable_test $tname "$comment"
1804
 
     return
1805
 
   fi
1806
 
 fi
1807
 
 
1808
 
 if [ "x$USE_EMBEDDED_SERVER" != "x1" ] ; then
1809
 
   # Stop all slave threads, so that we don't have useless reconnection
1810
 
   #  attempts and error messages in case the slave and master servers restart.
1811
 
   stop_slave_threads
1812
 
   stop_slave_threads 1
1813
 
   stop_slave_threads 2
1814
 
 fi
1815
 
 
1816
 
 # FIXME temporary solution, we will get a new C version of this
1817
 
 # script soon anyway so it is not worth it spending the time
1818
 
 if [ "x$USE_EMBEDDED_SERVER" = "x1" -a -z "$DO_TEST" ] ; then
1819
 
   for t in \
1820
 
       "init_connect" \
1821
 
       "init_file"
1822
 
   do
1823
 
     if [ "$tname" = "$t" ] ; then
1824
 
       skip_test $tname
1825
 
       return
1826
 
     fi
1827
 
   done
1828
 
 fi
1829
 
 
1830
 
 if [ $USE_RUNNING_SERVER -eq 0 ] ;
1831
 
 then
1832
 
   if [ -f $master_opt_file ] ;
1833
 
   then
1834
 
     EXTRA_MASTER_OPT=`$CAT $master_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1835
 
     case "$EXTRA_MASTER_OPT" in
1836
 
       --timezone=*)
1837
 
         TZ=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--timezone=;;"`
1838
 
         export TZ
1839
 
         # Note that this must be set to space, not "" for test-reset to work
1840
 
         EXTRA_MASTER_OPT=" "
1841
 
         ;;
1842
 
       --result-file=*)
1843
 
         result_file=`$ECHO "$EXTRA_MASTER_OPT" | $SED -e "s;--result-file=;;"`
1844
 
         result_file="r/$result_file.result"
1845
 
         # Note that this must be set to space, not "" for test-reset to work
1846
 
         EXTRA_MASTER_OPT=" "
1847
 
         ;;
1848
 
       --force-restart)
1849
 
         # Note that this must be set to space, not "" for test-reset to work
1850
 
         EXTRA_MASTER_OPT=" "
1851
 
         ;;
1852
 
     esac
1853
 
     stop_master
1854
 
     stop_master 1
1855
 
 
1856
 
     # only stop the cluster if this test will not use cluster
1857
 
     if [ x$NDBCLUSTER_TEST != x1 ] ;
1858
 
     then
1859
 
       stop_ndbcluster
1860
 
     fi
1861
 
 
1862
 
     report_current_test $tname
1863
 
     USING_NDBCLUSTER=$NDBCLUSTER_TEST
1864
 
     # start_ndbcluster knows if cluster is already started
1865
 
     start_ndbcluster
1866
 
     start_master
1867
 
     if [ x$USING_NDBCLUSTER = x1 -a -z "$DO_BENCH" -a -z "$DO_STRESS" ] ; then
1868
 
       echo "CURRENT_TEST: $tname" >> $MASTER_MYERR"1"
1869
 
       start_master 1
1870
 
     fi
1871
 
     TZ=$MY_TZ; export TZ
1872
 
   else
1873
 
     # If we had extra master opts to the previous run
1874
 
     # or there is no master running (FIXME strange.....)
1875
 
     # or there is a master init script
1876
 
     if [ ! -z "$EXTRA_MASTER_OPT" ] || [ x$MASTER_RUNNING != x1 ] || \
1877
 
        [ -f $master_init_script ] || \
1878
 
        [ -n "$USE_NDBCLUSTER" -a x$NDBCLUSTER_TEST != x$USING_NDBCLUSTER ]
1879
 
     then
1880
 
       EXTRA_MASTER_OPT=""
1881
 
       stop_master
1882
 
       stop_master 1
1883
 
 
1884
 
       # only stop the cluster if this test will not use cluster
1885
 
       if [ x$NDBCLUSTER_TEST != x1 ] ;
1886
 
       then
1887
 
         stop_ndbcluster
1888
 
       fi
1889
 
 
1890
 
       report_current_test $tname
1891
 
       USING_NDBCLUSTER=$NDBCLUSTER_TEST
1892
 
       # start_ndbcluster knows if cluster is already started
1893
 
       start_ndbcluster
1894
 
       start_master
1895
 
       if [ x$USING_NDBCLUSTER = x1  -a -z "$DO_BENCH" -a -z "$DO_STRESS" ] ; then
1896
 
         echo "CURRENT_TEST: $tname" >> $MASTER_MYERR"1"
1897
 
         start_master 1
1898
 
       fi
1899
 
     else
1900
 
       report_current_test $tname
1901
 
     fi
1902
 
   fi
1903
 
 
1904
 
   # We never start a slave if embedded server is used
1905
 
   if [ "x$USE_EMBEDDED_SERVER" != "x1" ] ; then
1906
 
     do_slave_restart=0
1907
 
     if [ -f $slave_opt_file ] ;
1908
 
     then
1909
 
       EXTRA_SLAVE_OPT=`$CAT $slave_opt_file | $SED -e "s;\\$MYSQL_TEST_DIR;$MYSQL_TEST_DIR;"`
1910
 
       do_slave_restart=1
1911
 
     else
1912
 
      if [ ! -z "$EXTRA_SLAVE_OPT" ] || [ x$SLAVE_RUNNING != x1 ] ;
1913
 
      then
1914
 
        EXTRA_SLAVE_OPT=""
1915
 
        do_slave_restart=1
1916
 
      fi
1917
 
     fi
1918
 
 
1919
 
     if [ -f $slave_master_info_file ] ; then
1920
 
       SLAVE_MASTER_INFO=`$CAT $slave_master_info_file`
1921
 
       do_slave_restart=1
1922
 
     else
1923
 
       if [ ! -z "$SLAVE_MASTER_INFO" ] || [ x$SLAVE_RUNNING != x1 ] ;
1924
 
       then
1925
 
         SLAVE_MASTER_INFO=""
1926
 
         do_slave_restart=1
1927
 
       fi
1928
 
     fi
1929
 
 
1930
 
     USING_NDBCLUSTER=$NDBCLUSTER_TEST
1931
 
     if [ -n "$USE_NDBCLUSTER_SLAVE_OPT" ] ; then
1932
 
       if [ x$USING_NDBCLUSTER != x1 ] ; then
1933
 
         do_slave_restart=1
1934
 
       fi
1935
 
     else
1936
 
       if [ x$USING_NDBCLUSTER = x1 ] ; then
1937
 
         do_slave_restart=1
1938
 
       fi
1939
 
     fi
1940
 
 
1941
 
 
1942
 
     if [ x$do_slave_restart = x1 ] ; then
1943
 
       stop_slave
1944
 
       echo "CURRENT_TEST: $tname" >> $SLAVE_MYERR
1945
 
       start_slave
1946
 
     else
1947
 
       echo "CURRENT_TEST: $tname" >> $SLAVE_MYERR
1948
 
     fi
1949
 
     if [ x$many_slaves = x1 ]; then
1950
 
      start_slave 1
1951
 
      start_slave 2
1952
 
     fi
1953
 
   fi
1954
 
 fi
1955
 
 
1956
 
 if [ "x$START_AND_EXIT" = "x1" ] ; then
1957
 
  echo "Servers started, exiting"
1958
 
  exit
1959
 
 fi
1960
 
 
1961
 
 cd $MYSQL_TEST_DIR
1962
 
 
1963
 
 if [ -f $tf ] ; then
1964
 
    $RM -f r/$tname.*reject
1965
 
    mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
1966
 
    if [ -z "$DO_CLIENT_GDB" ] ; then
1967
 
      `$VALGRIND_MYSQLTEST $MYSQL_TEST  $mysql_test_args < $tf 2> $TIMEFILE`;
1968
 
    else
1969
 
      do_gdb_test "$mysql_test_args" "$tf"
1970
 
    fi
1971
 
 
1972
 
    res=$?
1973
 
 
1974
 
    # Save the testcase log to mysqltest log file
1975
 
    echo "CURRENT_TEST: $tname" >> $MYSQLTEST_LOG
1976
 
    cat $TIMEFILE >> $MYSQLTEST_LOG
1977
 
 
1978
 
    pname=`$ECHO "$tname                        "|$CUT -c 1-24`
1979
 
    RES="$pname"
1980
 
 
1981
 
    if [ x$many_slaves = x1 ] ; then
1982
 
     stop_slave 1
1983
 
     stop_slave 2
1984
 
    fi
1985
 
 
1986
 
    if [ $res = 0 ]; then
1987
 
      total_inc
1988
 
      pass_inc
1989
 
      TIMER=""
1990
 
      if [ x$USE_TIMER = x1 -a -f "$MY_LOG_DIR/timer" ]; then
1991
 
        TIMER=`cat $MY_LOG_DIR/timer`
1992
 
        TIMER=`$PRINTF "%13s" $TIMER`
1993
 
      fi
1994
 
      $ECHO "$RES$RES_SPACE [ pass ]   $TIMER"
1995
 
    else
1996
 
      # why the following ``if'' ? That is why res==1 is special ?
1997
 
      if [ $res = 62 ]; then
1998
 
        skip_inc
1999
 
        $ECHO "$RES$RES_SPACE [ skipped ]"
2000
 
      else
2001
 
        if [ $res -ne 1 ]; then
2002
 
          $ECHO "mysqltest returned unexpected code $res, it has probably crashed" >> $TIMEFILE
2003
 
        fi
2004
 
        total_inc
2005
 
        fail_inc
2006
 
        $ECHO "$RES$RES_SPACE [ fail ]"
2007
 
        $ECHO
2008
 
        error_is
2009
 
        show_failed_diff $tname
2010
 
        $ECHO
2011
 
        if [ x$FORCE != x1 ] ; then
2012
 
         $ECHO "Aborting: $tname failed in $TEST_MODE mode. To continue, re-run with '--force'."
2013
 
         $ECHO
2014
 
         if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && \
2015
 
            [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
2016
 
         then
2017
 
           mysql_stop
2018
 
         fi
2019
 
         exit 1
2020
 
        fi
2021
 
        FAILED_CASES="$FAILED_CASES $tname"
2022
 
        if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && \
2023
 
           [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ]
2024
 
        then
2025
 
          mysql_restart
2026
 
        fi
2027
 
      fi
2028
 
    fi
2029
 
  fi
2030
 
}
2031
 
 
2032
 
run_stress_test()
2033
 
{
2034
 
 
2035
 
  STRESS_BASEDIR="$MYSQL_TEST_DIR/var/stress"
2036
 
 
2037
 
  #Clean-up old stress test basedir
2038
 
  if [ -d $STRESS_BASEDIR ] ; then 
2039
 
    $RM -rf $STRESS_BASEDIR
2040
 
  fi
2041
 
  #Create stress test basedir 
2042
 
  mkdir $STRESS_BASEDIR
2043
 
 
2044
 
  if [ "$STRESS_SUITE" != "main" -a "$STRESS_SUITE" != "default" ] ; then
2045
 
    STRESS_SUITE_DIR="$MYSQL_TEST_DIR/suite/$STRESS_SUITE"
2046
 
  else
2047
 
    STRESS_SUITE_DIR="$MYSQL_TEST_DIR"
2048
 
  fi
2049
 
 
2050
 
  if [ -d "$STRESS_SUITE_DIR" ] ; then 
2051
 
    STRESS_SUITE_T_DIR="$STRESS_SUITE_DIR/t"
2052
 
    STRESS_SUITE_R_DIR="$STRESS_SUITE_DIR/r"
2053
 
    #FIXME: check that dirs above are exist
2054
 
  else
2055
 
    echo "Directory $STRESS_SUITE_DIR with test suite doesn't exists. Abort stress testing"
2056
 
    exit 1
2057
 
  fi
2058
 
  
2059
 
  if [ -n "$STRESS_TEST" ] ; then 
2060
 
    STRESS_TEST_FILE="$STRESS_BASEDIR/stress_tests.txt"
2061
 
    echo $STRESS_TEST > $STRESS_TEST_FILE
2062
 
  elif [ -n "$STRESS_TEST_FILE" ] ; then    
2063
 
    STRESS_TEST_FILE="$STRESS_SUITE_DIR/$STRESS_TEST_FILE"
2064
 
    if [ ! -f  "$STRESS_TEST_FILE" ] ; then 
2065
 
      echo "Specified file $STRESS_TEST_FILE with list of tests does not exist"
2066
 
      echo "Please ensure that file exists and has proper permissions"
2067
 
      exit 1
2068
 
    fi
2069
 
  else 
2070
 
    STRESS_TEST_FILE="$STRESS_SUITE_DIR/stress_tests.txt"
2071
 
    if [ ! -f  "$STRESS_TEST_FILE" ] ; then 
2072
 
      echo "Default file $STRESS_TEST_FILE with list of tests does not exist."
2073
 
      echo "Please use --stress-test-file option to specify custom one or you can" 
2074
 
      echo "just specify name of test for testing as last argument in command line"
2075
 
      exit 1
2076
 
    fi
2077
 
  fi
2078
 
 
2079
 
  if [ -n "$STRESS_INIT_FILE" ] ; then 
2080
 
    STRESS_INIT_FILE="$STRESS_SUITE_DIR/$STRESS_INIT_FILE"
2081
 
    if [ ! -f  "$STRESS_INIT_FILE" ] ; then 
2082
 
      echo "Specified file $STRESS_INIT_FILE with list of tests doesn't exist."
2083
 
      echo "Please ensure that file exists and has proper permissions"
2084
 
      exit 1
2085
 
    fi
2086
 
  else
2087
 
    STRESS_INIT_FILE="$STRESS_SUITE_DIR/stress_init.txt"
2088
 
    #Check for default init file
2089
 
    if [ ! -f "$STRESS_INIT_FILE" ] ; then 
2090
 
      STRESS_INIT_FILE=""
2091
 
    fi
2092
 
  fi
2093
 
 
2094
 
  if [ "$STRESS_MODE" != "random" -a "$STRESS_MODE" != "seq" ] ; then
2095
 
    echo "You specified wrong mode '$STRESS_MODE' for stress test."
2096
 
    echo "Correct values are 'random' or 'seq'"
2097
 
    exit 1
2098
 
  fi
2099
 
 
2100
 
  STRESS_TEST_ARGS="--server-socket=$MASTER_MYSOCK \
2101
 
                    --server-user=$DBUSER \
2102
 
                    --server-database=$DB \
2103
 
                    --stress-suite-basedir=$MYSQL_TEST_DIR \
2104
 
                    --suite=$STRESS_SUITE \
2105
 
                    --stress-tests-file=$STRESS_TEST_FILE \
2106
 
                    --stress-basedir=$STRESS_BASEDIR \
2107
 
                    --server-logs-dir=$STRESS_BASEDIR \
2108
 
                    --stress-mode=$STRESS_MODE \
2109
 
                    --mysqltest=$CLIENT_BINDIR/mysqltest \
2110
 
                    --threads=$STRESS_THREADS \
2111
 
                    --verbose \
2112
 
                    --cleanup \
2113
 
                    --log-error-details \
2114
 
                    --abort-on-error" 
2115
 
  
2116
 
  if [ -n "$STRESS_INIT_FILE" ] ; then 
2117
 
    STRESS_TEST_ARGS="$STRESS_TEST_ARGS --stress-init-file=$STRESS_INIT_FILE"
2118
 
  fi
2119
 
 
2120
 
  if [ -z "$STRESS_LOOP_COUNT" -a -z  "$STRESS_TEST_COUNT" -a 
2121
 
       -z "$STRESS_TEST_DURATION" ] ; then 
2122
 
 
2123
 
    #Limit stress testing with 20 loops in case when any limit parameter
2124
 
    #was specified
2125
 
    STRESS_TEST_COUNT=20
2126
 
  fi
2127
 
 
2128
 
  if [ -n "$STRESS_LOOP_COUNT" ] ; then 
2129
 
    STRESS_TEST_ARGS="$STRESS_TEST_ARGS --loop-count=$STRESS_LOOP_COUNT"
2130
 
  fi
2131
 
 
2132
 
  if [ -n "$STRESS_TEST_COUNT" ] ; then 
2133
 
    STRESS_TEST_ARGS="$STRESS_TEST_ARGS --test-count=$STRESS_TEST_COUNT"
2134
 
  fi
2135
 
 
2136
 
  if [ -n "$STRESS_TEST_DURATION" ] ; then 
2137
 
    STRESS_TEST_ARGS="$STRESS_TEST_ARGS --test-duration=$STRESS_TEST_DURATION"
2138
 
  fi  
2139
 
 
2140
 
  echo "Stress test related variables:"
2141
 
  echo "TESTS                - $1"
2142
 
  echo "STRESS               - $DO_STRESS"
2143
 
  echo "STRESS_SUITE         - $STRESS_SUITE"
2144
 
  echo "STRESS_TEST_FILE     - $STRESS_TEST_FILE"
2145
 
  echo "STRESS_INIT_FILE     - $STRESS_INIT_FILE"
2146
 
  echo "STRESS_THREADS       - $STRESS_THREADS"
2147
 
  echo "STRESS_MODE          - $STRESS_MODE"
2148
 
  echo "STRESS_TEST_COUNT    - $STRESS_TEST_COUNT"
2149
 
  echo "STRESS_LOOP_COUNT    - $STRESS_LOOP_COUNT"  
2150
 
  echo "STRESS_TEST_DURATION - $STRESS_TEST_DURATION"
2151
 
 
2152
 
  #echo "$STRESS_TEST_ARGS";
2153
 
  #Run stress test 
2154
 
  $MYSQL_TEST_DIR/mysql-stress-test.pl $STRESS_TEST_ARGS
2155
 
 
2156
 
 
2157
 
}
2158
 
 
2159
 
######################################################################
2160
 
# Main script starts here
2161
 
######################################################################
2162
 
 
2163
 
[ "$DO_GCOV" -a ! -x "$GCOV" ] && error "No gcov found"
2164
 
 
2165
 
[ "$DO_GCOV" ] && gcov_prepare
2166
 
[ "$DO_GPROF" ] && gprof_prepare
2167
 
 
2168
 
if [ $USE_RUNNING_SERVER -eq 0 ]
2169
 
then
2170
 
  if [ -z "$FAST_START" ]
2171
 
  then
2172
 
    # Ensure that no old mysqld test servers are running
2173
 
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2174
 
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK1 -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2175
 
    $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2176
 
    $MYSQLADMIN --no-defaults --host=$hostname --port=$MASTER_MYPORT --protocol=tcp -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2177
 
    $MYSQLADMIN --no-defaults --host=$hostname --protocol=tcp --port=`expr $MASTER_MYPORT + 1` -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2178
 
    $MYSQLADMIN --no-defaults --host=$hostname --protocol=tcp --port=$SLAVE_MYPORT -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2179
 
    $MYSQLADMIN --no-defaults --host=$hostname --protocol=tcp --port=`expr $SLAVE_MYPORT + 1` -u root -O connect_timeout=5 -O shutdown_timeout=20 shutdown > /dev/null 2>&1
2180
 
    sleep_until_file_deleted 0 $MASTER_MYPID
2181
 
    sleep_until_file_deleted 0 $MASTER_MYPID"1"
2182
 
    sleep_until_file_deleted 0 $SLAVE_MYPID
2183
 
  else
2184
 
    rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID
2185
 
  fi
2186
 
 
2187
 
  # just to force stopping anything from previous runs
2188
 
  USE_NDBCLUSTER_OPT=$USE_NDBCLUSTER
2189
 
  stop_ndbcluster
2190
 
 
2191
 
  # Remove files that can cause problems
2192
 
  $RM -rf $MYSQL_TEST_DIR/var/ndbcluster
2193
 
  $RM -rf $MYSQL_TEST_DIR/var/tmp/snapshot*
2194
 
  $RM -rf $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*
2195
 
 
2196
 
  # Remove old berkeley db log files that can confuse the server
2197
 
  $RM -f $MASTER_MYDDIR/log.*
2198
 
  $RM -f $MASTER_MYDDIR"1"/log.*
2199
 
 
2200
 
  # Remove old log and reject files
2201
 
  $RM -f r/*.reject r/*.progress r/*.log r/*.warnings
2202
 
 
2203
 
  wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
2204
 
  wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
2205
 
  $ECHO "Installing Test Databases"
2206
 
  mysql_install_db
2207
 
 
2208
 
  if [ -n "$1" -a `expr "X$*" : '.*ndb'` -eq 0 ]
2209
 
  then
2210
 
    USING_NDBCLUSTER=0
2211
 
    USE_NDBCLUSTER_OPT=
2212
 
  fi
2213
 
 
2214
 
  mysql_start
2215
 
  $ECHO  "Loading Standard Test Databases"
2216
 
  mysql_loadstd
2217
 
fi
2218
 
 
2219
 
$ECHO  "Starting Tests"
2220
 
 
2221
 
# Some test cases need USE_RUNNING_SERVER
2222
 
export USE_RUNNING_SERVER
2223
 
 
2224
 
#
2225
 
# This can probably be deleted
2226
 
#
2227
 
if [ "$DO_BENCH" = 1 ]
2228
 
then
2229
 
  start_master
2230
 
 
2231
 
  if [ "$DO_SMALL_BENCH" = 1 ]
2232
 
  then
2233
 
    EXTRA_BENCH_ARGS="--small-test --small-tables"
2234
 
  fi
2235
 
 
2236
 
  if [ x$USING_NDBCLUSTER = x1 ]
2237
 
  then
2238
 
    EXTRA_BENCH_ARGS="--create-options=TYPE=ndb $EXTRA_BENCH_ARGS"
2239
 
  fi 
2240
 
 
2241
 
  BENCHDIR=$BASEDIR/sql-bench/
2242
 
  savedir=`pwd`
2243
 
  cd $BENCHDIR
2244
 
  if [ -z "$1" ]
2245
 
  then
2246
 
    ./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS --log
2247
 
  else
2248
 
    if [ -x "./$1" ]
2249
 
    then
2250
 
       ./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
2251
 
    else
2252
 
      echo "benchmark $1 not found"
2253
 
    fi
2254
 
  fi
2255
 
  cd $savedir
2256
 
  mysql_stop
2257
 
  exit
2258
 
fi
2259
 
 
2260
 
#
2261
 
# Stress testing
2262
 
#
2263
 
if [ "$DO_STRESS" = 1 ] 
2264
 
then
2265
 
 
2266
 
  if [ -n "$1" ] ; then
2267
 
    STRESS_TEST="$1";
2268
 
  fi                      
2269
 
 
2270
 
  if [ $USE_RUNNING_SERVER -eq 0 ] ; then 
2271
 
    start_master
2272
 
  fi
2273
 
 
2274
 
  run_stress_test
2275
 
 
2276
 
  if [ $USE_RUNNING_SERVER -eq 0 ] ; then
2277
 
    mysql_stop
2278
 
  fi
2279
 
  
2280
 
  exit
2281
 
 
2282
 
fi
2283
 
 
2284
 
 
2285
 
$ECHO
2286
 
if [ x$USE_TIMER = x1 ] ; then
2287
 
$ECHO "TEST                            RESULT        TIME (ms)"
2288
 
else
2289
 
$ECHO "TEST                            RESULT"
2290
 
fi
2291
 
$ECHO $DASH72
2292
 
 
2293
 
if [ -z "$1" ] ;
2294
 
then
2295
 
  if [ x$RECORD = x1 ]; then
2296
 
    $ECHO "Will not run in record mode without a specific test case."
2297
 
  else
2298
 
    for tf in $TESTDIR/*.$TESTSUFFIX
2299
 
    do
2300
 
      run_testcase $tf
2301
 
    done
2302
 
    $RM -f $TIMEFILE    # Remove for full test
2303
 
  fi
2304
 
else
2305
 
  while [ ! -z "$1" ]; do
2306
 
    tname=`$BASENAME $1 .test`
2307
 
    tf=$TESTDIR/$tname.$TESTSUFFIX
2308
 
    if [ -f $tf ] ; then
2309
 
      run_testcase $tf
2310
 
    else
2311
 
      $ECHO "Test case $tf does not exist."
2312
 
    fi
2313
 
    shift
2314
 
  done
2315
 
fi
2316
 
 
2317
 
$ECHO $DASH72
2318
 
$ECHO
2319
 
 
2320
 
if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && [ -z "$DO_DDD" ]
2321
 
then
2322
 
    mysql_stop
2323
 
fi
2324
 
report_stats
2325
 
$ECHO
2326
 
 
2327
 
[ "$DO_GCOV" ] && gcov_collect # collect coverage information
2328
 
[ "$DO_GPROF" ] && gprof_collect # collect coverage information
2329
 
 
2330
 
if [ $TOT_FAIL -ne 0 ]; then
2331
 
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
2332
 
  $ECHO
2333
 
  exit 1
2334
 
fi
2335
 
if [ $GOT_WARNINGS -ne 0 ]; then
2336
 
  exit 1
2337
 
fi
2338
 
exit 0