1#! /bin/sh 2# OpenLDAP: pkg/ldap/tests/scripts/test019-syncreplication-cascade,v 1.19.2.9 2009/03/05 23:32:21 quanah Exp 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2009 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 16if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then 17 echo "Test does not support $BACKEND" 18 exit 0 19fi 20 21echo "running defines.sh" 22. $SRCDIR/scripts/defines.sh 23 24if test $SYNCPROV = syncprovno; then 25 echo "Syncrepl provider overlay not available, test skipped" 26 exit 0 27fi 28 29mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 $DBDIR4 $DBDIR5 $DBDIR6 30 31# 32# Test replication: 33# - start master 34# - start slave 35# - populate over ldap 36# - perform some modifies and deleted 37# - retrieve database over ldap and compare against expected results 38# 39 40echo "Starting master slapd on TCP/IP port $PORT1..." 41. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 42$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & 43PID=$! 44if test $WAIT != 0 ; then 45 echo PID $PID 46 read foo 47fi 48KILLPIDS="$PID" 49 50sleep 1 51 52echo "Using ldapsearch to check that master slapd (pid=$PID) is running..." 53for i in 0 1 2 3 4 5; do 54 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ 55 'objectclass=*' > /dev/null 2>&1 56 RC=$? 57 if test $RC = 0 ; then 58 break 59 fi 60 echo "Waiting 5 seconds for slapd to start..." 61 sleep 5 62done 63 64if test $RC != 0 ; then 65 echo "ldapsearch failed ($RC)!" 66 test $KILLSERVERS != no && kill -HUP $KILLPIDS 67 exit $RC 68fi 69 70echo "Using ldapadd to create the context prefix entry in the master..." 71$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 72 $LDIFORDEREDCP > /dev/null 2>&1 73RC=$? 74if test $RC != 0 ; then 75 echo "ldapadd failed ($RC)!" 76 test $KILLSERVERS != no && kill -HUP $KILLPIDS 77 exit $RC 78fi 79 80echo "Starting R1 slave slapd on TCP/IP port $PORT2..." 81. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2 82$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & 83SLAVEPID=$! 84if test $WAIT != 0 ; then 85 echo SLAVE R1 PID $SLAVEPID 86 read foo 87fi 88KILLPIDS="$KILLPIDS $SLAVEPID" 89 90sleep 1 91 92echo "Using ldapsearch to check that R1 slave slapd (pid=$SLAVEPID) is running..." 93for i in 0 1 2 3 4 5; do 94 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ 95 'objectclass=*' > /dev/null 2>&1 96 RC=$? 97 if test $RC = 0 ; then 98 break 99 fi 100 echo "Waiting 5 seconds for R1 slapd to start..." 101 sleep 5 102done 103 104if test $RC != 0 ; then 105 echo "ldapsearch failed ($RC)!" 106 test $KILLSERVERS != no && kill -HUP $KILLPIDS 107 exit $RC 108fi 109 110echo "Starting R2 slave slapd on TCP/IP port $PORT3..." 111. $CONFFILTER $BACKEND $MONITORDB < $R2SRSLAVECONF > $CONF3 112$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & 113SLAVEPID=$! 114if test $WAIT != 0 ; then 115 echo SLAVE R2 PID $SLAVEPID 116 read foo 117fi 118KILLPIDS="$KILLPIDS $SLAVEPID" 119 120sleep 1 121 122echo "Using ldapsearch to check that R2 slave slapd (pid=$SLAVEPID) is running..." 123for i in 0 1 2 3 4 5; do 124 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ 125 'objectclass=*' > /dev/null 2>&1 126 RC=$? 127 if test $RC = 0 ; then 128 break 129 fi 130 echo "Waiting 5 seconds for R2 slave slapd to start..." 131 sleep 5 132done 133 134if test $RC != 0 ; then 135 echo "ldapsearch failed ($RC)!" 136 test $KILLSERVERS != no && kill -HUP $KILLPIDS 137 exit $RC 138fi 139 140echo "Starting P1 slave slapd on TCP/IP port $PORT4..." 141. $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4 142$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 & 143SLAVEPID=$! 144if test $WAIT != 0 ; then 145 echo SLAVE P1 PID $SLAVEPID 146 read foo 147fi 148KILLPIDS="$KILLPIDS $SLAVEPID" 149 150sleep 1 151 152echo "Using ldapsearch to check that P1 slave slapd (pid=$SLAVEPID) is running..." 153for i in 0 1 2 3 4 5; do 154 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \ 155 'objectclass=*' > /dev/null 2>&1 156 RC=$? 157 if test $RC = 0 ; then 158 break 159 fi 160 echo "Waiting 5 seconds for P1 slave slapd to start..." 161 sleep 5 162done 163 164if test $RC != 0 ; then 165 echo "ldapsearch failed ($RC)!" 166 test $KILLSERVERS != no && kill -HUP $KILLPIDS 167 exit $RC 168fi 169 170echo "Starting P2 slave slapd on TCP/IP port $PORT5..." 171. $CONFFILTER $BACKEND $MONITORDB < $P2SRSLAVECONF > $CONF5 172$SLAPD -f $CONF5 -h $URI5 -d $LVL $TIMING > $LOG5 2>&1 & 173SLAVEPID=$! 174if test $WAIT != 0 ; then 175 echo SLAVE P2 PID $SLAVEPID 176 read foo 177fi 178KILLPIDS="$KILLPIDS $SLAVEPID" 179 180sleep 1 181 182echo "Using ldapsearch to check that P2 slave slapd (pid=$SLAVEPID) is running..." 183for i in 0 1 2 3 4 5; do 184 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT5 \ 185 'objectclass=*' > /dev/null 2>&1 186 RC=$? 187 if test $RC = 0 ; then 188 break 189 fi 190 echo "Waiting 5 seconds for P2 slave slapd to start..." 191 sleep 5 192done 193 194if test $RC != 0 ; then 195 echo "ldapsearch failed ($RC)!" 196 test $KILLSERVERS != no && kill -HUP $KILLPIDS 197 exit $RC 198fi 199 200echo "Starting P3 slave slapd on TCP/IP port $PORT6..." 201. $CONFFILTER $BACKEND $MONITORDB < $P3SRSLAVECONF > $CONF6 202$SLAPD -f $CONF6 -h $URI6 -d $LVL $TIMING > $LOG6 2>&1 & 203SLAVEPID=$! 204if test $WAIT != 0 ; then 205 echo SLAVE P3 PID $SLAVEPID 206 read foo 207fi 208KILLPIDS="$KILLPIDS $SLAVEPID" 209 210sleep 1 211 212echo "Using ldapsearch to check that P3 slave slapd (pid=$SLAVEPID) is running..." 213for i in 0 1 2 3 4 5; do 214 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT6 \ 215 'objectclass=*' > /dev/null 2>&1 216 RC=$? 217 if test $RC = 0 ; then 218 break 219 fi 220 echo "Waiting 5 seconds for P3 slave slapd to start..." 221 sleep 5 222done 223 224if test $RC != 0 ; then 225 echo "ldapsearch failed ($RC)!" 226 test $KILLSERVERS != no && kill -HUP $KILLPIDS 227 exit $RC 228fi 229 230echo "Using ldapadd to populate the master directory..." 231$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 232 $LDIFORDEREDNOCP > /dev/null 2>&1 233RC=$? 234if test $RC != 0 ; then 235 echo "ldapadd failed ($RC)!" 236 test $KILLSERVERS != no && kill -HUP $KILLPIDS 237 exit $RC 238fi 239 240echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." 241sleep $SLEEP2 242 243echo "Using ldapmodify to modify master directory..." 244 245# 246# Do some modifications 247# 248 249$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ 250 $TESTOUT 2>&1 << EOMODS 251dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 252changetype: modify 253add: drink 254drink: Orange Juice 255- 256delete: sn 257sn: Jones 258- 259add: sn 260sn: Jones 261 262dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 263changetype: modify 264replace: drink 265drink: Iced Tea 266drink: Mad Dog 20/20 267 268dn: cn=ITD Staff,ou=Groups,dc=example,dc=com 269changetype: modify 270delete: uniquemember 271uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 272uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 273- 274add: uniquemember 275uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com 276uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 277 278dn: cn=All Staff,ou=Groups,dc=example,dc=com 279changetype: modify 280delete: description 281 282dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 283changetype: add 284objectclass: OpenLDAPperson 285cn: Gern Jensen 286sn: Jensen 287uid: gjensen 288title: Chief Investigator, ITD 289postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 290seealso: cn=All Staff, ou=Groups, dc=example,dc=com 291drink: Coffee 292homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 293description: Very odd 294facsimiletelephonenumber: +1 313 555 7557 295telephonenumber: +1 313 555 8343 296mail: gjensen@mailgw.example.com 297homephone: +1 313 555 8844 298 299dn: ou=Retired, ou=People, dc=example,dc=com 300changetype: add 301objectclass: organizationalUnit 302ou: Retired 303 304dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 305changetype: add 306objectclass: OpenLDAPperson 307cn: Rosco P. Coltrane 308sn: Coltrane 309uid: rosco 310 311dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 312changetype: modrdn 313newrdn: cn=Rosco P. Coltrane 314deleteoldrdn: 1 315newsuperior: ou=Retired, ou=People, dc=example,dc=com 316 317dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 318changetype: delete 319 320dn: dc=testdomain1,dc=example,dc=com 321changetype: modrdn 322newrdn: dc=itsdomain1 323deleteoldrdn: 1 324 325dn: dc=itsdomain1,dc=example,dc=com 326changetype: modify 327replace: description 328description: Example, Inc. ITS test domain 329 330dn: dc=testdomain2,dc=example,dc=com 331changetype: modrdn 332newrdn: dc=itsdomain2 333deleteoldrdn: 1 334 335EOMODS 336 337RC=$? 338if test $RC != 0 ; then 339 echo "ldapmodify failed ($RC)!" 340 test $KILLSERVERS != no && kill -HUP $KILLPIDS 341 exit $RC 342fi 343 344echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." 345sleep $SLEEP2 346 347echo "Performing modify alone on provider..." 348$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ 349 $TESTOUT 2>&1 << EOMODS 350dn: dc=itsdomain2,dc=example,dc=com 351changetype: modify 352replace: description 353description: Example, Inc. itsdomain2 test domain 354 355EOMODS 356 357RC=$? 358if test $RC != 0 ; then 359 echo "ldapmodify failed ($RC)!" 360 test $KILLSERVERS != no && kill -HUP $KILLPIDS 361 exit $RC 362fi 363 364echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." 365sleep $SLEEP2 366 367echo "Using ldapsearch to read all the entries from the master..." 368$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 369 '(objectClass=*)' '*' entryCSN > $MASTEROUT 2>&1 370RC=$? 371 372if test $RC != 0 ; then 373 echo "ldapsearch failed at master ($RC)!" 374 test $KILLSERVERS != no && kill -HUP $KILLPIDS 375 exit $RC 376fi 377 378echo "Using ldapsearch to read all the entries from the R1 slave..." 379$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 380 '(objectClass=*)' '*' entryCSN > $SERVER2OUT 2>&1 381RC=$? 382 383if test $RC != 0 ; then 384 echo "ldapsearch failed at R1 slave ($RC)!" 385 test $KILLSERVERS != no && kill -HUP $KILLPIDS 386 exit $RC 387fi 388 389echo "Using ldapsearch to read all the entries from the R2 slave..." 390$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ 391 '(objectClass=*)' '*' entryCSN > $SERVER3OUT 2>&1 392RC=$? 393 394if test $RC != 0 ; then 395 echo "ldapsearch failed at R2 slave ($RC)!" 396 test $KILLSERVERS != no && kill -HUP $KILLPIDS 397 exit $RC 398fi 399 400echo "Using ldapsearch to read all the entries from the P1 slave..." 401$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ 402 '(objectClass=*)' '*' entryCSN > $SERVER4OUT 2>&1 403RC=$? 404 405if test $RC != 0 ; then 406 echo "ldapsearch failed at P1 slave ($RC)!" 407 test $KILLSERVERS != no && kill -HUP $KILLPIDS 408 exit $RC 409fi 410 411echo "Using ldapsearch to read all the entries from the P2 slave..." 412$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT5 \ 413 '(objectClass=*)' '*' entryCSN > $SERVER5OUT 2>&1 414RC=$? 415 416if test $RC != 0 ; then 417 echo "ldapsearch failed at P2 slave ($RC)!" 418 test $KILLSERVERS != no && kill -HUP $KILLPIDS 419 exit $RC 420fi 421 422echo "Using ldapsearch to read all the entries from the P3 slave..." 423$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT6 \ 424 '(objectClass=*)' '*' entryCSN > $SERVER6OUT 2>&1 425RC=$? 426 427if test $RC != 0 ; then 428 echo "ldapsearch failed at P3 slave ($RC)!" 429 test $KILLSERVERS != no && kill -HUP $KILLPIDS 430 exit $RC 431fi 432 433test $KILLSERVERS != no && kill -HUP $KILLPIDS 434 435echo "Filtering master ldapsearch results..." 436. $LDIFFILTER < $MASTEROUT > $MASTERFLT 437echo "Filtering R1 slave ldapsearch results..." 438. $LDIFFILTER < $SERVER2OUT > $SERVER2FLT 439echo "Filtering R2 slave ldapsearch results..." 440. $LDIFFILTER < $SERVER3OUT > $SERVER3FLT 441echo "Filtering P1 slave ldapsearch results..." 442. $LDIFFILTER < $SERVER4OUT > $SERVER4FLT 443echo "Filtering P2 slave ldapsearch results..." 444. $LDIFFILTER < $SERVER5OUT > $SERVER5FLT 445echo "Filtering P3 slave ldapsearch results..." 446. $LDIFFILTER < $SERVER6OUT > $SERVER6FLT 447 448echo "Comparing retrieved entries from master and R1 slave..." 449$CMP $MASTERFLT $SERVER2FLT > $CMPOUT 450 451if test $? != 0 ; then 452 echo "test failed - master and R1 slave databases differ" 453 exit 1 454fi 455 456echo "Comparing retrieved entries from master and R2 slave..." 457$CMP $MASTERFLT $SERVER3FLT > $CMPOUT 458 459if test $? != 0 ; then 460 echo "test failed - master and R2 slave databases differ" 461 exit 1 462fi 463 464echo "Comparing retrieved entries from master and P1 slave..." 465$CMP $MASTERFLT $SERVER4FLT > $CMPOUT 466 467if test $? != 0 ; then 468 echo "test failed - master and P1 slave databases differ" 469 exit 1 470fi 471 472echo "Comparing retrieved entries from master and P2 slave..." 473$CMP $MASTERFLT $SERVER5FLT > $CMPOUT 474 475if test $? != 0 ; then 476 echo "test failed - master and P2 slave databases differ" 477 exit 1 478fi 479 480echo "Comparing retrieved entries from master and P3 slave..." 481$CMP $MASTERFLT $SERVER6FLT > $CMPOUT 482 483if test $? != 0 ; then 484 echo "test failed - master and P3 slave databases differ" 485 exit 1 486fi 487 488echo ">>>>> Test succeeded" 489 490test $KILLSERVERS != no && wait 491 492exit 0 493