xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test048-syncrepl-multiproxy (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
192de962bdSlukemif test $BACKLDAP = ldapno; then
202de962bdSlukem	echo "LDAP backend not available, test skipped"
212de962bdSlukem	exit 0
222de962bdSlukemfi
232de962bdSlukem
242de962bdSlukemif test $SYNCPROV = syncprovno; then
252de962bdSlukem	echo "Syncrepl provider overlay not available, test skipped"
262de962bdSlukem	exit 0
272de962bdSlukemfi
282de962bdSlukem
292de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3
302de962bdSlukem
312de962bdSlukem#
322de962bdSlukem# Test replication:
33*e670fd5cSchristos# - start provider
34*e670fd5cSchristos# - start consumer
352de962bdSlukem# - populate over ldap
362de962bdSlukem# - perform some modifies and deleted
37*e670fd5cSchristos# - attempt to modify the consumer (referral or chain)
382de962bdSlukem# - retrieve database over ldap and compare against expected results
392de962bdSlukem#
402de962bdSlukem
41*e670fd5cSchristosecho "Starting provider slapd on TCP/IP port $PORT1..."
42*e670fd5cSchristos. $CONFFILTER $BACKEND < $PLSRPROVIDERCONF > $CONF1
43*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
44*e670fd5cSchristosPROVIDERPID=$!
452de962bdSlukemif test $WAIT != 0 ; then
46*e670fd5cSchristos    echo PROVIDERPID $PROVIDERPID
472de962bdSlukem    read foo
482de962bdSlukemfi
49*e670fd5cSchristosKILLPIDS="$PROVIDERPID"
502de962bdSlukem
512de962bdSlukemsleep 1
522de962bdSlukem
53*e670fd5cSchristosecho "Using ldapsearch to check that provider slapd is running..."
542de962bdSlukemfor i in 0 1 2 3 4 5; do
55*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
562de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
572de962bdSlukem	RC=$?
582de962bdSlukem	if test $RC = 0 ; then
592de962bdSlukem		break
602de962bdSlukem	fi
612de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
622de962bdSlukem	sleep 5
632de962bdSlukemdone
642de962bdSlukem
652de962bdSlukemif test $RC != 0 ; then
662de962bdSlukem	echo "ldapsearch failed ($RC)!"
672de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
682de962bdSlukem	exit $RC
692de962bdSlukemfi
702de962bdSlukem
71*e670fd5cSchristosecho "Using ldapadd to create the context prefix entry in the provider..."
72*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
732de962bdSlukem	$LDIFORDEREDCP > /dev/null 2>&1
742de962bdSlukemRC=$?
752de962bdSlukemif test $RC != 0 ; then
762de962bdSlukem	echo "ldapadd failed ($RC)!"
772de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
782de962bdSlukem	exit $RC
792de962bdSlukemfi
802de962bdSlukem
81*e670fd5cSchristosecho "Starting P1 consumer slapd on TCP/IP port $PORT2..."
82*e670fd5cSchristos. $CONFFILTER $BACKEND < $RCONSUMERCONF > $CONF2
83*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
84*e670fd5cSchristosP1CONSUMERPID=$!
852de962bdSlukemif test $WAIT != 0 ; then
86*e670fd5cSchristos    echo P1CONSUMERPID $P1CONSUMERPID
872de962bdSlukem    read foo
882de962bdSlukemfi
89*e670fd5cSchristosKILLPIDS="$PROVIDERPID $P1CONSUMERPID"
902de962bdSlukem
912de962bdSlukemsleep 1
922de962bdSlukem
93*e670fd5cSchristosecho "Using ldapsearch to check that P1 consumer slapd is running..."
942de962bdSlukemfor i in 0 1 2 3 4 5; do
95*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
962de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
972de962bdSlukem	RC=$?
982de962bdSlukem	if test $RC = 0 ; then
992de962bdSlukem		break
1002de962bdSlukem	fi
1012de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1022de962bdSlukem	sleep 5
1032de962bdSlukemdone
1042de962bdSlukem
1052de962bdSlukemif test $RC != 0 ; then
1062de962bdSlukem	echo "ldapsearch failed ($RC)!"
1072de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1082de962bdSlukem	exit $RC
1092de962bdSlukemfi
1102de962bdSlukem
111*e670fd5cSchristosecho "Starting R1 consumer slapd on TCP/IP port $PORT3..."
112*e670fd5cSchristos. $CONFFILTER $BACKEND < $RCONSUMERCONF | sed -e 's;\.2\.\([^/]*\)$;.3.\1;' > $CONF3
113*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
114*e670fd5cSchristosR1CONSUMERPID=$!
1152de962bdSlukemif test $WAIT != 0 ; then
116*e670fd5cSchristos    echo R1CONSUMERPID $R1CONSUMERPID
1172de962bdSlukem    read foo
1182de962bdSlukemfi
119*e670fd5cSchristosKILLPIDS="$PROVIDERPID $P1CONSUMERPID $R1CONSUMERPID"
1202de962bdSlukem
1212de962bdSlukemsleep 1
1222de962bdSlukem
123*e670fd5cSchristosecho "Using ldapsearch to check that R1 consumer slapd is running..."
1242de962bdSlukemfor i in 0 1 2 3 4 5; do
125*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
1262de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
1272de962bdSlukem	RC=$?
1282de962bdSlukem	if test $RC = 0; then
1292de962bdSlukem		break
1302de962bdSlukem	fi
1312de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1322de962bdSlukem	sleep 5
1332de962bdSlukemdone
1342de962bdSlukem
1352de962bdSlukemif test $RC != 0 ; then
1362de962bdSlukem	echo "ldapsearch failed ($RC)!"
1372de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1382de962bdSlukem	exit $RC
1392de962bdSlukemfi
1402de962bdSlukem
1412de962bdSlukemCHECK=1
142*e670fd5cSchristosecho "$CHECK > Using ldapadd to populate the provider directory..."
143*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
1442de962bdSlukem	$LDIFORDEREDNOCP > /dev/null 2>&1
1452de962bdSlukemRC=$?
1462de962bdSlukemif test $RC != 0 ; then
1472de962bdSlukem	echo "ldapadd failed ($RC)!"
1482de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1492de962bdSlukem	exit $RC
1502de962bdSlukemfi
1512de962bdSlukem
1524e6df137Slukemecho "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
1534e6df137Slukemsleep $SLEEP1
1542de962bdSlukem
155*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
156*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
157*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.1" 2>&1
1582de962bdSlukemRC=$?
1592de962bdSlukem
1602de962bdSlukemif test $RC != 0 ; then
161*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
1622de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1632de962bdSlukem	exit $RC
1642de962bdSlukemfi
1652de962bdSlukem
166*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the P1 consumer..."
167*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
168*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.1" 2>&1
1692de962bdSlukemRC=$?
1702de962bdSlukem
1712de962bdSlukemif test $RC != 0 ; then
172*e670fd5cSchristos	echo "ldapsearch failed at P1 consumer ($RC)!"
1732de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1742de962bdSlukem	exit $RC
1752de962bdSlukemfi
1762de962bdSlukem
177*e670fd5cSchristos#echo "Filtering provider results..."
178*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.1" > $PROVIDERFLT
179*e670fd5cSchristos#echo "Filtering consumer results..."
180*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.1" > $CONSUMERFLT
1812de962bdSlukem
182*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and P1 consumer..."
183*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
1842de962bdSlukem
1852de962bdSlukemif test $? != 0 ; then
186*e670fd5cSchristos	echo "test failed - provider and P1 consumer databases differ"
1872de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1882de962bdSlukem	exit 1
1892de962bdSlukemfi
1902de962bdSlukem
191*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the R1 consumer..."
192*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI3 \
193*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.1" 2>&1
1942de962bdSlukemRC=$?
1952de962bdSlukem
1962de962bdSlukemif test $RC != 0 ; then
197*e670fd5cSchristos	echo "ldapsearch failed at R1 consumer ($RC)!"
1982de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1992de962bdSlukem	exit $RC
2002de962bdSlukemfi
2012de962bdSlukem
202*e670fd5cSchristos#echo "Filtering consumer results..."
203*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.1" > $CONSUMERFLT
2042de962bdSlukem
205*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and R1 consumer..."
206*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
2072de962bdSlukem
2082de962bdSlukemif test $? != 0 ; then
209*e670fd5cSchristos	echo "test failed - provider and R1 consumer databases differ"
2102de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2112de962bdSlukem	exit 1
2122de962bdSlukemfi
2132de962bdSlukem
2142de962bdSlukemCHECK=`expr $CHECK + 1`
2154e6df137Slukemecho "$CHECK > Stopping the provider, sleeping $SLEEP2 seconds and restarting it..."
216*e670fd5cSchristoskill -HUP "$PROVIDERPID"
217*e670fd5cSchristoswait $PROVIDERPID
2184e6df137Slukemsleep $SLEEP2
2192de962bdSlukem
2202de962bdSlukemecho "======================= RESTART =======================" >> $LOG1
221*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL >> $LOG1 2>&1 &
222*e670fd5cSchristosPROVIDERPID=$!
2232de962bdSlukemif test $WAIT != 0 ; then
224*e670fd5cSchristos    echo PROVIDERPID $PROVIDERPID
2252de962bdSlukem    read foo
2262de962bdSlukemfi
227*e670fd5cSchristosKILLPIDS="$PROVIDERPID $P1CONSUMERPID $R1CONSUMERPID"
2282de962bdSlukem
2292de962bdSlukemsleep 1
2302de962bdSlukem
231*e670fd5cSchristosecho "Using ldapsearch to check that provider slapd is running..."
2322de962bdSlukemfor i in 0 1 2 3 4 5; do
233*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
2342de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
2352de962bdSlukem	RC=$?
2362de962bdSlukem	if test $RC = 0 ; then
2372de962bdSlukem		break
2382de962bdSlukem	fi
2392de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
2402de962bdSlukem	sleep 5
2412de962bdSlukemdone
2422de962bdSlukem
2432de962bdSlukemif test $RC != 0 ; then
2442de962bdSlukem	echo "ldapsearch failed ($RC)!"
2452de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2462de962bdSlukem	exit $RC
2472de962bdSlukemfi
2482de962bdSlukem
249*e670fd5cSchristosecho "Using ldapmodify to modify provider directory..."
2502de962bdSlukem
2512de962bdSlukem#
2522de962bdSlukem# Do some modifications
2532de962bdSlukem#
2542de962bdSlukem
255*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2562de962bdSlukem	$TESTOUT 2>&1 << EOMODS
2572de962bdSlukemdn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
2582de962bdSlukemchangetype: modify
2592de962bdSlukemadd: drink
2602de962bdSlukemdrink: Orange Juice
2612de962bdSlukem-
2622de962bdSlukemdelete: sn
2632de962bdSlukemsn: Jones
2642de962bdSlukem-
2652de962bdSlukemadd: sn
2662de962bdSlukemsn: Jones
2672de962bdSlukem
2682de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
2692de962bdSlukemchangetype: modify
2702de962bdSlukemreplace: drink
2712de962bdSlukemdrink: Iced Tea
2722de962bdSlukem
2732de962bdSlukemdn: cn=ITD Staff,ou=Groups,dc=example,dc=com
2742de962bdSlukemchangetype: modify
2752de962bdSlukemdelete: uniquemember
2762de962bdSlukemuniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
2772de962bdSlukemuniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
2782de962bdSlukem-
2792de962bdSlukemadd: uniquemember
2802de962bdSlukemuniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
2812de962bdSlukemuniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
2822de962bdSlukem
2832de962bdSlukemdn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
2842de962bdSlukem =com
2852de962bdSlukemchangetype: modify
2862de962bdSlukemdelete: cn
2872de962bdSlukemcn: Biiff Jensen
2882de962bdSlukem
2892de962bdSlukemdn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
2902de962bdSlukemchangetype: add
2912de962bdSlukemobjectclass: OpenLDAPperson
2922de962bdSlukemcn: Gern Jensen
2932de962bdSlukemsn: Jensen
2942de962bdSlukemuid: gjensen
2952de962bdSlukemtitle: Chief Investigator, ITD
2962de962bdSlukempostaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
2972de962bdSlukemseealso: cn=All Staff, ou=Groups, dc=example,dc=com
2982de962bdSlukemdrink: Coffee
2992de962bdSlukemhomepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
3002de962bdSlukemdescription: Very odd
3012de962bdSlukemfacsimiletelephonenumber: +1 313 555 7557
3022de962bdSlukemtelephonenumber: +1 313 555 8343
3032de962bdSlukemmail: gjensen@mailgw.example.com
3042de962bdSlukemhomephone: +1 313 555 8844
3052de962bdSlukem
3062de962bdSlukemdn: ou=Retired, ou=People, dc=example,dc=com
3072de962bdSlukemchangetype: add
3082de962bdSlukemobjectclass: organizationalUnit
3092de962bdSlukemou: Retired
3102de962bdSlukem
3112de962bdSlukemdn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
3122de962bdSlukemchangetype: add
3132de962bdSlukemobjectclass: OpenLDAPperson
3142de962bdSlukemcn: Rosco P. Coltrane
3152de962bdSlukemsn: Coltrane
3162de962bdSlukemuid: rosco
3172de962bdSlukemdescription: Fat tycoon
3182de962bdSlukem
3192de962bdSlukemdn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
3202de962bdSlukemchangetype: modrdn
3212de962bdSlukemnewrdn: cn=Rosco P. Coltrane
3222de962bdSlukemdeleteoldrdn: 1
3232de962bdSlukemnewsuperior: ou=Retired, ou=People, dc=example,dc=com
3242de962bdSlukem
3252de962bdSlukemdn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
3262de962bdSlukemchangetype: delete
3272de962bdSlukemEOMODS
3282de962bdSlukem
3292de962bdSlukemRC=$?
3302de962bdSlukemif test $RC != 0 ; then
3312de962bdSlukem	echo "ldapmodify failed ($RC)!"
3322de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3332de962bdSlukem	exit $RC
3342de962bdSlukemfi
3352de962bdSlukem
3364e6df137Slukemecho "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
3374e6df137Slukemsleep $SLEEP1
3382de962bdSlukem
339*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
340*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
341*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.2" 2>&1
3422de962bdSlukemRC=$?
3432de962bdSlukem
3442de962bdSlukemif test $RC != 0 ; then
345*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
3462de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3472de962bdSlukem	exit $RC
3482de962bdSlukemfi
3492de962bdSlukem
350*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the P1 consumer..."
351*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
352*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.2" 2>&1
3532de962bdSlukemRC=$?
3542de962bdSlukem
3552de962bdSlukemif test $RC != 0 ; then
356*e670fd5cSchristos	echo "ldapsearch failed at P1 consumer ($RC)!"
3572de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3582de962bdSlukem	exit $RC
3592de962bdSlukemfi
3602de962bdSlukem
361*e670fd5cSchristos#echo "Filtering provider results..."
362*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.2" > $PROVIDERFLT
363*e670fd5cSchristos#echo "Filtering P1 consumer results..."
364*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.2" > $CONSUMERFLT
3652de962bdSlukem
366*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and P1 consumer..."
367*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
3682de962bdSlukem
3692de962bdSlukemif test $? != 0 ; then
370*e670fd5cSchristos	echo "test failed - provider and P1 consumer databases differ"
3712de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3722de962bdSlukem	exit 1
3732de962bdSlukemfi
3742de962bdSlukem
375*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the R1 consumer..."
376*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI3 \
377*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.2" 2>&1
3782de962bdSlukemRC=$?
3792de962bdSlukem
3802de962bdSlukemif test $RC != 0 ; then
381*e670fd5cSchristos	echo "ldapsearch failed at R1 consumer ($RC)!"
3822de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3832de962bdSlukem	exit $RC
3842de962bdSlukemfi
3852de962bdSlukem
386*e670fd5cSchristos#echo "Filtering consumer results..."
387*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.2" > $CONSUMERFLT
3882de962bdSlukem
389*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and R1 consumer..."
390*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
3912de962bdSlukem
3922de962bdSlukemif test $? != 0 ; then
393*e670fd5cSchristos	echo "test failed - provider and R1 consumer databases differ"
3942de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3952de962bdSlukem	exit 1
3962de962bdSlukemfi
3972de962bdSlukem
3982de962bdSlukemCHECK=`expr $CHECK + 1`
399*e670fd5cSchristosecho "$CHECK > Stopping consumer to test recovery..."
400*e670fd5cSchristoskill -HUP $P1CONSUMERPID $R1CONSUMERPID
401*e670fd5cSchristoswait $P1CONSUMERPID
402*e670fd5cSchristoswait $R1CONSUMERPID
4032de962bdSlukem
404*e670fd5cSchristosecho "Modifying more entries on the provider..."
405*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \
4062de962bdSlukem	$TESTOUT 2>&1 << EOMODS
4072de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
4082de962bdSlukemchangetype: modify
4092de962bdSlukemadd: description
410*e670fd5cSchristosdescription: r1 consumer is down...
4112de962bdSlukem
4122de962bdSlukemdn: cn=James T. Kirk, ou=Retired, ou=People, dc=example,dc=com
4132de962bdSlukemchangetype: add
4142de962bdSlukemobjectclass: OpenLDAPperson
4152de962bdSlukemsn: Kirk
4162de962bdSlukemuid: jtk
4172de962bdSlukemcn: James T. Kirk
4182de962bdSlukem
4192de962bdSlukemdn: cn=Tiberius J. Hooker, ou=Retired, ou=People, dc=example,dc=com
4202de962bdSlukemchangetype: add
4212de962bdSlukemobjectclass: OpenLDAPperson
4222de962bdSlukemsn: Hooker
4232de962bdSlukemuid: tjh
4242de962bdSlukemcn: Tiberius J. Hooker
4252de962bdSlukem
4262de962bdSlukemEOMODS
4272de962bdSlukem
428*e670fd5cSchristosecho "Restarting P1 consumer..."
4292de962bdSlukemecho "======================= RESTART =======================" >> $LOG3
430*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL >> $LOG2 2>&1 &
431*e670fd5cSchristosP1CONSUMERPID=$!
4322de962bdSlukemif test $WAIT != 0 ; then
433*e670fd5cSchristos    echo P1CONSUMERPID $P1CONSUMERPID
4342de962bdSlukem    read foo
4352de962bdSlukemfi
4362de962bdSlukem
437*e670fd5cSchristosecho "Restarting R1 consumer..."
4382de962bdSlukemecho "======================= RESTART =======================" >> $LOG3
439*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL >> $LOG3 2>&1 &
440*e670fd5cSchristosR1CONSUMERPID=$!
4412de962bdSlukemif test $WAIT != 0 ; then
442*e670fd5cSchristos    echo R1CONSUMERPID $R1CONSUMERPID
4432de962bdSlukem    read foo
4442de962bdSlukemfi
445*e670fd5cSchristosKILLPIDS="$PROVIDERPID $P1CONSUMERPID $R1CONSUMERPID"
4462de962bdSlukem
4474e6df137Slukemecho "Waiting $SLEEP2 seconds for syncrepl to receive changes..."
4484e6df137Slukemsleep $SLEEP2
4492de962bdSlukem
450*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
451*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
452*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.3" 2>&1
4532de962bdSlukemRC=$?
4542de962bdSlukem
4552de962bdSlukemif test $RC != 0 ; then
456*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
4572de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4582de962bdSlukem	exit $RC
4592de962bdSlukemfi
4602de962bdSlukem
461*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the P1 consumer..."
462*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
463*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.3" 2>&1
4642de962bdSlukemRC=$?
4652de962bdSlukem
4662de962bdSlukemif test $RC != 0 ; then
467*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
4682de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4692de962bdSlukem	exit $RC
4702de962bdSlukemfi
4712de962bdSlukem
472*e670fd5cSchristos#echo "Filtering provider results..."
473*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.3" > $PROVIDERFLT
474*e670fd5cSchristos#echo "Filtering consumer results..."
475*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.3" > $CONSUMERFLT
4762de962bdSlukem
477*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and P1 consumer..."
478*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
4792de962bdSlukem
4802de962bdSlukemif test $? != 0 ; then
481*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
4822de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4832de962bdSlukem	exit 1
4842de962bdSlukemfi
4852de962bdSlukem
486*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the R1 consumer..."
487*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI3 \
488*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.3" 2>&1
4892de962bdSlukemRC=$?
4902de962bdSlukem
4912de962bdSlukemif test $RC != 0 ; then
492*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
4932de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4942de962bdSlukem	exit $RC
4952de962bdSlukemfi
4962de962bdSlukem
497*e670fd5cSchristos#echo "Filtering consumer results..."
498*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.3" > $CONSUMERFLT
4992de962bdSlukem
500*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and R1 consumer..."
501*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
5022de962bdSlukem
5032de962bdSlukemif test $? != 0 ; then
504*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
5052de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5062de962bdSlukem	exit 1
5072de962bdSlukemfi
5082de962bdSlukem
5092de962bdSlukemCHECK=`expr $CHECK + 1`
510*e670fd5cSchristosecho "$CHECK > Try updating the P1 consumer slapd..."
511*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI2 -w $PASSWD > \
5122de962bdSlukem	$TESTOUT 2>&1 << EOMODS
5132de962bdSlukemdn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
5142de962bdSlukemchangetype: modify
5152de962bdSlukemadd: description
5162de962bdSlukemdescription: This write must fail because directed to a shadow context,
5172de962bdSlukemdescription: unless the chain overlay is configured appropriately ;)
5182de962bdSlukem
5192de962bdSlukemEOMODS
5202de962bdSlukem
5212de962bdSlukemRC=$?
5222de962bdSlukemif test $RC != 0 ; then
5232de962bdSlukem	echo "ldapmodify failed ($RC)!"
5242de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5252de962bdSlukem	exit $RC
5262de962bdSlukemfi
5272de962bdSlukem
5284e6df137Slukemecho "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
5294e6df137Slukemsleep $SLEEP1
5302de962bdSlukem
531*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
532*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
533*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.4" 2>&1
5342de962bdSlukemRC=$?
5352de962bdSlukem
5362de962bdSlukemif test $RC != 0 ; then
537*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
5382de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5392de962bdSlukem	exit $RC
5402de962bdSlukemfi
5412de962bdSlukem
542*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the P1 consumer..."
543*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
544*e670fd5cSchristos'(objectClass=*)' > "${CONSUMEROUT}.4" 2>&1
5452de962bdSlukemRC=$?
5462de962bdSlukem
5472de962bdSlukemif test $RC != 0 ; then
548*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
5492de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5502de962bdSlukem	exit $RC
5512de962bdSlukemfi
5522de962bdSlukem
553*e670fd5cSchristos#echo "Filtering provider results..."
554*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.4" > $PROVIDERFLT
555*e670fd5cSchristos#echo "Filtering consumer results..."
556*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.4" > $CONSUMERFLT
5572de962bdSlukem
558*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and P1 consumer..."
559*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
5602de962bdSlukem
5612de962bdSlukemif test $? != 0 ; then
562*e670fd5cSchristos	echo "test failed - provider and P1 consumer databases differ"
5632de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5642de962bdSlukem	exit 1
5652de962bdSlukemfi
5662de962bdSlukem
567*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the R1 consumer..."
568*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI3 \
569*e670fd5cSchristos'(objectClass=*)' > "${CONSUMEROUT}.4" 2>&1
5702de962bdSlukemRC=$?
5712de962bdSlukem
5722de962bdSlukemif test $RC != 0 ; then
573*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
5742de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5752de962bdSlukem	exit $RC
5762de962bdSlukemfi
5772de962bdSlukem
578*e670fd5cSchristos#echo "Filtering consumer results..."
579*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.4" > $CONSUMERFLT
5802de962bdSlukem
581*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and R1 consumer..."
582*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
5832de962bdSlukem
5842de962bdSlukemif test $? != 0 ; then
585*e670fd5cSchristos	echo "test failed - provider and R1 consumer databases differ"
5862de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5872de962bdSlukem	exit 1
5882de962bdSlukemfi
5892de962bdSlukem
5902de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
5912de962bdSlukem
5922de962bdSlukemecho ">>>>> Test succeeded"
5932de962bdSlukem
5942de962bdSlukemtest $KILLSERVERS != no && wait
5952de962bdSlukem
5962de962bdSlukemexit 0
597