diff options
Diffstat (limited to 'test/test_uscan_group')
-rwxr-xr-x | test/test_uscan_group | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/test/test_uscan_group b/test/test_uscan_group new file mode 100755 index 0000000..c5e7ef9 --- /dev/null +++ b/test/test_uscan_group @@ -0,0 +1,210 @@ +#!/bin/bash + +# Copyright (C) 2020, Xavier Guimard <yadd@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 + +TESTTYPE=base +test_dir=$(readlink -f "${0%/*}") +. "$test_dir/lib_test_uscan" + +SUFFIX="1" +if command -v dpkg-vendor >/dev/null; then + VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')" + case "$VENDER" in + debian) SUFFIX="1" ;; + *) SUFFIX="0${VENDER}1" ;; + esac +fi + +if test "${1:-}" = --installed; then + COMMAND="uscan --no-conf --compression=gz" + shift +else + top_srcdir=$(readlink -f "${0%/*}/..") + make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate debchange + PATH="$top_srcdir/scripts:$PATH" + export PATH + PERL5LIB="$top_srcdir/lib" + export PERL5LIB + COMMAND="uscan --no-conf --compression=xz" +fi + +COMMANDDEHS="$COMMAND --dehs" + +# comment out for debug +#COMMAND="$COMMAND --debug" + +tearDown(){ + killHttpServer + echo +} + +trap tearDown EXIT + +containsName(){ + echo "$1" | grep -qF "$2" + echo $? +} + +makeRepo() { + lv="$1" + cmpopt1="$2" + lv1="$3" + cmpopt2="$4" + lv2="$5" + cmpopt3="$6" + lv3="$7" + cmpopt4="$8" + lv4="$9" + prev="${10}" + PKG=foo + TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR") + + mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source + spawnHttpServer + PORT=$(cat "$TEMP_PKG_DIR"/repo/port) + + cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch +version=4 +http://localhost:$PORT/ .*$PKG-([\d\.]+).tar.gz $lv + +opts="dversionmangle=auto,component=bar1$cmpopt1" http://localhost:$PORT/ .*bar1-([\d\.]+).tar.gz $lv1 +opts="dversionmangle=auto,component=bar2$cmpopt2" http://localhost:$PORT/ .*bar2-([\d\.]+).tar.gz $lv2 +opts="dversionmangle=auto,component=bar3$cmpopt3" http://localhost:$PORT/ .*bar3-([\d\.]+).tar.gz $lv3 +opts="dversionmangle=auto,component=bar4$cmpopt4" http://localhost:$PORT/ .*bar4-([\d\.]+).tar.gz $lv4 +END + + cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog +$PKG ($prev) unstable; urgency=medium + + * Initial release + + -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100 +END + + echo -n '3.0 (quilt)' > "$TEMP_PKG_DIR"/$PKG/debian/source/format + mkdir -p "$TEMP_PKG_DIR"/repo/foo + touch "$TEMP_PKG_DIR"/repo/foo/content + + # Upstream repo + ( cd "$TEMP_PKG_DIR"/repo ; + tar -czf $PKG-1.0.0.tar.gz $PKG/* ) + + for i in 1 2 3 4; do + # Upstream repo + mkdir -p "$TEMP_PKG_DIR"/repo/bar$i + touch "$TEMP_PKG_DIR"/repo/bar$i/content + ( cd "$TEMP_PKG_DIR"/repo ; + tar -czf bar$i-2.0.$i.tar.gz bar$i/* ) + # Debian dir + mkdir $TEMP_PKG_DIR/$PKG/bar$i + echo '{"name":"bar'$i'","version":"'1.0.$i'"}' > $TEMP_PKG_DIR/$PKG/bar$i/package.json + done +} + +helperDownload() { + next="${11}" + makeRepo "$@" + + OUTPUT=$( cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --dehs ) + BASETARBALL=${PKG}_$next.orig + assertTrue 'pristine tarball foo is not created' "[ -f "$TEMP_PKG_DIR"/$BASETARBALL.tar.gz ]" + assertTrue "malformed target in dehs output: $OUTPUT" \ + $(containsName "$OUTPUT" "<target>$BASETARBALL.tar.gz</target>") + for i in 1 2 3 4; do + assertTrue "pristine tarball bar$i is not created" "[ -f "$TEMP_PKG_DIR"/$BASETARBALL-bar$i.tar.gz ]" + assertTrue "malformed target in dehs output: $OUTPUT" \ + $(containsName "$OUTPUT" "<component-target>$BASETARBALL-bar$i.tar.gz</component-target>") + done + #cat "$TEMP_PKG_DIR"/$PKG/debian/watch +} + +testCmpIgnore() { + helperDownload "debian" "" "ignore" "" "ignore" "" "ignore" "" "ignore" "0.0.1" "1.0.0" +} + +testCmpGroup() { + helperDownload "group" "" "group" "" "group" "" "group" "" "group" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4" +} + +testCmpGroupOneCmpChanged() { + helperDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1+~2.0.2+~2.0.2+~2.0.4" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4" +} + +testCmpPartialGroup() { + helperDownload "group" "" "group" "" "group" "" "ignore" "" "ignore" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.2" +} + +testCmpPartialGroup2() { + helperDownload "group" "" "group" "" "ignore" "" "group" "" "ignore" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.3" +} + +testCmpChecksum() { + helperDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~cs8.0.10" +} + +testCmpChecksumOneCmpChanged() { + helperDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "1.0.0+~cs8.0.9" "1.0.0+~cs8.0.10" +} + +testCmpGroupAndChecksum() { + helperDownload "group" "" "group" "" "checksum" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~2.0.1+~cs6.0.9" +} + +testCmpGroupIgnoreAndChecksum() { + helperDownload "group" "" "group" "" "ignore" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~2.0.1+~cs4.0.7" +} + +helperNoDownload() { + next="${10}" + makeRepo "$@" + + OUTPUT=$( cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --dehs 2>&1 ) + assertTrue "bad change detected: $OUTPUT" \ + $(containsName "$OUTPUT" "<status>up to date</status>") + BASETARBALL=${PKG}_$next.orig + assertTrue 'pristine tarball foo is created' "[ ! -f "$TEMP_PKG_DIR"/$BASETARBALL.tar.gz ]" +} + +testCmpIgnoreND() { + helperNoDownload "debian" "" "ignore" "" "ignore" "" "ignore" "" "ignore" "1.0.0" +} + +testCmpGroupND() { + helperNoDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4" +} + +testCmpGroupRepackND() { + helperNoDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1~ds+~2.0.2+~2.0.3+~2.0.4" +} + +testCmpChecksumND() { + helperNoDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "1.0.0+~cs8.0.10" +} + +# Same test but here Ctype detects change even if previous checksum is wrong +testCmpChecksumCtype() { + helperDownload "group" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" "1.0.0+~cs8.0.10" "1.0.0+~cs8.0.10" +} + +testCmpIgnoreCtype() { + helperNoDownload "debian" ",ctype=nodejs" "ignore" "" "ignore" "" "ignore" "" "ignore" "1.0.0" + assertTrue "Component change is not detected: $OUTPUT" \ + $(containsName "$OUTPUT" "Newest version of bar1 on remote site is 2.0.1, local version is 1.0.1") +} + +. shunit2 |