#!/bin/bash # Copyright (C) 2018, Xavier # 2019-2020, Andrius Merkys # # 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 <&2 exit 1 fi mkdir -p "$TEMP_PKG_DIR/$PKG/debian/source" spawnSvnRepo cat < "$TEMP_PKG_DIR/$PKG/debian/watch" version=4 opts="mode=svn,$WATCHARGS" \ file:///$TEMP_PKG_DIR/repo/tags v([\\d\\.]+)\/ debian END cat < "$TEMP_PKG_DIR/$PKG/debian/changelog" $PKG (0-1) unstable; urgency=low * Initial release -- Joe Developer 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 < "$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