gh-ost/localtests/test.sh

105 lines
2.7 KiB
Bash
Raw Normal View History

2016-08-22 07:20:17 +00:00
#!/bin/bash
2016-08-22 09:51:03 +00:00
# set -e
2016-08-22 07:20:17 +00:00
tests_path=$(dirname $0)
2016-08-22 09:13:18 +00:00
test_logfile=/tmp/gh-ost-test.log
2016-08-22 07:20:17 +00:00
2016-08-22 09:13:18 +00:00
master_host=
master_port=
replica_host=
replica_port=
2016-08-22 07:20:17 +00:00
2016-08-22 09:13:18 +00:00
verify_master_and_replica() {
if [ "$(gh-ost-test-mysql-master -e "select 1" -ss)" != "1" ] ; then
echo "Cannot verify gh-ost-test-mysql-master"
exit 1
fi
read master_host master_port <<< $(gh-ost-test-mysql-master -e "select @@hostname, @@port" -ss)
if [ "$(gh-ost-test-mysql-replica -e "select 1" -ss)" != "1" ] ; then
echo "Cannot verify gh-ost-test-mysql-replica"
exit 1
fi
read replica_host replica_port <<< $(gh-ost-test-mysql-replica -e "select @@hostname, @@port" -ss)
}
2016-08-22 09:51:03 +00:00
exec_cmd() {
echo "$@"
command "$@" 1> $test_logfile 2>&1
return $?
}
2016-08-22 09:13:18 +00:00
test_single() {
local test_name
test_name="$1"
2016-08-22 07:20:17 +00:00
echo "Testing: $test_name"
2016-08-22 09:13:18 +00:00
gh-ost-test-mysql-replica -e "start slave"
gh-ost-test-mysql-master test < $tests_path/$test_name/create.sql
2016-08-22 09:51:03 +00:00
extra_args=""
2016-08-22 09:13:18 +00:00
if [ -f $tests_path/$test_name/extra_args ] ; then
2016-08-22 09:51:03 +00:00
# mapfile -t <$tests_path/$test_name/extra_args
# echo "${MAPFILE[@]}"
extra_args=($(cat $tests_path/$test_name/extra_args))
echo ${extra_args[@]}
2016-08-22 09:13:18 +00:00
fi
columns="*"
if [ -f $tests_path/$test_name/test_columns ] ; then
columns=$(cat $tests_path/$test_name/test_columns)
fi
go run go/cmd/gh-ost/main.go \
--user=gh-ost \
--password=gh-ost \
--host=$replica_host \
--port=$replica_port \
--database=test \
--table=gh_ost_test \
--alter="engine=innodb" \
--exact-rowcount \
--switch-to-rbr \
--initially-drop-old-table \
--initially-drop-ghost-table \
--throttle-query="select timestampdiff(second, min(last_update), now()) < 5 from _gh_ost_test_ghc" \
--serve-socket-file=/tmp/gh-ost.test.sock \
--initially-drop-socket-file \
--postpone-cut-over-flag-file=/tmp/gh-ost.postpone.flag \
--test-on-replica \
--verbose \
--debug \
--stack \
2016-08-22 09:51:03 +00:00
--execute "${extra_args[@]}"
2016-08-22 09:13:18 +00:00
if [ $? -ne 0 ] ; then
echo "ERROR $test_name execution failure. See $test_logfile"
return 1
fi
orig_checksum=$(gh-ost-test-mysql-replica test -e "select ${columns} from gh_ost_test" -ss | md5sum)
ghost_checksum=$(gh-ost-test-mysql-replica test -e "select ${columns} from _gh_ost_test_gho" -ss | md5sum)
gh-ost-test-mysql-replica -e "start slave"
if [ "$orig_checksum" != "$ghost_checksum" ] ; then
echo "ERROR $test_name: checksum mismatch"
return 1
fi
}
test_all() {
find $tests_path ! -path . -type d -mindepth 1 -maxdepth 1 | cut -d "/" -f 3 | while read test_name ; do
test_single "$test_name"
2016-08-22 09:51:03 +00:00
if [ $? -ne 0 ] ; then
echo "+ FAIL"
return 1
else
echo "+ pass"
fi
2016-08-22 09:13:18 +00:00
done
}
verify_master_and_replica
test_all