]> git.sur5r.net Git - openldap/blob - tests/run.in
ebaae6173fc7ea05e60eb8c8dca3b3e55e5631d3
[openldap] / tests / run.in
1 #!/bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2011 The OpenLDAP Foundation.
6 ## All rights reserved.
7 ##
8 ## Redistribution and use in source and binary forms, with or without
9 ## modification, are permitted only as authorized by the OpenLDAP
10 ## Public License.
11 ##
12 ## A copy of this license is available in the file LICENSE in the
13 ## top-level directory of the distribution or, alternatively, at
14 ## <http://www.OpenLDAP.org/license.html>.
15
16 USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>"
17
18 # configure generated
19 SRCDIR="@srcdir@"
20 TOPSRCDIR="@top_srcdir@"
21 LN_S="@LN_S@"
22 EGREP_CMD="@EGREP@"
23
24 export SRCDIR TOPSRCDIR LN_S EGREP_CMD
25
26 # backends known to ./run -b <backend> (used to deduce $BACKENDTYPE)
27 AC_bdb=@BUILD_BDB@
28 AC_hdb=@BUILD_HDB@
29 AC_ldif=yes
30 AC_mdb=@BUILD_MDB@
31 AC_null=@BUILD_NULL@
32
33 # other backends
34 AC_ldap=ldap@BUILD_LDAP@
35 AC_meta=meta@BUILD_META@
36 AC_monitor=@BUILD_MONITOR@
37 AC_relay=relay@BUILD_RELAY@
38 AC_sql=sql@BUILD_SQL@
39
40 # overlays
41 AC_accesslog=accesslog@BUILD_ACCESSLOG@
42 AC_dds=dds@BUILD_DDS@
43 AC_dynlist=dynlist@BUILD_DYNLIST@
44 AC_memberof=memberof@BUILD_MEMBEROF@
45 AC_pcache=pcache@BUILD_PROXYCACHE@
46 AC_ppolicy=ppolicy@BUILD_PPOLICY@
47 AC_refint=refint@BUILD_REFINT@
48 AC_retcode=retcode@BUILD_RETCODE@
49 AC_translucent=translucent@BUILD_TRANSLUCENT@
50 AC_unique=unique@BUILD_UNIQUE@
51 AC_rwm=rwm@BUILD_RWM@
52 AC_syncprov=syncprov@BUILD_SYNCPROV@
53 AC_valsort=valsort@BUILD_VALSORT@
54
55 # misc
56 AC_WITH_SASL=@WITH_SASL@
57 AC_WITH_TLS=@WITH_TLS@
58 AC_WITH_MODULES_ENABLED=@WITH_MODULES_ENABLED@
59 AC_ACI_ENABLED=aci@WITH_ACI_ENABLED@
60 AC_THREADS=threads@BUILD_THREAD@
61 AC_LIBS_DYNAMIC=lib@BUILD_LIBS_DYNAMIC@
62
63 # sanitize
64 if test "${AC_ldap}" = "ldapmod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then
65         AC_ldap="ldapno"
66 fi
67 if test "${AC_meta}" = "metamod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then
68         AC_meta="metano"
69 fi
70
71 export AC_bdb AC_hdb AC_ldap AC_mdb AC_meta AC_monitor AC_null AC_relay AC_sql \
72         AC_accesslog AC_dds AC_dynlist AC_memberof AC_pcache AC_ppolicy \
73         AC_refint AC_retcode AC_rwm AC_unique AC_syncprov AC_translucent \
74         AC_valsort \
75         AC_WITH_SASL AC_WITH_TLS AC_WITH_MODULES_ENABLED AC_ACI_ENABLED \
76         AC_THREADS AC_LIBS_DYNAMIC
77
78 if test ! -x ../servers/slapd/slapd ; then
79         echo "Could not locate slapd(8)"
80         exit 1
81 fi
82
83 BACKEND=
84 CLEAN=no
85 WAIT=0
86 KILLSERVERS=yes
87 PRESERVE=${PRESERVE-no}
88 SYNCMODE=${SYNCMODE-rp}
89 USERDATA=no
90 LOOP=1
91 COUNTER=1
92
93 while test $# -gt 0 ; do
94         case "$1" in
95                 -b | -backend)
96                         BACKEND="$2"
97                         shift; shift ;;
98
99                 -c | -clean)
100                         CLEAN=yes
101                         shift ;;
102
103                 -k | -kill)
104                         KILLSERVERS=no
105                         shift ;;
106                 -l | -loop)
107                         NUM="`echo $2 | sed 's/[0-9]//g'`"
108                         if [ -z "$NUM" ]; then
109                                 LOOP=$2
110                         else
111                                 echo "Loop variable not an int: $2"
112                                 echo "$USAGE"; exit 1
113                         fi
114                         shift ;
115                         shift ;;
116
117                 -p | -preserve)
118                         PRESERVE=yes
119                         shift ;;
120
121                 -s | -syncmode)
122                         case "$2" in
123                                 ro | rp)
124                                         SYNCMODE="$2"
125                                         ;;
126                                 *)
127                                         echo "unknown sync mode $2"
128                                         echo "$USAGE"; exit 1
129                                         ;;
130                         esac
131                         shift; shift ;;
132
133                 -u | -userdata)
134                         USERDATA=yes
135                         shift ;;
136
137                 -w | -wait)
138                         WAIT=1
139                         shift ;;
140
141                 -)
142                         shift
143                         break ;;
144
145                 -*)
146                         echo "$USAGE"; exit 1
147                         ;;
148
149                 *)
150                         break ;;
151         esac
152 done
153
154 if test -z "$BACKEND" ; then
155         for b in bdb hdb mdb ; do
156                 if eval "test \"\$AC_$b\" != no" ; then
157                         BACKEND=$b
158                         break
159                 fi
160         done
161         if test -z "$BACKEND" ; then
162                 echo "No suitable default database backend configured" >&2
163                 exit 1
164         fi
165 fi
166
167 BACKENDTYPE=`eval 'echo $AC_'$BACKEND`
168 if test "x$BACKENDTYPE" = "x" ; then
169         BACKENDTYPE="unknown"
170 fi
171
172 # Backend features.  indexdb: indexing and unchecked limit.
173 # maindb: main storage backend.  Currently index,limits,mode,paged results.
174 INDEXDB=noindexdb MAINDB=nomaindb
175 case $BACKEND in
176         bdb|hdb|mdb) INDEXDB=indexdb MAINDB=maindb ;;
177         ndb) INDEXDB=indexdb ;;
178 esac
179
180 export  BACKEND BACKENDTYPE INDEXDB MAINDB \
181         WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA
182
183 if test $# = 0 ; then
184         echo "$USAGE"; exit 1
185 fi
186
187 # need defines.sh for the definitions of the directories
188 . $SRCDIR/scripts/defines.sh
189
190 SCRIPTDIR="${SRCDIR}/scripts"
191 SCRIPTNAME="$1"
192 shift
193
194 if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then
195         SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}"
196 elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then
197         SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"
198 elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then
199         SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"
200 else
201         echo "run: ${SCRIPTNAME} not found (or not executable)"
202         exit 1;
203 fi
204
205 if test ! -r ${DATADIR}/test.ldif ; then
206         ${LN_S} ${SRCDIR}/data ${DATADIR}
207 fi
208 if test ! -r ${SCHEMADIR}/core.schema ; then
209         ${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR}
210 fi
211
212 if test -d ${TESTDIR} ; then
213         if test $PRESERVE = no ; then
214                 echo "Cleaning up test run directory leftover from previous run."
215                 /bin/rm -rf ${TESTDIR}
216         elif test $PRESERVE = yes ; then
217                 echo "Cleaning up only database directories leftover from previous run."
218                 /bin/rm -rf ${TESTDIR}/db.*
219         fi
220 fi
221 if test $BACKEND = ndb ; then
222         mysql --user root <<EOF
223         drop database if exists db_1;
224         drop database if exists db_2;
225         drop database if exists db_3;
226         drop database if exists db_4;
227         drop database if exists db_5;
228         drop database if exists db_6;
229 EOF
230 fi
231 mkdir -p ${TESTDIR}
232
233 if test $USERDATA = yes ; then
234         if test ! -d userdata ; then
235                 echo "User data directory (userdata) does not exist."
236                 exit 1
237         fi
238         cp -R userdata/* ${TESTDIR}
239 fi
240
241 # disable LDAP initialization
242 LDAPNOINIT=true; export LDAPNOINIT
243
244 echo "Running ${SCRIPT} for ${BACKEND}..."
245 while [ $COUNTER -le $LOOP ]; do
246         if [ $LOOP -gt 1 ]; then
247                 echo "Running $COUNTER of $LOOP iterations"
248         fi
249         $SCRIPT $*
250         RC=$?
251
252         if test $CLEAN = yes ; then
253                 echo "Cleaning up test run directory from this run."
254                 /bin/rm -rf ${TESTDIR}
255                 echo "Cleaning up symlinks."
256                 /bin/rm -f ${DATADIR} ${SCHEMADIR}
257         fi
258
259         if [ $RC -ne 0 ]; then
260                 exit $RC
261         else
262                 COUNTER=`expr $COUNTER + 1`
263                 if [ $COUNTER -le $LOOP ]; then
264                         echo "Cleaning up test run directory from this run."
265                         /bin/rm -rf ${TESTDIR}
266                 fi
267         fi
268 done
269 exit $RC