Merge branch 'debian'
[hcoop/debian/courier-authlib.git] / debian / tests / common.sh
... / ...
CommitLineData
1# autopkgtest check: helper routines for authdaemond tests
2#
3# Author: Markus Wanner <markus@bluegap.ch>
4
5TEST_USERS="alice bob carol"
6
7CONFIG_FILES="/etc/courier/authdaemonrc \
8 /etc/courier/authldaprc \
9 /etc/courier/authmysqlrc \
10 /etc/courier/authpgsqlrc \
11 /etc/courier/authsqliterc"
12
13export PGOPTIONS='--client-min-messages=warning'
14
15# exits with code 0 if the given user exists
16user_exists() {
17 id -u $1 > /dev/null 2>&1
18}
19
20# exits with code 0 if the postgresql client tools are installed
21has_postgres_client() {
22 which psql > /dev/null 2>&1
23}
24
25test_authentication() {
26 user=$1
27 password=$2
28 TEST_OUTPUT="$AUTOPKGTEST_ARTIFACTS/testauth-$1.out"
29 echo "testing: '$user' with password '$password'"
30 /usr/sbin/authtest $user $password > $TEST_OUTPUT
31}
32
33authenumerate_as_courier() {
34 su -c "/usr/sbin/authenumerate" -s /bin/sh courier
35}
36
37# emits a random (512bit, hex encoded) password on stdout
38gen_random_password() {
39 dd if=/dev/urandom bs=16 count=1 2> /dev/null | hexdump -e '"%x"'
40}
41
42# accepts SQL on stdin
43postgres_superuser_exec() {
44 su postgres -c "psql -X -q -v ON_ERROR_STOP=1 --pset pager=off"
45}
46
47create_test_users() {
48 echo "== creating test users..."
49 for USER in $TEST_USERS; do
50 gen_random_password > $USER.password
51 useradd --shell /bin/false --password $(cat $USER.password) $USER
52 done
53}
54
55backup_config_files() {
56 echo "== backup config files..."
57 for f in $CONFIG_FILES; do
58 if [ -f $f ]; then
59 cp ${f} ${f}.autopkgtest.bak
60 fi
61 done
62}
63
64restore_config_files() {
65 echo "== restore config files..."
66 for f in $CONFIG_FILES; do
67 if [ -f ${f}.autopkgtest.bak ]; then
68 mv ${f}.autopkgtest.bak ${f}
69 fi
70 done
71}
72
73start_authdaemon() {
74 echo "== starting authdameon..."
75 service courier-authdaemon start
76}
77
78start_postgresql() {
79 echo "== starting postgresql..."
80 service postgresql start
81}
82
83# helper methods for dumping test status
84dump_file_if_exists() {
85 if [ -f $1 ]; then
86 echo "===== BEGIN $1 ====="
87 cat $1
88 echo "===== END $1 ====="
89 fi
90}
91
92dump_config_files() {
93 for f in $CONFIG_FILES; do
94 if [ -f ${f}.autopkgtest.bak ]; then
95 dump_file_if_exists $f
96 fi
97 done
98
99 for f in `ls $AUTOPKGTEST_ARTIFACTS/`; do
100 dump_file_if_exists $AUTOPKGTEST_ARTIFACTS/$f
101 done
102}
103
104# cleanup after running tests
105finish() {
106 echo "== dump..."
107 # dump and then restore the config files
108 dump_config_files
109
110 echo "== finish..."
111
112 # drop test users
113 if user_exists alice; then
114 echo "== dropping user alice"
115 userdel alice
116 fi
117 if user_exists bob; then
118 echo "== dropping user bob"
119 userdel bob
120 fi
121 if user_exists carol; then
122 echo "== dropping user carol"
123 userdel carol
124 fi
125
126 # restore config files, then restart the authdaemon, so it
127 # disconnects from the database. Otherwise authdaemon blocks the
128 # database deletion.
129 restore_config_files
130
131 # cleanup Postgres databases
132 if has_postgres_client; then
133 postgres_superuser_exec <<EOSQL
134DROP DATABASE IF EXISTS courier_authdaemon_test;
135DROP ROLE IF EXISTS courier;
136EOSQL
137 fi
138
139 for NAME in courier-authdaemon postgresql; do
140 if [ -x /etc/init.d/$NAME ]; then
141 echo "== stopping service $NAME..."
142 service $NAME stop || /bin/true
143 fi
144 done
145}
146trap finish EXIT INT QUIT ABRT PIPE TERM