#!/bin/sh

export PATH=$PATH:./bin

rm -rf data archive
mkdir archive
initdb -D data --no-locale --encoding=UTF8
cp data/postgresql.conf data/postgresql.conf.orig
cat <<EOF >> data/postgresql.conf
port = 5439
wal_level = hot_standby
max_wal_senders = 5
archive_mode = on
archive_command = 'cp -i %p ../archive/%f'
hot_standby = on
EOF

cat <<EOF >> data/pg_hba.conf
host replication all 0.0.0.0/0 trust
EOF

pg_ctl -D data start -w

psql -p 5439 -c "select pg_start_backup('foo')"
rm -rf data2
cp -r data data2
rm -f data2/postmaster.pid
psql -p 5439 -c "select pg_stop_backup()"

cp data2/postgresql.conf.orig data2/postgresql.conf
cat <<EOF >> data2/postgresql.conf
port = 5438
wal_level = hot_standby
hot_standby = on
EOF

cat <<EOF > data2/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=127.0.0.1 port=5439 dbname=test'
restore_command = 'cp ../archive/%f %p'
EOF

pg_ctl -D data2 start -w

psql -p 5438 -c "select pg_start_backup('1')"
rm -rf data3
cp -r data2 data3
rm -f data3/postmaster.pid
cp data2/global/pg_control data3/global
psql -p 5438 -c "select pg_stop_backup()"

rm -rf archive2
mkdir archive2
cp data3/postgresql.conf.orig data3/postgresql.conf
cat <<EOF >> data3/postgresql.conf
wal_level = hot_standby
port = 5437
archive_mode = on
archive_command = 'cp -i %p ../archive2/%f'
EOF

cat <<EOF > data3/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=172.0.0.1 port=5439 dbname=test'
restore_command = 'cp ../archive/%f %p'
trigger_file = '/tmp/3'
EOF

pg_ctl -D data3 start -w

sleep 2

touch /tmp/3

pg_ctl -D data3 stop

rm -rf data3

psql -p 5438 -c "select pg_start_backup('1')"
cp -r data2 data3
rm -f data3/postmaster.pid
cp data2/global/pg_control data3/global
psql -p 5438 -c "select pg_stop_backup()"

rm -rf archive2
mkdir archive2
cp data3/postgresql.conf.orig data3/postgresql.conf
cat <<EOF >> data3/postgresql.conf
port = 5437
wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i %p ../archive2/%f'
EOF

cat <<EOF > data3/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=172.0.0.1 port=5439 dbname=test'
restore_command = 'cp ../archive/%f %p'
trigger_file = '/tmp/3'
EOF

pg_ctl -D data3 start -w

psql -p 5437 -c "checkpoint"
psql -p 5439 -c "checkpoint"

touch /tmp/3