#!/bin/sh # Copyright (C) 2013, Rafael Laboissiere # # 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=Mangle . ./lib_test_uscan COMMAND="uscan --no-conf" # set safe defaults WEBSCRIPT=":" DEBUGECHO=":" DEBUGLSLR=":" DEBUGBASH=":" # comment out for debug #COMMAND="$COMMAND --debug" #COMMAND="$COMMAND --verbose" #DEBUGECHO=echo #DEBUGLSLR="ls -laR" #DEBUGLSLR="ls -la" #DEBUGBASH="bash -i" # Initial Debian revision value is distribution dependent SUFFIX="1" if which dpkg-vendor >/dev/null 2>&1; 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 cleanup(){ kill -9 $(cat "$TEMP_PKG_DIR"/$REPOPATH/pid) rm -rf "$TEMP_PKG_DIR" echo "" } spawnHttpServer(){ unset http_proxy ( USCAN_HTTP_SERVER=${USCAN_HTTP_SERVER:-server.py} mkdir -p "$TEMP_PKG_DIR"/$REPOPATH cd "$TEMP_PKG_DIR"/$REPOPATH python3 "$test_dir/uscan/$USCAN_HTTP_SERVER" 2>log & echo $! > pid while ! [ -s port ]; do : done unset USCAN_HTTP_SERVER ) } trap cleanup 1 2 3 13 15 containsName(){ echo "$1" | fgrep -q "$2" echo $? } . "${0%/*}/shunit2-helper-functions.sh" # The following tests do the following: (1) create a minimal Debian package # directory, containing minimal files debian/{changelog,watch,copyright}, # (2) create a minimal repository, containing a tarball (built on the fly), # (3) start an HTTP server that works offline, using the SimpleHTTPServer # module of Python, and (4) run uscan inside that minimal universe. # make debian/ in `pwd` # debian/watch contains $WATCHVER and $WATCHLINE with template URL updated makeDebianDir() { DEBNAME=${1:-foo} # Debian source package name DEBVER=${2:-1.0} # Debian source package version mkdir -p debian/source cat < debian/rules %: dh $@ END chmod 755 debian/rules cat < debian/changelog $DEBNAME ($DEBVER) unstable; urgency=low * Release of the $DEBNAME package $DEBVER. -- Joe Developer Mon, 02 Nov 2013 22:21:31 -0100 END # debian/source/format case $DEBVER in *-*) # non-native package echo "3.0 (quilt)" > debian/source/format ;; *) # native package echo "3.0 (native)" > debian/source/format ;; esac # debian/copyright echo "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" \ > debian/copyright if [ "${FILEEXCLUDE:-0}" = "1" ]; then # exclude just for main cat <<'END' >> debian/copyright Files-Excluded: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# END elif [ "${FILEEXCLUDE:-0}" = "2" ]; then # exclude for main(=foo) bar baz cat <<'END' >> debian/copyright Files-Excluded: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# Files-Excluded-bar: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# Files-Excluded-baz: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# END elif [ "${FILEEXCLUDE:-0}" = "3" ]; then # exclude for foo bar baz cat <<'END' >> debian/copyright Files-Excluded-foo: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# Files-Excluded-bar: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# Files-Excluded-baz: exclude-this */exclude-dir .* */js/jquery.js ;?echo?baz;?# END fi # debian/watch echo "version=$WATCHVER" > debian/watch echo "$WATCHLINE" | sed -e "s,@@@url@@@,http://localhost:${PORT}/,g" - \ >> debian/watch # debian/upstream/signing-key.asc mkdir -p debian/upstream if [ "$KEYMODE" = "ASC" ]; then cp -f $test_dir/uscan/PUBLIC_KEY.asc debian/upstream/signing-key.asc else cp -f "$GPGHOME/pubring.gpg" debian/upstream/signing-key.pgp fi } # make tarball in $REPOPATH/$POOLPATH makeUpstreamTar() { UPNAME=${1:-foo} # Upstream package name UPVER=${2:-1.0} # upstream package version COMPRESSION=${3:-gz} # archve compression type TYPE=${4:-non-native} # set this if native-type upstream OLDDIR=`pwd` mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH touch $UPNAME-$UPVER/FILE.$UPNAME.$UPVER touch $UPNAME-$UPVER/include-this touch $UPNAME-$UPVER/exclude-this touch $UPNAME-$UPVER/.hidden mkdir -p "$UPNAME-$UPVER/; echo baz; #/" mkdir -p $UPNAME-$UPVER/exclude-dir touch $UPNAME-$UPVER/exclude-dir/file mkdir -p $UPNAME-$UPVER/subdir/exclude-dir touch $UPNAME-$UPVER/subdir/exclude-dir/file2 mkdir -p $UPNAME-$UPVER/docs/html/js/ touch $UPNAME-$UPVER/docs/html/js/jquery.js if [ "$TYPE" = "native" ]; then cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER makeDebianDir $UPNAME $UPVER cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH fi case $COMPRESSION in gz|gzip) NEWTAR=$UPNAME-$UPVER.tar.gz tar -czf $NEWTAR $UPNAME-$UPVER ;; bz2|bzip2) NEWTAR=$UPNAME-$UPVER.tar.bz2 tar --bzip2 -cf $NEWTAR $UPNAME-$UPVER ;; xz) NEWTAR= $UPNAME-$UPVER.tar.xz tar --xz -cf $NEWTAR $UPNAME-$UPVER ;; zip) NEWTAR=$UPNAME-$UPVER.zip zip -r $NEWTAR $UPNAME-$UPVER ;; *) echo "Wrong compression mode: $COMPRESSION" exit 1 ;; esac case "${SIGMODE:-}" in # undefined SIGMODE → no sig ASC) # make $NEWTAR.asc $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \ --armor --detach-sign $NEWTAR ;; BIN) #make $NEWTAR.sig $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \ --detach-sign $NEWTAR ;; SELF) #make $NEWTAR.gpg $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \ --sign $NEWTAR esac cd $OLDDIR } # setup a common watch file test environment helperWatch() { local SITESCRIPT=${1:-siteWebNonNative} local VEROLD=${2:-1.0} local VERNEW=${3:-2.0} local PREFIX="${4:-}" local TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX) ORIGDIR=`pwd` PKG=${PKG:-foo} REPOPATH=${REPOPATH:-repo} POOLPATH=${POOLPATH:-pool} GZREPACK=${GZREPACK:-xz} MGZREPACK=${MGZREPACK:-gz} XCOMMAND=${XCOMMAND:-$COMMAND} WATCHVER="${WATCHVER:-3}" WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate" WATCHLINE="${WATCHLINE:-$WATCHLINE0}" COMPONENTS=${COMPONENTS:-} FILEEXCLUDE=${FILEEXCLUDE:-0} # no exclude SIGMODE=${SIGMODE:-ASC} # ASC=ASCII or BIN=BINARY or SELF KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY cd "$TEMP_PKG_DIR" # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH spawnHttpServer PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port) $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****" # make web site $SITESCRIPT # make local $VEROLD source tree tar -xzf "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.tar.gz if [ -n "$PREFIX" ]; then mv "$TEMP_PKG_DIR"/${PKG}-${VEROLD} "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD} fi mv "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD} "$TEMP_PKG_DIR"/${PKG} cd "$TEMP_PKG_DIR"/${PKG} if [ ! -d debian ]; then makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX fi local UUPDATE="" if grep -q "uupdate" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then UUPDATE=uupdate fi local PGP="" if grep -q "pgpurlmangle" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then PGP=pgp fi if grep -q "pgpmode *= *auto" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then PGP=pgp fi if grep -q "pgpmode *= *previous" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then PGP=pgp fi $XCOMMAND assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0" cd "$TEMP_PKG_DIR" $DEBUGLSLR UTARBALL=${PKG}-${UVERSION:-${VERNEW}}.tar.gz STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.$MGZREPACK assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]" assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]" if [ "$PGP" = "pgp" ]; then UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.sig if [ ! -f $UTARSIG ]; then UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.asc fi STARSIG=${PKG}_${PREFIX}${VERNEW}.orig.tar.$MGZREPACK.asc assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]" assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]" fi for cpnt in $COMPONENTS; do UTARBALL=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz STARBALL=${PKG}_${PREFIX}${VERNEW}.orig-${cpnt}.tar.$GZREPACK assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]" assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]" if [ "$PGP" = "pgp" ]; then UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.sig if [ ! -f $UTARSIG ]; then UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.asc fi STARSIG=${PKG}_${PREFIX}${VERNEW}.orig-${cpnt}.tar.$GZREPACK.asc assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]" # Skipping this: signature link skipped when upstream file is repacked #assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]" fi done # check uupdate if [ "$UUPDATE" = "uupdate" ]; then cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW} assertTrue 'pristine tarball is not extracted' "[ -f debian/changelog ]" DVERSION=`dpkg-parsechangelog -ldebian/changelog -SVersion` assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW}-$SUFFIX" if [ "$FILEEXCLUDE" != "3" ]; then # main is dummy assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]' fi if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then assertFalse "file that must be excluded is present in the tarball" '[ -f exclude-this ]' assertFalse "hidden file that must be excluded is present in the tarball" '[ -f .hidden ]' assertFalse "dir that must be excluded is present in the tarball" '[ -d exclude-dir ]' assertFalse "subdir that must be excluded is present in the tarball" '[ -d subdir/exclude-dir ]' CONTENTS=$(ls -R) assertFalse "non-root-file that must be excluded is present in the tarball" \ $(containsName "$CONTENTS" jquery.js) assertFalse "path with whitespace that must be excluded is present in the tarball" \ $(containsName "$CONTENTS" "; echo baz; #/") fi for c in $COMPONENTS ; do cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW}/$c assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]' if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then assertFalse "file that must be excluded is present in the orig-$c.tar" '[ -f exclude-this ]' assertFalse "hidden file that must be excluded is present in the orig-$c.tar" '[ -f .hidden ]' assertFalse "dir that must be excluded is present in the orig-$c.tar" '[ -d exclude-dir ]' assertFalse "subdir that must be excluded is present in the orig-$c.tar" '[ -d subdir/exclude-dir ]' CONTENTS=$(ls -R) assertFalse "non-root-file that must be excluded is present in the orig-$c.tar" \ $(containsName "$CONTENTS" jquery.js) assertFalse "path with whitespace that must be excluded is present in the orig-$c.tar" \ $(containsName "$CONTENTS" "; echo baz; #/") fi done cd "$TEMP_PKG_DIR" fi $DEBUGBASH cd $ORIGDIR cleanup unset REPOPATH unset POOLPATH unset GZREPACK unset MGZREPACK unset XCOMMAND unset WATCHVER unset WATCHLINE unset COMPONENTS unset FILEEXCLUDE unset SIGMODE unset KEYMODE } # setup a common watch file test environment to see user-agent helperWatchUA() { local SITESCRIPT=${1:-siteWebNonNative} TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX) ORIGDIR=`pwd` PKG=${PKG:-foo} REPOPATH=${REPOPATH:-repo} POOLPATH=${POOLPATH:-pool} XCOMMAND=${XCOMMAND:-$COMMAND} WATCHVER="${WATCHVER:-3}" WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate" WATCHLINE="${WATCHLINE:-$WATCHLINE0}" KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY cd "$TEMP_PKG_DIR" # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH spawnHttpServer PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port) $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****" # make web site $SITESCRIPT # make local $VEROLD source tree mkdir -p "$TEMP_PKG_DIR"/${PKG} cd "$TEMP_PKG_DIR"/${PKG} if [ ! -d debian ]; then makeDebianDir $PKG 1.0-$SUFFIX fi $XCOMMAND USERAGENTX="$(grep -ie '^User-Agent:' ../repo/log |head -1 | perl -p -e "s/\r//g" )" assertTrue "Bad $USERAGENTX" "[ \"$USERAGENTX\" = \"User-Agent: $USERAGENT\" ]" echo "SENT: \"User-Agent: $USERAGENT\"" echo "GOT : \"$USERAGENTX\"" $DEBUGBASH cd $ORIGDIR cleanup unset REPOPATH unset POOLPATH unset XCOMMAND unset WATCHVER unset WATCHLINE unset KEYMODE } # populate pool directory siteNative() { local PKG=${1:-foo} makeUpstreamTar $PKG 0.0 gz native makeUpstreamTar $PKG 1.0 gz native makeUpstreamTar $PKG 2.0 gz native mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz } siteNonNative() { local PKG=${1:-foo} local EXTRA=${2:-} makeUpstreamTar $PKG 0.0 gz non-native makeUpstreamTar $PKG 1.0 gz non-native makeUpstreamTar $PKG 2.0 gz non-native mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/ if [ -n "$EXTRA" ]; then makeUpstreamTar $PKG 3.0 gz non-native mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/ fi if [ "${SIGMODE:-}" = "ASC" ]; then ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.asc ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.asc ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.asc if [ -n "$EXTRA" ]; then ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.asc fi elif [ "${SIGMODE:-}" = "BIN" ]; then ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.sig ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.sig ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.sig if [ -n "$EXTRA" ]; then ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.sig fi elif [ "${SIGMODE:-}" = "SELF" ]; then ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.gpg ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.gpg ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.gpg if [ -n "$EXTRA" ]; then ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.gpg fi fi } # hide siteNative behind a web page siteWebNative() { siteNative cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
END } siteWebNonNative() { siteNonNative cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
END } siteWebNonNative() { siteNonNative cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
END } siteWebNonNativeR() { makeUpstreamTar foo 0.0 gz non-native makeUpstreamTar foo 1.0 gz non-native makeUpstreamTar foo 2.0 gz non-native mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/ if [ "$SIGMODE" = "ASC" ]; then ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.asc ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.asc ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.asc cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
Very old sig
A bit OLD sig
Latest sig
END elif [ "$SIGMODE" = "BIN" ]; then ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.sig ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.sig ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.sig cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
Very old sig
A bit OLD sig
Latest sig
END elif [ "$SIGMODE" = "SELF" ]; then ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.gpg ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.gpg ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.gpg cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
Very old sig
A bit OLD sig
Latest sig
END fi } sitePrWebNonNative() { siteNonNative cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
END } siteWebNonNativeLarge() { makeUpstreamTar foo 19990101 gz non-native makeUpstreamTar foo 20000101 gz non-native makeUpstreamTar foo 20010101 gz non-native mkdir -p $REPOPATH/0.0/foo/ooo/ mkdir -p $REPOPATH/1.0/foo/ooo/ mkdir -p $REPOPATH/2.0/foo/ooo/ ln -sf ../../../$POOLPATH/foo-19990101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/foo/ooo/foo-19990101.tar.gz ln -sf ../../../$POOLPATH/foo-20000101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/foo/ooo/foo-20000101.tar.gz ln -sf ../../../$POOLPATH/foo-20010101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/foo/ooo/foo-20010101.tar.gz cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
END } siteXmlNonNative() { siteNonNative cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html /0.0/foo/ooo/foo-0.0.tar.gz
/1.0/foo/ooo/foo-1.0.tar.gz
/2.0/foo/ooo/foo-2.0.tar.gz
END } siteWebNonNativeMUT() { siteNonNative foo siteNonNative bar EXTRA siteNonNative baz EXTRA cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
Latest sig
Very old
A bit OLD
Latest
OOPS Latest
Latest sig
Very old
A bit OLD
Latest
OOPS Latest
Latest sig
END } siteWebNonNativeGetOnlyHref() { siteNonNative foo cat < "$TEMP_PKG_DIR"/$REPOPATH/index.html Very old
A bit OLD
Latest
Nothing here
END } # test a watch files ### VERSION3 ### # version locking calls suffer changes due to uupdate calling differences # test --download-current-version testWatch3WebNonNativeDlCurrent() { WATCHVER=3 XCOMMAND="$COMMAND --download-current-version" WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate' helperWatch siteWebNonNative 1.0 1.0 } # test --download-version testWatch3WebNonNativeDlUversion() { WATCHVER=3 XCOMMAND="$COMMAND --download-version 0.0" WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate' helperWatch siteWebNonNative 1.0 0.0 } # test --download-debversion uupdate testWatch3WebNonNativeDlDversion() { WATCHVER=3 XCOMMAND="$COMMAND --download-debversion 0.0-1" WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate' helperWatch siteWebNonNative 1.0 0.0 } ### VERSION 4 ### # standard tests # test native package w/o uupdate, bare HTTP server in normal order testWatch4Native() { WATCHVER=4 WATCHLINE='@@@url@@@/([\.\d]+)/(.+)/(.+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian' helperWatch siteNative } # test non-native package with uupdate, bare HTTP server in normal order testWatch4NonNative() { WATCHVER=4 WATCHLINE='@@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteNonNative } # test 3 parameter watch line testWatch4WebNative() { WATCHVER=4 WATCHLINE='@@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian' helperWatch siteWebNative } # test normal web page testWatch4WebNonNative() { WATCHVER=4 helperWatch } # test normal web page (Files-exclude) testWatch4WebNonNativeFE() { MGZREPACK=xz FILEEXCLUDE=1 WATCHVER=4 helperWatch } # test normal web page (file path reverse order) testWatch4WebNonNativeR() { WATCHVER=4 helperWatch siteWebNonNativeR } # test for downloadurlmangle and filenamemangle for tricky web page testWatch4PrWebNonNative() { WATCHVER=4 WATCHLINE='opts="downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \ filenamemangle = s%.*boo-(.*)%@PACKAGE@-$1% " \ @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \ debian uupdate' helperWatch sitePrWebNonNative } # test --download-current-version testWatch4NonNativeDlCurrent() { WATCHVER=4 XCOMMAND="$COMMAND --download-current-version" WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteNonNative 1.0 1.0 } # test --download-version testWatch4NonNativeDlUversion() { WATCHVER=4 XCOMMAND="$COMMAND --download-version 0.0" WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteNonNative 1.0 0.0 } # test --download-debversion uupdate testWatch4NonNativeDlDversion() { WATCHVER=4 XCOMMAND="$COMMAND --download-debversion 0.0-1" WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteNonNative 1.0 0.0 } # test --download-current-version testWatch4WebNonNativeDlCurrent() { WATCHVER=4 XCOMMAND="$COMMAND --download-current-version" WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteWebNonNative 1.0 1.0 } # test --download-version testWatch4WebNonNativeDlUversion() { WATCHVER=4 XCOMMAND="$COMMAND --download-version 0.0" WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteWebNonNative 1.0 0.0 } # test --download-debversion uupdate testWatch4WebNonNativeDlDversion() { WATCHVER=4 XCOMMAND="$COMMAND --download-debversion 0.0-1" WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteWebNonNative 1.0 0.0 } # Debian version is 0.19990101 for future proof while upstream is 19990101 testWatch4WebNonNativeLarge() { WATCHVER=4 WATCHLINE='opts=" dversionmangle = s/0\.(.*)/$1/ , \ oversionmangle = s/(.*)/0.$1/" \ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteWebNonNativeLarge 20000101 20010101 0. } # test for pagemangle testWatch4XmlNonNative() { WATCHVER=4 WATCHLINE='opts="pagemangle = \ s%([^<]*)%$1%g" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteXmlNonNative } # test user-agent string setting via opts= testWatch4WebNonNativeUA() { WATCHVER=4 KEYMODE=BIN USCAN_HTTP_SERVER="server-head.py" USERAGENT="foo/bar; baz:12,3.45" WATCHLINE='opts="useragent= '$USERAGENT' "'" \ "'@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatchUA unset USERAGENT unset USCAN_HTTP_SERVER } # test repack and compression testWatch4WebNonNativeBZ2() { WATCHVER=4 WATCHLINE='opts=repack,compression=bz2 @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' GZREPACK=bz2 MGZREPACK=bz2 helperWatch unset GZREPACK } # test repack and compression testWatch4WebNonNativeXZ() { MGZREPACK=xz WATCHVER=4 WATCHLINE='opts=repack,compression=xz @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' GZREPACK=xz helperWatch unset GZREPACK } # test spaces everywhere testWatch4PrWebNonNativeXZ() { MGZREPACK=xz WATCHVER=4 WATCHLINE='opts = "downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \ filenamemangle = s%.*boo-(.*)%@PACKAGE@-$1% , \ repack , compression=xz" \ @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \ debian uupdate' GZREPACK=xz helperWatch sitePrWebNonNative unset GZREPACK } # test get strictly href from links and not something like foo-href. See #904578 and MR !25 testWatchGetOnlyHref() { WATCHVER=4 WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch siteWebNonNativeGetOnlyHref 1.0 2.0 } ### VERSION 4 with sig check ### # test normal web page with sig(asc) testWatch4WebNonNativeSig() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.asc%" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) with < and > testWatch4WebNonNativeSigAngleBraket() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s<(.*)><$1.asc>" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) with < and > with space testWatch4WebNonNativeSigAngleBraketSpace() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s<(.*)> <$1.asc>" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) with < and > with tab testWatch4WebNonNativeSigAngleBraketTab() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s<(.*)> <$1.asc>" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) with [ and ] testWatch4WebNonNativeSigSquareBraket() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s[(.*)][$1.asc]" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) with { and } testWatch4WebNonNativeSigCurlyBraket() { WATCHVER=4 WATCHLINE='opts = "pgpsigurlmangle = s{(.*)}{$1.asc}" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(asc) - auto testWatch4WebNonNativeSigAuto() { WATCHVER=4 WATCHLINE='opts = "pgpmode = auto" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate' helperWatch } # test normal web page with sig(bin) (Files-exclude) testWatch4WebNonNativeFESig() { MGZREPACK=xz FILEEXCLUDE=1 WATCHVER=4 SIGMODE=BIN KEYMODE=BIN WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.sig%" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ \ debian uupdate' helperWatch } # test normal web page with sig (different file path for sig and tar; reverse order) testWatch4WebNonNativeRSig() { WATCHVER=4 WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.asc previous uupdate' helperWatch siteWebNonNativeR } # test normal web page with sig (different file path for sig and tar; reverse order, BIN) testWatch4WebNonNativeRSigBIN() { WATCHVER=4 SIGMODE=BIN WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate' helperWatch siteWebNonNativeR } # test normal web page with sig (different file path for sig and tar; reverse order, BIN BIN) testWatch4WebNonNativeRSigBINiBIN() { WATCHVER=4 SIGMODE=BIN KEYMODE=BIN WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate' helperWatch siteWebNonNativeR } # test normal web page with sig (self) testWatch4WebNonNativeSelfSig() { WATCHVER=4 SIGMODE=SELF WATCHLINE='opts = "pgpmode = self" \ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.gpg debian uupdate' helperWatch siteWebNonNativeR } ### VERSION 4 only ### # test normal web page (MUT) testWatch4WebNonNativeMUT() { MGZREPACK=xz WATCHVER=4 COMPONENTS="bar baz" SIGMODE=BIN FILEEXCLUDE=2 WATCHLINE=' opts=" pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian opts="component=bar,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same opts="component=baz,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate' helperWatch siteWebNonNativeMUT } # test normal web page (MUT with O main) testWatch4WebNonNativeMUT0() { WATCHVER=4 COMPONENTS="foo bar baz" FILEEXCLUDE=3 WATCHLINE=' opts="component=foo,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ debian opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate' helperWatch siteWebNonNativeMUT } # Group test without signatures testWatch4WebNonNativeGroup() { WATCHVER=4 COMPONENTS="bar baz" FILEEXCLUDE=3 UVERSION=2.0 CMPVERSION=3.0 WATCHLINE=' opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=bar,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group' helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0 } # Group test with repack suffix testWatch4WebNonNativeGroupRepackSuffix() { WATCHVER=4 COMPONENTS="bar baz" FILEEXCLUDE=3 UVERSION=2.0 CMPVERSION=3.0 WATCHLINE=' opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=bar,repacksuffix=+ds,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group' helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+ds+~3.0 } # Group test with pgpsigurlmangle testWatch4WebNonNativeGroupSigned() { WATCHVER=4 COMPONENTS="bar baz" FILEEXCLUDE=3 UVERSION=2.0 CMPVERSION=3.0 WATCHLINE=' opts="pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group' helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0 } # Group test with pgpmode next/previous testWatch4WebNonNativeGroupSignedNext() { WATCHVER=4 COMPONENTS="bar baz" FILEEXCLUDE=3 UVERSION=2.0 CMPVERSION=3.0 SIGMODE=ASC WATCHLINE=' opts="pgpmode=next" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group opts="pgpmode=previous" @@@url@@@/ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@.asc previous opts="component=bar,pgpmode=next" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=bar,pgpmode=previous" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@.asc previous opts="component=baz,pgpmode=next" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group opts="component=baz,pgpmode=previous" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@.asc previous' helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0 } . shunit2