Home | History | Annotate | Line # | Download | only in tests
run revision 1.1
      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