Code

integration/test_lib: Manage the sysdbd PID centrally.
[sysdb.git] / t / integration / test_lib.sh
1 #
2 # SysDB -- t/integration/test_lib.sh
3 # Copyright (C) 2012 Sebastian 'tokkee' Harl <sh@tokkee.org>
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 #    notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 #    notice, this list of conditions and the following disclaimer in the
13 #    documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
19 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 #
28 # Shell library of test helpers for integration tests.
29 #
31 TOP_SRCDIR="$( readlink -f "$( dirname "$0" )/../.." )"
32 TESTDIR="$( mktemp -d )"
33 trap "rm -rf '$TESTDIR'; test -z \$SYSDBD_PID || kill \$SYSDBD_PID" EXIT
35 mkdir "$TESTDIR/backend"
36 cp "$TOP_SRCDIR/t/integration/.libs/mock_plugin.so" "$TESTDIR/backend"
38 cp "$TOP_SRCDIR"/src/.libs/sysdb "$TESTDIR"
39 cp "$TOP_SRCDIR"/src/.libs/sysdbd "$TESTDIR"
40 cp "$TOP_SRCDIR"/src/.libs/libsysdb*.so* "$TESTDIR"
42 MEMCHECK="valgrind --quiet --tool=memcheck --error-exitcode=1"
43 MEMCHECK="$MEMCHECK --trace-children=yes"
44 MEMCHECK="$MEMCHECK --track-fds=yes"
45 MEMCHECK="$MEMCHECK --leak-check=full"
47 SYSDBD_CONF="$TESTDIR/sysdbd.conf"
49 SOCKET_FILE="$TESTDIR/sock"
50 PLUGIN_DIR="$TESTDIR"
52 function run_sysdb() {
53         LD_PRELOAD=$TESTDIR/libsysdbclient.so $MEMCHECK \
54                 "$TESTDIR/sysdb" -U mockuser "$@"
55 }
57 function run_sysdbd() {
58         LD_PRELOAD=$TESTDIR/libsysdb.so $MEMCHECK "$TESTDIR/sysdbd" "$@" &
59         SYSDBD_PID=$!
60 }
62 function run_sysdbd_foreground() {
63         LD_PRELOAD=$TESTDIR/libsysdb.so $MEMCHECK "$TESTDIR/sysdbd" "$@"
64 }
66 function stop_sysdbd() {
67         if test -z $SYSDBD_PID; then
68                 echo "Cannot stop sysdbd; PID unknown" >&2
69                 exit 1
70         fi
71         kill $SYSDBD_PID
72         wait $SYSDBD_PID
73         SYSDBD_PID=''
74 }
76 function wait_for_sysdbd() {
77         local i
78         for (( i=0; i<10; i++ )); do
79                 if test -e "$SOCKET_FILE"; then
80                         break
81                 fi
82                 sleep 1
83         done
84         if test $i -eq 10; then
85                 echo 'SysDBd did not start within 10 seconds' >&2
86                 exit 1
87         fi
88 }