xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test039-glue-ldap-concurrency (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
12de962bdSlukem#! /bin/sh
2d11b170bStron# $OpenLDAP$
32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>.
42de962bdSlukem##
5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation.
62de962bdSlukem## All rights reserved.
72de962bdSlukem##
82de962bdSlukem## Redistribution and use in source and binary forms, with or without
92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP
102de962bdSlukem## Public License.
112de962bdSlukem##
122de962bdSlukem## A copy of this license is available in the file LICENSE in the
132de962bdSlukem## top-level directory of the distribution or, alternatively, at
142de962bdSlukem## <http://www.OpenLDAP.org/license.html>.
152de962bdSlukem
162de962bdSlukemecho "running defines.sh"
172de962bdSlukem. $SRCDIR/scripts/defines.sh
182de962bdSlukem
192de962bdSlukemecho ""
202de962bdSlukem
212de962bdSlukemif test $BACKLDAP = ldapno ; then
222de962bdSlukem	echo "ldap backend not available, test skipped"
232de962bdSlukem	exit 0
242de962bdSlukemfi
252de962bdSlukem
262de962bdSlukemif test $RWM = rwmno ; then
272de962bdSlukem	echo "rwm (rewrite/remap) overlay not available, test skipped"
282de962bdSlukem	exit 0
292de962bdSlukemfi
302de962bdSlukem
312de962bdSlukemif test x$TESTLOOPS = x ; then
322de962bdSlukem	TESTLOOPS=50
332de962bdSlukemfi
342de962bdSlukem
352de962bdSlukemif test x$TESTOLOOPS = x ; then
362de962bdSlukem	TESTOLOOPS=1
372de962bdSlukemfi
382de962bdSlukem
39d11b170bStronif test x$TESTCHILDREN = x ; then
40d11b170bStron	TESTCHILDREN=20
41d11b170bStronfi
42d11b170bStron
432de962bdSlukemrm -rf $TESTDIR
442de962bdSlukem
452de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $DBDIR2
462de962bdSlukem
472de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..."
48*e670fd5cSchristos. $CONFFILTER $BACKEND < $METACONF1 > $CONF1
49*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
502de962bdSlukemPID=$!
512de962bdSlukemif test $WAIT != 0 ; then
522de962bdSlukem    echo PID $PID
532de962bdSlukem    read foo
542de962bdSlukemfi
552de962bdSlukemKILLPIDS="$PID"
562de962bdSlukem
572de962bdSlukemsleep 1
582de962bdSlukem
592de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
602de962bdSlukemfor i in 0 1 2 3 4 5; do
61*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
622de962bdSlukem		'objectclass=*' > /dev/null 2>&1
632de962bdSlukem	RC=$?
642de962bdSlukem	if test $RC = 0 ; then
652de962bdSlukem		break
662de962bdSlukem	fi
672de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
682de962bdSlukem	sleep 5
692de962bdSlukemdone
702de962bdSlukemif test $RC != 0 ; then
712de962bdSlukem	echo "ldapsearch failed ($RC)!"
722de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
732de962bdSlukem	exit $RC
742de962bdSlukemfi
752de962bdSlukem
762de962bdSlukemecho "Using ldapadd to populate the database..."
77*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
782de962bdSlukem	$LDIFORDERED > $TESTOUT 2>&1
792de962bdSlukemRC=$?
802de962bdSlukemif test $RC != 0 ; then
812de962bdSlukem	echo "ldapadd failed ($RC)!"
822de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
832de962bdSlukem	exit $RC
842de962bdSlukemfi
852de962bdSlukem
862de962bdSlukemecho "Starting slapd on TCP/IP port $PORT2..."
87*e670fd5cSchristos. $CONFFILTER $BACKEND < $METACONF2 > $CONF2
88*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
892de962bdSlukemPID=$!
902de962bdSlukemif test $WAIT != 0 ; then
912de962bdSlukem    echo PID $PID
922de962bdSlukem    read foo
932de962bdSlukemfi
942de962bdSlukemKILLPIDS="$KILLPIDS $PID"
952de962bdSlukem
962de962bdSlukemsleep 1
972de962bdSlukem
982de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
992de962bdSlukemfor i in 0 1 2 3 4 5; do
100*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
1012de962bdSlukem		'objectclass=*' > /dev/null 2>&1
1022de962bdSlukem	RC=$?
1032de962bdSlukem	if test $RC = 0 ; then
1042de962bdSlukem		break
1052de962bdSlukem	fi
1062de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1072de962bdSlukem	sleep 5
1082de962bdSlukemdone
1092de962bdSlukemif test $RC != 0 ; then
1102de962bdSlukem	echo "ldapsearch failed ($RC)!"
1112de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1122de962bdSlukem	exit $RC
1132de962bdSlukemfi
1142de962bdSlukem
1152de962bdSlukemecho "Using ldapadd to populate the database..."
116*e670fd5cSchristos$LDAPADD -D "$METAMANAGERDN" -H $URI2 -w $PASSWD < \
1172de962bdSlukem	$LDIFMETA >> $TESTOUT 2>&1
1182de962bdSlukemRC=$?
1192de962bdSlukemif test $RC != 0 ; then
1202de962bdSlukem	echo "ldapadd failed ($RC)!"
1212de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1222de962bdSlukem	exit $RC
1232de962bdSlukemfi
1242de962bdSlukem
1252de962bdSlukemecho "Starting slapd on TCP/IP port $PORT3..."
126*e670fd5cSchristos. $CONFFILTER $BACKEND < $GLUELDAPCONF > $CONF3
127*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
1282de962bdSlukemPID=$!
1292de962bdSlukemif test $WAIT != 0 ; then
1302de962bdSlukem    echo PID $PID
1312de962bdSlukem    read foo
1322de962bdSlukemfi
1332de962bdSlukemKILLPIDS="$KILLPIDS $PID"
1342de962bdSlukem
1352de962bdSlukemsleep 1
1362de962bdSlukem
1372de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
1382de962bdSlukemfor i in 0 1 2 3 4 5; do
139*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
1402de962bdSlukem		'objectclass=*' > /dev/null 2>&1
1412de962bdSlukem	RC=$?
1422de962bdSlukem	if test $RC = 0 ; then
1432de962bdSlukem		break
1442de962bdSlukem	fi
1452de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1462de962bdSlukem	sleep 5
1472de962bdSlukemdone
1482de962bdSlukemif test $RC != 0 ; then
1492de962bdSlukem	echo "ldapsearch failed ($RC)!"
1502de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1512de962bdSlukem	exit $RC
1522de962bdSlukemfi
1532de962bdSlukem
1542de962bdSlukemcat /dev/null > $SEARCHOUT
1552de962bdSlukem
1562de962bdSlukemmkdir -p $TESTDIR/$DATADIR
1572de962bdSlukemMETABASEDN="o=Example,c=US"
1582de962bdSlukemfor f in $DATADIR/do_* ; do
1592de962bdSlukem	sed -e "s;$BASEDN;$METABASEDN;" $f > $TESTDIR/$f
1602de962bdSlukemdone
1612de962bdSlukem
1622de962bdSlukem# add a read that matches only the local database, but selects
1632de962bdSlukem# also the remote as candidate; this should be removed to compare
1642de962bdSlukem# execution times with test008...
1652de962bdSlukemfor f in $TESTDIR/$DATADIR/do_read.* ; do
1662de962bdSlukem	echo "ou=Meta,$METABASEDN" >> $f
1672de962bdSlukemdone
1682de962bdSlukem
1692de962bdSlukem# add a read that matches a referral in the local database only,
1702de962bdSlukem# but selects also the remote as candidate; this should be removed
1712de962bdSlukem# to compare execution times with test008...
1722de962bdSlukemfor f in $TESTDIR/$DATADIR/do_read.* ; do
1732de962bdSlukem	echo "cn=Somewhere,ou=Meta,$METABASEDN" >> $f
1742de962bdSlukemdone
1752de962bdSlukem
1762de962bdSlukem# add a bind that resolves to a referral
1772de962bdSlukemfor f in $TESTDIR/$DATADIR/do_bind.* ; do
1782de962bdSlukem	echo "cn=Foo,ou=Meta,$METABASEDN" >> $f
1792de962bdSlukem	echo "bar" >> $f
1802de962bdSlukem	echo "" >> $f
1812de962bdSlukem	echo "" >> $f
1822de962bdSlukemdone
1832de962bdSlukem
1844e6df137Slukem# fix test data to include back-monitor, if available
1854e6df137Slukem# NOTE: copies do_* files from $TESTDIR/$DATADIR to $TESTDIR
186*e670fd5cSchristos$MONITORDATA "$TESTDIR/$DATADIR" "$TESTDIR"
1874e6df137Slukem
1882de962bdSlukemecho "Using tester for concurrent server access..."
189d11b170bStronBINDDN="cn=Manager,o=Local"
190d11b170bStronPASSWD="secret"
191*e670fd5cSchristos$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR" -H $URI3 \
192d11b170bStron	-D "$BINDDN" -w $PASSWD \
193d11b170bStron	-l $TESTLOOPS -L $TESTOLOOPS -j $TESTCHILDREN -r 20 \
194d11b170bStron	-i '!REFERRAL' -i '*INVALID_CREDENTIALS' -SS
1952de962bdSlukemRC=$?
1962de962bdSlukem
1972de962bdSlukemif test $RC != 0 ; then
1982de962bdSlukem	echo "slapd-tester failed ($RC)!"
1992de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2002de962bdSlukem	exit $RC
2012de962bdSlukemfi
2022de962bdSlukem
2032de962bdSlukemecho "Using ldapsearch to retrieve all the entries..."
204*e670fd5cSchristos$LDAPSEARCH -S "" -b "$METABASEDN" -H $URI3 \
2052de962bdSlukem			'(objectClass=*)' > $SEARCHOUT 2>&1
2062de962bdSlukemRC=$?
2072de962bdSlukem
2082de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
2092de962bdSlukem
2102de962bdSlukemif test $RC != 0 ; then
2112de962bdSlukem	echo "ldapsearch failed ($RC)!"
2122de962bdSlukem	exit $RC
2132de962bdSlukemfi
2142de962bdSlukem
2152de962bdSlukemecho "Filtering ldapsearch results..."
216ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
2172de962bdSlukemecho "Filtering original ldif used to create database..."
218ef2f90d3Sadam$LDIFFILTER < $METACONCURRENCYOUT > $LDIFFLT
2192de962bdSlukemecho "Comparing filter output..."
2202de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
2212de962bdSlukem
2222de962bdSlukemif test $? != 0 ; then
2232de962bdSlukem	echo "comparison failed - slapd-ldap search/modification didn't succeed"
2242de962bdSlukem	exit 1
2252de962bdSlukemfi
2262de962bdSlukem
2272de962bdSlukemecho ">>>>> Test succeeded"
2282de962bdSlukem
2292de962bdSlukemtest $KILLSERVERS != no && wait
2302de962bdSlukem
2312de962bdSlukemexit 0
232