#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash load $BATS_TEST_DIRNAME/helper/query-server-common.bash setup() { setup_common TMPDIRS=$(pwd)/tmpdirs init_helper $TMPDIRS cd $TMPDIRS } init_helper() { TMPDIRS=$1 mkdir -p "${TMPDIRS}/dbs1" for i in {1..3}; do mkdir "${TMPDIRS}/dbs1/repo${i}" cd "${TMPDIRS}/dbs1/repo${i}" dolt init mkdir -p "${TMPDIRS}/rem1/repo${i}" dolt remote add remote1 "file://../../rem1/repo${i}" done } clone_helper() { TMPDIRS=$1 mkdir -p "${TMPDIRS}/dbs2" for i in {1..3}; do cd $TMPDIRS if [ -f "rem1/repo${i}/manifest" ]; then dolt clone "file://./rem1/repo${i}" "dbs2/repo${i}" cd "dbs2/repo${i}" dolt remote add remote1 "file://../../rem1/repo${i}" fi done cd $TMPDIRS } push_helper() { TMPDIRS=$1 for i in {1..3}; do cd "${TMPDIRS}/dbs1/repo${i}" dolt push remote1 main done cd $TMPDIRS } teardown() { stop_sql_server 1 teardown_common rm -rf $TMPDIRS cd $BATS_TMPDIR dolt config --list | awk '{ print $1 }' | grep sqlserver.global | xargs -r dolt config --global --unset } @test "replication-multidb: load global vars" { dolt config --global --add sqlserver.global.dolt_replicate_to_remote remote1 cd dbs1/repo1 dolt config --local --add sqlserver.global.dolt_replicate_to_remote unknown cd ../.. run dolt --data-dir=dbs1 sql -b -q "select @@GLOBAL.dolt_replicate_to_remote" [ "$status" -eq 0 ] [[ "$output" =~ "remote1" ]] || false } @test "replication-multidb: push on sqlengine commit" { dolt config --global --add sqlserver.global.dolt_replicate_to_remote remote1 dolt --data-dir= dbs1 sql -b -q "use repo1; create table t1 (a int primary key)" dolt --data-dir= dbs1 sql -b -q "use repo1; call dolt_add('.')" dolt --data-dir= dbs1 sql -b -q "use repo1; call dolt_commit('-am', 'cm')" dolt --data-dir= dbs1 sql -b -q "use repo2; create table t2 (a int primary key)" dolt --data-dir= dbs1 sql -b -q "use repo2; call dolt_add('.')" dolt --data-dir= dbs1 sql -b -q "use repo2; call dolt_commit('-am', 'cm')" dolt --data-dir= dbs1 sql -b -q "use repo3; create table t3 (a int primary key)" dolt --data-dir= dbs1 sql -b -q "use repo3; call dolt_add('.')" dolt --data-dir= dbs1 sql -b -q "use repo3; call dolt_commit('-am', 'cm')" clone_helper $TMPDIRS run dolt --data-dir=dbs2 sql -b -q "use repo1; show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "t1" ]] || false [[ ! "$output" =~ "t2" ]] || false [[ ! "$output" =~ "t3" ]] || false run dolt --data-dir=dbs2 sql -b -q "use repo2; show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "t2" ]] || false [[ ! n"$output" =~ "t1" ]] || false [[ ! "$output" =~ "t3" ]] || faalse run dolt --data-dir=dbs2 sql -b -q "use repo3; show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "t3" ]] || false [[ ! "$output" =~ "t1" ]] || false [[ ! "$output" =~ "t2" ]] || false } @test "replication-multidb: push newly created database" { dolt config --global --add sqlserver.global.dolt_replicate_to_remote remote1 dolt sql -q "set @@persist.dolt_replication_remote_url_template = 'file://$TMPDIRS/rem1/{database}'" dolt --data-dir=dbs1 sql <