Home | History | Annotate | Line # | Download | only in scripts
test054-syncreplication-parallel-load revision 1.1.1.7
      1      1.1     lukem #! /bin/sh
      2  1.1.1.3      tron # $OpenLDAP$
      3      1.1     lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4      1.1     lukem ##
      5  1.1.1.7  christos ## Copyright 1998-2020 The OpenLDAP Foundation.
      6      1.1     lukem ## All rights reserved.
      7      1.1     lukem ##
      8      1.1     lukem ## Redistribution and use in source and binary forms, with or without
      9      1.1     lukem ## modification, are permitted only as authorized by the OpenLDAP
     10      1.1     lukem ## Public License.
     11      1.1     lukem ##
     12      1.1     lukem ## A copy of this license is available in the file LICENSE in the
     13      1.1     lukem ## top-level directory of the distribution or, alternatively, at
     14      1.1     lukem ## <http://www.OpenLDAP.org/license.html>.
     15      1.1     lukem 
     16      1.1     lukem echo "running defines.sh"
     17      1.1     lukem . $SRCDIR/scripts/defines.sh
     18      1.1     lukem 
     19      1.1     lukem if test $SYNCPROV = syncprovno; then 
     20      1.1     lukem 	echo "Syncrepl provider overlay not available, test skipped"
     21      1.1     lukem 	exit 0
     22      1.1     lukem fi 
     23      1.1     lukem 
     24      1.1     lukem mkdir -p $TESTDIR $DBDIR1 $DBDIR4
     25      1.1     lukem 
     26      1.1     lukem #
     27      1.1     lukem # Test replication:
     28  1.1.1.3      tron # - start provider
     29      1.1     lukem # - start consumer
     30      1.1     lukem # - populate over ldap
     31      1.1     lukem # - perform some modifies and deleted
     32      1.1     lukem # - attempt to modify the consumer (referral or chain)
     33      1.1     lukem # - retrieve database over ldap and compare against expected results
     34      1.1     lukem #
     35      1.1     lukem 
     36  1.1.1.3      tron echo "Starting provider slapd on TCP/IP port $PORT1..."
     37      1.1     lukem . $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1
     38      1.1     lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     39      1.1     lukem PID=$!
     40      1.1     lukem if test $WAIT != 0 ; then
     41      1.1     lukem     echo PID $PID
     42      1.1     lukem     read foo
     43      1.1     lukem fi
     44      1.1     lukem KILLPIDS="$PID"
     45      1.1     lukem 
     46      1.1     lukem sleep 1
     47      1.1     lukem 
     48  1.1.1.3      tron echo "Using ldapsearch to check that provider slapd is running..."
     49      1.1     lukem for i in 0 1 2 3 4 5; do
     50      1.1     lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     51      1.1     lukem 		'objectclass=*' > /dev/null 2>&1
     52      1.1     lukem 	RC=$?
     53      1.1     lukem 	if test $RC = 0 ; then
     54      1.1     lukem 		break
     55      1.1     lukem 	fi
     56      1.1     lukem 	echo "Waiting 5 seconds for slapd to start..."
     57      1.1     lukem 	sleep 5
     58      1.1     lukem done
     59      1.1     lukem 
     60      1.1     lukem if test $RC != 0 ; then
     61      1.1     lukem 	echo "ldapsearch failed ($RC)!"
     62      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     63      1.1     lukem 	exit $RC
     64      1.1     lukem fi
     65      1.1     lukem 
     66  1.1.1.3      tron echo "Using ldapadd to create the context prefix entry in the provider..."
     67      1.1     lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
     68      1.1     lukem 	$LDIFORDEREDCP > /dev/null 2>&1
     69      1.1     lukem RC=$?
     70      1.1     lukem if test $RC != 0 ; then
     71      1.1     lukem 	echo "ldapadd failed ($RC)!"
     72      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     73      1.1     lukem 	exit $RC
     74      1.1     lukem fi
     75      1.1     lukem 
     76      1.1     lukem echo "Starting consumer slapd on TCP/IP port $PORT4..."
     77      1.1     lukem . $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4
     78      1.1     lukem $SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 &
     79      1.1     lukem SLAVEPID=$!
     80      1.1     lukem if test $WAIT != 0 ; then
     81      1.1     lukem     echo SLAVEPID $SLAVEPID
     82      1.1     lukem     read foo
     83      1.1     lukem fi
     84      1.1     lukem KILLPIDS="$KILLPIDS $SLAVEPID"
     85      1.1     lukem 
     86      1.1     lukem sleep 1
     87      1.1     lukem 
     88      1.1     lukem echo "Using ldapsearch to check that consumer slapd is running..."
     89      1.1     lukem for i in 0 1 2 3 4 5; do
     90      1.1     lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \
     91      1.1     lukem 		'objectclass=*' > /dev/null 2>&1
     92      1.1     lukem 	RC=$?
     93      1.1     lukem 	if test $RC = 0 ; then
     94      1.1     lukem 		break
     95      1.1     lukem 	fi
     96      1.1     lukem 	echo "Waiting 5 seconds for slapd to start..."
     97      1.1     lukem 	sleep 5
     98      1.1     lukem done
     99      1.1     lukem 
    100      1.1     lukem if test $RC != 0 ; then
    101      1.1     lukem 	echo "ldapsearch failed ($RC)!"
    102      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    103      1.1     lukem 	exit $RC
    104      1.1     lukem fi
    105      1.1     lukem 
    106      1.1     lukem MORELDIF=$TESTDIR/more.ldif
    107      1.1     lukem TESTOUT1=$TESTDIR/testout1.out
    108      1.1     lukem TESTOUT2=$TESTDIR/testout2.out
    109      1.1     lukem sed -e 's/[Oo][Uu]=/ou=More /g' -e 's/^[Oo][Uu]: /ou: More /' \
    110      1.1     lukem 	-e 's/cn=Manager/cn=More Manager/g' \
    111      1.1     lukem 	-e 's/^cn: Manager/cn: More Manager/' \
    112      1.1     lukem 	$LDIFORDEREDNOCP > $MORELDIF
    113      1.1     lukem 
    114  1.1.1.3      tron echo "Using ldapadd to populate the provider directory..."
    115      1.1     lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
    116      1.1     lukem 	$LDIFORDEREDNOCP > $TESTOUT1 2>&1  &
    117      1.1     lukem C1PID=$!
    118      1.1     lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
    119      1.1     lukem 	$MORELDIF > $TESTOUT2 2>&1 &
    120      1.1     lukem C2PID=$!
    121      1.1     lukem wait $C1PID $C2PID
    122      1.1     lukem 
    123      1.1     lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    124      1.1     lukem sleep $SLEEP1
    125      1.1     lukem 
    126      1.1     lukem echo "Stopping the provider, sleeping 10 seconds and restarting it..."
    127      1.1     lukem kill -HUP "$PID"
    128      1.1     lukem wait $PID
    129      1.1     lukem sleep 10
    130      1.1     lukem echo "RESTART" >> $LOG1
    131      1.1     lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
    132      1.1     lukem PID=$!
    133      1.1     lukem if test $WAIT != 0 ; then
    134      1.1     lukem     echo PID $PID
    135      1.1     lukem     read foo
    136      1.1     lukem fi
    137      1.1     lukem KILLPIDS="$PID $SLAVEPID"
    138      1.1     lukem 
    139      1.1     lukem sleep 1
    140      1.1     lukem 
    141  1.1.1.3      tron echo "Using ldapsearch to check that provider slapd is running..."
    142      1.1     lukem for i in 0 1 2 3 4 5; do
    143      1.1     lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
    144      1.1     lukem 		'objectclass=*' > /dev/null 2>&1
    145      1.1     lukem 	RC=$?
    146      1.1     lukem 	if test $RC = 0 ; then
    147      1.1     lukem 		break
    148      1.1     lukem 	fi
    149      1.1     lukem 	echo "Waiting 5 seconds for slapd to start..."
    150      1.1     lukem 	sleep 5
    151      1.1     lukem done
    152      1.1     lukem 
    153      1.1     lukem if test $RC != 0 ; then
    154      1.1     lukem 	echo "ldapsearch failed ($RC)!"
    155      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    156      1.1     lukem 	exit $RC
    157      1.1     lukem fi
    158      1.1     lukem 
    159      1.1     lukem echo "Waiting 10 seconds to let the system catch up"
    160      1.1     lukem sleep 10
    161      1.1     lukem 
    162  1.1.1.3      tron echo "Using ldapmodify to modify provider directory..."
    163      1.1     lukem 
    164      1.1     lukem #
    165      1.1     lukem # Do some modifications
    166      1.1     lukem #
    167      1.1     lukem 
    168      1.1     lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    169      1.1     lukem 	$TESTOUT 2>&1 << EOMODS
    170      1.1     lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    171      1.1     lukem changetype: modify
    172      1.1     lukem add: drink
    173      1.1     lukem drink: Orange Juice
    174      1.1     lukem -
    175      1.1     lukem delete: sn
    176      1.1     lukem sn: Jones
    177      1.1     lukem -
    178      1.1     lukem add: sn
    179      1.1     lukem sn: Jones
    180      1.1     lukem 
    181      1.1     lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    182      1.1     lukem changetype: modify
    183      1.1     lukem replace: drink
    184      1.1     lukem drink: Iced Tea
    185      1.1     lukem 
    186      1.1     lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
    187      1.1     lukem changetype: modify
    188      1.1     lukem delete: uniquemember
    189      1.1     lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    190      1.1     lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    191      1.1     lukem -
    192      1.1     lukem add: uniquemember
    193      1.1     lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
    194      1.1     lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    195      1.1     lukem 
    196      1.1     lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
    197      1.1     lukem changetype: modify
    198      1.1     lukem delete: description
    199      1.1     lukem 
    200      1.1     lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    201      1.1     lukem changetype: add
    202      1.1     lukem objectclass: OpenLDAPperson
    203      1.1     lukem cn: Gern Jensen
    204      1.1     lukem sn: Jensen
    205      1.1     lukem uid: gjensen
    206      1.1     lukem title: Chief Investigator, ITD
    207      1.1     lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
    208      1.1     lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com
    209      1.1     lukem drink: Coffee
    210      1.1     lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
    211      1.1     lukem description: Very odd
    212      1.1     lukem facsimiletelephonenumber: +1 313 555 7557
    213      1.1     lukem telephonenumber: +1 313 555 8343
    214      1.1     lukem mail: gjensen@mailgw.example.com
    215      1.1     lukem homephone: +1 313 555 8844
    216      1.1     lukem 
    217      1.1     lukem dn: ou=Retired, ou=People, dc=example,dc=com
    218      1.1     lukem changetype: add
    219      1.1     lukem objectclass: organizationalUnit
    220      1.1     lukem ou: Retired
    221      1.1     lukem 
    222      1.1     lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    223      1.1     lukem changetype: add
    224      1.1     lukem objectclass: OpenLDAPperson
    225      1.1     lukem cn: Rosco P. Coltrane
    226      1.1     lukem sn: Coltrane
    227      1.1     lukem uid: rosco
    228      1.1     lukem description: Fat tycoon
    229      1.1     lukem 
    230      1.1     lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    231      1.1     lukem changetype: modrdn
    232      1.1     lukem newrdn: cn=Rosco P. Coltrane
    233      1.1     lukem deleteoldrdn: 1
    234      1.1     lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com
    235      1.1     lukem 
    236      1.1     lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    237      1.1     lukem changetype: delete
    238      1.1     lukem 
    239      1.1     lukem EOMODS
    240      1.1     lukem 
    241      1.1     lukem RC=$?
    242      1.1     lukem if test $RC != 0 ; then
    243      1.1     lukem 	echo "ldapmodify failed ($RC)!"
    244      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    245      1.1     lukem 	exit $RC
    246      1.1     lukem fi
    247      1.1     lukem 
    248      1.1     lukem echo "Using ldappasswd to change some passwords..."
    249      1.1     lukem $LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
    250      1.1     lukem 	'cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \
    251      1.1     lukem 	> $TESTOUT 2>&1
    252      1.1     lukem RC=$?
    253      1.1     lukem if test $RC != 0 ; then
    254      1.1     lukem 	echo "ldapmodify failed ($RC)!"
    255      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    256      1.1     lukem 	exit $RC
    257      1.1     lukem fi
    258      1.1     lukem 
    259      1.1     lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    260      1.1     lukem sleep $SLEEP1
    261      1.1     lukem 
    262      1.1     lukem echo "Stopping consumer to test recovery..."
    263      1.1     lukem kill -HUP $SLAVEPID
    264      1.1     lukem wait $SLAVEPID
    265      1.1     lukem 
    266  1.1.1.3      tron echo "Modifying more entries on the provider..."
    267      1.1     lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \
    268      1.1     lukem 	$TESTOUT 2>&1 << EOMODS
    269      1.1     lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
    270      1.1     lukem changetype: delete
    271      1.1     lukem 
    272      1.1     lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    273      1.1     lukem changetype: modify
    274      1.1     lukem add: drink
    275      1.1     lukem drink: Mad Dog 20/20
    276      1.1     lukem 
    277      1.1     lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
    278      1.1     lukem changetype: add
    279      1.1     lukem objectclass: OpenLDAPperson
    280      1.1     lukem sn: Coltrane
    281      1.1     lukem uid: rosco
    282      1.1     lukem cn: Rosco P. Coltrane
    283      1.1     lukem 
    284      1.1     lukem EOMODS
    285      1.1     lukem 
    286      1.1     lukem echo "Restarting consumer..."
    287      1.1     lukem echo "RESTART" >> $LOG4
    288      1.1     lukem $SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING >> $LOG4 2>&1 &
    289      1.1     lukem SLAVEPID=$!
    290      1.1     lukem if test $WAIT != 0 ; then
    291      1.1     lukem     echo SLAVEPID $SLAVEPID
    292      1.1     lukem     read foo
    293      1.1     lukem fi
    294      1.1     lukem KILLPIDS="$PID $SLAVEPID"
    295      1.1     lukem 
    296      1.1     lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    297      1.1     lukem sleep $SLEEP1
    298      1.1     lukem 
    299      1.1     lukem if test ! $BACKLDAP = "ldapno" ; then
    300      1.1     lukem 	echo "Try updating the consumer slapd..."
    301      1.1     lukem 	$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD > \
    302      1.1     lukem 		$TESTOUT 2>&1 << EOMODS
    303      1.1     lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
    304      1.1     lukem changetype: modify
    305      1.1     lukem add: description
    306      1.1     lukem description: This write must fail because directed to a shadow context,
    307      1.1     lukem description: unless the chain overlay is configured appropriately ;)
    308      1.1     lukem 
    309      1.1     lukem EOMODS
    310      1.1     lukem 
    311      1.1     lukem 	RC=$?
    312      1.1     lukem 	if test $RC != 0 ; then
    313      1.1     lukem 		echo "ldapmodify failed ($RC)!"
    314      1.1     lukem 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    315      1.1     lukem 		exit $RC
    316      1.1     lukem 	fi
    317      1.1     lukem 
    318      1.1     lukem 	# ITS#4964
    319      1.1     lukem 	echo "Trying to change some passwords on the consumer..."
    320      1.1     lukem 	$LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD \
    321      1.1     lukem 		'cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \
    322      1.1     lukem 		> $TESTOUT 2>&1
    323      1.1     lukem 	RC=$?
    324      1.1     lukem 	if test $RC != 0 ; then
    325      1.1     lukem 		echo "ldapmodify failed ($RC)!"
    326      1.1     lukem 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    327      1.1     lukem 		exit $RC
    328      1.1     lukem 	fi
    329      1.1     lukem 
    330      1.1     lukem 	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    331      1.1     lukem 	sleep $SLEEP1
    332      1.1     lukem fi
    333      1.1     lukem 
    334      1.1     lukem OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp"
    335      1.1     lukem 
    336  1.1.1.3      tron echo "Using ldapsearch to read all the entries from the provider..."
    337      1.1     lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    338      1.1     lukem 	'(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1
    339      1.1     lukem RC=$?
    340      1.1     lukem 
    341      1.1     lukem if test $RC != 0 ; then
    342  1.1.1.3      tron 	echo "ldapsearch failed at provider ($RC)!"
    343      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    344      1.1     lukem 	exit $RC
    345      1.1     lukem fi
    346      1.1     lukem 
    347      1.1     lukem echo "Using ldapsearch to read all the entries from the consumer..."
    348      1.1     lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \
    349      1.1     lukem 	'(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1
    350      1.1     lukem RC=$?
    351      1.1     lukem 
    352      1.1     lukem if test $RC != 0 ; then
    353      1.1     lukem 	echo "ldapsearch failed at consumer ($RC)!"
    354      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    355      1.1     lukem 	exit $RC
    356      1.1     lukem fi
    357      1.1     lukem 
    358      1.1     lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
    359      1.1     lukem 
    360  1.1.1.3      tron echo "Filtering provider results..."
    361  1.1.1.2      adam $LDIFFILTER < $MASTEROUT > $MASTERFLT
    362      1.1     lukem echo "Filtering consumer results..."
    363  1.1.1.2      adam $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
    364      1.1     lukem 
    365  1.1.1.3      tron echo "Comparing retrieved entries from provider and consumer..."
    366      1.1     lukem $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
    367      1.1     lukem 
    368      1.1     lukem if test $? != 0 ; then
    369  1.1.1.3      tron 	echo "test failed - provider and consumer databases differ"
    370      1.1     lukem 	exit 1
    371      1.1     lukem fi
    372      1.1     lukem 
    373      1.1     lukem echo ">>>>> Test succeeded"
    374      1.1     lukem 
    375      1.1     lukem test $KILLSERVERS != no && wait
    376      1.1     lukem 
    377      1.1     lukem exit 0
    378