[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