Home | History | Annotate | Line # | Download | only in scripts
test019-syncreplication-cascade revision 1.1.1.1.2.2
      1 #! /bin/sh
      2 # $OpenLDAP: pkg/ldap/tests/scripts/test019-syncreplication-cascade,v 1.19.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 
     16 if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then
     17 	echo "Test does not support $BACKEND"
     18 	exit 0
     19 fi
     20 
     21 echo "running defines.sh"
     22 . $SRCDIR/scripts/defines.sh
     23 
     24 if test $SYNCPROV = syncprovno; then 
     25 	echo "Syncrepl provider overlay not available, test skipped"
     26 	exit 0
     27 fi 
     28 
     29 mkdir -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 
     40 echo "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 &
     43 PID=$!
     44 if test $WAIT != 0 ; then
     45     echo PID $PID
     46     read foo
     47 fi
     48 KILLPIDS="$PID"
     49 
     50 sleep 1
     51 
     52 echo "Using ldapsearch to check that master slapd (pid=$PID) is running..."
     53 for 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
     62 done
     63 
     64 if test $RC != 0 ; then
     65 	echo "ldapsearch failed ($RC)!"
     66 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     67 	exit $RC
     68 fi
     69 
     70 echo "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
     73 RC=$?
     74 if test $RC != 0 ; then
     75 	echo "ldapadd failed ($RC)!"
     76 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     77 	exit $RC
     78 fi
     79 
     80 echo "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 &
     83 SLAVEPID=$!
     84 if test $WAIT != 0 ; then
     85     echo SLAVE R1 PID $SLAVEPID
     86     read foo
     87 fi
     88 KILLPIDS="$KILLPIDS $SLAVEPID"
     89 
     90 sleep 1
     91 
     92 echo "Using ldapsearch to check that R1 slave slapd (pid=$SLAVEPID) is running..."
     93 for 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
    102 done
    103 
    104 if test $RC != 0 ; then
    105 	echo "ldapsearch failed ($RC)!"
    106 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    107 	exit $RC
    108 fi
    109 
    110 echo "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 &
    113 SLAVEPID=$!
    114 if test $WAIT != 0 ; then
    115     echo SLAVE R2 PID $SLAVEPID
    116     read foo
    117 fi
    118 KILLPIDS="$KILLPIDS $SLAVEPID"
    119 
    120 sleep 1
    121 
    122 echo "Using ldapsearch to check that R2 slave slapd (pid=$SLAVEPID) is running..."
    123 for 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
    132 done
    133 
    134 if test $RC != 0 ; then
    135 	echo "ldapsearch failed ($RC)!"
    136 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    137 	exit $RC
    138 fi
    139 
    140 echo "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 &
    143 SLAVEPID=$!
    144 if test $WAIT != 0 ; then
    145     echo SLAVE P1 PID $SLAVEPID
    146     read foo
    147 fi
    148 KILLPIDS="$KILLPIDS $SLAVEPID"
    149 
    150 sleep 1
    151 
    152 echo "Using ldapsearch to check that P1 slave slapd (pid=$SLAVEPID) is running..."
    153 for 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
    162 done
    163 
    164 if test $RC != 0 ; then
    165 	echo "ldapsearch failed ($RC)!"
    166 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    167 	exit $RC
    168 fi
    169 
    170 echo "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 &
    173 SLAVEPID=$!
    174 if test $WAIT != 0 ; then
    175     echo SLAVE P2 PID $SLAVEPID
    176     read foo
    177 fi
    178 KILLPIDS="$KILLPIDS $SLAVEPID"
    179 
    180 sleep 1
    181 
    182 echo "Using ldapsearch to check that P2 slave slapd (pid=$SLAVEPID) is running..."
    183 for 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
    192 done
    193 
    194 if test $RC != 0 ; then
    195 	echo "ldapsearch failed ($RC)!"
    196 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    197 	exit $RC
    198 fi
    199 
    200 echo "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 &
    203 SLAVEPID=$!
    204 if test $WAIT != 0 ; then
    205     echo SLAVE P3 PID $SLAVEPID
    206     read foo
    207 fi
    208 KILLPIDS="$KILLPIDS $SLAVEPID"
    209 
    210 sleep 1
    211 
    212 echo "Using ldapsearch to check that P3 slave slapd (pid=$SLAVEPID) is running..."
    213 for 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
    222 done
    223 
    224 if test $RC != 0 ; then
    225 	echo "ldapsearch failed ($RC)!"
    226 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    227 	exit $RC
    228 fi
    229 
    230 echo "Using ldapadd to populate the master directory..."
    231 $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
    232 	$LDIFORDEREDNOCP > /dev/null 2>&1
    233 RC=$?
    234 if test $RC != 0 ; then
    235 	echo "ldapadd failed ($RC)!"
    236 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    237 	exit $RC
    238 fi
    239 
    240 echo "Waiting 25 seconds for syncrepl to receive changes..."
    241 sleep 25
    242 
    243 echo "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
    251 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    252 changetype: modify
    253 add: drink
    254 drink: Orange Juice
    255 -
    256 delete: sn
    257 sn: Jones
    258 -
    259 add: sn
    260 sn: Jones
    261 
    262 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    263 changetype: modify
    264 replace: drink
    265 drink: Iced Tea
    266 drink: Mad Dog 20/20
    267 
    268 dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
    269 changetype: modify
    270 delete: uniquemember
    271 uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    272 uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    273 -
    274 add: uniquemember
    275 uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
    276 uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    277 
    278 dn: cn=All Staff,ou=Groups,dc=example,dc=com
    279 changetype: modify
    280 delete: description
    281 
    282 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    283 changetype: add
    284 objectclass: OpenLDAPperson
    285 cn: Gern Jensen
    286 sn: Jensen
    287 uid: gjensen
    288 title: Chief Investigator, ITD
    289 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
    290 seealso: cn=All Staff, ou=Groups, dc=example,dc=com
    291 drink: Coffee
    292 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
    293 description: Very odd
    294 facsimiletelephonenumber: +1 313 555 7557
    295 telephonenumber: +1 313 555 8343
    296 mail: gjensen@mailgw.example.com
    297 homephone: +1 313 555 8844
    298 
    299 dn: ou=Retired, ou=People, dc=example,dc=com
    300 changetype: add
    301 objectclass: organizationalUnit
    302 ou: Retired
    303 
    304 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    305 changetype: add
    306 objectclass: OpenLDAPperson
    307 cn: Rosco P. Coltrane
    308 sn: Coltrane
    309 uid: rosco
    310 
    311 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    312 changetype: modrdn
    313 newrdn: cn=Rosco P. Coltrane
    314 deleteoldrdn: 1
    315 newsuperior: ou=Retired, ou=People, dc=example,dc=com
    316 
    317 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    318 changetype: delete
    319 
    320 EOMODS
    321 
    322 RC=$?
    323 if test $RC != 0 ; then
    324 	echo "ldapmodify failed ($RC)!"
    325 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    326 	exit $RC
    327 fi
    328 
    329 echo "Waiting 25 seconds for syncrepl to receive changes..."
    330 sleep 25
    331 
    332 echo "Using ldapsearch to read all the entries from the master..."
    333 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    334 	'objectclass=*' > $MASTEROUT 2>&1
    335 RC=$?
    336 
    337 if test $RC != 0 ; then
    338 	echo "ldapsearch failed at master ($RC)!"
    339 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    340 	exit $RC
    341 fi
    342 
    343 echo "Using ldapsearch to read all the entries from the R1 slave..."
    344 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    345 	'objectclass=*' > $SERVER2OUT 2>&1
    346 RC=$?
    347 
    348 if test $RC != 0 ; then
    349 	echo "ldapsearch failed at R1 slave ($RC)!"
    350 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    351 	exit $RC
    352 fi
    353 
    354 echo "Using ldapsearch to read all the entries from the R2 slave..."
    355 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \
    356 	'objectclass=*' > $SERVER3OUT 2>&1
    357 RC=$?
    358 
    359 if test $RC != 0 ; then
    360 	echo "ldapsearch failed at R2 slave ($RC)!"
    361 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    362 	exit $RC
    363 fi
    364 
    365 echo "Using ldapsearch to read all the entries from the P1 slave..."
    366 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \
    367 	'objectclass=*' > $SERVER4OUT 2>&1
    368 RC=$?
    369 
    370 if test $RC != 0 ; then
    371 	echo "ldapsearch failed at P1 slave ($RC)!"
    372 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    373 	exit $RC
    374 fi
    375 
    376 echo "Using ldapsearch to read all the entries from the P2 slave..."
    377 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT5 \
    378 	'objectclass=*' > $SERVER5OUT 2>&1
    379 RC=$?
    380 
    381 if test $RC != 0 ; then
    382 	echo "ldapsearch failed at P2 slave ($RC)!"
    383 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    384 	exit $RC
    385 fi
    386 
    387 echo "Using ldapsearch to read all the entries from the P3 slave..."
    388 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT6 \
    389 	'objectclass=*' > $SERVER6OUT 2>&1
    390 RC=$?
    391 
    392 if test $RC != 0 ; then
    393 	echo "ldapsearch failed at P3 slave ($RC)!"
    394 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    395 	exit $RC
    396 fi
    397 
    398 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    399 
    400 echo "Filtering master ldapsearch results..."
    401 . $LDIFFILTER < $MASTEROUT > $MASTERFLT
    402 echo "Filtering R1 slave ldapsearch results..."
    403 . $LDIFFILTER < $SERVER2OUT > $SERVER2FLT
    404 echo "Filtering R2 slave ldapsearch results..."
    405 . $LDIFFILTER < $SERVER3OUT > $SERVER3FLT
    406 echo "Filtering P1 slave ldapsearch results..."
    407 . $LDIFFILTER < $SERVER4OUT > $SERVER4FLT
    408 echo "Filtering P2 slave ldapsearch results..."
    409 . $LDIFFILTER < $SERVER5OUT > $SERVER5FLT
    410 echo "Filtering P3 slave ldapsearch results..."
    411 . $LDIFFILTER < $SERVER6OUT > $SERVER6FLT
    412 
    413 echo "Comparing retrieved entries from master and R1 slave..."
    414 $CMP $MASTERFLT $SERVER2FLT > $CMPOUT
    415 
    416 if test $? != 0 ; then
    417 	echo "test failed - master and R1 slave databases differ"
    418 	exit 1
    419 fi
    420 
    421 echo "Comparing retrieved entries from master and R2 slave..."
    422 $CMP $MASTERFLT $SERVER3FLT > $CMPOUT
    423 
    424 if test $? != 0 ; then
    425 	echo "test failed - master and R2 slave databases differ"
    426 	exit 1
    427 fi
    428 
    429 echo "Comparing retrieved entries from master and P1 slave..."
    430 $CMP $MASTERFLT $SERVER4FLT > $CMPOUT
    431 
    432 if test $? != 0 ; then
    433 	echo "test failed - master and P1 slave databases differ"
    434 	exit 1
    435 fi
    436 
    437 echo "Comparing retrieved entries from master and P2 slave..."
    438 $CMP $MASTERFLT $SERVER5FLT > $CMPOUT
    439 
    440 if test $? != 0 ; then
    441 	echo "test failed - master and P2 slave databases differ"
    442 	exit 1
    443 fi
    444 
    445 echo "Comparing retrieved entries from master and P3 slave..."
    446 $CMP $MASTERFLT $SERVER6FLT > $CMPOUT
    447 
    448 if test $? != 0 ; then
    449 	echo "test failed - master and P3 slave databases differ"
    450 	exit 1
    451 fi
    452 
    453 echo ">>>>> Test succeeded"
    454 
    455 test $KILLSERVERS != no && wait
    456 
    457 exit 0
    458