X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tests%2Fscripts%2Ftest050-syncrepl-multimaster;h=57851a3d987a91f4a81ea8e53d01711d09808a4f;hb=dac408369b0812762b3e85f7e024ea472ce79abc;hp=a3816c1309521d3cc19e0f86e5b8965a719c24e9;hpb=4af9eb971559e3a1f0432615e93ec870dc753ddb;p=openldap
diff --git a/tests/scripts/test050-syncrepl-multimaster b/tests/scripts/test050-syncrepl-multimaster
index a3816c1309..57851a3d98 100755
--- a/tests/scripts/test050-syncrepl-multimaster
+++ b/tests/scripts/test050-syncrepl-multimaster
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software .
##
-## Copyright 1998-2009 The OpenLDAP Foundation.
+## Copyright 1998-2011 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
@@ -21,17 +21,16 @@ if test $SYNCPROV = syncprovno; then
exit 0
fi
-PRODIR=$TESTDIR/pro
-CONDIR=$TESTDIR/con1
-CONDIR2=$TESTDIR/con2
-DBPRO=$PRODIR/db
-DBCON=$CONDIR/db
-DBCON2=$CONDIR2/db
-CFPRO=$PRODIR/slapd.d
-CFCON=$CONDIR/slapd.d
-CFCON2=$CONDIR2/slapd.d
+MMR=${MMR-4}
-mkdir -p $TESTDIR $PRODIR $CONDIR $CONDIR2 $DBPRO $DBCON $DBCON2 $CFPRO $CFCON $CFCON2
+if [ $MMR -gt 9 ]; then
+MMR=9
+fi
+
+XDIR=$TESTDIR/srv
+TMP=$TESTDIR/tmp
+
+mkdir -p $TESTDIR
$SLAPPASSWD -g -n >$CONFIGPWF
@@ -53,9 +52,7 @@ esac
#
# Test replication of dynamic config:
-# - start producer
-# - start consumer1
-# - start consumer2
+# - start servers
# - configure over ldap
# - populate over ldap
# - configure syncrepl over ldap
@@ -63,35 +60,19 @@ esac
#
echo "Initializing server configurations..."
-$SLAPADD -F $CFCON2 -n 0 < $LOG1 2>&1 &
PID=$!
if test $WAIT != 0 ; then
@@ -112,7 +96,7 @@ cd $TESTWD
sleep 1
-echo "Using ldapsearch to check that producer slapd is running..."
+echo "Using ldapsearch to check that server 1 is running..."
for i in 0 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
@@ -130,21 +114,18 @@ if test $RC != 0 ; then
exit $RC
fi
-echo "Inserting syncprov overlay on producer..."
+echo "Inserting syncprov overlay on server 1..."
+echo "" > $TMP
if [ "$SYNCPROV" = syncprovmod ]; then
- $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF < $TESTOUT 2>&1
+cat <> $TMP
dn: cn=module,cn=config
+changetype: add
objectClass: olcModuleList
cn: module
-olcModulePath: ../../../servers/slapd/overlays
+olcModulePath: $TESTWD/../servers/slapd/overlays
olcModuleLoad: syncprov.la
+
EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for moduleLoad ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
fi
#
# Note that we configure a timeout here; it's possible for both
@@ -154,13 +135,18 @@ fi
# attempt and allow the modifies to complete.
#
read CONFIGPW < $CONFIGPWF
-$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <> $TESTOUT 2>&1
-dn: cn=config
-changetype: modify
-replace: olcServerID
-olcServerID: 1 $URI1
-olcServerID: 2 $URI2
-olcServerID: 3 $URI3
+echo "dn: cn=config" >> $TMP
+echo "changetype: modify" >> $TMP
+echo "replace: olcServerID" >> $TMP
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+echo "olcServerID: $n $URI" >> $TMP
+n=`expr $n + 1`
+done
+
+cat <> $TMP
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
@@ -171,19 +157,21 @@ olcOverlay: syncprov
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
-olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
--
-add: olcMirrorMode
-olcMirrorMode: TRUE
EOF
+
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+echo "olcSyncRepl: rid=00$n provider=$URI binddn=\"cn=config\" bindmethod=simple" >> $TMP
+echo " credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP
+echo " retry=\"3 10 300 5\" timeout=3" >> $TMP
+n=`expr $n + 1`
+done
+echo "-" >> $TMP
+echo "add: olcMirrorMode" >> $TMP
+echo "olcMirrorMode: TRUE" >> $TMP
+$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF < $TMP >> $TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed for syncrepl config ($RC)!"
@@ -191,9 +179,14 @@ if test $RC != 0 ; then
exit $RC
fi
-echo "Starting consumer1 slapd on TCP/IP port $PORT2..."
-cd $CONDIR
-$SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
+n=2
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+LOG=$TESTDIR/slapd.$n.log
+echo "Starting server $n on TCP/IP port $PORT..."
+cd ${XDIR}$n
+$SLAPD -F ./slapd.d -h $URI -d $LVL $TIMING > $LOG 2>&1 &
SLAVEPID=$!
if test $WAIT != 0 ; then
echo SLAVEPID $SLAVEPID
@@ -204,9 +197,9 @@ cd $TESTWD
sleep 1
-echo "Using ldapsearch to check that consumer1 slapd is running..."
+echo "Using ldapsearch to check that server $n is running..."
for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI2 \
+ $LDAPSEARCH -s base -b "" -H $URI \
'objectclass=*' > /dev/null 2>&1
RC=$?
if test $RC = 0 ; then
@@ -222,76 +215,31 @@ if test $RC != 0 ; then
exit $RC
fi
-echo "Configuring syncrepl on consumer1..."
-$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <>$TESTOUT 2>&1
+echo "Configuring syncrepl on server $n..."
+cat < $TMP
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
-olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
--
-add: olcMirrorMode
-olcMirrorMode: TRUE
EOF
-
-echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
-cd $CONDIR2
-$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 &
-SLAVE2PID=$!
-if test $WAIT != 0 ; then
- echo SLAVE2PID $SLAVE2PID
- read foo
-fi
-KILLPIDS="$KILLPIDS $SLAVE2PID"
-cd $TESTWD
-
-sleep 1
-
-echo "Using ldapsearch to check that consumer2 slapd is running..."
-for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI3 \
- 'objectclass=*' > /dev/null 2>&1
- RC=$?
- if test $RC = 0 ; then
- break
- fi
- echo "Waiting 5 seconds for slapd to start..."
- sleep 5
+j=1
+while [ $j -le $MMR ]; do
+P2=`expr $BASEPORT + $j`
+U2="ldap://${LOCALHOST}:$P2/"
+echo "olcSyncRepl: rid=00$j provider=$U2 binddn=\"cn=config\" bindmethod=simple" >> $TMP
+echo " credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP
+echo " retry=\"3 10 300 5\" timeout=3" >> $TMP
+j=`expr $j + 1`
done
-
-if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Configuring syncrepl on consumer2..."
-$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <>$TESTOUT 2>&1
-dn: olcDatabase={0}config,cn=config
-changetype: modify
-add: olcSyncRepl
-olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
- credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
- retry="3 5 300 5" timeout=3
+cat <> $TMP
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF
+$LDAPMODIFY -D cn=config -H $URI -y $CONFIGPWF < $TMP >>$TESTOUT 2>&1
+n=`expr $n + 1`
+done
-echo "Adding schema and databases on producer..."
+echo "Adding schema and databases on server 1..."
$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <>$TESTOUT 2>&1
include: file://$ABS_SCHEMADIR/core.ldif
@@ -310,48 +258,52 @@ if test $RC != 0 ; then
exit $RC
fi
+nullExclude=""
+test $BACKEND = null && nullExclude="# "
+
+echo "" > $TMP
if [ "$BACKENDTYPE" = mod ]; then
- $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <>$TESTOUT 2>&1
+cat <> $TMP
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
-olcModulePath: ../../../servers/slapd/back-$BACKEND
+olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND
olcModuleLoad: back_$BACKEND.la
+
EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for backend config ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
fi
-$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <>$TESTOUT 2>&1
+cat <> $TMP
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
-objectClass: olc${BACKEND}Config
+${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
olcSuffix: $BASEDN
-olcDbDirectory: ./db
+${nullExclude}olcDbDirectory: ./db
olcRootDN: $MANAGERDN
olcRootPW: $PASSWD
-olcSyncRepl: rid=004 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
- credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=005 provider=$URI2 binddn="$MANAGERDN" bindmethod=simple
- credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE
- retry="3 5 300 5" timeout=3
-olcSyncRepl: rid=006 provider=$URI3 binddn="$MANAGERDN" bindmethod=simple
- credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE
- retry="3 5 300 5" timeout=3
+EOF
+
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+
+echo "olcSyncRepl: rid=01$n provider=$URI binddn=\"$MANAGERDN\" bindmethod=simple" >> $TMP
+echo " credentials=$PASSWD searchbase=\"$BASEDN\" $SYNCTYPE" >> $TMP
+echo " retry=\"3 10 300 5\" timeout=3" >> $TMP
+n=`expr $n + 1`
+done
+
+cat <> $TMP
olcMirrorMode: TRUE
dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
-changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF
+$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF < $TMP >>$TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for database config ($RC)!"
@@ -359,8 +311,7 @@ if test $RC != 0 ; then
exit $RC
fi
-case $BACKEND in
-bdb | hdb)
+if test $INDEXDB = indexdb ; then
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <>$TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
changetype: modify
@@ -374,109 +325,93 @@ EOF
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
- ;;
-esac
+fi
-echo "Using ldapadd to populate producer..."
+echo "Using ldapadd to populate server 1..."
$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \
>> $TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
- echo "ldapadd failed for producer database ($RC)!"
+ echo "ldapadd failed for server 1 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
-sleep $SLEEP1
+echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..."
+sleep $SLEEP2
-echo "Using ldapadd to populate consumer1..."
-$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $LDIFADD1 \
- >> $TESTOUT 2>&1
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed for consumer1 database ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
-echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
-sleep $SLEEP1
-
-echo "Using ldapadd to populate consumer2..."
-$LDAPADD -D "$MANAGERDN" -H $URI3 -w $PASSWD \
- << EOMODS >> $TESTOUT 2>&1
-dn: cn=Consumer 2 Test,dc=example,dc=com
-changetype: add
-objectClass: device
-cn: Consumer 2 Test
-EOMODS
+echo "Using ldapsearch to read config from server $n..."
+$LDAPSEARCH -b cn=config -D cn=config -H $URI -y $CONFIGPWF \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
RC=$?
+
if test $RC != 0 ; then
- echo "ldapadd failed for consumer2 database ($RC)!"
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
-sleep $SLEEP1
-
-echo "Using ldapmodify to add to the producer entries that will be deleted..."
-$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \
- >> $TESTOUT 2>&1 << EOADDS
-dn: cn=To be deleted by producer,dc=example,dc=com
-changetype: add
-objectClass: device
-# no distinguished values, will be added by DSA
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
-dn: cn=To be deleted by consumer1,dc=example,dc=com
-changetype: add
-objectClass: device
-# no distinguished values, will be added by DSA
+n=`expr $n + 1`
+done
-dn: cn=To be deleted by consumer2,dc=example,dc=com
-changetype: add
-objectClass: device
-# no distinguished values, will be added by DSA
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved configs from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
-dn: cn=To be deleted by producer,dc=example,dc=com
-changetype: delete
-EOADDS
-RC=$?
-if test $RC != 0 ; then
- echo "ldapmodify failed for producer database ($RC)!"
+if test $? != 0 ; then
+ echo "test failed - server 1 and server $n configs differ"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
+ exit 1
fi
+n=`expr $n + 1`
+done
-echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
-sleep $SLEEP1
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
-echo "Using ldapmodify to delete entries from consumer1..."
-$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \
- >> $TESTOUT 2>&1 << EOADDS
-dn: cn=To be deleted by consumer1,dc=example,dc=com
-changetype: delete
-EOADDS
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
RC=$?
+
if test $RC != 0 ; then
- echo "ldapmodify failed for consumer2 database ($RC)!"
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
-echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
-sleep $SLEEP1
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
-echo "Using ldapmodify to delete entries from consumer2..."
-$LDAPMODIFY -D "$MANAGERDN" -H $URI3 -w $PASSWD \
- >> $TESTOUT 2>&1 << EOADDS
-dn: cn=To be deleted by consumer2,dc=example,dc=com
-changetype: delete
-EOADDS
+if test $? != 0 ; then
+ echo "test failed - server 1 and server $n databases differ"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+n=`expr $n + 1`
+done
+
+echo "Using ldapadd to populate server 2..."
+$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $LDIFADD1 \
+ >> $TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
- echo "ldapmodify failed for consumer2 database ($RC)!"
+ echo "ldapadd failed for server 2 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
@@ -484,173 +419,230 @@ fi
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
sleep $SLEEP1
-echo "Using ldapsearch to check that syncrepl received database changes..."
-RC=32
-for i in 0 1 2 3 4 5; do
- RESULT=`$LDAPSEARCH -H $URI2 \
- -s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
- '(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
- if test "x$RESULT" = "xOK" ; then
- RC=0
- break
- fi
- echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
- sleep $SLEEP1
-done
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
+RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
-echo "Using ldapsearch to check that syncrepl received database changes on consumer2..."
-RC=32
-for i in 0 1 2 3 4 5; do
- RESULT=`$LDAPSEARCH -H $URI3 \
- -s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
- '(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
- if test "x$RESULT" = "xOK" ; then
- RC=0
- break
- fi
- echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
- sleep $SLEEP1
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
+
+if test $? != 0 ; then
+ echo "test failed - server 1 and server $n databases differ"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+n=`expr $n + 1`
done
+echo "Using ldapadd to populate server 3..."
+$LDAPADD -D "$MANAGERDN" -H $URI3 -w $PASSWD \
+ << EOMODS >> $TESTOUT 2>&1
+dn: cn=Server 3 Test,dc=example,dc=com
+changetype: add
+objectClass: device
+cn: Server 3 Test
+EOMODS
+RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
+ echo "ldapadd failed for server 3 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Using ldapsearch to read config from the producer..."
-$LDAPSEARCH -b cn=config -D cn=config -H $URI1 -y $CONFIGPWF \
- 'objectclass=*' > $MASTEROUT 2>&1
+echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
+sleep $SLEEP1
+
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed at producer ($RC)!"
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
-echo "Using ldapsearch to read config from consumer1..."
-$LDAPSEARCH -b cn=config -D cn=config -H $URI2 -y $CONFIGPWF \
- 'objectclass=*' > $SLAVEOUT 2>&1
-RC=$?
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
-if test $RC != 0 ; then
- echo "ldapsearch failed at consumer1 ($RC)!"
+if test $? != 0 ; then
+ echo "test failed - server 1 and server $n databases differ"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
+ exit 1
fi
+n=`expr $n + 1`
+done
-echo "Using ldapsearch to read config from consumer2..."
-$LDAPSEARCH -b cn=config -D cn=config -H $URI3 -y $CONFIGPWF \
- 'objectclass=*' > $SLAVE2OUT 2>&1
-RC=$?
+echo "Using ldapmodify to add to server 1 entries that will be deleted..."
+$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \
+ >> $TESTOUT 2>&1 << EOADDS
+dn: cn=To be deleted by server 1,dc=example,dc=com
+changetype: add
+objectClass: device
+# no distinguished values, will be added by DSA
+
+dn: cn=To be deleted by server 2,dc=example,dc=com
+changetype: add
+objectClass: device
+# no distinguished values, will be added by DSA
+dn: cn=To be deleted by server 3,dc=example,dc=com
+changetype: add
+objectClass: device
+# no distinguished values, will be added by DSA
+
+dn: cn=To be deleted by server 1,dc=example,dc=com
+changetype: delete
+EOADDS
+RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed at consumer2 ($RC)!"
+ echo "ldapmodify failed for server 1 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Filtering producer results..."
-. $LDIFFILTER < $MASTEROUT > $MASTERFLT
-echo "Filtering consumer1 results..."
-. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
-echo "Filtering consumer2 results..."
-. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT
+echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
+sleep $SLEEP1
-echo "Comparing retrieved configs from producer and consumer1..."
-$CMP $MASTERFLT $SLAVEFLT > $CMPOUT
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
-if test $? != 0 ; then
- echo "test failed - producer and consumer1 configs differ"
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
+RC=$?
+
+if test $RC != 0 ; then
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit 1
+ exit $RC
fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
-echo "Comparing retrieved configs from producer and consumer2..."
-$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
if test $? != 0 ; then
- echo "test failed - producer and consumer2 configs differ"
+ echo "test failed - server 1 and server $n databases differ"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
+n=`expr $n + 1`
+done
-echo "Using ldapsearch to read all the entries from the producer..."
-$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD \
- 'objectclass=*' > $MASTEROUT 2>&1
+echo "Using ldapmodify to delete entries from server 2..."
+$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \
+ >> $TESTOUT 2>&1 << EOADDS
+dn: cn=To be deleted by server 2,dc=example,dc=com
+changetype: delete
+EOADDS
RC=$?
-
if test $RC != 0 ; then
- echo "ldapsearch failed at producer ($RC)!"
+ echo "ldapmodify failed for server 2 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Using ldapsearch to read all the entries from consumer1..."
-$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI2 -w $PASSWD \
- 'objectclass=*' > $SLAVEOUT 2>&1
-RC=$?
+echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
+sleep $SLEEP1
+echo "Using ldapmodify to delete entries from server 3..."
+$LDAPMODIFY -D "$MANAGERDN" -H $URI3 -w $PASSWD \
+ >> $TESTOUT 2>&1 << EOADDS
+dn: cn=To be deleted by server 3,dc=example,dc=com
+changetype: delete
+EOADDS
+RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed at consumer1 ($RC)!"
+ echo "ldapmodify failed for server 3 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-echo "Using ldapsearch to read all the entries from consumer2..."
-$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI3 -w $PASSWD \
- 'objectclass=*' > $SLAVE2OUT 2>&1
+echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
+sleep $SLEEP1
+
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed at consumer2 ($RC)!"
+ echo "ldapsearch failed at server $n ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
-# kill!
-# test $KILLSERVERS != no && kill -HUP $KILLPIDS
-kill -HUP $KILLPIDS
-
-echo "Filtering producer results..."
-. $LDIFFILTER < $MASTEROUT > $MASTERFLT
-echo "Filtering consumer1 results..."
-. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
-echo "Filtering consumer2 results..."
-. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT
-
-echo "Comparing retrieved entries from producer and consumer1..."
-$CMP $MASTERFLT $SLAVEFLT > $CMPOUT
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
if test $? != 0 ; then
- echo "test failed - producer and consumer1 databases differ"
+ echo "test failed - server 1 and server $n databases differ"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
+n=`expr $n + 1`
+done
-echo "Comparing retrieved entries from producer and consumer2..."
-$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT
-
-if test $? != 0 ; then
- echo "test failed - producer and consumer2 databases differ"
- exit 1
-fi
+# kill!
+# test $KILLSERVERS != no && kill -HUP $KILLPIDS
+kill -HUP $KILLPIDS
# kill!
# test $KILLSERVERS != no && wait
wait
echo "Restarting servers..."
-echo "Starting producer slapd on TCP/IP port $PORT1..."
-cd $PRODIR
+KILLPIDS=""
+
+echo "Starting server 1 on TCP/IP port $PORT1..."
echo "======================= RESTART =======================" >> $LOG1
-$SLAPD -F ./slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
+cd ${XDIR}1
+$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
PID=$!
if test $WAIT != 0 ; then
echo PID $PID
@@ -658,7 +650,10 @@ if test $WAIT != 0 ; then
fi
KILLPIDS="$PID"
cd $TESTWD
-echo "Using ldapsearch to check that producer slapd is running..."
+
+sleep 1
+
+echo "Using ldapsearch to check that server 1 is running..."
for i in 0 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
@@ -675,24 +670,33 @@ if test $RC != 0 ; then
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
-#exit 0
-echo "Starting consumer1 slapd on TCP/IP port $PORT2..."
-cd $CONDIR
-echo "======================= RESTART =======================" >> $LOG2
-$SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
-SLAVEPID=$!
+
+n=2
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+LOG=$TESTDIR/slapd.$n.log
+echo "Starting server $n on TCP/IP port $PORT..."
+cd ${XDIR}$n
+echo "======================= RESTART =======================" >> $LOG
+$SLAPD -F ./slapd.d -h $URI -d $LVL $TIMING >> $LOG 2>&1 &
+PID=$!
if test $WAIT != 0 ; then
- echo SLAVEPID $SLAVEPID
+ echo PID $PID
read foo
fi
-KILLPIDS="$KILLPIDS $SLAVEPID"
+KILLPIDS="$KILLPIDS $PID"
cd $TESTWD
+n=`expr $n + 1`
+done
-sleep 1
-
-echo "Using ldapsearch to check that consumer1 slapd is running..."
+n=2
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+echo "Using ldapsearch to check that server $n is running..."
for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI2 \
+ $LDAPSEARCH -s base -b "" -H $URI \
'objectclass=*' > /dev/null 2>&1
RC=$?
if test $RC = 0 ; then
@@ -707,43 +711,75 @@ if test $RC != 0 ; then
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+n=`expr $n + 1`
+done
-echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
-cd $CONDIR2
-echo "======================= RESTART =======================" >> $LOG3
-$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
-SLAVE2PID=$!
-if test $WAIT != 0 ; then
- echo SLAVE2PID $SLAVE2PID
- read foo
-fi
-KILLPIDS="$KILLPIDS $SLAVE2PID"
-cd $TESTWD
+# Insert modifications and more tests here.
+echo "Waiting $SLEEP1 seconds for servers to resync..."
+sleep $SLEEP1
-sleep 1
+echo "Using ldapmodify to add/modify/delete entries from server 1..."
+for i in 1 2 3 4 5 6 7 8 9 10; do
+echo " iteration $i"
+$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \
+ >> $TESTOUT 2>&1 << EOMODS
+dn: cn=Add-Mod-Del,dc=example,dc=com
+changetype: add
+cn: Add-Mod-Del
+objectclass: organizationalRole
-echo "Using ldapsearch to check that consumer2 slapd is running..."
-for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI3 \
- 'objectclass=*' > /dev/null 2>&1
- RC=$?
- if test $RC = 0 ; then
- break
- fi
- echo "Waiting 5 seconds for slapd to start..."
- sleep 5
-done
+dn: cn=Add-Mod-Del,dc=example,dc=com
+changetype: modify
+replace: description
+description: guinea pig
+-
+dn: cn=Add-Mod-Del,dc=example,dc=com
+changetype: delete
+EOMODS
+RC=$?
if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
+ echo "ldapmodify failed for server 1 database ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
+done
-# Insert modifications and more tests here.
echo "Waiting $SLEEP1 seconds for servers to resync..."
sleep $SLEEP1
+n=1
+while [ $n -le $MMR ]; do
+PORT=`expr $BASEPORT + $n`
+URI="ldap://${LOCALHOST}:$PORT/"
+
+echo "Using ldapsearch to read all the entries from server $n..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \
+ 'objectclass=*' > $TESTDIR/server$n.out 2>&1
+RC=$?
+
+if test $RC != 0 ; then
+ echo "ldapsearch failed at server $n ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt
+n=`expr $n + 1`
+done
+
+n=2
+while [ $n -le $MMR ]; do
+echo "Comparing retrieved entries from server 1 and server $n..."
+$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT
+
+if test $? != 0 ; then
+ echo "test failed - server 1 and server $n databases differ"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+n=`expr $n + 1`
+done
+
test $KILLSERVERS != no && kill -HUP $KILLPIDS
echo ">>>>> Test succeeded"