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