1d11b170bStron#! /bin/sh 2d11b170bStron# $OpenLDAP$ 3d11b170bStron## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4d11b170bStron## 5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation. 6d11b170bStron## All rights reserved. 7d11b170bStron## 8d11b170bStron## Redistribution and use in source and binary forms, with or without 9d11b170bStron## modification, are permitted only as authorized by the OpenLDAP 10d11b170bStron## Public License. 11d11b170bStron## 12d11b170bStron## A copy of this license is available in the file LICENSE in the 13d11b170bStron## top-level directory of the distribution or, alternatively, at 14d11b170bStron## <http://www.OpenLDAP.org/license.html>. 15d11b170bStron 16d11b170bStron# The default debug level logs more than 1Gb: 17d11b170bStroncase "$SLAPD_DEBUG_MT_HOT/$SLAPD_DEBUG" in 18d11b170bStron/0 | /0x0 | /0X0 | /none | /NONE | /32768 | /0x8000 | 0X8000 | /0100000) :;; 19d11b170bStron*) SLAPD_DEBUG=${SLAPD_DEBUG_MT_HOT-stats} ;; 20d11b170bStronesac 21d11b170bStron 22d11b170bStronecho "running defines.sh" 23d11b170bStron. $SRCDIR/scripts/defines.sh 24d11b170bStron 25d11b170bStronif test x$TESTLOOPS = x ; then 26d11b170bStron TESTLOOPS=50 27d11b170bStronfi 28d11b170bStron 29d11b170bStronmkdir -p $TESTDIR $DBDIR1 30d11b170bStron 31d11b170bStron# 32d11b170bStron# Populate and start up slapd server with some random data 33d11b170bStron# 34d11b170bStron 35d11b170bStronecho "Running slapadd to build slapd database..." 36*e670fd5cSchristos. $CONFFILTER $BACKEND < $MCONF > $ADDCONF 37d11b170bStron$SLAPADD -f $ADDCONF -l $LDIFORDERED 38d11b170bStronRC=$? 39d11b170bStronif test $RC != 0 ; then 40d11b170bStron echo "slapadd failed ($RC)!" 41d11b170bStron exit $RC 42d11b170bStronfi 43d11b170bStron 44d11b170bStronecho "Running slapindex to index slapd database..." 45*e670fd5cSchristos. $CONFFILTER $BACKEND < $CONF > $CONF1 46d11b170bStron$SLAPINDEX -f $CONF1 47d11b170bStronRC=$? 48d11b170bStronif test $RC != 0 ; then 49d11b170bStron echo "warning: slapindex failed ($RC)" 50d11b170bStron echo " assuming no indexing support" 51d11b170bStronfi 52d11b170bStron 53d11b170bStronecho "Starting slapd on TCP/IP port $PORT1..." 54*e670fd5cSchristosecho $SLAPD -f $CONF1 -h $URI1 -d $LVL 55*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 56d11b170bStronPID=$! 57d11b170bStronif test $WAIT != 0 ; then 58d11b170bStron echo PID $PID 59d11b170bStron read foo 60d11b170bStronfi 61d11b170bStronKILLPIDS="$PID" 62d11b170bStron 63d11b170bStronsleep 1 64d11b170bStron 65d11b170bStron# Perform a basic search, make sure of a functional setup 66d11b170bStronecho "Testing basic monitor search..." 67d11b170bStronfor i in 0 1 2 3 4 5; do 68d11b170bStron $LDAPSEARCH -s base -b "$MONITORDN" -H $URI1 \ 69d11b170bStron '(objectclass=*)' > /dev/null 2>&1 70d11b170bStron RC=$? 71d11b170bStron if test $RC = 0 ; then 72d11b170bStron break 73d11b170bStron fi 74d11b170bStron echo "Waiting 5 seconds for slapd to start..." 75d11b170bStron sleep 5 76d11b170bStrondone 77d11b170bStron 78d11b170bStronif test $RC != 0 ; then 79d11b170bStron echo "mt-hot read failed ($RC)!" 80d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 81d11b170bStron exit $RC 82d11b170bStronfi 83d11b170bStron 84d11b170bStroncat /dev/null > $MTREADOUT 85d11b170bStron 86d11b170bStronecho "Monitor searches" 87d11b170bStron# Perform a basic single threaded search on a single connection 88d11b170bStronTHR=1 89d11b170bStronOUTER=1 90d11b170bStronINNER=`expr $TESTLOOPS \* 1000` 91d11b170bStronecho "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." 92d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 93d11b170bStron -e "$MONITORDN" \ 94d11b170bStron -m $THR -L $OUTER -l $INNER 95d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 96d11b170bStron -e "$MONITORDN" -f "(objectclass=*)" \ 97d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 98d11b170bStronRC=$? 99d11b170bStronif test $RC != 0 ; then 100d11b170bStron echo "slapd-mtread failed ($RC)!" 101d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 102d11b170bStron exit $RC 103d11b170bStronfi 104d11b170bStron 105d11b170bStron# Perform a basic multi-threaded search on a single connection 106d11b170bStronTHR=5 107d11b170bStronOUTER=1 108d11b170bStronINNER=`expr $TESTLOOPS \* 200` 109d11b170bStronecho "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." 110d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 111d11b170bStron -e "$MONITORDN" \ 112d11b170bStron -m $THR -L $OUTER -l $INNER 113d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 114d11b170bStron -e "$MONITORDN" -f "(objectclass=*)" \ 115d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 116d11b170bStronRC=$? 117d11b170bStronif test $RC != 0 ; then 118d11b170bStron echo "slapd-mtread failed ($RC)!" 119d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 120d11b170bStron exit $RC 121d11b170bStronfi 122d11b170bStron 123d11b170bStron# Perform a basic multi-threaded search on a single connection 124d11b170bStronTHR=100 125d11b170bStronOUTER=5 126d11b170bStronINNER=`expr $TESTLOOPS \* 2` 127d11b170bStronecho "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." 128d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 129d11b170bStron -e "$MONITORDN" \ 130d11b170bStron -m $THR -L $OUTER -l $INNER 131d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 132d11b170bStron -e "$MONITORDN" -f "(objectclass=*)" \ 133d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 134d11b170bStronRC=$? 135d11b170bStronif test $RC != 0 ; then 136d11b170bStron echo "slapd-mtread failed ($RC)!" 137d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 138d11b170bStron exit $RC 139d11b170bStronfi 140d11b170bStron 141d11b170bStron# Perform a single threaded random DB search on a single connection 142d11b170bStronecho "Random searches" 143d11b170bStronTHR=1 144d11b170bStronOUTER=1 145d11b170bStronINNER=`expr $TESTLOOPS \* 1000` 146d11b170bStronecho "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." 147d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 148d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 149d11b170bStron -m $THR -L $OUTER -l $INNER 150d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 151d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 152d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 153d11b170bStronRC=$? 154d11b170bStronif test $RC != 0 ; then 155d11b170bStron echo "slapd-mtread failed ($RC)!" 156d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 157d11b170bStron exit $RC 158d11b170bStronfi 159d11b170bStron 160d11b170bStron# Perform a multi-threaded random DB search on a single connection 161d11b170bStronTHR=5 162d11b170bStronOUTER=1 163d11b170bStronINNER=`expr $TESTLOOPS \* 200` 164d11b170bStronecho "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." 165d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 166d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 167d11b170bStron -m $THR -L $OUTER -l $INNER 168d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 169d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 170d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 171d11b170bStronRC=$? 172d11b170bStronif test $RC != 0 ; then 173d11b170bStron echo "slapd-mtread failed ($RC)!" 174d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 175d11b170bStron exit $RC 176d11b170bStronfi 177d11b170bStron 178d11b170bStron# Perform a multi-threaded random DB search on a single connection 179d11b170bStronTHR=100 180d11b170bStronOUTER=5 181d11b170bStronINNER=`expr $TESTLOOPS \* 2` 182d11b170bStronecho "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." 183d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 184d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 185d11b170bStron -m $THR -L $OUTER -l $INNER 186d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 187d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 188d11b170bStron -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 189d11b170bStronRC=$? 190d11b170bStronif test $RC != 0 ; then 191d11b170bStron echo "slapd-mtread failed ($RC)!" 192d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 193d11b170bStron exit $RC 194d11b170bStronfi 195d11b170bStron 196d11b170bStron# Perform a basic multi-threaded search using multiple connections 197d11b170bStronecho "Multiple threads and connection searches" 198d11b170bStronCONN=5 199d11b170bStronTHR=5 200d11b170bStronOUTER=1 201d11b170bStronINNER=`expr $TESTLOOPS \* 200` 202d11b170bStronecho "Testing basic mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." 203d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 204d11b170bStron -e "$MONITORDN" \ 205d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER 206d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 207d11b170bStron -e "$MONITORDN" -f "(objectclass=*)" \ 208d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 209d11b170bStronRC=$? 210d11b170bStronif test $RC != 0 ; then 211d11b170bStron echo "slapd-mtread failed ($RC)!" 212d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 213d11b170bStron exit $RC 214d11b170bStronfi 215d11b170bStron 216d11b170bStron# Perform a basic multi-threaded search using multiple connections 217d11b170bStronCONN=5 218d11b170bStronTHR=50 219d11b170bStronOUTER=5 220d11b170bStronINNER=`expr $TESTLOOPS \* 20` 221d11b170bStronecho "Testing basic mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." 222d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 223d11b170bStron -e "$MONITORDN" \ 224d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER 225d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 226d11b170bStron -e "$MONITORDN" -f "(objectclass=*)" \ 227d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 228d11b170bStronRC=$? 229d11b170bStronif test $RC != 0 ; then 230d11b170bStron echo "slapd-mtread failed ($RC)!" 231d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 232d11b170bStron exit $RC 233d11b170bStronfi 234d11b170bStron 235d11b170bStron# Perform a multi-threaded random DB search using multiple connections 236d11b170bStronCONN=5 237d11b170bStronTHR=100 238d11b170bStronOUTER=5 239d11b170bStronINNER=`expr $TESTLOOPS \* 2` 240d11b170bStronecho "Testing random mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." 241d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 242d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 243d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER 244d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 245d11b170bStron -e "$BASEDN" -f "(objectclass=*)" \ 246d11b170bStron -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 247d11b170bStronRC=$? 248d11b170bStronif test $RC != 0 ; then 249d11b170bStron echo "slapd-mtread failed ($RC)!" 250d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 251d11b170bStron exit $RC 252d11b170bStronfi 253d11b170bStron 254d11b170bStron# Perform a multi-threaded random reads and writes using single connection 255d11b170bStronCONN=1 256d11b170bStronTHR=10 257d11b170bStronWTHR=10 258d11b170bStronOUTER=5 259d11b170bStronINNER=`expr $TESTLOOPS \* 2` 260d11b170bStronecho "Testing random mt-hot r/w search: $THR read threads $WTHR write threads $CONN conns ($OUTER x $INNER) loops..." 261d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 262d11b170bStron -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ 263d11b170bStron -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER 264d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 265d11b170bStron -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ 266d11b170bStron -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 267d11b170bStronRC=$? 268d11b170bStronif test $RC != 0 ; then 269d11b170bStron echo "slapd-mtread failed ($RC)!" 270d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 271d11b170bStron exit $RC 272d11b170bStronfi 273d11b170bStron 274d11b170bStron# Perform a multi-threaded random reads and writes using multiple connections 275d11b170bStronCONN=5 276d11b170bStronTHR=10 277d11b170bStronWTHR=10 278d11b170bStronOUTER=5 279d11b170bStronINNER=`expr $TESTLOOPS \* 2` 280d11b170bStronecho "Testing random mt-hot r/w search: $THR read threads $WTHR write threads $CONN conns ($OUTER x $INNER) loops..." 281d11b170bStronecho $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 282d11b170bStron -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ 283d11b170bStron -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER 284d11b170bStron$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ 285d11b170bStron -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ 286d11b170bStron -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 287d11b170bStronRC=$? 288d11b170bStronif test $RC != 0 ; then 289d11b170bStron echo "slapd-mtread failed ($RC)!" 290d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 291d11b170bStron exit $RC 292d11b170bStronfi 293d11b170bStron 294d11b170bStron 295d11b170bStrontest $KILLSERVERS != no && kill -HUP $KILLPIDS 296d11b170bStron 297d11b170bStronecho ">>>>> Test succeeded" 298d11b170bStron 299d11b170bStronexit 0 300