#!/bin/sh
source $1/env_utils.sh $1 $2 $3
case_db="dump_db"
subscription_dir=$1
dump_expected_dir="${subscription_dir}/testcase/dump_expected"
results_dir="${subscription_dir}/results"
dump_result_dir="${results_dir}/dump_results"
mkdir -p $dump_result_dir
function test_1() {
pub_ddl=$1
echo "create database and tables."
exec_sql $db $pub_node1_port "CREATE DATABASE $case_db"
exec_sql $db $sub_node1_port "CREATE DATABASE $case_db"
echo "create publication and subscription."
publisher_connstr="port=$pub_node1_port host=$g_local_ip dbname=$case_db user=$username password=$passwd"
if [ "${pub_ddl}" = "all" ]; then
exec_sql $case_db $pub_node1_port "CREATE PUBLICATION mypub FOR ALL TABLES WITH (ddl='all')"
else
exec_sql $case_db $pub_node1_port "CREATE PUBLICATION mypub FOR ALL TABLES WITH (ddl='table')"
fi
exec_sql $case_db $sub_node1_port "CREATE SUBSCRIPTION mysub CONNECTION '$publisher_connstr' PUBLICATION mypub"
wait_for_subscription_sync $case_db $sub_node1_port
exec_sql $case_db $pub_node1_port "CREATE TABLE test1 (a int, b text)"
exec_sql $case_db $pub_node1_port "INSERT INTO test1 (a, b) VALUES (1, 'one'), (2, 'two')"
wait_for_catchup $case_db $pub_node1_port "mysub"
if [ "$(exec_sql $case_db $sub_node1_port "SELECT a, b FROM test1")" = "1|one
2|two" ]; then
echo "check initial data replicated to subscriber success"
else
echo "$failed_keyword when initial data replicated to subscriber"
exit 1
fi
exec_dump_db $case_db $pub_node1_port "$dump_result_dir/dump_db_pub${pub_ddl}.pub --quote-all-identifiers" "all"
sedcmd="sed -i -e s/gauss/${g_username}/g $dump_expected_dir/dump_db_pub${pub_ddl}.pub"
$sedcmd
diff -I "dolphin.sql_mode" -I "behavior_compat_options" $dump_result_dir/dump_db_pub${pub_ddl}.pub $dump_expected_dir/dump_db_pub${pub_ddl}.pub > ${dump_result_dir}/dump_pub${pub_ddl}_pub.diff
if [ -s ${dump_result_dir}/dump_puball_pub.diff ]; then
echo "$failed_keyword when dump publication"
exit 1
else
echo "check publication dump data success"
fi
exec_dump_db $case_db $sub_node1_port "$dump_result_dir/dump_db_pub${pub_ddl}.sub --quote-all-identifiers" "all"
sedcmd="sed -i -e s/gauss/${g_username}/g $dump_expected_dir/dump_db_pub${pub_ddl}.sub"
$sedcmd
diff -I "dolphin.sql_mode" -I "behavior_compat_options" $dump_result_dir/dump_db_pub${pub_ddl}.sub $dump_expected_dir/dump_db_pub${pub_ddl}.sub > ${dump_result_dir}/dump_pub${pub_ddl}_sub.diff --ignore-matching-lines='password=encryptOpt'
if [ -s ${dump_result_dir}/dump_pub${pub_ddl}_sub.diff ]; then
echo "$failed_keyword when dump subscription"
exit 1
else
echo "check subscription dump data success"
fi
}
function tear_down() {
exec_sql $case_db $sub_node1_port "DROP SUBSCRIPTION IF EXISTS mysub"
exec_sql $case_db $pub_node1_port "DROP PUBLICATION IF EXISTS mypub"
exec_sql $db $sub_node1_port "DROP DATABASE $case_db"
exec_sql $db $pub_node1_port "DROP DATABASE $case_db"
echo "tear down"
}
test_1 'all'
tear_down
test_1 'table'
tear_down