Home | History | Annotate | Line # | Download | only in scripts
test057-memberof-refint revision 1.1
      1 #! /bin/sh
      2 # OpenLDAP: pkg/ldap/tests/scripts/test057-memberof-refint,v 1.3.2.4 2009/10/30 23:56:26 quanah Exp
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 1998-2009 The OpenLDAP Foundation.
      6 ## Portions Copyright 2008 Red Hat, Inc. 
      7 ## All rights reserved.
      8 ##
      9 ## Redistribution and use in source and binary forms, with or without
     10 ## modification, are permitted only as authorized by the OpenLDAP
     11 ## Public License.
     12 ##
     13 ## A copy of this license is available in the file LICENSE in the
     14 ## top-level directory of the distribution or, alternatively, at
     15 ## <http://www.OpenLDAP.org/license.html>.
     16 
     17 echo "running defines.sh"
     18 . $SRCDIR/scripts/defines.sh
     19 
     20 if test $MEMBEROF = memberofno; then 
     21 	echo "Memberof overlay not available, test skipped"
     22 	exit 0
     23 fi 
     24 
     25 if test $REFINT = refintno; then 
     26 	echo "Referential Integrity overlay not available, test skipped"
     27 	exit 0
     28 fi 
     29 
     30 if test "$BACKEND" != "hdb" ; then
     31 	echo "Test does not support $BACKEND"
     32 	exit 0
     33 fi
     34 
     35 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
     36 
     37 $SLAPPASSWD -g -n >$CONFIGPWF
     38 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
     39 
     40 echo "Starting slapd on TCP/IP port $PORT1..."
     41 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
     42 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     43 PID=$!
     44 if test $WAIT != 0 ; then
     45     echo PID $PID
     46     read foo
     47 fi
     48 KILLPIDS="$PID"
     49 
     50 sleep 1
     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 if test $RC != 0 ; then
     62 	echo "ldapsearch failed ($RC)!"
     63 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     64 	exit $RC
     65 fi
     66 
     67 cat /dev/null > $TESTOUT
     68 
     69 if [ "$MEMBEROF" = memberofmod ]; then
     70 	echo "Inserting memberof overlay on producer..."
     71 	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
     72 dn: cn=module,cn=config
     73 objectClass: olcModuleList
     74 cn: module
     75 olcModulePath: ../servers/slapd/overlays
     76 olcModuleLoad: memberof.la
     77 olcModuleLoad: refint.la
     78 EOF
     79 	RC=$?
     80 	if test $RC != 0 ; then
     81 		echo "ldapadd failed for moduleLoad ($RC)!"
     82 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
     83 		exit $RC
     84 	fi
     85 fi
     86 
     87 echo "Running ldapadd to build slapd config database..."
     88 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
     89 	>> $TESTOUT 2>&1 <<EOF
     90 dn: olcDatabase={1}$BACKEND,cn=config
     91 objectClass: olcDatabaseConfig
     92 objectClass: olc${BACKEND}Config
     93 olcDatabase: {1}$BACKEND
     94 olcSuffix: $BASEDN
     95 olcRootDN: cn=Manager,$BASEDN
     96 olcRootPW:: c2VjcmV0
     97 olcMonitoring: TRUE
     98 olcDbDirectory: $TESTDIR/db.1.a/
     99 olcDbCacheSize: 1000
    100 olcDbIndex: objectClass eq
    101 olcDbIndex: cn pres,eq,sub
    102 olcDbIndex: uid pres,eq,sub
    103 olcDbIndex: sn pres,eq,sub
    104 olcDbMode: 384
    105 
    106 # {0}memberof, {1}$BACKEND, config
    107 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
    108 objectClass: olcOverlayConfig
    109 objectClass: olcMemberOf
    110 olcOverlay: {0}memberof
    111 olcMemberOfRefInt: TRUE
    112 olcMemberOfGroupOC: groupOfNames
    113 olcMemberOfMemberAD: member
    114 olcMemberOfMemberOfAD: memberOf
    115 
    116 # {1}refint, {1}$BACKEND, config
    117 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
    118 objectClass: olcOverlayConfig
    119 objectClass: olcRefintConfig
    120 olcOverlay: {1}refint
    121 olcRefintAttribute: member
    122 olcRefintAttribute: memberOf
    123 EOF
    124 RC=$?
    125 if test $RC != 0 ; then
    126 	echo "ldapadd failed ($RC)!"
    127 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    128 	exit $RC
    129 fi
    130 
    131 echo "Running ldapadd to build slapd database..."
    132 $LDAPADD -h $LOCALHOST -p $PORT1 \
    133 	-D "cn=Manager,$BASEDN" -w secret \
    134 	>> $TESTOUT 2>&1 << EOF
    135 dn: $BASEDN
    136 objectClass: organization
    137 objectClass: dcObject
    138 o: Example, Inc.
    139 dc: example
    140 
    141 dn: ou=People,$BASEDN
    142 objectClass: organizationalUnit
    143 ou: People
    144 
    145 dn: ou=Groups,$BASEDN
    146 objectClass: organizationalUnit
    147 ou: Groups
    148 
    149 dn: cn=Roger Rabbit,ou=People,$BASEDN
    150 objectClass: inetOrgPerson
    151 cn: Roger Rabbit
    152 sn: Rabbit
    153 
    154 dn: cn=Baby Herman,ou=People,$BASEDN
    155 objectClass: inetOrgPerson
    156 cn: Baby Herman
    157 sn: Herman
    158 
    159 dn: cn=Cartoonia,ou=Groups,$BASEDN
    160 objectClass: groupOfNames
    161 cn: Cartoonia
    162 member: cn=Roger Rabbit,ou=People,$BASEDN
    163 member: cn=Baby Herman,ou=People,$BASEDN
    164 EOF
    165 RC=$?
    166 if test $RC != 0 ; then
    167 	echo "ldapadd failed ($RC)!"
    168 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    169 	exit $RC
    170 fi
    171 
    172 echo "Search the entire database..."
    173 echo "# Search the entire database..." >> $SEARCHOUT
    174 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    175 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    176 RC=$?
    177 if test $RC != 0 ; then
    178 	echo "ldapsearch failed ($RC)!"
    179 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    180 	exit $RC
    181 fi
    182 
    183 echo "Running ldapmodify to rename subtree..."
    184 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
    185 	-D "cn=Manager,$BASEDN" -w secret \
    186 	>> $TESTOUT 2>&1 << EOF
    187 dn: ou=People,$BASEDN
    188 changetype: modrdn
    189 newrdn: ou=Toons
    190 deleteoldrdn:1
    191 newsuperior: $BASEDN
    192 EOF
    193 
    194 # refint runs in a background thread, so it most likely won't complete
    195 # before the modify returns. Give it some time to execute.
    196 sleep 1
    197 
    198 echo "Re-search the entire database..."
    199 echo "# Re-search the entire database..." >> $SEARCHOUT
    200 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    201 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    202 RC=$?
    203 if test $RC != 0 ; then
    204 	echo "ldapsearch failed ($RC)!"
    205 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    206 	exit $RC
    207 fi
    208 
    209 echo "Running ldapmodify to rename subtree..."
    210 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
    211 	-D "cn=Manager,$BASEDN" -w secret \
    212 	>> $TESTOUT 2>&1 << EOF
    213 dn: ou=Groups,$BASEDN
    214 changetype: modrdn
    215 newrdn: ou=Studios
    216 deleteoldrdn:1
    217 newsuperior: $BASEDN
    218 EOF
    219 
    220 sleep 1
    221 
    222 echo "Re-search the entire database..."
    223 echo "# Re-search the entire database..." >> $SEARCHOUT
    224 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    225 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    226 RC=$?
    227 if test $RC != 0 ; then
    228 	echo "ldapsearch failed ($RC)!"
    229 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    230 	exit $RC
    231 fi
    232 
    233 echo "Running ldapdelete to remove a member..."
    234 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
    235 	-D "cn=Manager,$BASEDN" -w secret \
    236 	>> $TESTOUT 2>&1 << EOF
    237 dn: cn=Baby Herman,ou=Toons,$BASEDN
    238 changetype: delete
    239 EOF
    240 
    241 sleep 1
    242 
    243 echo "Re-search the entire database..."
    244 echo "# Re-search the entire database..." >> $SEARCHOUT
    245 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
    246 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    247 RC=$?
    248 if test $RC != 0 ; then
    249 	echo "ldapsearch failed ($RC)!"
    250 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    251 	exit $RC
    252 fi
    253 
    254 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    255 
    256 LDIF=$MEMBEROFREFINTOUT
    257 
    258 echo "Filtering ldapsearch results..."
    259 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    260 echo "Filtering original ldif used to create database..."
    261 . $LDIFFILTER < $LDIF > $LDIFFLT
    262 echo "Comparing filter output..."
    263 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    264 
    265 if test $? != 0 ; then
    266 	echo "Comparison failed"
    267 	exit 1
    268 fi
    269 
    270 echo ">>>>> Test succeeded"
    271 
    272 test $KILLSERVERS != no && wait
    273 
    274 exit 0
    275