1#!/bin/sh 2## $OpenLDAP$ 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2021 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## ACKNOWLEDGEMENTS: 17## This module was written in 2016 by Ond��ej Kuzn��k for Symas Corp. 18 19USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>" 20 21TOPSRCDIR="${SRCDIR-$LDAP_SRC}" 22SRCDIR="${TOPSRCDIR}/tests" 23eval `grep EGREP_CMD= ${LDAP_BUILD}/tests/run` 24eval `$EGREP_CMD -e '^LN_S=' ${LDAP_BUILD}/tests/run` 25 26export SRCDIR TOPSRCDIR LN_S EGREP_CMD 27 28. "${SRCDIR}/scripts/defines.sh" 29 30BACKEND= 31CLEAN=no 32WAIT=0 33KILLSERVERS=yes 34PRESERVE=${PRESERVE-no} 35SYNCMODE=${SYNCMODE-rp} 36USERDATA=no 37LOOP=1 38COUNTER=1 39 40while test $# -gt 0 ; do 41 case "$1" in 42 -b | -backend) 43 BACKEND="$2" 44 shift; shift ;; 45 46 -c | -clean) 47 CLEAN=yes 48 shift ;; 49 50 -k | -kill) 51 KILLSERVERS=no 52 shift ;; 53 -l | -loop) 54 NUM="`echo $2 | sed 's/[0-9]//g'`" 55 if [ -z "$NUM" ]; then 56 LOOP=$2 57 else 58 echo "Loop variable not an int: $2" 59 echo "$USAGE"; exit 1 60 fi 61 shift ; 62 shift ;; 63 64 -p | -preserve) 65 PRESERVE=yes 66 shift ;; 67 68 -s | -syncmode) 69 case "$2" in 70 ro | rp) 71 SYNCMODE="$2" 72 ;; 73 *) 74 echo "unknown sync mode $2" 75 echo "$USAGE"; exit 1 76 ;; 77 esac 78 shift; shift ;; 79 80 -u | -userdata) 81 USERDATA=yes 82 shift ;; 83 84 -w | -wait) 85 WAIT=1 86 shift ;; 87 88 -) 89 shift 90 break ;; 91 92 -*) 93 echo "$USAGE"; exit 1 94 ;; 95 96 *) 97 break ;; 98 esac 99done 100 101eval `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run` 102export `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run | sed 's/=.*//'` 103 104if test -z "$BACKEND" ; then 105 for b in mdb ; do 106 if eval "test \"\$AC_$b\" != no" ; then 107 BACKEND=$b 108 break 109 fi 110 done 111 if test -z "$BACKEND" ; then 112 echo "No suitable default database backend configured" >&2 113 exit 1 114 fi 115fi 116 117BACKENDTYPE=`eval 'echo $AC_'$BACKEND` 118if test "x$BACKENDTYPE" = "x" ; then 119 BACKENDTYPE="unknown" 120fi 121 122# Backend features. indexdb: indexing and unchecked limit. 123# maindb: main storage backend. Currently index,limits,mode,paged results. 124INDEXDB=noindexdb MAINDB=nomaindb 125case $BACKEND in 126 mdb) INDEXDB=indexdb MAINDB=maindb ;; 127 ndb) INDEXDB=indexdb ;; 128esac 129 130export BACKEND BACKENDTYPE INDEXDB MAINDB \ 131 WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA \ 132 SRCDIR 133 134if test $# = 0 ; then 135 echo "$USAGE"; exit 1 136fi 137 138# need defines.sh for the definitions of the directories 139. $SRCDIR/scripts/defines.sh 140 141SCRIPTDIR="${TOPDIR}/tests/scripts" 142 143export SCRIPTDIR 144 145SCRIPTNAME="$1" 146shift 147 148if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then 149 SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}" 150elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then 151 SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`" 152elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then 153 SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`" 154else 155 echo "run: ${SCRIPTNAME} not found (or not executable)" 156 exit 1; 157fi 158 159if test ! -r ${DATADIR}/test.ldif ; then 160 ${LN_S} ${SRCDIR}/data ${DATADIR} 161fi 162if test ! -r ${SCHEMADIR}/core.schema ; then 163 ${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR} 164fi 165if test ! -r ./data; then 166 ${LN_S} ${TOPDIR}/tests/data ./ 167fi 168 169if test -d ${TESTDIR} ; then 170 if test $PRESERVE = no ; then 171 echo "Cleaning up test run directory leftover from previous run." 172 /bin/rm -rf ${TESTDIR} 173 elif test $PRESERVE = yes ; then 174 echo "Cleaning up only database directories leftover from previous run." 175 /bin/rm -rf ${TESTDIR}/db.* 176 fi 177fi 178if test $BACKEND = ndb ; then 179 mysql --user root <<EOF 180 drop database if exists db_1; 181 drop database if exists db_2; 182 drop database if exists db_3; 183 drop database if exists db_4; 184 drop database if exists db_5; 185 drop database if exists db_6; 186EOF 187fi 188mkdir -p ${TESTDIR} 189 190if test $USERDATA = yes ; then 191 if test ! -d userdata ; then 192 echo "User data directory (userdata) does not exist." 193 exit 1 194 fi 195 cp -R userdata/* ${TESTDIR} 196fi 197 198# disable LDAP initialization 199LDAPNOINIT=true; export LDAPNOINIT 200 201echo "Running ${SCRIPT} for ${BACKEND}..." 202while [ $COUNTER -le $LOOP ]; do 203 if [ $LOOP -gt 1 ]; then 204 echo "Running $COUNTER of $LOOP iterations" 205 fi 206 $SCRIPT $* 207 RC=$? 208 209 if test $CLEAN = yes ; then 210 echo "Cleaning up test run directory from this run." 211 /bin/rm -rf ${TESTDIR} 212 echo "Cleaning up symlinks." 213 /bin/rm -f ${DATADIR} ${SCHEMADIR} 214 fi 215 216 if [ $RC -ne 0 ]; then 217 if [ $LOOP -gt 1 ]; then 218 echo "Failed after $COUNTER of $LOOP iterations" 219 fi 220 exit $RC 221 else 222 COUNTER=`expr $COUNTER + 1` 223 if [ $COUNTER -le $LOOP ]; then 224 echo "Cleaning up test run directory from this run." 225 /bin/rm -rf ${TESTDIR} 226 fi 227 fi 228done 229exit $RC 230