Home | History | Annotate | Line # | Download | only in scripts
test023-refint revision 1.1.1.2
      1 #! /bin/sh
      2 # OpenLDAP: pkg/ldap/tests/scripts/test023-refint,v 1.10.2.6 2009/01/22 00:01:19 kurt Exp
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 2004-2009 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 $REFINT = refintno; then 
     25 	echo "Referential Integrity overlay not available, test skipped"
     26 	exit 0
     27 fi 
     28 
     29 mkdir -p $TESTDIR $DBDIR1
     30 
     31 echo "Running slapadd to build slapd database..."
     32 . $CONFFILTER $BACKEND $MONITORDB < $REFINTCONF > $CONF1
     33 $SLAPADD -f $CONF1 -l $LDIFREFINT
     34 RC=$?
     35 if test $RC != 0 ; then
     36 	echo "slapadd failed ($RC)!"
     37 	exit $RC
     38 fi
     39 
     40 echo "Starting slapd on TCP/IP port $PORT1..."
     41 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     42 PID=$!
     43 if test $WAIT != 0 ; then
     44     echo PID $PID
     45     read foo
     46 fi
     47 KILLPIDS="$PID"
     48 
     49 sleep 1
     50 
     51 echo "Testing slapd referential integrity operations..."
     52 for i in 0 1 2 3 4 5; do
     53 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     54 		'objectclass=*' > /dev/null 2>&1
     55 	RC=$?
     56 	if test $RC = 0 ; then
     57 		break
     58 	fi
     59 	echo "Waiting 5 seconds for slapd to start..."
     60 	sleep 5
     61 done
     62 
     63 if test $RC != 0 ; then
     64 	echo "ldapsearch failed ($RC)!"
     65 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     66 	exit $RC
     67 fi
     68 
     69 echo "Searching unmodified database..."
     70 
     71 $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1
     72 RC=$?
     73 if test $RC != 0 ; then
     74 	echo "ldapsearch failed ($RC)!"
     75 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     76 	exit $RC
     77 fi
     78 
     79 $EGREP_CMD "(manager|secretary):" $SEARCHOUT | sed "s/george/foster/g" | \
     80 	sort > $TESTOUT 2>&1
     81 
     82 echo "Testing modrdn..."
     83 $LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \
     84 	/dev/null 2>&1 'uid=george,ou=users,o=refint' 'uid=foster'
     85 #$LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD  \
     86 #	'uid=george,ou=users,o=refint' 'uid=foster'
     87 
     88 RC=$?
     89 if test $RC != 0 ; then
     90 	echo "ldapmodrdn failed ($RC)!"
     91 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     92 	exit $RC
     93 fi
     94 
     95 sleep 1;
     96 
     97 echo "Using ldapsearch to check dependents new rdn..."
     98 
     99 $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1
    100 
    101 RC=$?
    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 $EGREP_CMD "(manager|secretary):" $SEARCHOUT | sort > $SEARCHFLT 2>&1
    109 
    110 echo "Comparing ldapsearch results against original..."
    111 $CMP $TESTOUT $SEARCHFLT > $CMPOUT
    112 
    113 if test $? != 0 ; then
    114 	echo "comparison failed - modify operations did not complete correctly"
    115 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    116 	exit 1
    117 fi
    118 
    119 echo "Testing delete..."
    120 $LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    121 	$TESTOUT 2>&1 << EDEL
    122 version: 1
    123 dn: uid=foster,ou=users,o=refint
    124 changetype: delete
    125 EDEL
    126 
    127 RC=$?
    128 if test $RC != 0 ; then
    129 	echo "ldapmodify failed ($RC)!"
    130 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    131 	exit $RC
    132 fi
    133 
    134 sleep 1;
    135 
    136 echo "Using ldapsearch to verify dependents have been deleted..."
    137 $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1
    138 
    139 RC=$?
    140 if test $RC != 0 ; then
    141 	echo "ldapsearch failed ($RC)!"
    142 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    143 	exit $RC
    144 fi
    145 
    146 $EGREP_CMD "(manager|secretary):" $SEARCHOUT > $SEARCHFLT 2>&1
    147 
    148 RC=`grep -c foster $SEARCHFLT`
    149 if test $RC != 0 ; then
    150 	echo "dependent modify failed - dependents were not deleted"
    151 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    152 	exit 1
    153 fi
    154 
    155 echo "Additional test records..."
    156 
    157 $LDAPADD -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    158 	$TESTOUT 2>&1 << ETEST
    159 dn: uid=special,ou=users,o=refint
    160 objectClass: inetOrgPerson
    161 objectClass: extensibleObject
    162 uid: special
    163 sn: special
    164 cn: special
    165 businessCategory: nothing
    166 carLicense: FOO
    167 departmentNumber: 933
    168 displayName: special
    169 employeeNumber: 41491
    170 employeeType: vendor
    171 givenName: special
    172 member: uid=alice,ou=users,o=refint
    173 ETEST
    174 
    175 RC=$?
    176 if test $RC != 0 ; then
    177 	echo "ldapadd failed ($RC)!"
    178 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    179 	exit $RC
    180 fi
    181 
    182 echo "Testing delete when referential attribute is a MUST..."
    183 $LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    184 	$TESTOUT 2>&1 << EDEL
    185 version: 1
    186 dn: uid=alice,ou=users,o=refint
    187 changetype: delete
    188 EDEL
    189 
    190 RC=$?
    191 if test $RC != 0 ; then
    192 	echo "ldapmodify failed ($RC)!"
    193 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    194 	exit $RC
    195 fi
    196 
    197 if test $BACKEND = "hdb" ; then
    198 	$LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    199 		$TESTOUT 2>&1 << EDEL
    200 version: 1
    201 dn: cn=group,o=refint
    202 changetype: add
    203 objectClass: groupOfNames
    204 cn: group
    205 member: uid=bill,ou=users,o=refint
    206 member: uid=bob,ou=users,o=refint
    207 member: uid=dave,ou=users,o=refint
    208 member: uid=jorge,ou=users,o=refint
    209 member: uid=theman,ou=users,o=refint
    210 member: uid=richard,ou=users,o=refint
    211 EDEL
    212 
    213 	RC=$?
    214 	if test $RC != 0 ; then
    215 		echo "ldapmodify failed ($RC)!"
    216 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    217 		exit $RC
    218 	fi
    219 
    220 	sleep 1;
    221 
    222 	$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \
    223 		manager member secretary > $SEARCHOUT 2>&1
    224 	RC=$?
    225 	if test $RC != 0 ; then
    226 		echo "ldapsearch failed ($RC)!"
    227 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    228 		exit $RC
    229 	fi
    230 
    231 	$EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \
    232 		| sed "s/ou=users/ou=people/g" | \
    233 		sort > $TESTOUT 2>&1
    234 
    235 	echo "testing subtree rename"
    236 	$LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    237 		/dev/null 2>&1 'ou=users,o=refint' 'ou=people'
    238 	RC=$?
    239 	if test $RC != 0 ; then
    240 		echo "ldapmodrdn failed ($RC)!"
    241 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    242 		exit $RC
    243 	fi
    244 
    245 	sleep 1;
    246 
    247 	echo "Using ldapsearch to check dependents new rdn..."
    248 
    249 	$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \
    250 		manager member secretary > $SEARCHOUT 2>&1
    251 
    252 	RC=$?
    253 	if test $RC != 0 ; then
    254 		echo "ldapsearch failed ($RC)!"
    255 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    256 		exit $RC
    257 	fi
    258 
    259 	$EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \
    260 		| sort > $SEARCHFLT 2>&1
    261 
    262 	echo "Comparing ldapsearch results against original..."
    263 	$CMP $TESTOUT $SEARCHFLT > $CMPOUT
    264 
    265 	if test $? != 0 ; then
    266 		echo "comparison failed - subtree rename operations did not complete correctly"
    267 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    268 		exit 1
    269 	fi
    270 fi
    271 
    272 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    273 
    274 echo ">>>>> Test succeeded"
    275 
    276 test $KILLSERVERS != no && wait
    277 
    278 exit 0
    279