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