]> git.sur5r.net Git - openldap/blob - tests/scripts/test057-memberof-refint
happy belated new year
[openldap] / tests / scripts / test057-memberof-refint
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2010 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