#!/bin/sh

if [ -z "$OLDBIN" ]
then
	echo "Set env OLDBIN."
fi

if [ -z "$NEWBIN" ]
then
	echo "Set env NEWBIN."
fi

TRG=`pwd`/data
echo "Use output dir: $TRG"

do_upgrade()
{
	OLD_FOO="old-foo.tmp"
	OLD_BAR="old-bar.tmp"
	OLD_BAZ="old-baz.tmp"
	NEW_FOO="new-foo.tmp"
	NEW_BAR="new-bar.tmp"
	NEW_BAZ="new-baz.tmp"
	$OLDBIN/bin/pg_ctl -D $DATA -l $DATA/logfile start
	$OLDBIN/bin/psql -c "SELECT * FROM FOO" postgres > $OLD_FOO
	$OLDBIN/bin/psql -c "SELECT * FROM BAR" postgres > $OLD_BAR
	$OLDBIN/bin/psql -c "SELECT * FROM BAZ" postgres > $OLD_BAZ
	$OLDBIN/bin/pg_ctl -D $DATA stop

	$NEWBIN/bin/initdb --no-instructions -D $NEWDATA
	$NEWBIN/bin/pg_upgrade				\
		-d $DATA -D $NEWDATA			\
		-b $OLDBIN/bin -B $NEWBIN/bin	\
		--copy
	$NEWBIN/bin/pg_ctl -D $NEWDATA -l $NEWDATA/logfile start || exit 1
	$NEWBIN/bin/psql -c "SELECT * FROM FOO" postgres > $NEW_FOO || exit 1
	$NEWBIN/bin/psql -c "SELECT * FROM BAR" postgres > $NEW_BAR || exit 1
	$NEWBIN/bin/psql -c "SELECT * FROM BAZ" postgres > $NEW_BAZ || exit 1
	$NEWBIN/bin/pg_ctl -D $NEWDATA stop

	if ! diff --suppress-common-lines $OLD_FOO $NEW_FOO
	then
		echo ">>> FAIL - FOO <<<"
		exit 1
	fi

	if ! diff --suppress-common-lines $OLD_BAR $NEW_BAR
	then
		echo ">>> FAIL - BAR <<<"
		exit 1
	fi

	if ! diff --suppress-common-lines $OLD_BAZ $NEW_BAZ
	then
		echo ">>> FAIL - BAZ <<<"
		exit 1
	fi
	rm $OLD_FOO $OLD_BAR $OLD_BAZ $NEW_FOO $NEW_BAR $NEW_BAZ
}

# simple
DATA=$TRG/simple
NEWDATA=$TRG/simple-new
rm -f -R $NEWDATA
do_upgrade

# offset wrap
DATA=$TRG/offset-wrap
NEWDATA=$TRG/offset-wrap-new
rm -f -R $NEWDATA
do_upgrade

# multi wrap
DATA=$TRG/multi-wrap
NEWDATA=$TRG/multi-wrap-new
rm -f -R $NEWDATA
do_upgrade

# offset and multi wrap
DATA=$TRG/offset-multi-wrap
NEWDATA=$TRG/offset-multi-wrap-new
rm -f -R $NEWDATA
do_upgrade

echo ">>> SUCCESS <<<"
