]> git.sur5r.net Git - openldap/blob - tests/scripts/test057-memberof-refint
Add delays to allow refint to complete
[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-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 "$BACKEND" != "hdb" ; then
26         echo "Test does not support $BACKEND"
27         exit 0
28 fi
29
30 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
31
32 $SLAPPASSWD -g -n >$CONFIGPWF
33 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
34
35 echo "Starting slapd on TCP/IP port $PORT1..."
36 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
37 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
38 PID=$!
39 if test $WAIT != 0 ; then
40     echo PID $PID
41     read foo
42 fi
43 KILLPIDS="$PID"
44
45 sleep 1
46 for i in 0 1 2 3 4 5; do
47         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
48                 'objectclass=*' > /dev/null 2>&1
49         RC=$?
50         if test $RC = 0 ; then
51                 break
52         fi
53         echo "Waiting 5 seconds for slapd to start..."
54         sleep 5
55 done
56 if test $RC != 0 ; then
57         echo "ldapsearch failed ($RC)!"
58         test $KILLSERVERS != no && kill -HUP $KILLPIDS
59         exit $RC
60 fi
61
62 cat /dev/null > $TESTOUT
63
64 if [ "$MEMBEROF" = memberofmod ]; then
65         echo "Inserting memberof overlay on producer..."
66         $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
67 dn: cn=module,cn=config
68 objectClass: olcModuleList
69 cn: module
70 olcModulePath: ../servers/slapd/overlays
71 olcModuleLoad: memberof.la
72 olcModuleLoad: refint.la
73 EOF
74         RC=$?
75         if test $RC != 0 ; then
76                 echo "ldapadd failed for moduleLoad ($RC)!"
77                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
78                 exit $RC
79         fi
80 fi
81
82 echo "Running ldapadd to build slapd config database..."
83 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
84         >> $TESTOUT 2>&1 <<EOF
85 dn: olcDatabase={1}$BACKEND,cn=config
86 objectClass: olcDatabaseConfig
87 objectClass: olc${BACKEND}Config
88 olcDatabase: {1}$BACKEND
89 olcSuffix: $BASEDN
90 olcRootDN: cn=Manager,$BASEDN
91 olcRootPW:: c2VjcmV0
92 olcMonitoring: TRUE
93 olcDbDirectory: $TESTDIR/db.1.a/
94 olcDbCacheSize: 1000
95 olcDbIndex: objectClass eq
96 olcDbIndex: cn pres,eq,sub
97 olcDbIndex: uid pres,eq,sub
98 olcDbIndex: sn pres,eq,sub
99 olcDbMode: 384
100
101 # {0}memberof, {1}$BACKEND, config
102 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
103 objectClass: olcOverlayConfig
104 objectClass: olcMemberOf
105 olcOverlay: {0}memberof
106 olcMemberOfRefInt: TRUE
107 olcMemberOfGroupOC: groupOfNames
108 olcMemberOfMemberAD: member
109 olcMemberOfMemberOfAD: memberOf
110
111 # {1}refint, {1}$BACKEND, config
112 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
113 objectClass: olcOverlayConfig
114 objectClass: olcRefintConfig
115 olcOverlay: {1}refint
116 olcRefintAttribute: member
117 olcRefintAttribute: memberOf
118 EOF
119 RC=$?
120 if test $RC != 0 ; then
121         echo "ldapadd failed ($RC)!"
122         test $KILLSERVERS != no && kill -HUP $KILLPIDS
123         exit $RC
124 fi
125
126 echo "Running ldapadd to build slapd database..."
127 $LDAPADD -h $LOCALHOST -p $PORT1 \
128         -D "cn=Manager,$BASEDN" -w secret \
129         >> $TESTOUT 2>&1 << EOF
130 dn: $BASEDN
131 objectClass: organization
132 objectClass: dcObject
133 o: Example, Inc.
134 dc: example
135
136 dn: ou=People,$BASEDN
137 objectClass: organizationalUnit
138 ou: People
139
140 dn: ou=Groups,$BASEDN
141 objectClass: organizationalUnit
142 ou: Groups
143
144 dn: cn=Roger Rabbit,ou=People,$BASEDN
145 objectClass: inetOrgPerson
146 cn: Roger Rabbit
147 sn: Rabbit
148
149 dn: cn=Baby Herman,ou=People,$BASEDN
150 objectClass: inetOrgPerson
151 cn: Baby Herman
152 sn: Herman
153
154 dn: cn=Cartoonia,ou=Groups,$BASEDN
155 objectClass: groupOfNames
156 cn: Cartoonia
157 member: cn=Roger Rabbit,ou=People,$BASEDN
158 member: cn=Baby Herman,ou=People,$BASEDN
159 EOF
160 RC=$?
161 if test $RC != 0 ; then
162         echo "ldapadd failed ($RC)!"
163         test $KILLSERVERS != no && kill -HUP $KILLPIDS
164         exit $RC
165 fi
166
167 echo "Search the entire database..."
168 echo "# Search the entire database..." >> $SEARCHOUT
169 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
170         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
171 RC=$?
172 if test $RC != 0 ; then
173         echo "ldapsearch failed ($RC)!"
174         test $KILLSERVERS != no && kill -HUP $KILLPIDS
175         exit $RC
176 fi
177
178 echo "Running ldapmodify to rename subtree..."
179 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
180         -D "cn=Manager,$BASEDN" -w secret \
181         >> $TESTOUT 2>&1 << EOF
182 dn: ou=People,$BASEDN
183 changetype: modrdn
184 newrdn: ou=Toons
185 deleteoldrdn:1
186 newsuperior: $BASEDN
187 EOF
188
189 # refint runs in a background thread, so it most likely won't complete
190 # before the modify returns. Give it some time to execute.
191 sleep 1
192
193 echo "Re-search the entire database..."
194 echo "# Re-search the entire database..." >> $SEARCHOUT
195 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
196         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
197 RC=$?
198 if test $RC != 0 ; then
199         echo "ldapsearch failed ($RC)!"
200         test $KILLSERVERS != no && kill -HUP $KILLPIDS
201         exit $RC
202 fi
203
204 echo "Running ldapmodify to rename subtree..."
205 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
206         -D "cn=Manager,$BASEDN" -w secret \
207         >> $TESTOUT 2>&1 << EOF
208 dn: ou=Groups,$BASEDN
209 changetype: modrdn
210 newrdn: ou=Studios
211 deleteoldrdn:1
212 newsuperior: $BASEDN
213 EOF
214
215 sleep 1
216
217 echo "Re-search the entire database..."
218 echo "# Re-search the entire database..." >> $SEARCHOUT
219 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
220         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
221 RC=$?
222 if test $RC != 0 ; then
223         echo "ldapsearch failed ($RC)!"
224         test $KILLSERVERS != no && kill -HUP $KILLPIDS
225         exit $RC
226 fi
227
228 echo "Running ldapdelete to remove a member..."
229 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
230         -D "cn=Manager,$BASEDN" -w secret \
231         >> $TESTOUT 2>&1 << EOF
232 dn: cn=Baby Herman,ou=Toons,$BASEDN
233 changetype: delete
234 EOF
235
236 sleep 1
237
238 echo "Re-search the entire database..."
239 echo "# Re-search the entire database..." >> $SEARCHOUT
240 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
241         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
242 RC=$?
243 if test $RC != 0 ; then
244         echo "ldapsearch failed ($RC)!"
245         test $KILLSERVERS != no && kill -HUP $KILLPIDS
246         exit $RC
247 fi
248
249 test $KILLSERVERS != no && kill -HUP $KILLPIDS
250
251 LDIF=$MEMBEROFREFINTOUT
252
253 echo "Filtering ldapsearch results..."
254 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
255 echo "Filtering original ldif used to create database..."
256 . $LDIFFILTER < $LDIF > $LDIFFLT
257 echo "Comparing filter output..."
258 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
259
260 if test $? != 0 ; then
261         echo "Comparison failed"
262         exit 1
263 fi
264
265 echo ">>>>> Test succeeded"
266
267 test $KILLSERVERS != no && wait
268
269 exit 0