diff --git a/localtests/test.sh b/localtests/test.sh index 6c03507..524cf9e 100755 --- a/localtests/test.sh +++ b/localtests/test.sh @@ -3,12 +3,88 @@ set -e tests_path=$(dirname $0) -cd $tests_path +test_logfile=/tmp/gh-ost-test.log -gh-ost-test-mysql-master -e "select 1" -gh-ost-test-mysql-replica -e "select 1" +master_host= +master_port= +replica_host= +replica_port= +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) +} + +test_single() { + local test_name + test_name="$1" -find . ! -path . -type d | cut -d "/" -f 2 | while read test_name ; do echo "Testing: $test_name" -done + + gh-ost-test-mysql-replica -e "start slave" + gh-ost-test-mysql-master test < $tests_path/$test_name/create.sql + + if [ -f $tests_path/$test_name/extra_args ] ; then + extra_args=$(cat $tests_path/$test_name/extra_args) + 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 \ + --execute $extra_args \ + 1> $test_logfile 2>&1 + + 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 + echo "pass" +} + +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" + done +} + +verify_master_and_replica +test_all