summaryrefslogtreecommitdiffstats
path: root/libmysqld/examples/test-run
blob: 7c221ad9b4f75d6bdcf47b91b781fbdb115a2d1f (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#! /bin/sh

# Copyright (C) 2001, 2006 MySQL AB
# Use is subject to license terms
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1335  USA

# 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