blob: 3bba865271ceab03d77c749296276766feacb18a [file] [log] [blame]
#!/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