Home | History | Annotate | Line # | Download | only in scripts
test043-delta-syncrepl revision 1.1.1.1
      1  1.1  lukem #! /bin/sh
      2  1.1  lukem # $OpenLDAP: pkg/ldap/tests/scripts/test043-delta-syncrepl,v 1.4.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 if test $ACCESSLOG = accesslogno; then 
     29  1.1  lukem 	echo "Accesslog overlay not available, test skipped"
     30  1.1  lukem 	exit 0
     31  1.1  lukem fi 
     32  1.1  lukem 
     33  1.1  lukem mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR2
     34  1.1  lukem 
     35  1.1  lukem #
     36  1.1  lukem # Test replication:
     37  1.1  lukem # - start producer
     38  1.1  lukem # - start consumer
     39  1.1  lukem # - populate over ldap
     40  1.1  lukem # - perform some modifies and deleted
     41  1.1  lukem # - attempt to modify the consumer (referral or chain)
     42  1.1  lukem # - retrieve database over ldap and compare against expected results
     43  1.1  lukem #
     44  1.1  lukem 
     45  1.1  lukem echo "Starting producer slapd on TCP/IP port $PORT1..."
     46  1.1  lukem . $CONFFILTER $BACKEND $MONITORDB < $DSRMASTERCONF > $CONF1
     47  1.1  lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     48  1.1  lukem PID=$!
     49  1.1  lukem if test $WAIT != 0 ; then
     50  1.1  lukem     echo PID $PID
     51  1.1  lukem     read foo
     52  1.1  lukem fi
     53  1.1  lukem KILLPIDS="$PID"
     54  1.1  lukem 
     55  1.1  lukem sleep 1
     56  1.1  lukem 
     57  1.1  lukem echo "Using ldapsearch to check that producer slapd is running..."
     58  1.1  lukem for i in 0 1 2 3 4 5; do
     59  1.1  lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     60  1.1  lukem 		'objectclass=*' > /dev/null 2>&1
     61  1.1  lukem 	RC=$?
     62  1.1  lukem 	if test $RC = 0 ; then
     63  1.1  lukem 		break
     64  1.1  lukem 	fi
     65  1.1  lukem 	echo "Waiting 5 seconds for slapd to start..."
     66  1.1  lukem 	sleep 5
     67  1.1  lukem done
     68  1.1  lukem 
     69  1.1  lukem if test $RC != 0 ; then
     70  1.1  lukem 	echo "ldapsearch failed ($RC)!"
     71  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     72  1.1  lukem 	exit $RC
     73  1.1  lukem fi
     74  1.1  lukem 
     75  1.1  lukem echo "Using ldapadd to create the context prefix entries in the producer..."
     76  1.1  lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
     77  1.1  lukem 	$LDIFORDEREDCP > /dev/null 2>&1
     78  1.1  lukem RC=$?
     79  1.1  lukem if test $RC != 0 ; then
     80  1.1  lukem 	echo "ldapadd failed ($RC)!"
     81  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     82  1.1  lukem 	exit $RC
     83  1.1  lukem fi
     84  1.1  lukem 
     85  1.1  lukem echo "Starting consumer slapd on TCP/IP port $PORT2..."
     86  1.1  lukem . $CONFFILTER $BACKEND $MONITORDB < $DSRSLAVECONF > $CONF2
     87  1.1  lukem $SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
     88  1.1  lukem SLAVEPID=$!
     89  1.1  lukem if test $WAIT != 0 ; then
     90  1.1  lukem     echo SLAVEPID $SLAVEPID
     91  1.1  lukem     read foo
     92  1.1  lukem fi
     93  1.1  lukem KILLPIDS="$KILLPIDS $SLAVEPID"
     94  1.1  lukem 
     95  1.1  lukem sleep 1
     96  1.1  lukem 
     97  1.1  lukem echo "Using ldapsearch to check that consumer slapd is running..."
     98  1.1  lukem for i in 0 1 2 3 4 5; do
     99  1.1  lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
    100  1.1  lukem 		'objectclass=*' > /dev/null 2>&1
    101  1.1  lukem 	RC=$?
    102  1.1  lukem 	if test $RC = 0 ; then
    103  1.1  lukem 		break
    104  1.1  lukem 	fi
    105  1.1  lukem 	echo "Waiting 5 seconds for slapd to start..."
    106  1.1  lukem 	sleep 5
    107  1.1  lukem done
    108  1.1  lukem 
    109  1.1  lukem if test $RC != 0 ; then
    110  1.1  lukem 	echo "ldapsearch failed ($RC)!"
    111  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    112  1.1  lukem 	exit $RC
    113  1.1  lukem fi
    114  1.1  lukem 
    115  1.1  lukem echo "Using ldapadd to populate the producer directory..."
    116  1.1  lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
    117  1.1  lukem 	$LDIFORDEREDNOCP > /dev/null 2>&1
    118  1.1  lukem RC=$?
    119  1.1  lukem if test $RC != 0 ; then
    120  1.1  lukem 	echo "ldapadd failed ($RC)!"
    121  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    122  1.1  lukem 	exit $RC
    123  1.1  lukem fi
    124  1.1  lukem 
    125  1.1  lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
    126  1.1  lukem sleep 15
    127  1.1  lukem 
    128  1.1  lukem echo "Stopping the provider, sleeping 10 seconds and restarting it..."
    129  1.1  lukem kill -HUP "$PID"
    130  1.1  lukem sleep 10
    131  1.1  lukem echo "RESTART" >> $LOG1
    132  1.1  lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
    133  1.1  lukem PID=$!
    134  1.1  lukem if test $WAIT != 0 ; then
    135  1.1  lukem     echo PID $PID
    136  1.1  lukem     read foo
    137  1.1  lukem fi
    138  1.1  lukem KILLPIDS="$PID $SLAVEPID"
    139  1.1  lukem 
    140  1.1  lukem sleep 1
    141  1.1  lukem 
    142  1.1  lukem echo "Using ldapsearch to check that producer slapd is running..."
    143  1.1  lukem for i in 0 1 2 3 4 5; do
    144  1.1  lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
    145  1.1  lukem 		'objectclass=*' > /dev/null 2>&1
    146  1.1  lukem 	RC=$?
    147  1.1  lukem 	if test $RC = 0 ; then
    148  1.1  lukem 		break
    149  1.1  lukem 	fi
    150  1.1  lukem 	echo "Waiting 5 seconds for slapd to start..."
    151  1.1  lukem 	sleep 5
    152  1.1  lukem done
    153  1.1  lukem 
    154  1.1  lukem if test $RC != 0 ; then
    155  1.1  lukem 	echo "ldapsearch failed ($RC)!"
    156  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    157  1.1  lukem 	exit $RC
    158  1.1  lukem fi
    159  1.1  lukem 
    160  1.1  lukem echo "Using ldapmodify to modify producer directory..."
    161  1.1  lukem 
    162  1.1  lukem #
    163  1.1  lukem # Do some modifications
    164  1.1  lukem #
    165  1.1  lukem 
    166  1.1  lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    167  1.1  lukem 	$TESTOUT 2>&1 << EOMODS
    168  1.1  lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    169  1.1  lukem changetype: modify
    170  1.1  lukem add: drink
    171  1.1  lukem drink: Orange Juice
    172  1.1  lukem -
    173  1.1  lukem delete: sn
    174  1.1  lukem sn: Jones
    175  1.1  lukem -
    176  1.1  lukem add: sn
    177  1.1  lukem sn: Jones
    178  1.1  lukem 
    179  1.1  lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    180  1.1  lukem changetype: modify
    181  1.1  lukem replace: drink
    182  1.1  lukem drink: Iced Tea
    183  1.1  lukem 
    184  1.1  lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
    185  1.1  lukem changetype: modify
    186  1.1  lukem delete: uniquemember
    187  1.1  lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    188  1.1  lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    189  1.1  lukem -
    190  1.1  lukem add: uniquemember
    191  1.1  lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
    192  1.1  lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
    193  1.1  lukem 
    194  1.1  lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
    195  1.1  lukem changetype: modify
    196  1.1  lukem delete: description
    197  1.1  lukem 
    198  1.1  lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    199  1.1  lukem changetype: add
    200  1.1  lukem objectclass: OpenLDAPperson
    201  1.1  lukem cn: Gern Jensen
    202  1.1  lukem sn: Jensen
    203  1.1  lukem uid: gjensen
    204  1.1  lukem title: Chief Investigator, ITD
    205  1.1  lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
    206  1.1  lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com
    207  1.1  lukem drink: Coffee
    208  1.1  lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
    209  1.1  lukem description: Very odd
    210  1.1  lukem facsimiletelephonenumber: +1 313 555 7557
    211  1.1  lukem telephonenumber: +1 313 555 8343
    212  1.1  lukem mail: gjensen@mailgw.example.com
    213  1.1  lukem homephone: +1 313 555 8844
    214  1.1  lukem 
    215  1.1  lukem dn: ou=Retired, ou=People, dc=example,dc=com
    216  1.1  lukem changetype: add
    217  1.1  lukem objectclass: organizationalUnit
    218  1.1  lukem ou: Retired
    219  1.1  lukem 
    220  1.1  lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    221  1.1  lukem changetype: add
    222  1.1  lukem objectclass: OpenLDAPperson
    223  1.1  lukem cn: Rosco P. Coltrane
    224  1.1  lukem sn: Coltrane
    225  1.1  lukem uid: rosco
    226  1.1  lukem description: Fat tycoon
    227  1.1  lukem 
    228  1.1  lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
    229  1.1  lukem changetype: modrdn
    230  1.1  lukem newrdn: cn=Rosco P. Coltrane
    231  1.1  lukem deleteoldrdn: 1
    232  1.1  lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com
    233  1.1  lukem 
    234  1.1  lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
    235  1.1  lukem changetype: delete
    236  1.1  lukem 
    237  1.1  lukem EOMODS
    238  1.1  lukem RC=$?
    239  1.1  lukem if test $RC != 0 ; then
    240  1.1  lukem 	echo "ldapmodify failed ($RC)!"
    241  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    242  1.1  lukem 	exit $RC
    243  1.1  lukem fi
    244  1.1  lukem 
    245  1.1  lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
    246  1.1  lukem sleep 15
    247  1.1  lukem 
    248  1.1  lukem echo "Stopping consumer to test recovery..."
    249  1.1  lukem kill -HUP $SLAVEPID
    250  1.1  lukem sleep 10
    251  1.1  lukem 
    252  1.1  lukem echo "Modifying more entries on the producer..."
    253  1.1  lukem $LDAPMODIFY -v -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \
    254  1.1  lukem 	$TESTOUT 2>&1 << EOMODS
    255  1.1  lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
    256  1.1  lukem changetype: delete
    257  1.1  lukem 
    258  1.1  lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
    259  1.1  lukem changetype: modify
    260  1.1  lukem add: drink
    261  1.1  lukem drink: Mad Dog 20/20
    262  1.1  lukem 
    263  1.1  lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
    264  1.1  lukem changetype: add
    265  1.1  lukem objectclass: OpenLDAPperson
    266  1.1  lukem sn: Coltrane
    267  1.1  lukem uid: rosco
    268  1.1  lukem cn: Rosco P. Coltrane
    269  1.1  lukem 
    270  1.1  lukem dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
    271  1.1  lukem changetype: modify
    272  1.1  lukem replace: drink
    273  1.1  lukem 
    274  1.1  lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
    275  1.1  lukem changetype: modrdn
    276  1.1  lukem newrdn: cn=Some Staff
    277  1.1  lukem deleteoldrdn: 1
    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" >> $LOG2
    283  1.1  lukem $SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING >> $LOG2 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 $PORT2 -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 	echo "Waiting 15 seconds for syncrepl to receive changes..."
    314  1.1  lukem 	sleep 15
    315  1.1  lukem fi
    316  1.1  lukem 
    317  1.1  lukem echo "Using ldapsearch to read all the entries from the producer..."
    318  1.1  lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    319  1.1  lukem 	'objectclass=*' \* + > $MASTEROUT 2>&1
    320  1.1  lukem RC=$?
    321  1.1  lukem 
    322  1.1  lukem if test $RC != 0 ; then
    323  1.1  lukem 	echo "ldapsearch failed at producer ($RC)!"
    324  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    325  1.1  lukem 	exit $RC
    326  1.1  lukem fi
    327  1.1  lukem 
    328  1.1  lukem echo "Using ldapsearch to read all the entries from the consumer..."
    329  1.1  lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    330  1.1  lukem 	'objectclass=*' \* + > $SLAVEOUT 2>&1
    331  1.1  lukem RC=$?
    332  1.1  lukem 
    333  1.1  lukem if test $RC != 0 ; then
    334  1.1  lukem 	echo "ldapsearch failed at consumer ($RC)!"
    335  1.1  lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    336  1.1  lukem 	exit $RC
    337  1.1  lukem fi
    338  1.1  lukem 
    339  1.1  lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
    340  1.1  lukem 
    341  1.1  lukem echo "Filtering producer results..."
    342  1.1  lukem . $LDIFFILTER < $MASTEROUT | grep -iv "^auditcontext:" > $MASTERFLT
    343  1.1  lukem echo "Filtering consumer results..."
    344  1.1  lukem . $LDIFFILTER < $SLAVEOUT | grep -iv "^auditcontext:" > $SLAVEFLT
    345  1.1  lukem 
    346  1.1  lukem echo "Comparing retrieved entries from producer and consumer..."
    347  1.1  lukem $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
    348  1.1  lukem 
    349  1.1  lukem if test $? != 0 ; then
    350  1.1  lukem 	echo "test failed - producer and consumer databases differ"
    351  1.1  lukem 	exit 1
    352  1.1  lukem fi
    353  1.1  lukem 
    354  1.1  lukem echo ">>>>> Test succeeded"
    355  1.1  lukem 
    356  1.1  lukem test $KILLSERVERS != no && wait
    357  1.1  lukem 
    358  1.1  lukem exit 0
    359