xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test036-meta-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 $BACKMETA = metano ; then
222de962bdSlukem	echo "meta backend not available, test skipped"
232de962bdSlukem	exit 0
242de962bdSlukemfi
252de962bdSlukem
26bb30016cSlukemif test $BACKLDAP = ldapno ; then
27bb30016cSlukem	echo "ldap backend not available, test skipped"
28bb30016cSlukem	exit 0
29bb30016cSlukemfi
30bb30016cSlukem
312de962bdSlukemif test x$TESTLOOPS = x ; then
322de962bdSlukem	TESTLOOPS=50
332de962bdSlukemfi
342de962bdSlukem
35d11b170bStronif test x$TESTCHILDREN = x ; then
36d11b170bStron	TESTCHILDREN=20
37d11b170bStronfi
38d11b170bStron
392de962bdSlukemrm -rf $TESTDIR
402de962bdSlukem
412de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $DBDIR2
422de962bdSlukem
432de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..."
44*e670fd5cSchristos. $CONFFILTER $BACKEND < $METACONF1 > $CONF1
45*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
462de962bdSlukemPID=$!
472de962bdSlukemif test $WAIT != 0 ; then
482de962bdSlukem    echo PID $PID
492de962bdSlukem    read foo
502de962bdSlukemfi
512de962bdSlukemKILLPIDS="$PID"
522de962bdSlukem
532de962bdSlukemsleep 1
542de962bdSlukem
552de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
562de962bdSlukemfor i in 0 1 2 3 4 5; do
57*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
582de962bdSlukem		'objectclass=*' > /dev/null 2>&1
592de962bdSlukem	RC=$?
602de962bdSlukem	if test $RC = 0 ; then
612de962bdSlukem		break
622de962bdSlukem	fi
632de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
642de962bdSlukem	sleep 5
652de962bdSlukemdone
662de962bdSlukemif test $RC != 0 ; then
672de962bdSlukem	echo "ldapsearch failed ($RC)!"
682de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
692de962bdSlukem	exit $RC
702de962bdSlukemfi
712de962bdSlukem
722de962bdSlukemecho "Using ldapadd to populate the database..."
73*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
742de962bdSlukem	$LDIFORDERED > $TESTOUT 2>&1
752de962bdSlukemRC=$?
762de962bdSlukemif test $RC != 0 ; then
772de962bdSlukem	echo "ldapadd failed ($RC)!"
782de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
792de962bdSlukem	exit $RC
802de962bdSlukemfi
812de962bdSlukem
822de962bdSlukemecho "Starting slapd on TCP/IP port $PORT2..."
83*e670fd5cSchristos. $CONFFILTER $BACKEND < $METACONF2 > $CONF2
84*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
852de962bdSlukemPID=$!
862de962bdSlukemif test $WAIT != 0 ; then
872de962bdSlukem    echo PID $PID
882de962bdSlukem    read foo
892de962bdSlukemfi
902de962bdSlukemKILLPIDS="$KILLPIDS $PID"
912de962bdSlukem
922de962bdSlukemsleep 1
932de962bdSlukem
942de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
952de962bdSlukemfor i in 0 1 2 3 4 5; do
96*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
972de962bdSlukem		'objectclass=*' > /dev/null 2>&1
982de962bdSlukem	RC=$?
992de962bdSlukem	if test $RC = 0 ; then
1002de962bdSlukem		break
1012de962bdSlukem	fi
1022de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1032de962bdSlukem	sleep 5
1042de962bdSlukemdone
1052de962bdSlukemif test $RC != 0 ; then
1062de962bdSlukem	echo "ldapsearch failed ($RC)!"
1072de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1082de962bdSlukem	exit $RC
1092de962bdSlukemfi
1102de962bdSlukem
1112de962bdSlukemecho "Using ldapadd to populate the database..."
112*e670fd5cSchristos$LDAPADD -D "$METAMANAGERDN" -H $URI2 -w $PASSWD < \
1132de962bdSlukem	$LDIFMETA >> $TESTOUT 2>&1
1142de962bdSlukemRC=$?
1152de962bdSlukemif test $RC != 0 ; then
1162de962bdSlukem	echo "ldapadd failed ($RC)!"
1172de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1182de962bdSlukem	exit $RC
1192de962bdSlukemfi
1202de962bdSlukem
1212de962bdSlukemecho "Starting slapd on TCP/IP port $PORT3..."
122*e670fd5cSchristos. $CONFFILTER $BACKEND < $METACONF > $CONF3
123*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
1242de962bdSlukemPID=$!
1252de962bdSlukemif test $WAIT != 0 ; then
1262de962bdSlukem    echo PID $PID
1272de962bdSlukem    read foo
1282de962bdSlukemfi
1292de962bdSlukemKILLPIDS="$KILLPIDS $PID"
1302de962bdSlukem
1312de962bdSlukemsleep 1
1322de962bdSlukem
1332de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
1342de962bdSlukemfor i in 0 1 2 3 4 5; do
135*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
1362de962bdSlukem		'objectclass=*' > /dev/null 2>&1
1372de962bdSlukem	RC=$?
1382de962bdSlukem	if test $RC = 0 ; then
1392de962bdSlukem		break
1402de962bdSlukem	fi
1412de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1422de962bdSlukem	sleep 5
1432de962bdSlukemdone
1442de962bdSlukemif test $RC != 0 ; then
1452de962bdSlukem	echo "ldapsearch failed ($RC)!"
1462de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1472de962bdSlukem	exit $RC
1482de962bdSlukemfi
1492de962bdSlukem
1502de962bdSlukemcat /dev/null > $SEARCHOUT
1512de962bdSlukem
1522de962bdSlukemmkdir -p $TESTDIR/$DATADIR
1532de962bdSlukemMETABASEDN="o=Example,c=US"
1542de962bdSlukemfor f in $DATADIR/do_* ; do
1552de962bdSlukem	sed -e "s;$BASEDN;$METABASEDN;" $f > $TESTDIR/$f
1562de962bdSlukemdone
1572de962bdSlukem
1582de962bdSlukem# add a read that matches only the local database, but selects
1592de962bdSlukem# also the remote as candidate; this should be removed to compare
1602de962bdSlukem# execution times with test008...
1612de962bdSlukemfor f in $TESTDIR/$DATADIR/do_read.* ; do
1622de962bdSlukem	echo "ou=Meta,$METABASEDN" >> $f
1632de962bdSlukemdone
1642de962bdSlukem
1652de962bdSlukem# add a read that matches a referral in the local database only,
1662de962bdSlukem# but selects also the remote as candidate; this should be removed
1672de962bdSlukem# to compare execution times with test008...
1682de962bdSlukemfor f in $TESTDIR/$DATADIR/do_read.* ; do
1692de962bdSlukem	echo "cn=Somewhere,ou=Meta,$METABASEDN" >> $f
1702de962bdSlukemdone
1712de962bdSlukem
1722de962bdSlukem# add a bind that resolves to a referral
1732de962bdSlukemfor f in $TESTDIR/$DATADIR/do_bind.* ; do
1742de962bdSlukem	echo "cn=Foo,ou=Meta,$METABASEDN" >> $f
1752de962bdSlukem	echo "bar" >> $f
1762de962bdSlukem	echo "" >> $f
1772de962bdSlukem	echo "" >> $f
1782de962bdSlukemdone
1792de962bdSlukem
1804e6df137Slukem# NOTE: copies do_* files from $TESTDIR/$DATADIR to $TESTDIR
181*e670fd5cSchristos$MONITORDATA "$TESTDIR/$DATADIR" "$TESTDIR"
1824e6df137Slukem
183d11b170bStronBINDDN="cn=Manager,o=Local"
184d11b170bStronPASSWD="secret"
1852de962bdSlukemecho "Using tester for concurrent server access..."
186*e670fd5cSchristos$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR" -H $URI3 \
187d11b170bStron	-D "$BINDDN" -w $PASSWD -l $TESTLOOPS -j $TESTCHILDREN \
188d11b170bStron	-r 20 -i '!REFERRAL' -i '*INVALID_CREDENTIALS' -SS
1892de962bdSlukemRC=$?
1902de962bdSlukem
1912de962bdSlukemif test $RC != 0 ; then
1922de962bdSlukem	echo "slapd-tester failed ($RC)!"
1932de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1942de962bdSlukem	exit $RC
1952de962bdSlukemfi
1962de962bdSlukem
1972de962bdSlukemecho "Using ldapsearch to retrieve all the entries..."
198*e670fd5cSchristos$LDAPSEARCH -S "" -b "$METABASEDN" -H $URI3 \
1992de962bdSlukem			'objectClass=*' > $SEARCHOUT 2>&1
2002de962bdSlukemRC=$?
2012de962bdSlukem
2022de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
2032de962bdSlukem
2042de962bdSlukemif test $RC != 0 ; then
2052de962bdSlukem	echo "ldapsearch failed ($RC)!"
2062de962bdSlukem	exit $RC
2072de962bdSlukemfi
2082de962bdSlukem
2092de962bdSlukemecho "Filtering ldapsearch results..."
210ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
2112de962bdSlukemecho "Filtering original ldif used to create database..."
212ef2f90d3Sadam$LDIFFILTER < $METACONCURRENCYOUT > $LDIFFLT
2132de962bdSlukemecho "Comparing filter output..."
2142de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
2152de962bdSlukem
2162de962bdSlukemif test $? != 0 ; then
2172de962bdSlukem	echo "comparison failed - slapd-meta search/modification didn't succeed"
2182de962bdSlukem	exit 1
2192de962bdSlukemfi
2202de962bdSlukem
2212de962bdSlukemecho ">>>>> Test succeeded"
2222de962bdSlukem
2232de962bdSlukemtest $KILLSERVERS != no && wait
2242de962bdSlukem
2252de962bdSlukemexit 0
226