Code

store::memory: Add a plugin providing an in-memory store.
[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 TOP_BUILDDIR="$TOP_SRCDIR"
33 if test -n "$VPATH"; then
34         # We'll have to guess.
35         if test -d ../t; then
36                 TOP_BUILDDIR="$( readlink -f .. )"
37         else if test -d t; then
38                 TOP_BUILDDIR="$( readlink -f . )"
39         fi; fi
40 fi
42 TESTDIR="$( mktemp -d )"
43 trap "rm -rf '$TESTDIR'; test -z \$SYSDBD_PID || kill \$SYSDBD_PID" EXIT
45 mkdir "$TESTDIR/backend"
46 cp "$TOP_BUILDDIR/t/integration/.libs/mock_timeseries.so" "$TESTDIR"
47 cp "$TOP_BUILDDIR/t/integration/.libs/mock_plugin.so" "$TESTDIR/backend"
49 mkdir "$TESTDIR/store"
50 cp "$TOP_BUILDDIR/src/plugins/store/.libs/memory.so" "$TESTDIR/store"
51 cp "$TOP_BUILDDIR/src/plugins/store/.libs/network.so" "$TESTDIR/store"
53 cp "$TOP_BUILDDIR"/src/sysdb "$TESTDIR"
54 cp "$TOP_BUILDDIR"/src/sysdbd "$TESTDIR"
56 MEMCHECK="valgrind --quiet --tool=memcheck --error-exitcode=1"
57 MEMCHECK="$MEMCHECK --trace-children=yes"
58 MEMCHECK="$MEMCHECK --track-fds=yes"
59 MEMCHECK="$MEMCHECK --leak-check=full"
60 MEMCHECK="$MEMCHECK --suppressions=$TOP_SRCDIR/t/valgrind.suppress"
61 MEMCHECK="$MEMCHECK --gen-suppressions=all"
63 SYSDBD_CONF="$TESTDIR/sysdbd.conf"
65 SOCKET_FILE="$TESTDIR/sock"
66 PLUGIN_DIR="$TESTDIR"
68 CA_KEY=""
69 CA_CERT=""
70 SERVER_KEY=""
71 SERVER_CERT=""
72 CLIENT_KEY=""
73 CLIENT_CERT=""
75 SYSDB_USER="$( id -un )"
77 function run_sysdb() {
78         $MEMCHECK "$TESTDIR/sysdb" -U $SYSDB_USER "$@"
79 }
81 function run_sysdb_nouser() {
82         $MEMCHECK "$TESTDIR/sysdb" "$@"
83 }
85 function run_sysdbd() {
86         $MEMCHECK "$TESTDIR/sysdbd" "$@" &
87         SYSDBD_PID=$!
88 }
90 function run_sysdbd_foreground() {
91         $MEMCHECK "$TESTDIR/sysdbd" "$@"
92 }
94 function stop_sysdbd() {
95         if test -z "$SYSDBD_PID"; then
96                 echo "Cannot stop sysdbd; PID unknown" >&2
97                 exit 1
98         fi
99         kill $SYSDBD_PID
100         wait $SYSDBD_PID
101         SYSDBD_PID=''
104 function wait_for_sysdbd() {
105         local socket="$SOCKET_FILE"
106         if test -n "$1"; then
107                 socket="$1"
108         fi
109         local i
110         for (( i=0; i<10; i++ )); do
111                 if test -e "$socket"; then
112                         break
113                 fi
114                 sleep 1
115         done
116         if test $i -eq 10; then
117                 echo 'SysDBd did not start within 10 seconds' >&2
118                 exit 1
119         fi
122 function wait_for_sysdbd_tcp() {
123         local host="$1"
124         local port="$2"
125         local i
126         for (( i=0; i<10; i++ )); do
127                 if echo | nc "$host" "$port"; then
128                         break
129                 fi
130                 sleep 1
131         done
132         if test $i -eq 10; then
133                 echo 'SysDBd did not start within 10 seconds' >&2
134                 exit 1
135         fi
138 function setup_ssl() {
139         CA_KEY="$TESTDIR/cacert.key"
140         CA_CERT="$TESTDIR/cacert.cert"
141         openssl genrsa -out "$CA_KEY" 2048
142         openssl req -batch -subj '/CN=Some CA' \
143                 -x509 -new -key "$CA_KEY" -out "$CA_CERT" -days 1
145         SERVER_KEY="$TESTDIR/server.key"
146         SERVER_CERT="$TESTDIR/server.cert"
147         openssl genrsa -out "$SERVER_KEY" 2048
148         openssl req -batch -subj '/CN=localhost' \
149                 -new -out "${SERVER_CERT}.csr" -key "$SERVER_KEY"
150         openssl x509 -req -in "${SERVER_CERT}.csr" -out "$SERVER_CERT" -days 1 \
151                 -CAkey "$CA_KEY" -CA "$CA_CERT" -CAcreateserial \
152                 -CAserial ${TESTDIR}/serial
154         CLIENT_KEY="$TESTDIR/client.key"
155         CLIENT_CERT="$TESTDIR/client.cert"
156         openssl genrsa -out "$CLIENT_KEY" 2048
157         openssl req -batch -subj "/CN=$SYSDB_USER" \
158                 -new -out "${CLIENT_CERT}.csr" -key "$CLIENT_KEY"
159         openssl x509 -req -in "${CLIENT_CERT}.csr" -out "$CLIENT_CERT" -days 1 \
160                 -CAkey "$CA_KEY" -CA "$CA_CERT" -CAcreateserial \
161                 -CAserial ${TESTDIR}/serial
164 # vim: set tw=78 sw=4 ts=4 noexpandtab :