summaryrefslogtreecommitdiff
path: root/libmysqld/examples/test-run
blob: aea5b13eaba1d2caaecfbf60d4800a0d2b48faf2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#! /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_embedded
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*
  rm -f $datadir/test/*.db
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