aboutsummaryrefslogtreecommitdiff
path: root/t/testlib.sh
diff options
context:
space:
mode:
authorMattia Rizzolo <mattia@mapreri.org>2015-10-13 10:26:06 +0000
committerMattia Rizzolo <mattia@mapreri.org>2015-10-13 10:26:06 +0000
commit72075b8430b826d7dd489765c1004e4161479fa2 (patch)
tree682a8d69bcc478082f1805859eb72445e8b6cf42 /t/testlib.sh
parent524cde2e544f40dc2056d2a4c4265ddc4160784d (diff)
downloadpbuilder-72075b8430b826d7dd489765c1004e4161479fa2.tar
pbuilder-72075b8430b826d7dd489765c1004e4161479fa2.tar.gz
move all tests under a t/ directory
Diffstat (limited to 't/testlib.sh')
-rw-r--r--t/testlib.sh158
1 files changed, 158 insertions, 0 deletions
diff --git a/t/testlib.sh b/t/testlib.sh
new file mode 100644
index 0000000..7d31888
--- /dev/null
+++ b/t/testlib.sh
@@ -0,0 +1,158 @@
+#!/bin/bash
+# 2008 Junichi Uekawa <dancer@debian.org>
+
+set -e
+
+# library for functional unit-testing in bash.
+
+# WARNING: this file locates files differently from the other pbuilder
+# functions:
+# - if PBUILDER_CHECKOUT is set, it is assumed that testlib.sh is sourced from
+# a pbuilder checkout (e.g. from the upstream Makefile or Debian build)
+# - otherwise, PBUILDER_TEST_ROOT or PBUILDER_TEST_*DIR should be used to
+# locate files instead of PBUILDER_ROOT and PBUILDER_*DIR since
+# testlib_setup_env() overrides these vars to run the other pbuilder modules
+# with a fake environment
+
+# if this is set, use pbuilder files from this location; otherwise, use
+# installed files (from PBUILDER_TEST_ROOT, which is a copy of PBUILDER_ROOT)
+PBUILDER_CHECKOUT="${PBUILDER_CHECKOUT:-}"
+
+if [ -z "$PBUILDER_CHECKOUT" ]; then
+ # these currently don't need to be exported
+ PBUILDER_TEST_ROOT="${PBUILDER_ROOT:-}"
+ PBUILDER_TEST_PKGLIBDIR="${PBUILDER_PKGLIBDIR:-$PBUILDER_ROOT/usr/lib/pbuilder}"
+ PBUILDER_TEST_PKGDATADIR="${PBUILDER_PKGDATADIR:-$PBUILDER_ROOT/usr/share/pbuilder}"
+fi
+
+# set PBUILDER_TEST_VERBOSE to get the full output of tests
+
+TESTLIB_FAILS=0
+TESTLIB_TESTS=0
+
+testlib_echo() {
+ case "$1" in
+ OK)
+ shift
+ if [ -n "$PBUILDER_TEST_VERBOSE" ]; then
+ echo "[OK]" "$@" >&2
+ fi
+ ;;
+ FAIL)
+ shift
+ echo "[FAIL]" "$@" >&2
+ TESTLIB_FAILS=$(($TESTLIB_FAILS + 1))
+ ;;
+ esac
+ TESTLIB_TESTS=$(($TESTLIB_TESTS + 1))
+}
+
+testlib_summary() {
+ echo "$0: Ran $TESTLIB_TESTS tests and $(($TESTLIB_TESTS - $TESTLIB_FAILS)) succeeded, $TESTLIB_FAILS failed"
+ if [ $TESTLIB_FAILS != 0 ]; then
+ echo '================='
+ echo 'Testsuite FAILED!'
+ echo " $0"
+ echo '================='
+ return 1
+ fi
+ return 0
+}
+
+# Create fake installed tree with basic config files. Make sure you trap test
+# script exit to call testlib_cleanup_env. Optional arg is location of the
+# pbuilder checkout to copy files from.
+# this is where the env actually lives
+testlib_env_root=""
+testlib_setup_env() {
+ local abs_pbuilder_checkout r
+
+ if [ -n "$testlib_env_root" ]; then
+ echo "testlib_setup_env called twice without testlib_cleanup_env" >&2
+ testlib_cleanup_env
+ exit 1
+ fi
+
+ if [ -n "$PBUILDER_CHECKOUT" ]; then
+ abs_pbuilder_checkout="`cd $PBUILDER_CHECKOUT; pwd`"
+ fi
+
+ # backup env vars
+ testlib_env_oldhome="$HOME"
+ testlib_env_oldroot="$PBUILDER_ROOT"
+
+ testlib_env_root="`mktemp -dt`"
+ # brevity
+ r="$testlib_env_root"
+
+ mkdir "$r"/etc
+ touch "$r"/etc/pbuilderrc
+ mkdir -p "$r"/usr/share/pbuilder
+ if [ -n "$PBUILDER_CHECKOUT" ]; then
+ cp "$PBUILDER_CHECKOUT"/pbuilderrc "$r"/usr/share/pbuilder
+ else
+ cp "$PBUILDER_TEST_PKGDATADIR"/pbuilderrc "$r"/usr/share/pbuilder
+ fi
+ mkdir -p "$r"/usr/lib
+ if [ -n "$PBUILDER_CHECKOUT" ]; then
+ ln -s "$abs_pbuilder_checkout" "$r"/usr/lib/pbuilder
+ else
+ ln -s "$PBUILDER_TEST_PKGLIBDIR" "$r"/usr/lib/pbuilder
+ fi
+ export PBUILDER_ROOT="$r"
+ # when running the testsuite within pbuilder, these env vars will have been
+ # set by regular pbuilder commands, so we need to unset them as to allow
+ # their default values to be recomputed relative to PBUILDER_ROOT
+ unset PBUILDER_PKGLIBDIR PBUILDER_PKGDATADIR PBUILDER_SYSCONFDIR
+
+ mkdir "$r"/home
+ touch "$r"/home/.pbuilderrc
+ export HOME="$r"/home
+}
+
+# Reverse the effect of testlib_setup_env. Setup a trap handler in your tests
+# on this function if you call testlib_setup_env.
+testlib_cleanup_env() {
+ if [ -z "$testlib_env_root" ]; then
+ # nothing to do
+ return
+ fi
+ rm -rf "$testlib_env_root"
+ export PBUILDER_ROOT="$testlib_env_oldroot"
+ export HOME="$testlib_env_oldhome"
+ testlib_env_root=""
+}
+
+expect_success() {
+ # run the test in subshell; successful commands should not output anything
+ # to stderr but may send output to stdout
+ if (if [ -z "$PBUILDER_TEST_VERBOSE" ]; then exec >/dev/null; fi; "$@"); then
+ testlib_echo "OK" "$1"
+ else
+ testlib_echo "FAIL" "$1"
+ fi
+}
+
+expect_fail() {
+ # run the test in subshell; failed commands may output anything to stdout
+ # and stderr
+ if (if [ -z "$PBUILDER_TEST_VERBOSE" ]; then exec >/dev/null 2>&1; fi; "$@"); then
+ testlib_echo "FAIL" "$1"
+ else
+ testlib_echo "OK" "$1"
+ fi
+}
+
+expect_output() {
+ # run the test in subshell
+ local val result
+ val="$1"
+ shift
+ result="`"$@" 2>&1`" || true
+ if [ "$result" = "$val" ]; then
+ testlib_echo "OK" "$1"
+ else
+ testlib_echo "FAIL" "$1" "expected [$val] but got [$result]"
+ fi
+}
+