#!/bin/sh
BIN=$1
SRC=${2:-.}
W=/tmp/initdb_repro
PORT=5460

rm -rf $W
mkdir -p $W
cd $W
$BIN/initdb -D $W/old -U pgu -g --no-data-checksums --wal-segsize=32 --locale=C -N >/dev/null 2>&1

echo
echo "=== case 2  group access ==="
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old -D $W/new -U pgu --initdb >$W/c2.log 2>&1
echo "rc=$?"
echo "old $(ls -ld $W/old | cut -c1-10)"
echo "new $(ls -ld $W/new | cut -c1-10)"

echo
echo "=== case 3  new bindir taken from PATH ==="
echo "without --initdb"
PATH=/usr/bin:/bin $BIN/pg_upgrade -b $BIN -d $W/old -D $W/n3 -U pgu 2>&1 | sed -n '1,2p'
echo "with --initdb"
PATH=/usr/bin:/bin $BIN/pg_upgrade -b $BIN -d $W/old -D $W/n3 -U pgu --initdb 2>&1 | sed -n '1,3p'

echo
echo "=== case 4  log directory left behind ==="
ls -d $W/*.initdb_log

$BIN/pg_ctl -D $W/old -o "-c listen_addresses='' -c port=$PORT -c unix_socket_directories=$W" -l $W/old.log start >/dev/null 2>&1
sleep 1
$BIN/psql -h $W -p $PORT -U pgu -d postgres -qc "CREATE TABLE bad (c regproc)"
$BIN/pg_ctl -D $W/old stop >/dev/null 2>&1

echo
echo "=== case 5  directory created by the operator is removed ==="
mkdir -p $W/mine
echo "before $(test -d $W/mine && echo present)"
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old -D $W/mine -U pgu --initdb >$W/c5.log 2>&1
grep -m1 "failed check" $W/c5.log
echo "after  $(test -d $W/mine && echo present || echo removed)"
$BIN/pg_ctl -D $W/old stop >/dev/null 2>&1

echo
echo "=== case 6a  --check --initdb exit code ==="
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old -D $W/c6 -U pgu --check --initdb >$W/c6.log 2>&1
echo "check rc=$?"
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old -D $W/c7 -U pgu --initdb >$W/c7.log 2>&1
echo "real  rc=$?"

echo
$BIN/pg_ctl -D $W/old stop >/dev/null 2>&1

echo "=== case 6b  --check --initdb against a running old cluster ==="
$BIN/initdb -D $W/old2 -U pgu -N >/dev/null 2>&1
$BIN/initdb -D $W/new2 -U pgu -N >/dev/null 2>&1
$BIN/pg_ctl -D $W/old2 -o "-c listen_addresses='' -c port=$PORT -c unix_socket_directories=$W" -l $W/old2.log start >/dev/null 2>&1
sleep 1
echo "plain --check"
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old2 -D $W/new2 -U pgu --check 2>&1 | sed -n '$p'
echo "--check --initdb"
$BIN/pg_upgrade -b $BIN -B $BIN -d $W/old2 -D $W/c9 -U pgu --check --initdb 2>&1 | sed -n '2p'
$BIN/pg_ctl -D $W/old2 stop >/dev/null 2>&1
