xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test045-syncreplication-proxied (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
162de962bdSlukem
172de962bdSlukem# test now handles known issues
182de962bdSlukem#if test x"$PROXYSYNC" = x ; then
192de962bdSlukem#	echo "Test disabled; set PROXYSYNC=yes to enable"
202de962bdSlukem#	exit 0
212de962bdSlukem#fi
222de962bdSlukem
232de962bdSlukemecho "running defines.sh"
242de962bdSlukem. $SRCDIR/scripts/defines.sh
252de962bdSlukem
262de962bdSlukemif test $BACKLDAP = ldapno; then
272de962bdSlukem	echo "LDAP backend not available, test skipped"
282de962bdSlukem	exit 0
292de962bdSlukemfi
302de962bdSlukem
312de962bdSlukemif test $SYNCPROV = syncprovno; then
322de962bdSlukem	echo "Syncrepl provider overlay not available, test skipped"
332de962bdSlukem	exit 0
342de962bdSlukemfi
352de962bdSlukem
362de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $DBDIR2
372de962bdSlukem
382de962bdSlukem#
392de962bdSlukem# Test replication:
40*e670fd5cSchristos# - start provider
41*e670fd5cSchristos# - start consumer
422de962bdSlukem# - populate over ldap
432de962bdSlukem# - perform some modifies and deleted
44*e670fd5cSchristos# - attempt to modify the consumer (referral or chain)
452de962bdSlukem# - retrieve database over ldap and compare against expected results
462de962bdSlukem#
472de962bdSlukem
48*e670fd5cSchristosecho "Starting provider slapd on TCP/IP port $PORT1..."
49*e670fd5cSchristos. $CONFFILTER $BACKEND < $SRPROVIDERCONF > $CONF1
50*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
51*e670fd5cSchristosPROVIDERPID=$!
522de962bdSlukemif test $WAIT != 0 ; then
53*e670fd5cSchristos    echo PROVIDERPID $PROVIDERPID
542de962bdSlukem    read foo
552de962bdSlukemfi
56*e670fd5cSchristosKILLPIDS="$PROVIDERPID"
572de962bdSlukem
582de962bdSlukemsleep 1
592de962bdSlukem
60*e670fd5cSchristosecho "Using ldapsearch to check that provider slapd is running..."
612de962bdSlukemfor i in 0 1 2 3 4 5; do
62*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
632de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
642de962bdSlukem	RC=$?
652de962bdSlukem	if test $RC = 0 ; then
662de962bdSlukem		break
672de962bdSlukem	fi
682de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
692de962bdSlukem	sleep 5
702de962bdSlukemdone
712de962bdSlukem
722de962bdSlukemif test $RC != 0 ; then
732de962bdSlukem	echo "ldapsearch failed ($RC)!"
742de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
752de962bdSlukem	exit $RC
762de962bdSlukemfi
772de962bdSlukem
78*e670fd5cSchristosecho "Using ldapadd to create the context prefix entry in the provider..."
79*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
802de962bdSlukem	$LDIFORDEREDCP > /dev/null 2>&1
812de962bdSlukemRC=$?
822de962bdSlukemif test $RC != 0 ; then
832de962bdSlukem	echo "ldapadd failed ($RC)!"
842de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
852de962bdSlukem	exit $RC
862de962bdSlukemfi
872de962bdSlukem
88*e670fd5cSchristosecho "Starting consumer slapd on TCP/IP port $PORT2..."
89*e670fd5cSchristos. $CONFFILTER $BACKEND < $RCONSUMERCONF > $CONF2
90*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
91*e670fd5cSchristosCONSUMERPID=$!
922de962bdSlukemif test $WAIT != 0 ; then
93*e670fd5cSchristos    echo CONSUMERPID $CONSUMERPID
942de962bdSlukem    read foo
952de962bdSlukemfi
96*e670fd5cSchristosKILLPIDS="$PROVIDERPID $CONSUMERPID"
972de962bdSlukem
982de962bdSlukemsleep 1
992de962bdSlukem
100*e670fd5cSchristosecho "Using ldapsearch to check that consumer slapd is running..."
1012de962bdSlukemfor i in 0 1 2 3 4 5; do
102*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
1032de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
1042de962bdSlukem	RC=$?
1052de962bdSlukem	if test $RC = 0 ; then
1062de962bdSlukem		break
1072de962bdSlukem	fi
1082de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1092de962bdSlukem	sleep 5
1102de962bdSlukemdone
1112de962bdSlukem
1122de962bdSlukemif test $RC != 0 ; then
1132de962bdSlukem	echo "ldapsearch failed ($RC)!"
1142de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1152de962bdSlukem	exit $RC
1162de962bdSlukemfi
1172de962bdSlukem
1182de962bdSlukemecho "Starting proxy slapd on TCP/IP port $PORT3..."
119*e670fd5cSchristos. $CONFFILTER $BACKEND < $PLSRCONSUMERCONF > $CONF3
120*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
1212de962bdSlukemPROXYPID=$!
1222de962bdSlukemif test $WAIT != 0 ; then
1232de962bdSlukem    echo PROXYPID $PROXYPID
1242de962bdSlukem    read foo
1252de962bdSlukemfi
126*e670fd5cSchristosKILLPIDS="$PROVIDERPID $CONSUMERPID $PROXYPID"
1272de962bdSlukem
1282de962bdSlukemsleep 1
1292de962bdSlukem
1302de962bdSlukemecho "Using ldapsearch to check that proxy slapd is running..."
1312de962bdSlukemfor i in 0 1 2 3 4 5; do
132*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
1332de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
1342de962bdSlukem	RC=$?
1352de962bdSlukem	if test $RC = 0 || test $RC = 53 ; then
1362de962bdSlukem		break
1372de962bdSlukem	fi
1382de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1392de962bdSlukem	sleep 5
1402de962bdSlukemdone
1412de962bdSlukem
1422de962bdSlukemcase $RC in
1432de962bdSlukem0 )
1442de962bdSlukem	echo "ldapsearch should have failed ($RC)!"
1452de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1462de962bdSlukem	exit -1
1472de962bdSlukem	;;
1482de962bdSlukem53)
1492de962bdSlukem	;;
1502de962bdSlukem*)
1512de962bdSlukem	echo "ldapsearch failed ($RC)!"
1522de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1532de962bdSlukem	exit $RC
1542de962bdSlukem	;;
1552de962bdSlukemesac
1562de962bdSlukem
1572de962bdSlukemCHECK=1
158*e670fd5cSchristosecho "$CHECK > Using ldapadd to populate the provider directory..."
159*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
1602de962bdSlukem	$LDIFORDEREDNOCP > /dev/null 2>&1
1612de962bdSlukemRC=$?
1622de962bdSlukemif test $RC != 0 ; then
1632de962bdSlukem	echo "ldapadd failed ($RC)!"
1642de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1652de962bdSlukem	exit $RC
1662de962bdSlukemfi
1672de962bdSlukem
168*e670fd5cSchristos# get provider contextCSN
169*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
170*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
1712de962bdSlukemRC=$?
1722de962bdSlukemif test $RC != 0 ; then
173*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
1742de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1752de962bdSlukem	exit $RC
1762de962bdSlukemfi
1772de962bdSlukem
178*e670fd5cSchristos# check consumer contextCSN
1792de962bdSlukemsleep 1
1802de962bdSlukemfor i in 1 2 3; do
181*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
182*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
1832de962bdSlukem	RC=$?
1842de962bdSlukem
1852de962bdSlukem	if test $RC != 0 ; then
186*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
1872de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1882de962bdSlukem		exit $RC
1892de962bdSlukem	fi
1902de962bdSlukem
191*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
1922de962bdSlukem
1932de962bdSlukem	if test $? = 0 ; then
1942de962bdSlukem		break
1952de962bdSlukem	fi
1962de962bdSlukem
1974e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
1984e6df137Slukem	sleep $SLEEP1
1992de962bdSlukemdone
2002de962bdSlukem
201*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
202*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
203*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
2042de962bdSlukemRC=$?
2052de962bdSlukem
2062de962bdSlukemif test $RC != 0 ; then
207*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
2082de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2092de962bdSlukem	exit $RC
2102de962bdSlukemfi
2112de962bdSlukem
212*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
213*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
214*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
2152de962bdSlukemRC=$?
2162de962bdSlukem
2172de962bdSlukemif test $RC != 0 ; then
218*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
2192de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2202de962bdSlukem	exit $RC
2212de962bdSlukemfi
2222de962bdSlukem
223*e670fd5cSchristos#echo "Filtering provider results..."
224*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
225*e670fd5cSchristos#echo "Filtering consumer results..."
226*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
2272de962bdSlukem
228*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
229*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
2302de962bdSlukem
2312de962bdSlukemif test $? != 0 ; then
232*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
2332de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2342de962bdSlukem	exit 1
2352de962bdSlukemfi
2362de962bdSlukem
2372de962bdSlukemCHECK=`expr $CHECK + 1`
2384e6df137Slukemecho "$CHECK > Stopping the provider, sleeping $SLEEP2 seconds and restarting it..."
239*e670fd5cSchristoskill -HUP "$PROVIDERPID"
240*e670fd5cSchristoswait $PROVIDERPID
2414e6df137Slukemsleep $SLEEP2
2422de962bdSlukem
2432de962bdSlukemecho "======================= RESTART =======================" >> $LOG1
244*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL >> $LOG1 2>&1 &
245*e670fd5cSchristosPROVIDERPID=$!
2462de962bdSlukemif test $WAIT != 0 ; then
247*e670fd5cSchristos    echo PROVIDERPID $PROVIDERPID
2482de962bdSlukem    read foo
2492de962bdSlukemfi
250*e670fd5cSchristosKILLPIDS="$PROVIDERPID $CONSUMERPID $PROXYPID"
2512de962bdSlukem
2522de962bdSlukemsleep 1
2532de962bdSlukem
254*e670fd5cSchristosecho "Using ldapsearch to check that provider slapd is running..."
2552de962bdSlukemfor i in 0 1 2 3 4 5; do
256*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
2572de962bdSlukem		'(objectClass=*)' > /dev/null 2>&1
2582de962bdSlukem	RC=$?
2592de962bdSlukem	if test $RC = 0 ; then
2602de962bdSlukem		break
2612de962bdSlukem	fi
2622de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
2632de962bdSlukem	sleep 5
2642de962bdSlukemdone
2652de962bdSlukem
2662de962bdSlukemif test $RC != 0 ; then
2672de962bdSlukem	echo "ldapsearch failed ($RC)!"
2682de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2692de962bdSlukem	exit $RC
2702de962bdSlukemfi
2712de962bdSlukem
272*e670fd5cSchristosecho "Using ldapmodify to modify provider directory..."
2732de962bdSlukem
2742de962bdSlukem#
2752de962bdSlukem# Do some modifications
2762de962bdSlukem#
2772de962bdSlukem
278*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2792de962bdSlukem	$TESTOUT 2>&1 << EOMODS
2802de962bdSlukemdn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
2812de962bdSlukemchangetype: modify
2822de962bdSlukemadd: drink
2832de962bdSlukemdrink: Orange Juice
2842de962bdSlukem-
2852de962bdSlukemdelete: sn
2862de962bdSlukemsn: Jones
2872de962bdSlukem-
2882de962bdSlukemadd: sn
2892de962bdSlukemsn: Jones
2902de962bdSlukem
2912de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
2922de962bdSlukemchangetype: modify
2932de962bdSlukemreplace: drink
2942de962bdSlukemdrink: Iced Tea
2952de962bdSlukem
2962de962bdSlukemdn: cn=ITD Staff,ou=Groups,dc=example,dc=com
2972de962bdSlukemchangetype: modify
2982de962bdSlukemdelete: uniquemember
2992de962bdSlukemuniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
3002de962bdSlukemuniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
3012de962bdSlukem-
3022de962bdSlukemadd: uniquemember
3032de962bdSlukemuniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
3042de962bdSlukemuniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
3052de962bdSlukem
3062de962bdSlukemdn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
3072de962bdSlukem =com
3082de962bdSlukemchangetype: modify
3092de962bdSlukemdelete: cn
3102de962bdSlukemcn: Biiff Jensen
3112de962bdSlukem
3122de962bdSlukemdn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
3132de962bdSlukemchangetype: add
3142de962bdSlukemobjectclass: OpenLDAPperson
3152de962bdSlukemcn: Gern Jensen
3162de962bdSlukemsn: Jensen
3172de962bdSlukemuid: gjensen
3182de962bdSlukemtitle: Chief Investigator, ITD
3192de962bdSlukempostaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
3202de962bdSlukemseealso: cn=All Staff, ou=Groups, dc=example,dc=com
3212de962bdSlukemdrink: Coffee
3222de962bdSlukemhomepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
3232de962bdSlukemdescription: Very odd
3242de962bdSlukemfacsimiletelephonenumber: +1 313 555 7557
3252de962bdSlukemtelephonenumber: +1 313 555 8343
3262de962bdSlukemmail: gjensen@mailgw.example.com
3272de962bdSlukemhomephone: +1 313 555 8844
3282de962bdSlukem
3292de962bdSlukemdn: ou=Retired, ou=People, dc=example,dc=com
3302de962bdSlukemchangetype: add
3312de962bdSlukemobjectclass: organizationalUnit
3322de962bdSlukemou: Retired
3332de962bdSlukem
3342de962bdSlukemdn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
3352de962bdSlukemchangetype: add
3362de962bdSlukemobjectclass: OpenLDAPperson
3372de962bdSlukemcn: Rosco P. Coltrane
3382de962bdSlukemsn: Coltrane
3392de962bdSlukemuid: rosco
3402de962bdSlukemdescription: Fat tycoon
3412de962bdSlukem
3422de962bdSlukemdn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
3432de962bdSlukemchangetype: modrdn
3442de962bdSlukemnewrdn: cn=Rosco P. Coltrane
3452de962bdSlukemdeleteoldrdn: 1
3462de962bdSlukemnewsuperior: ou=Retired, ou=People, dc=example,dc=com
3472de962bdSlukem
3482de962bdSlukemdn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
3492de962bdSlukemchangetype: delete
3502de962bdSlukemEOMODS
3512de962bdSlukem
3522de962bdSlukemRC=$?
3532de962bdSlukemif test $RC != 0 ; then
3542de962bdSlukem	echo "ldapmodify failed ($RC)!"
3552de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3562de962bdSlukem	exit $RC
3572de962bdSlukemfi
3582de962bdSlukem
359*e670fd5cSchristos# get provider contextCSN
360*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
361*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
3622de962bdSlukemRC=$?
3632de962bdSlukemif test $RC != 0 ; then
364*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
3652de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3662de962bdSlukem	exit $RC
3672de962bdSlukemfi
3682de962bdSlukem
369*e670fd5cSchristos# check consumer contextCSN
3702de962bdSlukemfor i in 1 2 3; do
3714e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
3724e6df137Slukem	sleep $SLEEP1
3732de962bdSlukem
374*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
375*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
3762de962bdSlukem	RC=$?
3772de962bdSlukem
3782de962bdSlukem	if test $RC != 0 ; then
379*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
3802de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
3812de962bdSlukem		exit $RC
3822de962bdSlukem	fi
3832de962bdSlukem
384*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
3852de962bdSlukem
3862de962bdSlukem	if test $? = 0 ; then
3872de962bdSlukem		break
3882de962bdSlukem	fi
3892de962bdSlukemdone
3902de962bdSlukem
391*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
392*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
393*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
3942de962bdSlukemRC=$?
3952de962bdSlukem
3962de962bdSlukemif test $RC != 0 ; then
397*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
3982de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3992de962bdSlukem	exit $RC
4002de962bdSlukemfi
4012de962bdSlukem
402*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
403*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
404*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
4052de962bdSlukemRC=$?
4062de962bdSlukem
4072de962bdSlukemif test $RC != 0 ; then
408*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
4092de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4102de962bdSlukem	exit $RC
4112de962bdSlukemfi
4122de962bdSlukem
413*e670fd5cSchristos#echo "Filtering provider results..."
414*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
415*e670fd5cSchristos#echo "Filtering consumer results..."
416*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
4172de962bdSlukem
418*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
419*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
4202de962bdSlukem
4212de962bdSlukemif test $? != 0 ; then
422*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
4232de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4242de962bdSlukem	exit 1
4252de962bdSlukemfi
4262de962bdSlukem
4272de962bdSlukemCHECK=`expr $CHECK + 1`
4282de962bdSlukemecho "$CHECK > Stopping proxy to test recovery..."
4292de962bdSlukemkill -HUP $PROXYPID
4302de962bdSlukemwait $PROXYPID
4312de962bdSlukem
432*e670fd5cSchristosecho "Modifying more entries on the provider..."
433*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \
4342de962bdSlukem	$TESTOUT 2>&1 << EOMODS
4352de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
4362de962bdSlukemchangetype: modify
4372de962bdSlukemadd: description
4382de962bdSlukemdescription: proxy is down...
4392de962bdSlukem
4402de962bdSlukemdn: cn=James T. Kirk, ou=Retired, ou=People, dc=example,dc=com
4412de962bdSlukemchangetype: add
4422de962bdSlukemobjectclass: OpenLDAPperson
4432de962bdSlukemsn: Kirk
4442de962bdSlukemuid: jtk
4452de962bdSlukemcn: James T. Kirk
4462de962bdSlukem
4472de962bdSlukemdn: cn=Tiberius J. Hooker, ou=Retired, ou=People, dc=example,dc=com
4482de962bdSlukemchangetype: add
4492de962bdSlukemobjectclass: OpenLDAPperson
4502de962bdSlukemsn: Hooker
4512de962bdSlukemuid: tjh
4522de962bdSlukemcn: Tiberius J. Hooker
4532de962bdSlukem
4542de962bdSlukemEOMODS
4552de962bdSlukem
4562de962bdSlukemecho "Restarting proxy..."
4572de962bdSlukemecho "======================= RESTART =======================" >> $LOG3
458*e670fd5cSchristos$SLAPD -f $CONF3 -h $URI3 -d $LVL >> $LOG3 2>&1 &
4592de962bdSlukemPROXYPID=$!
4602de962bdSlukemif test $WAIT != 0 ; then
4612de962bdSlukem    echo PROXYPID $PROXYPID
4622de962bdSlukem    read foo
4632de962bdSlukemfi
464*e670fd5cSchristosKILLPIDS="$PROVIDERPID $CONSUMERPID $PROXYPID"
4652de962bdSlukem
466*e670fd5cSchristos# get provider contextCSN
467*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
468*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
4692de962bdSlukemRC=$?
4702de962bdSlukemif test $RC != 0 ; then
471*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
4722de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4732de962bdSlukem	exit $RC
4742de962bdSlukemfi
4752de962bdSlukem
476*e670fd5cSchristos# check consumer contextCSN
4772de962bdSlukemfor i in 1 2 3 4 5; do
4784e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
4794e6df137Slukem	sleep $SLEEP1
4802de962bdSlukem
481*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
482*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
4832de962bdSlukem	RC=$?
4842de962bdSlukem
4852de962bdSlukem	if test $RC != 0 ; then
486*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
4872de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
4882de962bdSlukem		exit $RC
4892de962bdSlukem	fi
4902de962bdSlukem
491*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
4922de962bdSlukem
4932de962bdSlukem	if test $? = 0 ; then
4942de962bdSlukem		break
4952de962bdSlukem	fi
4962de962bdSlukemdone
4972de962bdSlukem
498*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
499*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
500*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
5012de962bdSlukemRC=$?
5022de962bdSlukem
5032de962bdSlukemif test $RC != 0 ; then
504*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
5052de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5062de962bdSlukem	exit $RC
5072de962bdSlukemfi
5082de962bdSlukem
509*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
510*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
511*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
5122de962bdSlukemRC=$?
5132de962bdSlukem
5142de962bdSlukemif test $RC != 0 ; then
515*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
5162de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5172de962bdSlukem	exit $RC
5182de962bdSlukemfi
5192de962bdSlukem
520*e670fd5cSchristos#echo "Filtering provider results..."
521*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
522*e670fd5cSchristos#echo "Filtering consumer results..."
523*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
5242de962bdSlukem
525*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
526*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
5272de962bdSlukem
5282de962bdSlukemif test $? != 0 ; then
529*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
5302de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5312de962bdSlukem	exit 1
5322de962bdSlukemfi
5332de962bdSlukem
5342de962bdSlukemCHECK=`expr $CHECK + 1`
535*e670fd5cSchristosecho "$CHECK > Try updating the consumer slapd..."
536*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI2 -w $PASSWD > \
5372de962bdSlukem	$TESTOUT 2>&1 << EOMODS
5382de962bdSlukemdn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
5392de962bdSlukemchangetype: modify
5402de962bdSlukemadd: description
5412de962bdSlukemdescription: This write must fail because directed to a shadow context,
5422de962bdSlukemdescription: unless the chain overlay is configured appropriately ;)
5432de962bdSlukem
5442de962bdSlukemEOMODS
5452de962bdSlukem
5462de962bdSlukemRC=$?
5472de962bdSlukemif test $RC != 0 ; then
5482de962bdSlukem	echo "ldapmodify failed ($RC)!"
5492de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5502de962bdSlukem	exit $RC
5512de962bdSlukemfi
5522de962bdSlukem
553*e670fd5cSchristos# get provider contextCSN
554*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
555*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
5562de962bdSlukemRC=$?
5572de962bdSlukemif test $RC != 0 ; then
558*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
5592de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5602de962bdSlukem	exit $RC
5612de962bdSlukemfi
5622de962bdSlukem
563*e670fd5cSchristos# check consumer contextCSN
5642de962bdSlukemsleep 1
5652de962bdSlukem
5662de962bdSlukemfor i in 1 2 3; do
567*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
568*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
5692de962bdSlukem	RC=$?
5702de962bdSlukem
5712de962bdSlukem	if test $RC != 0 ; then
572*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
5732de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
5742de962bdSlukem		exit $RC
5752de962bdSlukem	fi
5762de962bdSlukem
577*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
5782de962bdSlukem
5792de962bdSlukem	if test $? = 0 ; then
5802de962bdSlukem		break
5812de962bdSlukem	fi
5822de962bdSlukem
5834e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
5844e6df137Slukem	sleep $SLEEP1
5852de962bdSlukemdone
5862de962bdSlukem
587*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
588*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
589*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
5902de962bdSlukemRC=$?
5912de962bdSlukem
5922de962bdSlukemif test $RC != 0 ; then
593*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
5942de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5952de962bdSlukem	exit $RC
5962de962bdSlukemfi
5972de962bdSlukem
598*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
599*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
600*e670fd5cSchristos'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
6012de962bdSlukemRC=$?
6022de962bdSlukem
6032de962bdSlukemif test $RC != 0 ; then
604*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
6052de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6062de962bdSlukem	exit $RC
6072de962bdSlukemfi
6082de962bdSlukem
609*e670fd5cSchristos#echo "Filtering provider results..."
610*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
611*e670fd5cSchristos#echo "Filtering consumer results..."
612*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
6132de962bdSlukem
614*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
615*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
6162de962bdSlukem
6172de962bdSlukemif test $? != 0 ; then
618*e670fd5cSchristos	echo "test failed - provider and consumer databases differ"
6192de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6202de962bdSlukem	exit 1
6212de962bdSlukemfi
6222de962bdSlukem
6232de962bdSlukemCHECK=`expr $CHECK + 1`
6242de962bdSlukemecho "$CHECK > Stopping consumer to test recovery..."
625*e670fd5cSchristoskill -HUP $CONSUMERPID
626*e670fd5cSchristoswait $CONSUMERPID
6272de962bdSlukem
628*e670fd5cSchristosecho "Modifying more entries on the provider..."
629*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \
6302de962bdSlukem	$TESTOUT 2>&1 << EOMODS
6312de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
6322de962bdSlukemchangetype: modify
6332de962bdSlukemadd: drink
6342de962bdSlukemdrink: Mad Dog 20/20
6352de962bdSlukem
6362de962bdSlukemEOMODS
6372de962bdSlukem
6384e6df137Slukemecho "Waiting $SLEEP2 seconds for syncrepl to retry..."
6394e6df137Slukemsleep $SLEEP2
6402de962bdSlukem
6412de962bdSlukemecho "Restarting consumer..."
6422de962bdSlukemecho "======================= RESTART =======================" >> $LOG2
643*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL >> $LOG2 2>&1 &
644*e670fd5cSchristosCONSUMERPID=$!
6452de962bdSlukemif test $WAIT != 0 ; then
646*e670fd5cSchristos    echo CONSUMERPID $CONSUMERPID
6472de962bdSlukem    read foo
6482de962bdSlukemfi
649*e670fd5cSchristosKILLPIDS="$PROVIDERPID $CONSUMERPID $PROXYPID"
6502de962bdSlukem
651*e670fd5cSchristos# get provider contextCSN
652*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
653*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
6542de962bdSlukemRC=$?
6552de962bdSlukemif test $RC != 0 ; then
656*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
6572de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6582de962bdSlukem	exit $RC
6592de962bdSlukemfi
6602de962bdSlukem
661*e670fd5cSchristos# check consumer contextCSN
6622de962bdSlukem
6632de962bdSlukemfor i in 1 2 3 4 5; do
6644e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
6654e6df137Slukem	sleep $SLEEP1
6662de962bdSlukem
667*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
668*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
6692de962bdSlukem	RC=$?
6702de962bdSlukem
6712de962bdSlukem	if test $RC != 0 ; then
672*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
6732de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
6742de962bdSlukem		exit $RC
6752de962bdSlukem	fi
6762de962bdSlukem
677*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
6782de962bdSlukem
6792de962bdSlukem	if test $? = 0 ; then
6802de962bdSlukem		break
6812de962bdSlukem	fi
6822de962bdSlukemdone
6832de962bdSlukem
684*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
685*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
686*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
6872de962bdSlukemRC=$?
6882de962bdSlukem
6892de962bdSlukemif test $RC != 0 ; then
690*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
6912de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6922de962bdSlukem	exit $RC
6932de962bdSlukemfi
6942de962bdSlukem
695*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
696*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
697*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
6982de962bdSlukemRC=$?
6992de962bdSlukem
7002de962bdSlukemif test $RC != 0 ; then
701*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
7022de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
7032de962bdSlukem	exit $RC
7042de962bdSlukemfi
7052de962bdSlukem
706*e670fd5cSchristos#echo "Filtering provider results..."
707*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
708*e670fd5cSchristos#echo "Filtering consumer results..."
709*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
7102de962bdSlukem
711*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
712*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
7132de962bdSlukem
7142de962bdSlukemif test $? != 0 ; then
7152de962bdSlukem	# FIXME: keep the original workaround in place, in case we needed again
7162de962bdSlukem	if test 1 = 1 ; then
717*e670fd5cSchristos		echo "test failed - provider and consumer databases differ"
7182de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
7192de962bdSlukem		exit 1
7202de962bdSlukem	fi
7212de962bdSlukem
722*e670fd5cSchristos	echo "	test failed - provider and consumer databases differ (ignored by now)"
7232de962bdSlukem	echo "	Stopping proxy to see if it auto-recovers..."
7242de962bdSlukem	kill -HUP $PROXYPID
7252de962bdSlukem	wait $PROXYPID
7262de962bdSlukem
7272de962bdSlukem	echo "	${CHECK}.1 > Restarting proxy..."
7282de962bdSlukem	echo "======================= RESTART =======================" >> $LOG3
729*e670fd5cSchristos	$SLAPD -f $CONF3 -h $URI3 -d $LVL >> $LOG3 2>&1 &
7302de962bdSlukem	PROXYPID=$!
7312de962bdSlukem	if test $WAIT != 0 ; then
7322de962bdSlukem		echo PROXYPID $PROXYPID
7332de962bdSlukem		read foo
7342de962bdSlukem	fi
735*e670fd5cSchristos	KILLPIDS="$PROVIDERPID $CONSUMERPID $PROXYPID"
7362de962bdSlukem
7374e6df137Slukem	echo "	Waiting $SLEEP2 seconds for syncrepl to receive changes..."
7384e6df137Slukem	sleep $SLEEP2
7392de962bdSlukem
740*e670fd5cSchristos	#echo "Using ldapsearch to read all the entries from the consumer..."
741*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
742*e670fd5cSchristos		'(objectClass=*)' > "${CONSUMEROUT}.5.1" 2>&1
7432de962bdSlukem	RC=$?
7442de962bdSlukem
7452de962bdSlukem	if test $RC != 0 ; then
746*e670fd5cSchristos		echo "	ldapsearch failed at consumer ($RC)!"
7472de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
7482de962bdSlukem		exit $RC
7492de962bdSlukem	fi
7502de962bdSlukem
751*e670fd5cSchristos	#echo "Filtering consumer results..."
752*e670fd5cSchristos	$LDIFFILTER < "${CONSUMEROUT}.5.1" > $CONSUMERFLT
7532de962bdSlukem
754*e670fd5cSchristos	echo "	${CHECK}.1 < Comparing retrieved entries from provider and consumer..."
755*e670fd5cSchristos	$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
7562de962bdSlukem
7572de962bdSlukem	if test $? != 0 ; then
758*e670fd5cSchristos		echo "	test failed - provider and consumer databases differ"
7592de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
7602de962bdSlukem		exit 1
7612de962bdSlukem	fi
7622de962bdSlukemfi
7632de962bdSlukem
7642de962bdSlukem#
7652de962bdSlukem# Modifications formerly known to fail
7662de962bdSlukem#
7672de962bdSlukemCHECK=`expr $CHECK + 1`
7682de962bdSlukemecho "$CHECK > Performing modifications that were formerly known to fail..."
769*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
7702de962bdSlukem	$TESTOUT 2>&1 << EOMODS
7712de962bdSlukem# First, back out previous change
7722de962bdSlukemdn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
7732de962bdSlukemchangetype: modify
7742de962bdSlukemdelete: drink
7752de962bdSlukemdrink: Mad Dog 20/20
7762de962bdSlukem
7772de962bdSlukem# From now on, perform modifications that were formerly known to fail
7782de962bdSlukemdn: cn=All Staff,ou=Groups,dc=example,dc=com
7792de962bdSlukemchangetype: modify
7802de962bdSlukemdelete: description
7812de962bdSlukem
7822de962bdSlukemEOMODS
7832de962bdSlukem
7842de962bdSlukemRC=$?
7852de962bdSlukemif test $RC != 0 ; then
7862de962bdSlukem	echo "ldapmodify failed ($RC)!"
7872de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
7882de962bdSlukem	exit $RC
7892de962bdSlukemfi
7902de962bdSlukem
791*e670fd5cSchristos# get provider contextCSN
792*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
793*e670fd5cSchristos	-s base '(objectClass=*)' contextCSN > "${PROVIDEROUT}.$CHECK" 2>&1
7942de962bdSlukemRC=$?
7952de962bdSlukemif test $RC != 0 ; then
796*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
7972de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
7982de962bdSlukem	exit $RC
7992de962bdSlukemfi
8002de962bdSlukem
801*e670fd5cSchristos# check consumer contextCSN
8022de962bdSlukemsleep 1
8032de962bdSlukemfor i in 1 2 3; do
804*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
805*e670fd5cSchristos		-s base '(objectClass=*)' contextCSN > "${CONSUMEROUT}.$CHECK" 2>&1
8062de962bdSlukem	RC=$?
8072de962bdSlukem
8082de962bdSlukem	if test $RC != 0 ; then
809*e670fd5cSchristos		echo "ldapsearch failed at consumer ($RC)!"
8102de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
8112de962bdSlukem		exit $RC
8122de962bdSlukem	fi
8132de962bdSlukem
814*e670fd5cSchristos	$CMP ${PROVIDEROUT}.$CHECK ${CONSUMEROUT}.$CHECK > $CMPOUT
8152de962bdSlukem
8162de962bdSlukem	if test $? = 0 ; then
8172de962bdSlukem		break
8182de962bdSlukem	fi
8192de962bdSlukem
8204e6df137Slukem	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
8214e6df137Slukem	sleep $SLEEP1
8222de962bdSlukemdone
8232de962bdSlukem
824*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the provider..."
825*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
826*e670fd5cSchristos	'(objectClass=*)' > "${PROVIDEROUT}.$CHECK" 2>&1
8272de962bdSlukemRC=$?
8282de962bdSlukem
8292de962bdSlukemif test $RC != 0 ; then
830*e670fd5cSchristos	echo "ldapsearch failed at provider ($RC)!"
8312de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
8322de962bdSlukem	exit $RC
8332de962bdSlukemfi
8342de962bdSlukem
835*e670fd5cSchristos#echo "Using ldapsearch to read all the entries from the consumer..."
836*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
837*e670fd5cSchristos	'(objectClass=*)' > "${CONSUMEROUT}.$CHECK" 2>&1
8382de962bdSlukemRC=$?
8392de962bdSlukem
8402de962bdSlukemif test $RC != 0 ; then
841*e670fd5cSchristos	echo "ldapsearch failed at consumer ($RC)!"
8422de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
8432de962bdSlukem	exit $RC
8442de962bdSlukemfi
8452de962bdSlukem
846*e670fd5cSchristos#echo "Filtering provider results..."
847*e670fd5cSchristos$LDIFFILTER < "${PROVIDEROUT}.$CHECK" > $PROVIDERFLT
848*e670fd5cSchristos#echo "Filtering consumer results..."
849*e670fd5cSchristos$LDIFFILTER < "${CONSUMEROUT}.$CHECK" > $CONSUMERFLT
8502de962bdSlukem
851*e670fd5cSchristosecho "$CHECK < Comparing retrieved entries from provider and consumer..."
852*e670fd5cSchristos$CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT
8532de962bdSlukem
8542de962bdSlukemif test $? != 0 ; then
855*e670fd5cSchristos	echo "test failed - provider and consumer databases differ (ignored by now)"
856*e670fd5cSchristos	#echo "test failed - provider and consumer databases differ"
8572de962bdSlukem	#test $KILLSERVERS != no && kill -HUP $KILLPIDS
8582de962bdSlukem	#exit 1
8592de962bdSlukemfi
8602de962bdSlukem
8612de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
8622de962bdSlukem
8632de962bdSlukemecho ">>>>> Test succeeded"
8642de962bdSlukem
8652de962bdSlukemtest $KILLSERVERS != no && wait
8662de962bdSlukem
8672de962bdSlukemexit 0
868