1#! /bin/sh 2# $OpenLDAP: pkg/ldap/tests/scripts/test017-syncreplication-refresh,v 1.33.2.3 2008/02/11 23:26:51 kurt Exp $ 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2008 The OpenLDAP Foundation. 6## All rights reserved. 7## 8## Redistribution and use in source and binary forms, with or without 9## modification, are permitted only as authorized by the OpenLDAP 10## Public License. 11## 12## A copy of this license is available in the file LICENSE in the 13## top-level directory of the distribution or, alternatively, at 14## <http://www.OpenLDAP.org/license.html>. 15 16echo "running defines.sh" 17. $SRCDIR/scripts/defines.sh 18 19if test $SYNCPROV = syncprovno; then 20 echo "Syncrepl provider overlay not available, test skipped" 21 exit 0 22fi 23 24mkdir -p $TESTDIR $DBDIR1 $DBDIR2 25 26# 27# Test replication: 28# - start producer 29# - start consumer 30# - populate over ldap 31# - perform some modifies and deleted 32# - attempt to modify the consumer (referral) 33# - retrieve database over ldap and compare against expected results 34# 35 36echo "Starting producer slapd on TCP/IP port $PORT1..." 37. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 38$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & 39PID=$! 40if test $WAIT != 0 ; then 41 echo PID $PID 42 read foo 43fi 44KILLPIDS="$PID" 45 46sleep 1 47 48echo "Using ldapsearch to check that producer slapd is running..." 49for i in 0 1 2 3 4 5; do 50 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ 51 'objectclass=*' > /dev/null 2>&1 52 RC=$? 53 if test $RC = 0 ; then 54 break 55 fi 56 echo "Waiting 5 seconds for slapd to start..." 57 sleep 5 58done 59 60if test $RC != 0 ; then 61 echo "ldapsearch failed ($RC)!" 62 test $KILLSERVERS != no && kill -HUP $KILLPIDS 63 exit $RC 64fi 65 66echo "Using ldapadd to create the context prefix entry in the producer..." 67$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 68 $LDIFORDEREDCP > /dev/null 2>&1 69RC=$? 70if test $RC != 0 ; then 71 echo "ldapadd failed ($RC)!" 72 test $KILLSERVERS != no && kill -HUP $KILLPIDS 73 exit $RC 74fi 75 76echo "Starting consumer slapd on TCP/IP port $PORT2..." 77. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2 78$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & 79SLAVEPID=$! 80if test $WAIT != 0 ; then 81 echo SLAVEPID $SLAVEPID 82 read foo 83fi 84KILLPIDS="$KILLPIDS $SLAVEPID" 85 86sleep 1 87 88echo "Using ldapsearch to check that consumer slapd is running..." 89for i in 0 1 2 3 4 5; do 90 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ 91 'objectclass=*' > /dev/null 2>&1 92 RC=$? 93 if test $RC = 0 ; then 94 break 95 fi 96 echo "Waiting 5 seconds for slapd to start..." 97 sleep 5 98done 99 100if test $RC != 0 ; then 101 echo "ldapsearch failed ($RC)!" 102 test $KILLSERVERS != no && kill -HUP $KILLPIDS 103 exit $RC 104fi 105 106echo "Using ldapadd to populate the producer directory..." 107$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 108 $LDIFORDEREDNOCP > /dev/null 2>&1 109RC=$? 110if test $RC != 0 ; then 111 echo "ldapadd failed ($RC)!" 112 test $KILLSERVERS != no && kill -HUP $KILLPIDS 113 exit $RC 114fi 115 116echo "Waiting 15 seconds for syncrepl to receive changes..." 117sleep 15 118 119echo "Using ldapmodify to modify producer directory..." 120 121# 122# Do some modifications 123# 124 125$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ 126 $TESTOUT 2>&1 << EOMODS 127dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 128changetype: modify 129add: drink 130drink: Orange Juice 131- 132delete: sn 133sn: Jones 134- 135add: sn 136sn: Jones 137 138dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 139changetype: modify 140replace: drink 141drink: Iced Tea 142drink: Mad Dog 20/20 143 144dn: cn=ITD Staff,ou=Groups,dc=example,dc=com 145changetype: modify 146delete: uniquemember 147uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 148uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 149- 150add: uniquemember 151uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com 152uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 153 154dn: cn=All Staff,ou=Groups,dc=example,dc=com 155changetype: modify 156delete: description 157 158dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 159changetype: add 160objectclass: OpenLDAPperson 161cn: Gern Jensen 162sn: Jensen 163uid: gjensen 164title: Chief Investigator, ITD 165postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 166seealso: cn=All Staff, ou=Groups, dc=example,dc=com 167drink: Coffee 168homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 169description: Very odd 170facsimiletelephonenumber: +1 313 555 7557 171telephonenumber: +1 313 555 8343 172mail: gjensen@mailgw.example.com 173homephone: +1 313 555 8844 174 175dn: ou=Retired, ou=People, dc=example,dc=com 176changetype: add 177objectclass: organizationalUnit 178ou: Retired 179 180dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 181changetype: add 182objectclass: OpenLDAPperson 183cn: Rosco P. Coltrane 184sn: Coltrane 185uid: rosco 186 187dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 188changetype: modrdn 189newrdn: cn=Rosco P. Coltrane 190deleteoldrdn: 1 191newsuperior: ou=Retired, ou=People, dc=example,dc=com 192 193dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 194changetype: delete 195 196EOMODS 197 198RC=$? 199if test $RC != 0 ; then 200 echo "ldapmodify failed ($RC)!" 201 test $KILLSERVERS != no && kill -HUP $KILLPIDS 202 exit $RC 203fi 204 205echo "Waiting 15 seconds for syncrepl to receive changes..." 206sleep 15 207 208echo "Try updating the consumer slapd..." 209$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ 210 $TESTOUT 2>&1 << EOMODS 211dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com 212changetype: modify 213add: description 214description: This write must fail because directed to a shadow context, 215description: unless the chain overlay is configured appropriately ;) 216 217EOMODS 218 219RC=$? 220 221# expect 10 (LDAP_REFERRAL)... 222if test $RC != 10 ; then 223 echo "ldapmodify should have returned referral ($RC)!" 224 test $KILLSERVERS != no && kill -HUP $KILLPIDS 225 exit $RC 226fi 227 228OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp" 229 230echo "Using ldapsearch to read all the entries from the producer..." 231$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 232 '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 233RC=$? 234 235if test $RC != 0 ; then 236 echo "ldapsearch failed at producer ($RC)!" 237 test $KILLSERVERS != no && kill -HUP $KILLPIDS 238 exit $RC 239fi 240 241echo "Using ldapsearch to read all the entries from the consumer..." 242$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 243 '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 244RC=$? 245 246if test $RC != 0 ; then 247 echo "ldapsearch failed at consumer ($RC)!" 248 test $KILLSERVERS != no && kill -HUP $KILLPIDS 249 exit $RC 250fi 251 252test $KILLSERVERS != no && kill -HUP $KILLPIDS 253 254echo "Filtering producer results..." 255. $LDIFFILTER < $MASTEROUT > $MASTERFLT 256echo "Filtering consumer results..." 257. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT 258 259echo "Comparing retrieved entries from producer and consumer..." 260$CMP $MASTERFLT $SLAVEFLT > $CMPOUT 261 262if test $? != 0 ; then 263 echo "test failed - producer and consumer databases differ" 264 exit 1 265fi 266 267echo ">>>>> Test succeeded" 268 269test $KILLSERVERS != no && wait 270 271exit 0 272