#!/bin/sh
#######################################################################
#
# svnmirror-test.sh
#
# Script for testing svn-mirror.sh
#
# License:
#    The same as svn itself. for latest version check:
#    http://svn.apache.org/repos/asf/subversion/trunk/subversion/LICENSE
#
#######################################################################

SVNMIRROR="$PWD/svnmirror.sh"

if [ ! -d tmp ]; then
	mkdir tmp
fi
cd tmp
TMPDIR="$PWD"

TMPOUT="$TMPDIR/svnmirror.out"
TMPERR="$TMPDIR/svnmirror.err"

RHOST="localhost"
LREPOS="${TMPDIR}/lrepos"
RREPOS="${TMPDIR}/rrepos"
LWC="${TMPDIR}/lwc"
RWC="${TMPDIR}/rwc"

PARAMS="push:none pull:none push:filter pull:filter"

mirror_check() {
	EXPRC="$1"
	EXPOUT="$2"
	EXPERR="$3"
	ERR=0
	$SVNMIRROR > $TMPOUT 2> $TMPERR
	RC="$?"
	RC2=0
	if [ $RC -gt 0 ]; then
		RC2=1
	fi
	if [ "$RC2" != "$RC" ]; then
		echo "unexpected return code: $RC (expected $EXPRC)"
		ERR=1
	fi
	if [ -n "$EXPOUT" ]; then
		egrep "$EXPOUT" "$TMPOUT" > /dev/null 2>&1
		GRC="$?"
		if [ $GRC -gt 0 ]; then
			echo "expected out not found"
			ERR=1
		fi
	fi
	if [ -n "$EXPERR" ]; then
		egrep "$EXPERR" "$TMPERR" > /dev/null 2>&1
		GRC="$?"
		if [ $GRC -gt 0 ]; then
			echo "expected err not found"
			ERR=1
		fi
	fi
	if [ "$ERR" = "0" ]; then
		echo "OK."
	else
		echo "+++ STDOUT +++"
		cat "$TMPOUT"
		echo "+++ STDERR +++"
		cat "$TMPERR"
		echo "+++ END +++"
	fi
}

for P in ${PARAMS}; do
	MODE=`echo "$P" | sed 's/:.*$//'`
	FLTR=`echo "$P" | sed 's/^.*://'`
	echo ""
	echo "*** Testing $MODE filter $FLTR ***"
	echo ""
	if [ "$MODE" = "push" ]; then
		SRCREPOS="$LREPOS"
		DSTREPOS="$RREPOS"
		SRCWC="$LWC"
		DSTWC="$RWC"
	else
		SRCREPOS="$RREPOS"
		DSTREPOS="$LREPOS"
		SRCWC="$RWC"
		DSTWC="$LWC"
	fi
	FILTER=""
	if [ "$FLTR" = "filter" ]; then
		FILTER="include trunk"
	fi
	if [ -d "$LREPOS" ]; then
		rm -rf "$LREPOS"
	fi
	if [ -d "$RREPOS" ]; then
		rm -rf "$RREPOS"
	fi
	if [ -d "$LWC" ]; then
		rm -rf "$LWC"
	fi
	if [ -d "$RWC" ]; then
		rm -rf "$RWC"
	fi
	svnadmin create "$RREPOS"
	svnadmin create "$LREPOS"
	svn co "file://$LREPOS" "$LWC" > /dev/null
	svn co "file://$RREPOS" "$RWC" > /dev/null
	export MODE FILTER LREPOS RREPOS RHOST

	echo "Test 1: both repos empty"
	mirror_check 0 "both repositories are already at" ""

	echo "Test 2: add trunk branches and tags."
	svn mkdir "$SRCWC/trunk" > /dev/null
	svn mkdir "$SRCWC/branches" > /dev/null
	svn mkdir "$SRCWC/tags" > /dev/null
	svn ci "$SRCWC" -m "add trunk branches and tags." > /dev/null
	mirror_check 0 "successfully completed." ""

	echo "Test 3: filter check."
	svn ls "file://$SRCREPOS" > "$TMPOUT"
	svn ls "file://$DSTREPOS" > "$TMPERR"
	if [ "$FLTR" = "none" ]; then
		CMD="cat"
	else
		CMD="egrep ^trunk/"
	fi
	N=`$CMD "$TMPOUT" | diff - "$TMPERR" | wc -l`
	if [ $N -gt 0 ]; then
		echo "error."
		echo "+++ STDOUT +++"
		cat "$TMPOUT"
		echo "+++ STDERR +++"
		cat "$TMPERR"
		echo "+++ END +++"
	else
		echo "OK."
	fi

	# should be the last test bacause all following would fail
	echo "Test 99: commit to destination repos."
	svn up "$DSTWC" > /dev/null
	echo "wrong repos" > "$DSTWC/trunk/wrong_repos.txt"
	svn add "$DSTWC/trunk/wrong_repos.txt" > /dev/null
	svn ci "$DSTWC" -m "commit to wrong repos" > /dev/null
	mirror_check 1 "" "revision of .* repos is higher than .* one"
done

