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