#! /bin/sh # This is slapped together as a quick way to run the tests and # is not meant for prime time. Please hack at it and submit # changes, though, so we can gradually turn it into something # that will run on all platforms (or incorporate it into the # standard mysql-test-run). # All paths below must be relative to $test_data_dir top_builddir=../.. mysql_test_dir=$top_builddir/mysql-test examples=$top_builddir/libmysqld/examples mysqltest=$examples/mysqltest datadir=$mysql_test_dir/var/master-data test_data_dir=test gdb=0 list=0 run= tests= start= clean=1 cr=" " er="\b\b\b\b\b\b\b\b" usage () { cat <<EOF usage: $0 [-g|-h|-r] [test-name ...] -C | --noclean Do not remove old innodb and bdb files at start. -g | --gdb run $mysqltest in gdb -h | --help show this help -l | --list ) list all available tests -r | --run automatically 'run' program in gdb -s t | --start=t start with test t (skip all tests before t) EOF } init_args="--server-arg=--language=$top_builddir/sql/share/english" while test $# -gt 0 do arg= argset=0 case "$1" in --?*=* ) arg=`echo "$1" | sed -e 's,^[^=][^=]*=,,'`; argset=1 ;; esac case "$1" in -g | --gdb ) gdb=1; shift;; -h | --help | -\? ) usage; exit 0;; -l | --list ) list=1 ; shift ;; -r | --run ) run="${cr}run"; shift;; --debug) init_args="$init_args --debug" ; shift ;; -C | --noclean) clean=0 ; shift ;; -s | --start=* ) test $argset -eq 0 && { shift; arg="$1"; } start="$arg" shift ;; -* ) usage; exit 1;; * ) tests="$tests $1"; shift;; esac done if test ! -d "$datadir/$test_data_dir" then echo "bad setup (is '$datadir/$test_data_dir'', missing ?)" >&2 exit 1 fi test -n "$tests" || tests=`/bin/ls -1 "$mysql_test_dir"/t/*.test | grep -v '^.*/rpl[^/]*$' | \ sed -e 's,^.*/,,' -e 's,.test$,,'` echo "cleaning data directory '$datadir/$test_data_dir'" if test $clean = 1 then rm -f $datadir/ib_* $datadir/ibdata* rm -f $datadir/log.00* fi rm -f $datadir/../tmp/* rm -f test-gdbinit TZ=GMT-3; export TZ # At least one of the tests needs the following environment variable MYSQL_TEST_DIR=`( cd $mysql_test_dir ; pwd )` ; export MYSQL_TEST_DIR skip=1 test -z "$start" && skip=0 for b in $tests do test $list -eq 1 && { echo " $b"; continue; } test $skip -eq 1 && test -n "$start" && test "$start" = "$b" && skip=0 test $skip -eq 1 && { echo "skipping '$b'"; continue; } t="t/$b.test" r="r/$b.result" # Only test if $t exists; there is no $r for some tests test -f $mysql_test_dir/$t || { echo "test '$mysql_test_dir/$t' doesn't exist" >&2 continue } args="$init_args -v --basedir=$mysql_test_dir/ -R $r -x $t --server-arg=--datadir=$datadir" if test -f "$mysql_test_dir/t/$b-master.opt" ; then args="$args --server-file=t/$b-master.opt" fi args="$args $test_data_dir" # Add database last echo "set args $args$run" > test-gdbinit #if false && test -n "$run" if test -n "$run" -o $gdb -eq 1 then echo -e "$er>>> $b" else echo -e "$er>>> $b> \c" read junk fi if test $gdb -eq 1 then if [ -x "$top_builddir/libtool" ]; then $top_builddir/libtool gdb -x test-gdbinit -q $mysqltest else gdb -x test-gdbinit -q $mysqltest fi res=$? rm -f test-gdbinit else $mysqltest $args res=$? fi test $res -eq 0 -o $res -eq 2 || echo "!!! error: $res" done