tests: Replication slave can be triggered to act as the master

This commit is contained in:
Sameer Naik
2015-10-29 23:06:15 +05:30
parent e6445f27a3
commit c0f09c83b8

View File

@@ -347,3 +347,54 @@ create_full_container_mounted() {
cleanup_running_containers $CONTAINER_NAME-slave
cleanup_volumes_content
}
@test "Replication slave can be triggered to act as the master" {
create_container -d --name $CONTAINER_NAME-master \
-e POSTGRESQL_USER=$POSTGRESQL_USER \
-e POSTGRESQL_PASSWORD=$POSTGRESQL_PASSWORD \
-e POSTGRESQL_DATABASE=$POSTGRESQL_DATABASE \
-e POSTGRESQL_REPLICATION_MODE=master \
-e POSTGRESQL_REPLICATION_USER=$POSTGRESQL_REPLICATION_USER \
-e POSTGRESQL_REPLICATION_PASSWORD=$POSTGRESQL_REPLICATION_PASSWORD
create_container -d --name $CONTAINER_NAME-slave \
--link $CONTAINER_NAME-master:master \
-e POSTGRESQL_REPLICATION_MODE=slave \
-e POSTGRESQL_REPLICATION_USER=$POSTGRESQL_REPLICATION_USER \
-e POSTGRESQL_REPLICATION_PASSWORD=$POSTGRESQL_REPLICATION_PASSWORD
psql_client master -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "CREATE TABLE users (id serial, name varchar(40) NOT NULL);"
psql_client master -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "INSERT INTO users(name) VALUES ('Marko');"
run psql_client slave -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "SELECT * FROM users;"
[[ "$output" =~ "Marko" ]]
[ $status = 0 ]
# stop and remove the existing master
cleanup_running_containers $CONTAINER_NAME-master
# trigger slave to become master
docker exec $CONTAINER_NAME-slave touch /tmp/postgresql.trigger.5432
sleep $SLEEP_TIME
psql_client slave -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "INSERT INTO users(name) VALUES ('Polo');"
run psql_client slave -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "SELECT * FROM users;"
[[ "$output" =~ "Marko" ]]
[[ "$output" =~ "Polo" ]]
[ $status = 0 ]
# create new slave that connects to the new master
create_container -d \
--link $CONTAINER_NAME-slave:master \
-e POSTGRESQL_REPLICATION_MODE=slave \
-e POSTGRESQL_REPLICATION_USER=$POSTGRESQL_REPLICATION_USER \
-e POSTGRESQL_REPLICATION_PASSWORD=$POSTGRESQL_REPLICATION_PASSWORD
run psql_client -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "SELECT * FROM users;"
[[ "$output" =~ "Marko" ]]
[[ "$output" =~ "Polo" ]]
[ $status = 0 ]
cleanup_running_containers
cleanup_running_containers $CONTAINER_NAME-slave
}