summaryrefslogtreecommitdiffstats
path: root/test/test_uscan_svn
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_uscan_svn')
-rwxr-xr-xtest/test_uscan_svn196
1 files changed, 196 insertions, 0 deletions
diff --git a/test/test_uscan_svn b/test/test_uscan_svn
new file mode 100755
index 0000000..fd60e16
--- /dev/null
+++ b/test/test_uscan_svn
@@ -0,0 +1,196 @@
+#!/bin/bash
+
+# Copyright (C) 2018, Xavier <yadd@debian.org>
+# 2019-2020, Andrius Merkys <merkys@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+#set -x
+
+DEB_HOST_OS="$(dpkg-architecture -qDEB_HOST_ARCH_OS)"
+if [ "$DEB_HOST_OS" = "kfreebsd" ]; then
+ # kbsd has a non-working semaphore, that is needed here.
+ echo "This test is not supported on $(dpkg-architecture -qDEB_HOST_ARCH), skipping"
+ exit 0
+fi
+
+TESTTYPE=Svn
+. ./lib_test_uscan
+
+COMMAND="chronic_sh uscan --no-conf --compression=xz --dehs"
+
+# prevent the local from messing with this test
+export HOME=""
+export XDG_CONFIG_HOME=""
+
+# comment out for debug
+#COMMAND="$COMMAND --verbose"
+#COMMAND="$COMMAND --debug"
+
+cleanup(){
+ rm -rf "$TEMP_PKG_DIR"
+}
+
+spawnSvnRepo(){
+ mkdir -p "$TEMP_PKG_DIR/repo"
+ (cd "$TEMP_PKG_DIR/repo" || exit 1
+ chronic_sh svnadmin create .)
+ mkdir -p "$TEMP_PKG_DIR/working-copy"
+ (cd "$TEMP_PKG_DIR/working-copy" || exit 1
+ chronic_sh svn checkout "file:///$TEMP_PKG_DIR/repo" .
+ chronic_sh mkdir trunk tags
+ touch trunk/changelog trunk/file.c
+ chronic_sh svn add trunk tags
+ chronic_sh svn commit -m 'Init'
+ export TZ=UTC
+ for version in 1.0 2.0; do
+ echo "# Version $version" >> trunk/file.c
+ cat >> trunk/changelog <<END
+Version $version
+
+END
+ chronic_sh faketime -f '2000-01-01 12:34:56' svn commit -m "Releasing $version"
+ chronic_sh faketime -f '2000-01-01 12:34:56' svn copy ^/trunk "^/tags/v$version" -m "Version $version"
+ done)
+}
+
+trap cleanup EXIT
+
+containsName(){
+ echo "$1" | grep -F -q "$2"
+ echo $?
+}
+
+# shellcheck source=shunit2-helper-functions.sh
+. "${0%/*}/shunit2-helper-functions.sh"
+
+PKG=foo
+
+makeDebianDir() {
+ WATCHARGS=$1
+ TEMP_PKG_DIR=$(mktemp -d --tmpdir="$SHUNIT_TMPDIR" uscan_svn.XXXXXX)
+ if [ -z "$TEMP_PKG_DIR" ]; then
+ echo "Failed to create temporary directory" >&2
+ exit 1
+ fi
+ mkdir -p "$TEMP_PKG_DIR/$PKG/debian/source"
+ spawnSvnRepo
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=svn,$WATCHARGS" \
+file:///$TEMP_PKG_DIR/repo/tags v([\\d\\.]+)\/ debian
+END
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/changelog"
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ echo '3.0 (quilt)' > "$TEMP_PKG_DIR/$PKG/debian/source/format"
+}
+
+makeDebianDirHead() {
+ WATCHARGS=$1
+ makeDebianDir "$WATCHARGS"
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=svn,$WATCHARGS" \
+file:///$TEMP_PKG_DIR/repo/trunk HEAD
+END
+}
+
+helperLaunch() {
+ WATCHARGS=$1
+ ARG="${2:-}"
+ if test "$ARG" = "HEAD"; then
+ makeDebianDirHead "$WATCHARGS"
+ else
+ makeDebianDir "$WATCHARGS"
+ fi
+ ( cd "$TEMP_PKG_DIR/$PKG" || exit 1 ; $COMMAND --watchfile=debian/watch )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "0" "$?"
+}
+
+helperLaunchFail() {
+ WATCHARGS=$1
+ ARG="${2:-}"
+ if test "$ARG" = "HEAD"; then
+ makeDebianDirHead "$WATCHARGS"
+ else
+ makeDebianDir "$WATCHARGS"
+ fi
+ # discard output as it's expected to fail
+ ( cd "$TEMP_PKG_DIR/$PKG" || exit 1 ; $COMMAND --watchfile=debian/watch > /dev/null)
+ assertEquals "uscan: exit_code!=2 but exit_code=2" "2" "$?"
+}
+
+testSvn() {
+ helperLaunch "pgpmode=none"
+ TARBALL="${PKG}_2.0.orig.tar.xz"
+ CHECKSUM=$(sha1sum "$TEMP_PKG_DIR/${PKG}-2.0.tar.xz" | awk '{print $1}')
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ if [ "$CHECKSUM" != 'bd4a60786013848e402bcf20db211fd465afeda5' ]; then
+ set -x
+ echo "Copying the faulty tarball to the artefact directory, if available..."
+ if [ -n "${AUTOPKGTEST_ARTIFACTS:-}" ] && [ -d "$AUTOPKGTEST_ARTIFACTS" ]; then
+ cp -v "$TEMP_PKG_DIR/${PKG}-2.0.tar.xz" "$AUTOPKGTEST_ARTIFACTS"/
+ fi
+ set +x
+ fi
+ assertTrue 'checksums do not match' "[ '${CHECKSUM}' = 'bd4a60786013848e402bcf20db211fd465afeda5' ]"
+ cleanup
+}
+
+testSvnPgpmodeDefault() {
+ helperLaunch "pgpmode=default"
+ TARBALL="${PKG}_2.0.orig.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testSvnPgpmodeNext() {
+ helperLaunchFail "pgpmode=next"
+ cleanup
+}
+
+testSvnHead() {
+ helperLaunch "pgpmode=none" HEAD
+ ORIG="$TEMP_PKG_DIR/foo_0.0~svn4.orig.tar.xz"
+ UPSTREAM="$TEMP_PKG_DIR/foo-0.0~svn4.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$UPSTREAM' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$ORIG' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$ORIG' ]"
+ cleanup
+}
+
+testSvnHeadMangle() {
+ helperLaunch "pgpmode=none,uversionmangle=s/^[^~]+/1.23.45/" HEAD
+ ORIG="$TEMP_PKG_DIR/foo_1.23.45~svn4.orig.tar.xz"
+ UPSTREAM="$TEMP_PKG_DIR/foo-1.23.45~svn4.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$UPSTREAM' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$ORIG' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$ORIG' ]"
+ cleanup
+}
+
+# shellcheck disable=SC1091
+. shunit2