blob: 2c01739cb740f26c801bc5321e1cc92306cf7fda (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/bin/bash
# 2008 Junichi Uekawa <dancer@debian.org>
set -e
# library for functional unit-testing in bash.
TESTLIB_FAILS=0
TESTLIB_TESTS=0
testlib_echo() {
case "$1" in
OK)
# no output is probably good.
;;
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 '================='
exit 1
fi
exit 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 pbuilder_checkout abs_pbuilder_checkout r
pbuilder_checkout="${1:-.}"
abs_pbuilder_checkout="`cd $pbuilder_checkout; pwd`"
if [ -n "$testlib_env_root" ]; then
echo "testlib_setup_env called twice without testlib_cleanup_env" >&2
testlib_cleanup_env
exit 1
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
cp "$pbuilder_checkout"/pbuilderrc "$r"/usr/share/pbuilder
mkdir -p "$r"/usr/lib
ln -s "$abs_pbuilder_checkout" "$r"/usr/lib/pbuilder
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
if (
"$@"
); then
testlib_echo "OK" "$1"
else
testlib_echo "FAIL" "$1"
fi
}
expect_fail() {
# run the test in subshell
if (
"$@"
); 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 reason: [${result}] != [${val}]"
fi
}
# Write your functions test_xxxx and call them at the end with their expected result code:
# . ./testlib.sh
# expect_success test_success
# expect_success test_fail
# expect_success test_options "hello world"
# testlib_summary
|