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 Ondej Kuznk for Symas Corp. 18 19 USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>" 20 21 TOPSRCDIR="${SRCDIR-$LDAP_SRC}" 22 SRCDIR="${TOPSRCDIR}/tests" 23 eval `grep EGREP_CMD= ${LDAP_BUILD}/tests/run` 24 eval `$EGREP_CMD -e '^LN_S=' ${LDAP_BUILD}/tests/run` 25 26 export SRCDIR TOPSRCDIR LN_S EGREP_CMD 27 28 . "${SRCDIR}/scripts/defines.sh" 29 30 BACKEND= 31 CLEAN=no 32 WAIT=0 33 KILLSERVERS=yes 34 PRESERVE=${PRESERVE-no} 35 SYNCMODE=${SYNCMODE-rp} 36 USERDATA=no 37 LOOP=1 38 COUNTER=1 39 40 while 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 99 done 100 101 eval `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run` 102 export `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run | sed 's/=.*//'` 103 104 if 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 115 fi 116 117 BACKENDTYPE=`eval 'echo $AC_'$BACKEND` 118 if test "x$BACKENDTYPE" = "x" ; then 119 BACKENDTYPE="unknown" 120 fi 121 122 # Backend features. indexdb: indexing and unchecked limit. 123 # maindb: main storage backend. Currently index,limits,mode,paged results. 124 INDEXDB=noindexdb MAINDB=nomaindb 125 case $BACKEND in 126 mdb) INDEXDB=indexdb MAINDB=maindb ;; 127 ndb) INDEXDB=indexdb ;; 128 esac 129 130 export BACKEND BACKENDTYPE INDEXDB MAINDB \ 131 WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA \ 132 SRCDIR 133 134 if test $# = 0 ; then 135 echo "$USAGE"; exit 1 136 fi 137 138 # need defines.sh for the definitions of the directories 139 . $SRCDIR/scripts/defines.sh 140 141 SCRIPTDIR="${TOPDIR}/tests/scripts" 142 143 export SCRIPTDIR 144 145 SCRIPTNAME="$1" 146 shift 147 148 if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then 149 SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}" 150 elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then 151 SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`" 152 elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then 153 SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`" 154 else 155 echo "run: ${SCRIPTNAME} not found (or not executable)" 156 exit 1; 157 fi 158 159 if test ! -r ${DATADIR}/test.ldif ; then 160 ${LN_S} ${SRCDIR}/data ${DATADIR} 161 fi 162 if test ! -r ${SCHEMADIR}/core.schema ; then 163 ${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR} 164 fi 165 if test ! -r ./data; then 166 ${LN_S} ${TOPDIR}/tests/data ./ 167 fi 168 169 if 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 177 fi 178 if 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; 186 EOF 187 fi 188 mkdir -p ${TESTDIR} 189 190 if 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} 196 fi 197 198 # disable LDAP initialization 199 LDAPNOINIT=true; export LDAPNOINIT 200 201 echo "Running ${SCRIPT} for ${BACKEND}..." 202 while [ $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 228 done 229 exit $RC 230