|  | #!/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 | 
|  |  |