]> git.sur5r.net Git - openldap/blob - tests/scripts/test044-dynlist
Use shell "wait" instead of fixed 10 second wait-for-things-to-die
[openldap] / tests / scripts / test044-dynlist
1 #! /bin/sh
2 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
3 ##
4 ## Copyright 1998-2006 The OpenLDAP Foundation.
5 ## All rights reserved.
6 ##
7 ## Redistribution and use in source and binary forms, with or without
8 ## modification, are permitted only as authorized by the OpenLDAP
9 ## Public License.
10 ##
11 ## A copy of this license is available in the file LICENSE in the
12 ## top-level directory of the distribution or, alternatively, at
13 ## <http://www.OpenLDAP.org/license.html>.
14
15 echo "running defines.sh"
16 . $SRCDIR/scripts/defines.sh
17
18 if test $DYNLIST = "dynlistno" ; then 
19         echo "dynlist overlay not available, test skipped"
20         exit 0
21 fi 
22
23 mkdir -p $TESTDIR $DBDIR1
24
25 echo "Running slapadd to build slapd database..."
26 . $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF
27 $SLAPADD -f $ADDCONF -l $LDIFORDERED
28 RC=$?
29 if test $RC != 0 ; then
30         echo "slapadd failed ($RC)!"
31         exit $RC
32 fi
33
34 . $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1
35 echo "dynlist-attrset   groupOfURLs memberURL" >> $CONF1
36
37 echo "Running slapindex to index slapd database..."
38 $SLAPINDEX -f $CONF1
39 RC=$?
40 if test $RC != 0 ; then
41         echo "warning: slapindex failed ($RC)"
42         echo "  assuming no indexing support"
43 fi
44
45 echo "Starting slapd on TCP/IP port $PORT1..."
46 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
47 PID=$!
48 if test $WAIT != 0 ; then
49     echo PID $PID
50     read foo
51 fi
52 KILLPIDS="$PID"
53
54 sleep 1
55
56 echo "Testing slapd searching..."
57 for i in 0 1 2 3 4 5; do
58         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
59                 '(objectclass=*)' > /dev/null 2>&1
60         RC=$?
61         if test $RC = 0 ; then
62                 break
63         fi
64         echo "Waiting 5 seconds for slapd to start..."
65         sleep 5
66 done
67
68 if test $RC != 0 ; then
69         echo "ldapsearch failed ($RC)!"
70         test $KILLSERVERS != no && kill -HUP $KILLPIDS
71         exit $RC
72 fi
73
74 cat /dev/null > $SEARCHOUT
75
76 LISTDN="ou=Dynamic Lists,$BASEDN"
77 echo "Adding a dynamic list..."
78 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
79         > $TESTOUT 2>&1 << EOMODS
80 dn: $LISTDN
81 objectClass: organizationalUnit
82 ou: Dynamic Lists
83
84 dn: cn=Dynamic List,$LISTDN
85 objectClass: groupOfURLs
86 cn: Dynamic List
87 memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person)
88 EOMODS
89
90 echo "Testing list search of all attrs..."
91 echo "# Testing list search of all attrs..." >> $SEARCHOUT
92 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
93         '(cn=Dynamic List)' '*' \
94         >> $SEARCHOUT 2>&1
95 RC=$?
96 if test $RC != 0 ; then
97         echo "ldapsearch failed ($RC)!"
98         test $KILLSERVERS != no && kill -HUP $KILLPIDS
99         exit $RC
100 fi
101
102 echo "Testing list search of a listed attr..."
103 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
104 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
105         '(cn=Dynamic List)' mail \
106         >> $SEARCHOUT 2>&1
107 RC=$?
108 if test $RC != 0 ; then
109         echo "ldapsearch failed ($RC)!"
110         test $KILLSERVERS != no && kill -HUP $KILLPIDS
111         exit $RC
112 fi
113
114 echo "Testing list search of a non-listed attr..."
115 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
116 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
117         '(cn=Dynamic List)' objectClass \
118         >> $SEARCHOUT 2>&1
119 RC=$?
120 if test $RC != 0 ; then
121         echo "ldapsearch failed ($RC)!"
122         test $KILLSERVERS != no && kill -HUP $KILLPIDS
123         exit $RC
124 fi
125
126 echo "Testing list search with (critical) manageDSAit..."
127 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
128 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
129         '(cn=Dynamic List)' '*' \
130         >> $SEARCHOUT 2>&1
131 RC=$?
132 if test $RC != 0 ; then
133         echo "ldapsearch failed ($RC)!"
134         test $KILLSERVERS != no && kill -HUP $KILLPIDS
135         exit $RC
136 fi
137
138 echo "Testing list compare..."
139 echo "# Testing list compare..." >> $SEARCHOUT
140 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
141         "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
142         >> $SEARCHOUT 2>&1
143 RC=$?
144 case $RC in
145 5)
146         echo "ldapcompare returned FALSE ($RC)!"
147         test $KILLSERVERS != no && kill -HUP $KILLPIDS
148         exit $RC
149         ;;
150 6)
151         echo "ldapcompare returned TRUE ($RC)"
152         ;;
153 0)
154         echo "ldapcompare returned success ($RC)!"
155         test $KILLSERVERS != no && kill -HUP $KILLPIDS
156         exit -1
157         ;;
158 *)
159         echo "ldapcompare failed ($RC)!"
160         test $KILLSERVERS != no && kill -HUP $KILLPIDS
161         exit $RC
162         ;;
163 esac
164 echo "" >> $SEARCHOUT
165
166 echo "Testing list compare (should return FALSE)..."
167 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
168 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
169         "cn=Dynamic List,$LISTDN" "cn:FALSE" \
170         >> $SEARCHOUT 2>&1
171 RC=$?
172 case $RC in
173 5)
174         echo "ldapcompare returned FALSE ($RC)"
175         ;;
176 6)
177         echo "ldapcompare returned TRUE ($RC)!"
178         test $KILLSERVERS != no && kill -HUP $KILLPIDS
179         exit $RC
180         ;;
181 0)
182         echo "ldapcompare returned success ($RC)!"
183         test $KILLSERVERS != no && kill -HUP $KILLPIDS
184         exit -1
185         ;;
186 *)
187         echo "ldapcompare failed ($RC)!"
188         test $KILLSERVERS != no && kill -HUP $KILLPIDS
189         exit $RC
190         ;;
191 esac
192 echo "" >> $SEARCHOUT
193
194 echo "Testing list compare (should return UNDEFINED)..."
195 echo "# Testing list compare (should return UNDEFINED)..." >> $SEARCHOUT
196 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
197         "cn=Dynamic List,$LISTDN" "dc:UNDEFINED" \
198         >> $SEARCHOUT 2>&1
199 RC=$?
200 case $RC in
201 5)
202         echo "ldapcompare returned FALSE ($RC)!"
203         test $KILLSERVERS != no && kill -HUP $KILLPIDS
204         exit $RC
205         ;;
206 6)
207         echo "ldapcompare returned TRUE ($RC)!"
208         test $KILLSERVERS != no && kill -HUP $KILLPIDS
209         exit $RC
210         ;;
211 16|32)
212         echo "ldapcompare returned UNDEFINED ($RC)"
213         ;;
214 0)
215         echo "ldapcompare returned success ($RC)!"
216         test $KILLSERVERS != no && kill -HUP $KILLPIDS
217         exit -1
218         ;;
219 *)
220         echo "ldapcompare failed ($RC)"
221         ;;
222 esac
223 echo "" >> $SEARCHOUT
224
225 echo "Testing list compare with manageDSAit..."
226 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
227 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
228         "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
229         >> $SEARCHOUT 2>&1
230 RC=$?
231 case $RC in
232 5)
233         echo "ldapcompare returned FALSE ($RC)"
234         ;;
235 6)
236         echo "ldapcompare returned TRUE ($RC)!"
237         test $KILLSERVERS != no && kill -HUP $KILLPIDS
238         exit $RC
239         ;;
240 0)
241         echo "ldapcompare returned success ($RC)!"
242         test $KILLSERVERS != no && kill -HUP $KILLPIDS
243         exit -1
244         ;;
245 *)
246         echo "ldapcompare failed ($RC)!"
247         test $KILLSERVERS != no && kill -HUP $KILLPIDS
248         exit $RC
249         ;;
250 esac
251 echo "" >> $SEARCHOUT
252
253 echo "Stopping slapd..."
254 kill -HUP $KILLPIDS
255 wait $KILLPIDS
256
257 echo "Reconfiguring slapd..."
258 . $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1
259 echo "dynlist-attrset   groupOfURLs memberURL member" >> $CONF1
260
261 echo "==========================================================" >> $LOG1
262
263 echo "Starting slapd on TCP/IP port $PORT1..."
264 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
265 PID=$!
266 if test $WAIT != 0 ; then
267     echo PID $PID
268     read foo
269 fi
270 KILLPIDS="$PID"
271
272 sleep 1
273
274 echo "Testing slapd searching..."
275 for i in 0 1 2 3 4 5; do
276         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
277                 '(objectclass=*)' > /dev/null 2>&1
278         RC=$?
279         if test $RC = 0 ; then
280                 break
281         fi
282         echo "Waiting 5 seconds for slapd to start..."
283         sleep 5
284 done
285
286 if test $RC != 0 ; then
287         echo "ldapsearch failed ($RC)!"
288         test $KILLSERVERS != no && kill -HUP $KILLPIDS
289         exit $RC
290 fi
291
292 echo "Adding a dynamic list..."
293 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
294         > $TESTOUT 2>&1 << EOMODS
295 dn: cn=Dynamic List of Members,$LISTDN
296 objectClass: groupOfURLs
297 cn: Dynamic List of Members
298 memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person)
299 EOMODS
300
301 echo "Testing list search of all attrs..."
302 echo "# Testing list search of all attrs..." >> $SEARCHOUT
303 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
304         '(cn=Dynamic List of Members)' '*' \
305         >> $SEARCHOUT 2>&1
306 RC=$?
307 if test $RC != 0 ; then
308         echo "ldapsearch failed ($RC)!"
309         test $KILLSERVERS != no && kill -HUP $KILLPIDS
310         exit $RC
311 fi
312
313 echo "Testing list search of a listed attr..."
314 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
315 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
316         '(cn=Dynamic List of Members)' member \
317         >> $SEARCHOUT 2>&1
318 RC=$?
319 if test $RC != 0 ; then
320         echo "ldapsearch failed ($RC)!"
321         test $KILLSERVERS != no && kill -HUP $KILLPIDS
322         exit $RC
323 fi
324
325 echo "Testing list search of a non-listed attr..."
326 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
327 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
328         '(cn=Dynamic List of Members)' objectClass \
329         >> $SEARCHOUT 2>&1
330 RC=$?
331 if test $RC != 0 ; then
332         echo "ldapsearch failed ($RC)!"
333         test $KILLSERVERS != no && kill -HUP $KILLPIDS
334         exit $RC
335 fi
336
337 echo "Testing list search with (critical) manageDSAit..."
338 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
339 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
340         '(&(cn=Dynamic List of Members)(objectClass=groupOfURLs))' '*' \
341         >> $SEARCHOUT 2>&1
342 RC=$?
343 if test $RC != 0 ; then
344         echo "ldapsearch failed ($RC)!"
345         test $KILLSERVERS != no && kill -HUP $KILLPIDS
346         exit $RC
347 fi
348
349 CMPDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN"
350 echo "Testing list compare..."
351 echo "# Testing list compare..." >> $SEARCHOUT
352 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
353         "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \
354         >> $SEARCHOUT 2>&1
355 RC=$?
356 case $RC in
357 5)
358         echo "ldapcompare returned FALSE ($RC)!"
359         test $KILLSERVERS != no && kill -HUP $KILLPIDS
360         exit $RC
361         ;;
362 6)
363         echo "ldapcompare returned TRUE ($RC)"
364         ;;
365 0)
366         echo "ldapcompare returned success ($RC)!"
367         test $KILLSERVERS != no && kill -HUP $KILLPIDS
368         exit -1
369         ;;
370 *)
371         echo "ldapcompare failed ($RC)!"
372         test $KILLSERVERS != no && kill -HUP $KILLPIDS
373         exit $RC
374         ;;
375 esac
376 echo "" >> $SEARCHOUT
377
378 echo "Testing list compare (should return FALSE)..."
379 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
380 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
381         "cn=Dynamic List of Members,$LISTDN" "member:cn=Foo Bar" \
382         >> $SEARCHOUT 2>&1
383 RC=$?
384 case $RC in
385 5)
386         echo "ldapcompare returned FALSE ($RC)"
387         ;;
388 6)
389         echo "ldapcompare returned TRUE ($RC)!"
390         test $KILLSERVERS != no && kill -HUP $KILLPIDS
391         exit $RC
392         ;;
393 0)
394         echo "ldapcompare returned success ($RC)!"
395         test $KILLSERVERS != no && kill -HUP $KILLPIDS
396         exit -1
397         ;;
398 *)
399         echo "ldapcompare failed ($RC)!"
400         test $KILLSERVERS != no && kill -HUP $KILLPIDS
401         exit $RC
402         ;;
403 esac
404 echo "" >> $SEARCHOUT
405
406 echo "Testing list compare with manageDSAit..."
407 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
408 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
409         "cn=Dynamic List,$LISTDN" "member:$CMPDN" \
410         >> $SEARCHOUT 2>&1
411 RC=$?
412 case $RC in
413 5)
414         echo "ldapcompare returned FALSE ($RC)"
415         ;;
416 6)
417         echo "ldapcompare returned TRUE ($RC)!"
418         test $KILLSERVERS != no && kill -HUP $KILLPIDS
419         exit $RC
420         ;;
421 0)
422         echo "ldapcompare returned success ($RC)!"
423         test $KILLSERVERS != no && kill -HUP $KILLPIDS
424         exit -1
425         ;;
426 *)
427         echo "ldapcompare failed ($RC)!"
428         test $KILLSERVERS != no && kill -HUP $KILLPIDS
429         exit $RC
430         ;;
431 esac
432 echo "" >> $SEARCHOUT
433
434 test $KILLSERVERS != no && kill -HUP $KILLPIDS
435
436 LDIF=$DYNLISTOUT
437
438 echo "Filtering ldapsearch results..."
439 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
440 echo "Filtering original ldif used to create database..."
441 . $LDIFFILTER < $LDIF > $LDIFFLT
442 echo "Comparing filter output..."
443 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
444
445 if test $? != 0 ; then
446         echo "Comparison failed"
447         exit 1
448 fi
449
450 echo ">>>>> Test succeeded"
451
452 test $KILLSERVERS != no && wait
453
454 exit 0