]> git.sur5r.net Git - openldap/blobdiff - tests/scripts/test007-replication
fix ITS#2289 (don't use shared data for search state; use msgid instead)
[openldap] / tests / scripts / test007-replication
index b2820ef4c1bee526ca715adb9684bb811904643c..d6fe2d842438d12610a664e91dce68c2373f7286 100755 (executable)
@@ -1,4 +1,25 @@
-#!/bin/sh
+#! /bin/sh
+# $OpenLDAP$
+
+SRCDIR="."
+if test $# -ge 1 ; then
+       SRCDIR=$1; shift
+fi
+BACKEND=bdb
+if test $# -ge 1 ; then
+       BACKEND=$1; shift
+fi
+MONITORDB=no
+if test $# -ge 1 ; then
+       MONITORDB=$1; shift
+fi
+WAIT=0
+if test $# -ge 1 ; then
+       WAIT=1; shift
+fi
+
+echo "running defines.sh"
+. $SRCDIR/scripts/defines.sh
 
 #
 # Test replication:
 
 #
 # Test replication:
 # - retrieve database over ldap and compare against expected results
 #
 
 # - retrieve database over ldap and compare against expected results
 #
 
-if [ $# -eq 0 ]; then
-       SRCDIR="."
-else
-       SRCDIR=$1; shift
-fi
-if [ $# -eq 1 ]; then
-       BDB2=$1; shift
-fi
-
-. $SRCDIR/scripts/defines.sh $SRCDIR $BDB2
-
 if test ! -x $SLURPD ; then
        echo ">>>>> $SLURPD is not executable or do not exist."
        echo ">>>>> Test skipped."
 if test ! -x $SLURPD ; then
        echo ">>>>> $SLURPD is not executable or do not exist."
        echo ">>>>> Test skipped."
@@ -30,59 +40,76 @@ fi
 echo "Cleaning up in $DBDIR..."
 rm -f $DBDIR/[!C]*
 echo "Cleaning up in $REPLDIR..."
 echo "Cleaning up in $DBDIR..."
 rm -f $DBDIR/[!C]*
 echo "Cleaning up in $REPLDIR..."
-rm -f $REPLDIR/[!C]*
+rm -rf $REPLDIR/[!C]*
 
 echo "Starting master slapd on TCP/IP port $PORT..."
 
 echo "Starting master slapd on TCP/IP port $PORT..."
-$SLAPD -f $MASTERCONF -p $PORT -d $LVL $TIMING > $MASTERLOG 2>&1 &
+. $CONFFILTER $BACKEND $MONITORDB < $MASTERCONF > $DBCONF
+$SLAPD -f $DBCONF -h $MASTERURI -d $LVL $TIMING > $MASTERLOG 2>&1 &
 PID=$!
 PID=$!
+if test $WAIT != 0 ; then
+    echo PID $PID
+    read foo
+fi
 
 echo "Starting slave slapd on TCP/IP port $SLAVEPORT..."
 
 echo "Starting slave slapd on TCP/IP port $SLAVEPORT..."
-$SLAPD -f $SLAVECONF -p $SLAVEPORT -d $LVL $TIMING > $SLAVELOG 2>&1 &
+. $CONFFILTER $BACKEND $MONITORDB < $SLAVECONF > $REPLCONF
+$SLAPD -f $REPLCONF -h $SLAVEURI -d $LVL $TIMING > $SLAVELOG 2>&1 &
 SLAVEPID=$!
 SLAVEPID=$!
+if test $WAIT != 0 ; then
+    echo SLAVEPID $SLAVEPID
+    read foo
+fi
 
 echo "Using ldapsearch to check that master slapd is running..."
 for i in 0 1 2 3 4 5; do
 
 echo "Using ldapsearch to check that master slapd is running..."
 for i in 0 1 2 3 4 5; do
-       $LDAPSEARCH -L -b "$BASEDN" -h localhost -p $PORT \
-               'cn=Monitor' > /dev/null 2>&1
+       $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
+               'objectclass=*' > /dev/null 2>&1
        RC=$?
        RC=$?
-       if [ $RC = 1 ]; then
-               echo "Waiting 5 seconds for slapd to start..."
-               sleep 5
+       if test $RC = 0 ; then
+               break
        fi
        fi
+       echo "Waiting 5 seconds for slapd to start..."
+       sleep 5
 done
 
 echo "Using ldapsearch to check that slave slapd is running..."
 for i in 0 1 2 3 4 5; do
 done
 
 echo "Using ldapsearch to check that slave slapd is running..."
 for i in 0 1 2 3 4 5; do
-       $LDAPSEARCH -L -b "$BASEDN" -h localhost -p $SLAVEPORT \
-               'cn=Monitor' > /dev/null 2>&1
+       $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
+               'objectclass=*' > /dev/null 2>&1
        RC=$?
        RC=$?
-       if [ $RC = 1 ]; then
-               echo "Waiting 5 seconds for slapd to start..."
-               sleep 5
+       if test $RC = 0 ; then
+               break
        fi
        fi
+       echo "Waiting 5 seconds for slapd to start..."
+       sleep 5
 done
 
 echo "Starting slurpd..."
 done
 
 echo "Starting slurpd..."
-$SLURPD -f $MASTERCONF -d 4 -t $REPLDIR > $SLURPLOG 2>&1 &
+$SLURPD -f $MASTERCONF -d ${SLURPD_DEBUG-5} -t $REPLDIR > $SLURPLOG 2>&1 &
 SLURPPID=$!
 
 SLURPPID=$!
 
-echo "Using ldapmodify to populate the database..."
-$LDAPMODIFY -a -D "$MANAGERDN" -h localhost -p $PORT -w $PASSWD < \
+echo "Using ldapadd to populate the master directory..."
+$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD < \
        $LDIFORDERED > /dev/null 2>&1
 RC=$?
        $LDIFORDERED > /dev/null 2>&1
 RC=$?
-if [ $RC != 0 ]; then
-       echo "ldapmodify failed!"
-       kill -HUP $PID $SLAVEPID $SLURPPID
+if test $RC != 0 ; then
+       echo "ldapadd failed ($RC)!"
+       kill -INT $PID $SLAVEPID
+       kill -KILL $SLURPPID
        exit $RC
 fi
 
        exit $RC
 fi
 
-echo "Using ldapmodify to modify the database..."
+echo "Waiting 15 seconds for slurpd to send changes..."
+sleep 15
+
+echo "Using ldapmodify to modify master directory..."
+
 #
 # Do some modifications
 #
 
 #
 # Do some modifications
 #
 
-$LDAPMODIFY -v -D "$MANAGERDN" -h localhost -p $PORT -w $PASSWD > \
-       /dev/null 2>&1 << EOMODS
+$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD > \
+       $TESTOUT 2>&1 << EOMODS
 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
 changetype: modify
 add: drink
 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
 changetype: modify
 add: drink
@@ -90,9 +117,6 @@ drink: Orange Juice
 
 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: modify
 
 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: modify
-replace: multilinedescription
-multilinedescription: The replaced multiLineDescription $ Blah Woof.
--
 replace: drink
 drink: Iced Tea
 drink: Mad Dog 20/20
 replace: drink
 drink: Iced Tea
 drink: Mad Dog 20/20
@@ -112,27 +136,38 @@ delete: member
 
 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: add
 
 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: add
-objectclass: top
-objectclass: person
-objectclass: organizationalPerson
-objectclass: newPilotPerson
-objectclass: umichPerson
+objectclass: OpenLDAPperson
 cn: Gern Jensen
 cn: Gern Jensen
+sn: Jensen
+uid: gjensen
 title: Chief Investigator, ITD
 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
 title: Chief Investigator, ITD
 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
-uid: gjensen
-krbname: gjensen@umich.edu
-nobatchupdates: TRUE
-onvacation: FALSE
 drink: Coffee
 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
 drink: Coffee
 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
-multilinedescription: Very odd
+description: Very odd
 facsimiletelephonenumber: +1 313 555 7557
 telephonenumber: +1 313 555 8343
 facsimiletelephonenumber: +1 313 555 7557
 telephonenumber: +1 313 555 8343
-mail: gjensen@mailgw.umich.edu
+mail: gjensen@mailgw.example.com
 homephone: +1 313 555 8844
 
 homephone: +1 313 555 8844
 
+dn: ou=Retired, ou=People, o=University of Michigan, c=US
+changetype: add
+objectclass: organizationalUnit
+ou: Retired
+
+dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
+changetype: add
+objectclass: OpenLDAPperson
+cn: Rosco P. Coltrane
+sn: Coltrane
+
+dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
+changetype: modrdn
+newrdn: cn=Rosco P. Coltrane
+deleteoldrdn: 1
+newsuperior: ou=Retired, ou=People, o=University of Michigan, c=US
+
 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: delete
 
 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
 changetype: delete
 
@@ -142,30 +177,44 @@ echo "Waiting 15 seconds for slurpd to send changes..."
 sleep 15
 
 echo "Using ldapsearch to read all the entries from the master..."
 sleep 15
 
 echo "Using ldapsearch to read all the entries from the master..."
-$LDAPSEARCH -L -S "" -b "$BASEDN" -h localhost -p $PORT \
+$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
        'objectclass=*' > $MASTEROUT 2>&1
        'objectclass=*' > $MASTEROUT 2>&1
+RC=$?
 
 
-if [ $RC != 0 ]; then
-       echo "ldapsearch failed!"
-       kill -HUP $PID $SLAVEPID $SLURPPID
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       kill -INT $PID $SLAVEPID
+       kill -KILL $SLURPPID
        exit $RC
 fi
 
 echo "Using ldapsearch to read all the entries from the slave..."
        exit $RC
 fi
 
 echo "Using ldapsearch to read all the entries from the slave..."
-$LDAPSEARCH -L -S "" -b "$BASEDN" -h localhost -p $SLAVEPORT \
+$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $SLAVEPORT \
        'objectclass=*' > $SLAVEOUT 2>&1
        'objectclass=*' > $SLAVEOUT 2>&1
+RC=$?
 
 
-if [ $RC != 0 ]; then
-       echo "ldapsearch failed!"
-       kill -HUP $PID $SLAVEPID $SLURPPID
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       kill -INT $PID $SLAVEPID
+       kill -KILL $SLURPPID
        exit $RC
 fi
 
        exit $RC
 fi
 
-kill -HUP $PID $SLAVEPID $SLURPPID
+kill -INT $PID $SLAVEPID
+kill -KILL $SLURPPID
+
+SEARCHOUT=$MASTEROUT
+LDIF=$SLAVEOUT
+
+echo "Filtering ldapsearch results..."
+. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
+echo "Filtering original ldif used to create database..."
+. $LDIFFILTER < $LDIF > $LDIFFLT
 
 echo "Comparing retrieved entries from master and slave..."
 
 echo "Comparing retrieved entries from master and slave..."
-cmp $MASTEROUT $SLAVEOUT
-if [ $? != 0 ]; then
+$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
+
+if test $? != 0 ; then
        echo "test failed - master and slave databases differ"
        exit 1
 fi
        echo "test failed - master and slave databases differ"
        exit 1
 fi