summaryrefslogtreecommitdiffstats
path: root/test/lib_test_uscan
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib_test_uscan')
-rw-r--r--test/lib_test_uscan130
1 files changed, 130 insertions, 0 deletions
diff --git a/test/lib_test_uscan b/test/lib_test_uscan
new file mode 100644
index 0000000..f0a1067
--- /dev/null
+++ b/test/lib_test_uscan
@@ -0,0 +1,130 @@
+#!/bin/bash
+
+# Copyright (C) 2018, Xavier <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.
+
+echo '======================================================================='
+echo "*** uscan $TESTTYPE test ***"
+echo '======================================================================='
+
+test_dir=$(readlink -f "${0%/*}")
+
+# Operation mode
+if test "${1:-}" = --installed; then
+ 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
+fi
+
+GPGHOME=$(mktemp -d -t gpg.XXXXX)
+
+GPG=gpg
+if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ GPG=gpg2
+ if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ exit 1
+ fi
+fi
+
+PRIVATE_KEY=$test_dir/uscan/PRIVATE_KEY.asc
+PUBLIC_KEY=$test_dir/uscan/PUBLIC_KEY.asc
+PRIVATE_KEYRING=$GPGHOME/secring.gpg
+PUBLIC_KEYRING=$GPGHOME/pubring.gpg
+
+# magic function that pipes stdout and stderr into a pipe, and prints it only
+# on command failure.
+# This uses a pipe, so it has limited capacity. Do not use it with stuff
+# outputting too much data.
+chronic_sh (){
+ local pipe pipe_q
+ pipe=$(mktemp -p "$SHUNIT_TMPDIR" devscripts_chronic_sh.XXXXXXXXXX)
+ printf -v pipe_q '%q' "$pipe"
+ trap 'rm -fv '"$pipe_q" RETURN
+ # one can't open a reading fd and a writing fd without blocking, because
+ # they want to already have something on the other side of the pipe.
+ # the temporary fd 5 will be that something.
+ exec 5<>"$pipe" # hack
+ exec 3>"$pipe" # writing fd
+ exec 4<"$pipe" # reading fd
+ exec 5>&- # end hack
+ rm "$pipe"
+
+ local ret=0
+ "$@" >&3 2>&3 || ret=$?
+ if [ "$ret" -ne 0 ] ; then
+ exec 3>&-
+ cat <&4-
+ return $ret
+ fi
+}
+
+oneTimeSetUp () {
+ chronic_sh $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output "$PRIVATE_KEYRING" --dearmor "$PRIVATE_KEY"
+
+ chronic_sh $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output "$PUBLIC_KEYRING" --dearmor "$PUBLIC_KEY"
+
+ echo "Using test gpg key:"
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring "$PRIVATE_KEYRING" --default-key \
+ CF218F0E7EABF584B7E20402C77E2D6872543FAF \
+ --list-keys --verbose
+
+ export GNUPGHOME=$GPGHOME
+}
+
+oneTimeTearDown () {
+ gpgconf --homedir "$GPGHOME" --verbose --kill gpg-agent
+ rm -rf "$GPGHOME"
+}
+
+spawnHttpServer () {
+ unset http_proxy
+ local pid
+ [ -n "$TEMP_PKG_DIR" ] || fail "unexpected testsuite error"
+ (
+ mkdir -p "$TEMP_PKG_DIR"/repo
+ cd "$TEMP_PKG_DIR"/repo || exit 1
+ python3 "$test_dir/uscan/httpserver.py" 2>log &
+ pid=$!
+ echo "$pid" > pid
+ while ! [ -s port ]; do
+ sleep 2s
+ if ! kill -0 "$pid" 2> /dev/null ; then
+ echo "The HTTP server returned an error:"
+ cat log
+ exit 1
+ fi
+ done
+ )
+}
+
+killHttpServer () {
+ if [ -n "${TEMP_PKG_DIR:-}" ] && [ -f "$TEMP_PKG_DIR/repo/pid" ]; then
+ local pid
+ pid=$(< "$TEMP_PKG_DIR/repo/pid")
+ kill -9 "$pid"
+ rm -rf "$TEMP_PKG_DIR"
+ unset TEMP_PKG_DIR
+ fi
+}