]> git.sur5r.net Git - openldap/blob - tests/scripts/test044-dynlist
add dyngroup compare functionality to dynlist
[openldap] / tests / scripts / test044-dynlist
1 #! /bin/sh
2 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
3 ##
4 ## Copyright 1998-2005 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 echo "Running slapindex to index slapd database..."
35 . $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1
36 $SLAPINDEX -f $CONF1
37 RC=$?
38 if test $RC != 0 ; then
39         echo "warning: slapindex failed ($RC)"
40         echo "  assuming no indexing support"
41 fi
42
43 echo "Starting slapd on TCP/IP port $PORT1..."
44 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
45 PID=$!
46 if test $WAIT != 0 ; then
47     echo PID $PID
48     read foo
49 fi
50 KILLPIDS="$PID"
51
52 sleep 1
53
54 echo "Testing slapd searching..."
55 for i in 0 1 2 3 4 5; do
56         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
57                 '(objectclass=*)' > /dev/null 2>&1
58         RC=$?
59         if test $RC = 0 ; then
60                 break
61         fi
62         echo "Waiting 5 seconds for slapd to start..."
63         sleep 5
64 done
65
66 if test $RC != 0 ; then
67         echo "ldapsearch failed ($RC)!"
68         test $KILLSERVERS != no && kill -HUP $KILLPIDS
69         exit $RC
70 fi
71
72 cat /dev/null > $SEARCHOUT
73
74 LISTDN="ou=Dynamic Lists,$BASEDN"
75 echo "Adding a dynamic list..."
76 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
77         > $TESTOUT 2>&1 << EOMODS
78 dn: $LISTDN
79 objectClass: organizationalUnit
80 ou: Dynamic Lists
81
82 dn: cn=Dynamic List,$LISTDN
83 objectClass: groupOfURLs
84 cn: Dynamic List
85 memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person)
86 EOMODS
87
88 echo "Testing list search of all attrs..."
89 echo "# Testing list search of all attrs..." >> $SEARCHOUT
90 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
91         '(cn=Dynamic List)' '*' \
92         >> $SEARCHOUT 2>&1
93 RC=$?
94 if test $RC != 0 ; then
95         echo "ldapsearch failed ($RC)!"
96         test $KILLSERVERS != no && kill -HUP $KILLPIDS
97         exit $RC
98 fi
99
100 echo "Testing list search of a listed attr..."
101 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
102 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
103         '(cn=Dynamic List)' mail \
104         >> $SEARCHOUT 2>&1
105 RC=$?
106 if test $RC != 0 ; then
107         echo "ldapsearch failed ($RC)!"
108         test $KILLSERVERS != no && kill -HUP $KILLPIDS
109         exit $RC
110 fi
111
112 echo "Testing list search of a non-listed attr..."
113 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
114 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
115         '(cn=Dynamic List)' objectClass \
116         >> $SEARCHOUT 2>&1
117 RC=$?
118 if test $RC != 0 ; then
119         echo "ldapsearch failed ($RC)!"
120         test $KILLSERVERS != no && kill -HUP $KILLPIDS
121         exit $RC
122 fi
123
124 echo "Testing list search with (critical) manageDSAit..."
125 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
126 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
127         '(cn=Dynamic List)' '*' \
128         >> $SEARCHOUT 2>&1
129 RC=$?
130 if test $RC != 0 ; then
131         echo "ldapsearch failed ($RC)!"
132         test $KILLSERVERS != no && kill -HUP $KILLPIDS
133         exit $RC
134 fi
135
136 echo "Testing list compare..."
137 echo "# Testing list compare..." >> $SEARCHOUT
138 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
139         "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
140         >> $SEARCHOUT 2>&1
141 RC=$?
142 case $RC in
143 5)
144         echo "ldapcompare returned FALSE ($RC)!"
145         test $KILLSERVERS != no && kill -HUP $KILLPIDS
146         exit $RC
147         ;;
148 6)
149         echo "ldapcompare returned TRUE ($RC)"
150         ;;
151 0)
152         echo "ldapcompare returned success ($RC)!"
153         test $KILLSERVERS != no && kill -HUP $KILLPIDS
154         exit $RC
155         ;;
156 *)
157         echo "ldapcompare failed ($RC)!"
158         test $KILLSERVERS != no && kill -HUP $KILLPIDS
159         exit $RC
160         ;;
161 esac
162 echo "" >> $SEARCHOUT
163
164 echo "Testing list compare with manageDSAit..."
165 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
166 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
167         "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
168         >> $SEARCHOUT 2>&1
169 RC=$?
170 case $RC in
171 5)
172         echo "ldapcompare returned FALSE ($RC)"
173         ;;
174 6)
175         echo "ldapcompare returned TRUE ($RC)!"
176         test $KILLSERVERS != no && kill -HUP $KILLPIDS
177         exit $RC
178         ;;
179 0)
180         echo "ldapcompare returned success ($RC)!"
181         test $KILLSERVERS != no && kill -HUP $KILLPIDS
182         exit $RC
183         ;;
184 *)
185         echo "ldapcompare failed ($RC)!"
186         test $KILLSERVERS != no && kill -HUP $KILLPIDS
187         exit $RC
188         ;;
189 esac
190 echo "" >> $SEARCHOUT
191
192 echo "Stopping slapd..."
193 kill -HUP $KILLPIDS
194 wait $KILLPIDS
195
196 echo "Reconfiguring slapd..."
197 echo "dynlist-member-ad member" >> $CONF1
198
199 echo "==========================================================" >> $LOG1
200
201 echo "Starting slapd on TCP/IP port $PORT1..."
202 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
203 PID=$!
204 if test $WAIT != 0 ; then
205     echo PID $PID
206     read foo
207 fi
208 KILLPIDS="$PID"
209
210 sleep 1
211
212 echo "Testing slapd searching..."
213 for i in 0 1 2 3 4 5; do
214         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
215                 '(objectclass=*)' > /dev/null 2>&1
216         RC=$?
217         if test $RC = 0 ; then
218                 break
219         fi
220         echo "Waiting 5 seconds for slapd to start..."
221         sleep 5
222 done
223
224 if test $RC != 0 ; then
225         echo "ldapsearch failed ($RC)!"
226         test $KILLSERVERS != no && kill -HUP $KILLPIDS
227         exit $RC
228 fi
229
230 echo "Adding a dynamic list..."
231 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
232         > $TESTOUT 2>&1 << EOMODS
233 dn: cn=Dynamic List of Members,$LISTDN
234 objectClass: groupOfURLs
235 cn: Dynamic List of Members
236 memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person)
237 EOMODS
238
239 echo "Testing list search of all attrs..."
240 echo "# Testing list search of all attrs..." >> $SEARCHOUT
241 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
242         '(cn=Dynamic List of Members)' '*' \
243         >> $SEARCHOUT 2>&1
244 RC=$?
245 if test $RC != 0 ; then
246         echo "ldapsearch failed ($RC)!"
247         test $KILLSERVERS != no && kill -HUP $KILLPIDS
248         exit $RC
249 fi
250
251 echo "Testing list search of a listed attr..."
252 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
253 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
254         '(cn=Dynamic List of Members)' member \
255         >> $SEARCHOUT 2>&1
256 RC=$?
257 if test $RC != 0 ; then
258         echo "ldapsearch failed ($RC)!"
259         test $KILLSERVERS != no && kill -HUP $KILLPIDS
260         exit $RC
261 fi
262
263 echo "Testing list search of a non-listed attr..."
264 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
265 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
266         '(cn=Dynamic List of Members)' objectClass \
267         >> $SEARCHOUT 2>&1
268 RC=$?
269 if test $RC != 0 ; then
270         echo "ldapsearch failed ($RC)!"
271         test $KILLSERVERS != no && kill -HUP $KILLPIDS
272         exit $RC
273 fi
274
275 echo "Testing list search with (critical) manageDSAit..."
276 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
277 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
278         '(&(cn=Dynamic List of Members)(objectClass=groupOfURLs))' '*' \
279         >> $SEARCHOUT 2>&1
280 RC=$?
281 if test $RC != 0 ; then
282         echo "ldapsearch failed ($RC)!"
283         test $KILLSERVERS != no && kill -HUP $KILLPIDS
284         exit $RC
285 fi
286
287 CMPDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN"
288 echo "Testing list compare..."
289 echo "# Testing list compare..." >> $SEARCHOUT
290 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
291         "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \
292         >> $SEARCHOUT 2>&1
293 RC=$?
294 case $RC in
295 5)
296         echo "ldapcompare returned FALSE ($RC)!"
297         test $KILLSERVERS != no && kill -HUP $KILLPIDS
298         exit $RC
299         ;;
300 6)
301         echo "ldapcompare returned TRUE ($RC)"
302         ;;
303 0)
304         echo "ldapcompare returned success ($RC)!"
305         test $KILLSERVERS != no && kill -HUP $KILLPIDS
306         exit $RC
307         ;;
308 *)
309         echo "ldapcompare failed ($RC)!"
310         test $KILLSERVERS != no && kill -HUP $KILLPIDS
311         exit $RC
312         ;;
313 esac
314 echo "" >> $SEARCHOUT
315
316 echo "Testing list compare with manageDSAit..."
317 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
318 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
319         "cn=Dynamic List,$LISTDN" "member:$CMPDN" \
320         >> $SEARCHOUT 2>&1
321 RC=$?
322 case $RC in
323 5)
324         echo "ldapcompare returned FALSE ($RC)"
325         ;;
326 6)
327         echo "ldapcompare returned TRUE ($RC)!"
328         test $KILLSERVERS != no && kill -HUP $KILLPIDS
329         exit $RC
330         ;;
331 0)
332         echo "ldapcompare returned success ($RC)!"
333         test $KILLSERVERS != no && kill -HUP $KILLPIDS
334         exit $RC
335         ;;
336 *)
337         echo "ldapcompare failed ($RC)!"
338         test $KILLSERVERS != no && kill -HUP $KILLPIDS
339         exit $RC
340         ;;
341 esac
342 echo "" >> $SEARCHOUT
343
344 test $KILLSERVERS != no && kill -HUP $KILLPIDS
345
346 LDIF=$DYNLISTOUT
347
348 echo "Filtering ldapsearch results..."
349 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
350 echo "Filtering original ldif used to create database..."
351 . $LDIFFILTER < $LDIF > $LDIFFLT
352 echo "Comparing filter output..."
353 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
354
355 if test $? != 0 ; then
356         echo "Comparison failed"
357         exit 1
358 fi
359
360 echo ">>>>> Test succeeded"
361 exit 0