[devscripts] 01/01: test_uscan_mangle: check mangle rules

Osamu Aoki osamu at moszumanska.debian.org
Sat Sep 12 16:55:44 UTC 2015


This is an automated email from the git hooks/post-receive script.

osamu pushed a commit to branch master
in repository devscripts.

commit e1d964f990a776aa6306b60e02ad275da0e61377
Author: Osamu Aoki <osamu at debian.org>
Date:   Thu Aug 27 22:35:38 2015 +0900

    test_uscan_mangle: check mangle rules
    
    test for all the mangling rules and directory scanning
    (split from test_uscan for the ease of debugging)
---
 test/Makefile          |   2 +
 test/test_uscan_mangle | 397 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 399 insertions(+)

diff --git a/test/Makefile b/test/Makefile
index 0ff65cb..202b6a6 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -6,6 +6,7 @@ test:
 	./test_debdiff
 	./test_licensecheck
 	./test_uscan
+	./test_uscan_mangle
 	./test_mk-origtargz
 
 test-installed:
@@ -16,6 +17,7 @@ test-installed:
 	./test_debdiff --installed
 	./test_licensecheck --installed
 	./test_uscan --installed
+	./test_uscan_mangle --installed
 	./test_mk-origtargz --installed
 
 online-test:
diff --git a/test/test_uscan_mangle b/test/test_uscan_mangle
new file mode 100755
index 0000000..90d5ec3
--- /dev/null
+++ b/test/test_uscan_mangle
@@ -0,0 +1,397 @@
+#!/bin/sh
+
+# Copyright (C) 2013, Rafael Laboissiere <rafael at laboissiere.net>
+#
+# 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.
+
+test_dir=$(readlink -f "${0%/*}")
+
+# Operation mode
+if test "$1" = --installed; then
+    COMMAND="uscan --no-conf --compression=xz"
+    shift
+else
+    top_srcdir=$(readlink -f "${0%/*}/..")
+    make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate
+    PATH="$top_srcdir/scripts:$PATH"
+    PERL5LIB="$top_srcdir/lib"
+    export PERL5LIB
+    COMMAND="uscan --no-conf --compression=xz"
+fi
+
+REPOPATH=repo
+POOLPATH=pool
+
+# Initial Debian revision value is distribution dependent
+SUFFIX="1"
+if which dpkg-vendor >/dev/null 2>&1; then
+    case "$(dpkg-vendor --query Vendor 2>/dev/null)" in
+	"Ubuntu")
+	    SUFFIX="0ubuntu1"
+	    ;;
+    esac
+fi
+
+# set safe defaults
+WEBSCRIPT=":"
+DEBUGECHO=":"
+DEBUGLSLR=":"
+# comment out for debug
+#COMMAND="$COMMAND --debug"
+#DEBUGECHO=echo
+#DEBUGLSLR="ls -laR"
+
+cleanup(){
+    kill -9 $(cat $TMPDIR/$REPOPATH/pid)
+    rm -rf $TMPDIR
+    $DEBUGECHO " ***** ================================================ *****"
+}
+
+spawnHttpServer(){
+    (
+	mkdir -p $TMPDIR/$REPOPATH
+	cd $TMPDIR/$REPOPATH
+	python "$test_dir/uscan/server.py" &
+	echo $! > pid
+	while ! [ -s port ]; do
+	    :
+	done
+    )
+}
+
+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 # Debian source package name
+    DEBVER=$2  # DEbian source package version
+    mkdir -p debian/source
+
+    cat <<END > debian/rules
+%:
+	dh $@
+END
+chmod 755 debian/rules
+
+    cat <<END > debian/changelog
+$DEBNAME ($DEBVER) unstable; urgency=low
+
+  * Release of the $DEBNAME package $DEBVER.
+
+ -- Joe Developer <jd at debian.org>  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
+    # debian/watch
+    echo "version=$WATCHVER" > debian/watch
+    echo "$WATCHLINE" | sed -e "s,@@@url@@@,http://localhost:${PORT}/,g" - \
+	>> debian/watch
+}
+
+# make tarball in $REPOPATH/$POOLPATH
+makeUpstreamTar() {
+    UPNAME=$1 # Upstream package name
+    UPVER=$2  # upstream package version
+    COMPRESSION=${3:-gz} # archve compression type
+    TYPE=${4:-non-native} # set this if native-type upstream
+    OLDDIR=`pwd`
+    mkdir -p $TMPDIR/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+    cd $TMPDIR/$REPOPATH/$POOLPATH
+    touch $UPNAME-$UPVER/$UPNAME-$UPVER
+    if [ "$TYPE" = "native" ]; then
+	cd $TMPDIR/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+	makeDebianDir $UPNAME $UPVER
+	cd $TMPDIR/$REPOPATH/$POOLPATH
+    fi
+    case $COMPRESSION in
+	gz|gzip) tar -czf $UPNAME-$UPVER.tar.gz $UPNAME-$UPVER
+	    ;;
+	bz2|bzip2) tar --bzip2 -cf $UPNAME-$UPVER.tar.bz2 $UPNAME-$UPVER
+	    ;;
+	xz) tar --xz -cf $UPNAME-$UPVER.tar.xz $UPNAME-$UPVER
+	    ;;
+	zip)zip -r $UPNAME-$UPVER.zip $UPNAME-$UPVER
+	    ;;
+	*)  echo "Wrong compression mode: $COMPRESSION"
+	    exit 1
+	    ;;
+	esac
+    cd $OLDDIR
+}
+
+# setup a common watch file test environment
+helperWatch() {
+    SITESCRIPT=$1
+    VEROLD=$2
+    VERNEW=$3
+    PREFIX=$4
+    TMPDIR=$(mktemp -d)
+    ORIGDIR=`pwd`
+    cd $TMPDIR
+    # start HTTP server with its root at $TMPDIR/$REPOPATH
+    spawnHttpServer
+    PORT=$(cat $TMPDIR/$REPOPATH/port)
+    $DEBUGECHO " ***** http://localhost:$PORT started showing $TMPDIR/$REPOPATH *****"
+    # make web site
+    $SITESCRIPT
+    # make local $VEROLD source tree
+    tar -xzf $TMPDIR/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.tar.gz
+    if [ -n "$PREFIX" ]; then
+	mv $TMPDIR/${PKG}-${VEROLD} $TMPDIR/${PKG}-${PREFIX}${VEROLD}
+    fi
+    cd $TMPDIR/${PKG}-${PREFIX}${VEROLD}
+    if [ ! -d debian ]; then
+	makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX
+    fi
+    $COMMAND
+    assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+    cd $TMPDIR
+    UTARBALL=${PKG}-${VERNEW}.tar.gz
+    STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.gz
+    assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
+    assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
+    # check uupdate
+    if [ "$UUPDATE" = "uupdate" ]; then
+	assertTrue 'pristine tarball is not extracted' "[ -f $TMPDIR/${PKG}-${PREFIX}${VERNEW}/debian/changelog ]"
+	DVERSION=`dpkg-parsechangelog -l$TMPDIR/${PKG}-${PREFIX}${VERNEW}/debian/changelog -SVersion`
+	assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW}-$SUFFIX"
+    fi
+    $DEBUGLSLR
+    cd $ORIGDIR
+    cleanup
+}
+
+# populate pool directory
+sitePoolNative() {
+    makeUpstreamTar $PKG 0.0 gz native
+    makeUpstreamTar $PKG 1.0 gz native
+    makeUpstreamTar $PKG 2.0 gz native
+    mkdir -p $TMPDIR/$REPOPATH/123/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/124/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/125/foo/ooo/
+    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz $TMPDIR/$REPOPATH/123/foo/ooo/${PKG}-0.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz $TMPDIR/$REPOPATH/124/foo/ooo/${PKG}-1.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz $TMPDIR/$REPOPATH/125/foo/ooo/${PKG}-2.0.tar.gz
+}
+
+sitePoolNonNative() {
+    makeUpstreamTar $PKG 0.0 gz non-native
+    makeUpstreamTar $PKG 1.0 gz non-native
+    makeUpstreamTar $PKG 2.0 gz non-native
+    mkdir -p $TMPDIR/$REPOPATH/123/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/124/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/125/foo/ooo/
+    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz $TMPDIR/$REPOPATH/123/foo/ooo/${PKG}-0.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz $TMPDIR/$REPOPATH/124/foo/ooo/${PKG}-1.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz $TMPDIR/$REPOPATH/125/foo/ooo/${PKG}-2.0.tar.gz
+}
+
+# hide siteNative behind a web page
+siteWebNative() {
+    sitePoolNative
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<a href="/123/foo/ooo/$PKG-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/$PKG-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/125/foo/ooo/$PKG-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNative() {
+    sitePoolNonNative
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<a href="/123/foo/ooo/$PKG-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/$PKG-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/125/foo/ooo/$PKG-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeR() {
+    makeUpstreamTar $PKG 0.0 gz non-native
+    makeUpstreamTar $PKG 1.0 gz non-native
+    makeUpstreamTar $PKG 2.0 gz non-native
+    mkdir -p $TMPDIR/$REPOPATH/123/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/124/foo/ooo/
+    mkdir -p $TMPDIR/$REPOPATH/125/foo/ooo/
+    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz $TMPDIR/$REPOPATH/125/foo/ooo/${PKG}-0.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz $TMPDIR/$REPOPATH/124/foo/ooo/${PKG}-1.0.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz $TMPDIR/$REPOPATH/123/foo/ooo/${PKG}-2.0.tar.gz
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<a href="/125/foo/ooo/$PKG-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/$PKG-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/123/foo/ooo/$PKG-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+sitePrWebNonNative() {
+    sitePoolNonNative
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<a href="/123/boo/xxx/boo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/boo/xxx/boo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/125/boo/xxx/boo-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeLarge() {
+    makeUpstreamTar $PKG 19990101 gz non-native
+    makeUpstreamTar $PKG 20000101 gz non-native
+    makeUpstreamTar $PKG 20010101 gz non-native
+    mkdir -p $REPOPATH/123/foo/ooo/
+    mkdir -p $REPOPATH/124/foo/ooo/
+    mkdir -p $REPOPATH/125/foo/ooo/
+    ln -sf ../../../$POOLPATH/${PKG}-19990101.tar.gz $TMPDIR/$REPOPATH/123/foo/ooo/${PKG}-19990101.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-20000101.tar.gz $TMPDIR/$REPOPATH/124/foo/ooo/${PKG}-20000101.tar.gz
+    ln -sf ../../../$POOLPATH/${PKG}-20010101.tar.gz $TMPDIR/$REPOPATH/125/foo/ooo/${PKG}-20010101.tar.gz
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<a href="/123/foo/ooo/$PKG-19990101.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/$PKG-20000101.tar.gz">A bit OLD</a> <br />
+<a href="/125/foo/ooo/$PKG-20010101.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteXmlNonNative() {
+    sitePoolNonNative
+    cat <<END > $TMPDIR/$REPOPATH/index.html
+<html>
+<head>
+  <meta charset="utf-8">
+</head>
+<body>
+<Key>/123/foo/ooo/$PKG-0.0.tar.gz</Key> <br/ >
+<Key>/124/foo/ooo/$PKG-1.0.tar.gz</Key> <br />
+<Key>/125/foo/ooo/$PKG-2.0.tar.gz</Key> <br />
+</body>
+<html>
+END
+}
+
+# test a watch files
+
+testWatch3Native() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='@@@url@@@/(\d+)/(.+)/(.+)/'$PKG'-([\.\d]+).tar.gz debian'
+    helperWatch sitePoolNative 1.0 2.0
+}
+
+testWatch3NonNative() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='@@@url@@@(\d+)/(.+)/(.+)/ '$PKG'-([\.\d]+).tar.gz debian uupdate'
+    helperWatch sitePoolNonNative 1.0 2.0
+}
+
+testWatch3WebNative() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='@@@url@@@ (?:.*)/'$PKG'-([\d\.]+).tar.gz debian'
+    helperWatch siteWebNative 1.0 2.0
+}
+
+testWatch3WebNonNative() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='@@@url@@@/ (?:.*)/'$PKG'-([\.\d]+).tar.gz debian uupdate'
+    helperWatch siteWebNonNative 1.0 2.0
+}
+
+testWatch3WebNonNativeR() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='@@@url@@@/ (?:.*)/'$PKG'-([\.\d]+).tar.gz debian uupdate'
+    helperWatch siteWebNonNativeR 1.0 2.0
+}
+
+testWatch3PrWebNonNative() {
+    PKG=foo
+    WATCHVER="3"
+    WATCHLINE='opts="downloadurlmangle=s%boo/xxx%foo/ooo%;s%boo-%foo-%,filenamemangle=s%.*boo-(.*)%foo-$1% " @@@url@@@/ (?:.*)/boo-([\d\.]+).tar.gz debian uupdate'
+    helperWatch sitePrWebNonNative 1.0 2.0
+}
+
+## Debian version is 0.19990101 for future proof while upstream is 19990101
+#testWatch3WebNonNativeLarge() {
+#    PKG=foo
+#    WATCHVER="3"
+#    WATCHLINE='opts=" dversionmangle = s/0\.(.*)/$1/ , oversionmangle = s/(.*)/0.$1/" @@@url@@@  (?:.*)/'$PKG'-([\.\d]+).tar.gz debian uupdate'
+#    helperWatch siteWebNonNativeLarge 20000101 20010101 0.
+#}
+#
+## test for pagemangle
+#testWatch3XmlNonNative() {
+#    PKG=foo
+#    WATCHVER="3"
+#    WATCHLINE='opts="pagemangle=s%<Key>([^<]*)</Key>%<Key><a href="$1">$1</a></Key>%g" @@@url@@@/ (?:.*)/'$PKG'-([\d\.]+).tar.gz debian uupdate'
+#    helperWatch siteXmlNonNative 1.0 2.0
+#}
+#
+. shunit2

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/devscripts.git



More information about the devscripts-devel mailing list