]> git.sur5r.net Git - openldap/commitdiff
ITS#6716 Extend test where consumer/provider holds CSNs with differing SIDs.
authorRein Tollevik <rein@basefarm.no>
Mon, 27 Jun 2011 12:17:39 +0000 (14:17 +0200)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 27 Jun 2011 21:50:16 +0000 (14:50 -0700)
tests/scripts/test058-syncrepl-asymmetric

index 2326b3df9d3062af9a04cf744dbc2368e4a05465..3fb74b14201d98bcc86686e9914208e016abf7aa 100755 (executable)
@@ -134,6 +134,8 @@ SS1_DIR=$TESTDIR/ss1
 SS2_DIR=$TESTDIR/ss2
 SSC_DIR=$TESTDIR/ssc
 
+MNUM=1
+
 mkdir -p $TESTDIR
 
 for dir in $SMC_DIR $SM1_DIR $SM2_DIR $SS1_DIR $SS2_DIR $SSC_DIR; do
@@ -979,6 +981,29 @@ if test $RC != 0 ; then
        exit $RC
 fi
 
+# Test for ITS#6716, modify on central master to ensure that the CSN
+# order is "sid2 < sid3 < sid1".  When site1 master starts it is likely
+# to sync with central master before it syncs with site1 master. When
+# central master syncs with site1 master they will share the sid1 and
+# sid3 CSNs, the additonal sid2 CSN hold by site1 master will be the
+# oldest. Central master will not receive the changes made on site1
+# master unless it completely ignores the CSNs presented by central
+# master.
+echo "Using ldapmodify to modify central master..."
+$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
+dn: dc=example,dc=com
+changetype: modify
+add: description
+description: Modify$MNUM
+
+EOF
+RC=$?
+if test $RC != 0 ; then
+       echo "ldapmodify failed ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit $RC
+fi
+
 if test -z "$SM1_PID" ; then
        echo "Restarting site1 master slapd on TCP/IP port $PORT2..."
        cd $SM1_DIR
@@ -1027,6 +1052,44 @@ if test $RC != 0 ; then
        exit $RC
 fi
 
+echo "Using ldapsearch to check that site1 master received central master update..."
+RC=32
+for i in 1 2 3 4 5; do
+       RESULT=`$LDAPSEARCH -H $URI2 \
+               -s base -b "$BASEDN" \
+               "(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
+       if test "x$RESULT$nullOK" = "xOK" ; then
+               RC=0
+               break
+       fi
+       echo "Waiting $i seconds for syncrepl to receive changes..."
+       sleep $i
+done
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit $RC
+fi
+
+echo "Using ldapsearch to check that site2 master received central master update..."
+RC=32
+for i in 1 2 3 4 5; do
+       RESULT=`$LDAPSEARCH -H $URI3 \
+               -s base -b "$BASEDN" \
+               "(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
+       if test "x$RESULT$nullOK" = "xOK" ; then
+               RC=0
+               break
+       fi
+       echo "Waiting $i seconds for syncrepl to receive changes..."
+       sleep $i
+done
+if test $RC != 0 ; then
+       echo "ldapsearch failed ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit $RC
+fi
+
 # Test done, now some more intialization...
 
 echo "Adding syncrepl consumer on central search..."
@@ -1519,8 +1582,6 @@ chmod +x $TESTDIR/checkcsn.sh
 echo "Checking contextCSN after initial replication..."
 . $TESTDIR/checkcsn.sh
 
-MNUM=1
-
 # TEST:
 # Test that updates to the first backend on central master, which should
 # be replicated to all servers actually is so, and that the contextCSN is