openldap/tests/run.in
Arran Cudbard-Bell b6bed508f5
build: Set OS_WINDOWS in scripts/defines.sh to aid with Windows detection in test cases
This uses the result AC_CANONICAL_HOST and a pre-existing case statement checking for mingw32, cygwin, interix to determine if the build system is Windows based... We make the not unreasonable assumption that if the build system is Windows based, the tests will also be running on a Windows system.
2025-07-01 07:57:59 -04:00

246 lines
5.2 KiB
Bash

#!/bin/sh
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>"
# configure generated
SRCDIR="${SRCDIR:-@srcdir@}"
TOPSRCDIR="${TOPSRCDIR:-@top_srcdir@}"
TOPDIR="`(cd ..; echo $PWD)`"
OBJDIR="${OBJDIR:-$TOPDIR}"
LN_S="@LN_S@"
EGREP_CMD="@EGREP@"
export SRCDIR TOPSRCDIR OBJDIR LN_S EGREP_CMD
SCRIPTDIR="${SCRIPTDIR:-${SRCDIR}/scripts}"
DEFSDIR="${DEFSDIR:-$SCRIPTDIR}"
# need defines.sh for the definitions of the directories
. "$DEFSDIR/defines.sh"
# Load balancer
AC_lloadd=lloadd@BUILD_BALANCER@
# backends known to ./run -b <backend> (used to deduce $BACKENDTYPE)
AC_ldif=yes
#AC_mdb=
#AC_null=
# misc
AC_WITH_SASL=@WITH_SASL@
AC_WITH_TLS=@WITH_TLS@
AC_TLS_TYPE=@WITH_TLS_TYPE@
AC_WITH_MODULES_ENABLED=@WITH_MODULES_ENABLED@
AC_ACI_ENABLED=aci@WITH_ACI_ENABLED@
AC_LIBS_DYNAMIC=lib@BUILD_LIBS_DYNAMIC@
# environment
AC_OS_WINDOWS=@OS_WINDOWS@
export AC_lloadd \
AC_WITH_SASL AC_WITH_TLS AC_WITH_MODULES_ENABLED AC_ACI_ENABLED \
AC_LIBS_DYNAMIC AC_WITH_TLS AC_TLS_TYPE
if test ! -x ../servers/slapd/slapd ; then
echo "Could not locate slapd(8)"
exit 1
fi
BACKEND=
CLEAN=no
WAIT=0
KILLSERVERS=yes
PRESERVE=${PRESERVE-no}
SYNCMODE=${SYNCMODE-rp}
USERDATA=no
LOOP=1
COUNTER=1
while test $# -gt 0 ; do
case "$1" in
-b | -backend)
BACKEND="$2"
shift; shift ;;
-c | -clean)
CLEAN=yes
shift ;;
-k | -kill)
KILLSERVERS=no
shift ;;
-l | -loop)
NUM="`echo $2 | sed 's/[0-9]//g'`"
if [ -z "$NUM" ]; then
LOOP=$2
else
echo "Loop variable not an int: $2"
echo "$USAGE"; exit 1
fi
shift ;
shift ;;
-p | -preserve)
PRESERVE=yes
shift ;;
-s | -syncmode)
case "$2" in
ro | rp)
SYNCMODE="$2"
;;
*)
echo "unknown sync mode $2"
echo "$USAGE"; exit 1
;;
esac
shift; shift ;;
-u | -userdata)
USERDATA=yes
shift ;;
-w | -wait)
WAIT=1
shift ;;
-)
shift
break ;;
-*)
echo "$USAGE"; exit 1
;;
*)
break ;;
esac
done
if test -z "$BACKEND" ; then
for b in mdb ; do
if eval "test \"\$AC_$b\" != ${b}no" ; then
BACKEND=$b
break
fi
done
if test -z "$BACKEND" ; then
echo "No suitable default database backend configured" >&2
exit 1
fi
fi
BACKENDTYPE=`eval 'echo $AC_'$BACKEND | sed -e s/$BACKEND//`
if test "x$BACKENDTYPE" = "x" ; then
BACKENDTYPE="unknown"
fi
if test "$BACKENDTYPE" != "yes" -a "$BACKENDTYPE" != "mod" ; then
echo "Backend $BACKEND disabled or unknown (type is \"$BACKENDTYPE\")"
exit 1
fi
# Backend features. indexdb: indexing and unchecked limit.
# maindb: main storage backend. Currently index,limits,mode,paged results.
INDEXDB=noindexdb MAINDB=nomaindb
case $BACKEND in
mdb) INDEXDB=indexdb MAINDB=maindb ;;
wt) INDEXDB=indexdb ;;
esac
export BACKEND BACKENDTYPE INDEXDB MAINDB \
WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA
if test $# = 0 ; then
echo "$USAGE"; exit 1
fi
ITSDIR="${SRCDIR}/data/regressions"
SCRIPTNAME="$1"
shift
if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then
SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}"
elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then
SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"
elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then
SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"
elif test -x "`echo ${ITSDIR}/${SCRIPTNAME}/${SCRIPTNAME}`"; then
SCRIPT="`echo ${ITSDIR}/${SCRIPTNAME}/${SCRIPTNAME}`"
else
echo "run: ${SCRIPTNAME} not found (or not executable)"
exit 1;
fi
if test ! -r ${DATADIR}/test.ldif ; then
${LN_S} ${SRCDIR}/data ${DATADIR}
fi
if test ! -r ${SCHEMADIR}/core.schema ; then
${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR}
fi
if test -d ${TESTDIR} ; then
if test $PRESERVE = no ; then
echo "Cleaning up test run directory leftover from previous run."
/bin/rm -rf ${TESTDIR}
elif test $PRESERVE = yes ; then
echo "Cleaning up only database directories leftover from previous run."
/bin/rm -rf ${TESTDIR}/db.*
fi
fi
mkdir -p ${TESTDIR}
if test $USERDATA = yes ; then
if test ! -d userdata ; then
echo "User data directory (userdata) does not exist."
exit 1
fi
cp -R userdata/* ${TESTDIR}
fi
# disable LDAP initialization
LDAPNOINIT=true; export LDAPNOINIT
echo "Running ${SCRIPT} for ${BACKEND}..."
while [ $COUNTER -le $LOOP ]; do
if [ $LOOP -gt 1 ]; then
echo "Running $COUNTER of $LOOP iterations"
fi
START=`date +%s`
$SCRIPT $*
RC=$?
END=`date +%s`
if test $CLEAN = yes ; then
echo "Cleaning up test run directory from this run."
/bin/rm -rf ${TESTDIR}
echo "Cleaning up symlinks."
/bin/rm -f ${DATADIR} ${SCHEMADIR}
fi
if [ $RC -ne 0 ]; then
if [ $LOOP -gt 1 ]; then
echo "Failed after $COUNTER of $LOOP iterations"
fi
exit $RC
else
COUNTER=`expr $COUNTER + 1`
if [ $COUNTER -le $LOOP ]; then
echo "Cleaning up test run directory from this run."
/bin/rm -rf ${TESTDIR}
fi
fi
done
exit $RC