xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test020-proxycache (revision 404fbe5fb94ca1e054339640cabb2801ce52dd30)
1#! /bin/sh
2# $OpenLDAP: pkg/ldap/tests/scripts/test020-proxycache,v 1.26.2.9 2008/02/11 23:26:51 kurt Exp $
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2008 The OpenLDAP Foundation.
6## All rights reserved.
7##
8## Redistribution and use in source and binary forms, with or without
9## modification, are permitted only as authorized by the OpenLDAP
10## Public License.
11##
12## A copy of this license is available in the file LICENSE in the
13## top-level directory of the distribution or, alternatively, at
14## <http://www.OpenLDAP.org/license.html>.
15
16CACHETTL="1m"
17NCACHETTL="1m"
18SCACHETTL="1m"
19CACHE_ENTRY_LIMIT=6
20
21. $SRCDIR/scripts/defines.sh
22
23if test $PROXYCACHE = pcacheno; then
24	echo "Proxy cache overlay not available, test skipped"
25	exit 0
26fi
27
28if test $BACKLDAP = "ldapno" ; then
29	echo "LDAP backend not available, test skipped"
30	exit 0
31fi
32
33mkdir -p $TESTDIR $DBDIR1 $DBDIR2
34
35# Test proxy caching:
36# - start master
37# - start proxy cache
38# - populate master
39# - perform first set of searches at the proxy
40# - verify cacheability
41# - perform second set of searches at the proxy
42# - verify answerability
43
44echo "Starting master slapd on TCP/IP port $PORT1..."
45. $CONFFILTER < $CACHEMASTERCONF > $CONF1
46$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
47PID=$!
48if test $WAIT != 0 ; then
49	echo PID $PID
50	read foo
51fi
52KILLPIDS="$PID"
53
54sleep 1
55
56echo "Using ldapsearch to check that master slapd is running..."
57for 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
66done
67
68if test $RC != 0 ; then
69	echo "ldapsearch failed ($RC)!"
70	test $KILLSERVERS != no && kill -HUP $KILLPIDS
71	exit $RC
72fi
73
74echo "Using ldapadd to populate the master directory..."
75$LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
76	$LDIFORDERED > /dev/null 2>&1
77RC=$?
78if test $RC != 0 ; then
79	echo "ldapadd failed ($RC)!"
80	test $KILLSERVERS != no && kill -HUP $KILLPIDS
81	exit $RC
82fi
83
84echo "Starting proxy cache on TCP/IP port $PORT2..."
85. $CONFFILTER < $PROXYCACHECONF > $CONF2
86$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 &
87CACHEPID=$!
88if test $WAIT != 0 ; then
89	echo CACHEPID $CACHEPID
90	read foo
91fi
92KILLPIDS="$KILLPIDS $CACHEPID"
93
94sleep 1
95
96echo "Using ldapsearch to check that proxy slapd is running..."
97for i in 0 1 2 3 4 5; do
98	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
99		'objectclass=*' > /dev/null 2>&1
100	RC=$?
101	if test $RC = 0 ; then
102		break
103	fi
104	echo "Waiting 5 seconds for slapd to start..."
105	sleep 5
106done
107
108if test $RC != 0 ; then
109	echo "ldapsearch failed ($RC)!"
110	test $KILLSERVERS != no && kill -HUP $KILLPIDS
111	exit $RC
112fi
113
114cat /dev/null > $SEARCHOUT
115
116echo "Making queries on the proxy cache..."
117CNT=0
118
119CNT=`expr $CNT + 1`
120FILTER="(sn=Jon)"
121echo "Query $CNT: filter:$FILTER attrs:all (expect nothing)"
122echo "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT
123$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
124	"$FILTER" >> $SEARCHOUT 2>> $TESTOUT
125RC=$?
126if test $RC != 0 ; then
127	echo "ldapsearch failed ($RC)!"
128	test $KILLSERVERS != no && kill -HUP $KILLPIDS
129	exit $RC
130fi
131
132# ITS#4491, if debug messages are unavailable, we can't verify the tests.
133grep "query template" $LOG2 > /dev/null
134RC=$?
135if test $RC != 0 ; then
136	echo "Debug messages unavailable, test aborted..."
137	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
138	exit 0
139fi
140
141CNT=`expr $CNT + 1`
142FILTER="(|(cn=*Jon*)(sn=Jon*))"
143ATTRS="cn sn title uid"
144echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
145echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
146$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
147	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
148RC=$?
149if test $RC != 0 ; then
150	echo "ldapsearch failed ($RC)!"
151	test $KILLSERVERS != no && kill -HUP $KILLPIDS
152	exit $RC
153fi
154
155CNT=`expr $CNT + 1`
156FILTER="(sn=Smith*)"
157ATTRS="cn sn uid"
158echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
159echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
160$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
161	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
162RC=$?
163if test $RC != 0 ; then
164	echo "ldapsearch failed ($RC)!"
165	test $KILLSERVERS != no && kill -HUP $KILLPIDS
166	exit $RC
167fi
168
169CNT=`expr $CNT + 1`
170FILTER="(sn=Doe*)"
171ATTRS="cn sn title uid"
172echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
173echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
174$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
175	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
176RC=$?
177if test $RC != 0 ; then
178	echo "ldapsearch failed ($RC)!"
179	test $KILLSERVERS != no && kill -HUP $KILLPIDS
180	exit $RC
181fi
182
183CNT=`expr $CNT + 1`
184FILTER="(uid=johnd)"
185ATTRS="mail postaladdress telephonenumber cn uid"
186echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
187echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
188$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
189	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
190RC=$?
191if test $RC != 0 ; then
192	echo "ldapsearch failed ($RC)!"
193	test $KILLSERVERS != no && kill -HUP $KILLPIDS
194	exit $RC
195fi
196
197CNT=`expr $CNT + 1`
198FILTER="(mail=*@mail.alumni.example.com)"
199ATTRS="cn sn title uid"
200echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
201echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
202$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
203	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
204RC=$?
205if test $RC != 0 ; then
206	echo "ldapsearch failed ($RC)!"
207	test $KILLSERVERS != no && kill -HUP $KILLPIDS
208	exit $RC
209fi
210
211CNT=`expr $CNT + 1`
212FILTER="(mail=*)"
213ATTRS="cn sn title uid"
214echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
215echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
216$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
217	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
218RC=$?
219if test $RC != 0 ; then
220	echo "ldapsearch failed ($RC)!"
221	test $KILLSERVERS != no && kill -HUP $KILLPIDS
222	exit $RC
223fi
224
225CNT=`expr $CNT + 1`
226FILTER="(mail=*example.com)"
227ATTRS="cn sn title uid"
228USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
229PASSWD="bjorn"
230echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
231echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
232$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
233	-D "$USERDN" -w "$PASSWD" \
234	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
235RC=$?
236case $RC in
2370)
238	echo "ldapsearch should have failed!"
239	test $KILLSERVERS != no && kill -HUP $KILLPIDS
240	exit $RC
241	;;
2424)
243	echo "ldapsearch failed ($RC)"
244	;;
245*)
246	echo "ldapsearch failed ($RC)!"
247	test $KILLSERVERS != no && kill -HUP $KILLPIDS
248	exit $RC
249	;;
250esac
251
252CNT=`expr $CNT + 1`
253FILTER="(uid=b*)"
254ATTRS="mail"
255USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
256PASSWD="bjorn"
257echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
258echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
259$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
260	-D "$USERDN" -w "$PASSWD" \
261	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
262RC=$?
263case $RC in
2640)
265	echo "ldapsearch should have failed!"
266	test $KILLSERVERS != no && kill -HUP $KILLPIDS
267	exit $RC
268	;;
2694)
270	echo "ldapsearch failed ($RC)"
271	;;
272*)
273	echo "ldapsearch failed ($RC)!"
274	test $KILLSERVERS != no && kill -HUP $KILLPIDS
275	exit $RC
276	;;
277esac
278
279FIRST=$CNT
280
281# queries 2-6,8-9 are cacheable
282CACHEABILITY=011111011
283grep CACHEABLE $LOG2 | awk '{
284		if ($2 == "NOT")
285			printf "Query %d not cacheable\n",NR
286		else
287			printf "Query %d cacheable\n",NR
288	}'
289CACHED=`grep CACHEABLE $LOG2 | awk '{
290		if ($2 == "NOT")
291			printf "0"
292		else
293			printf "1"
294	}'`
295
296if test "$CACHEABILITY" = "$CACHED" ; then
297	echo "Successfully verified cacheability"
298else
299	echo "Error in verifying cacheability"
300	test $KILLSERVERS != no && kill -HUP $KILLPIDS
301	exit 1
302fi
303
304CNT=`expr $CNT + 1`
305FILTER="(|(cn=*Jones)(sn=Jones))"
306ATTRS="cn sn title uid"
307echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
308echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
309$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
310	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
311RC=$?
312if test $RC != 0 ; then
313	echo "ldapsearch failed ($RC)!"
314	test $KILLSERVERS != no && kill -HUP $KILLPIDS
315	exit $RC
316fi
317
318CNT=`expr $CNT + 1`
319FILTER="(sn=Smith)"
320ATTRS="cn sn title uid"
321echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
322echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
323$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
324	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
325RC=$?
326if test $RC != 0 ; then
327	echo "ldapsearch failed ($RC)!"
328	test $KILLSERVERS != no && kill -HUP $KILLPIDS
329	exit $RC
330fi
331
332CNT=`expr $CNT + 1`
333FILTER="(uid=bjorn)"
334ATTRS="mail postaladdress telephonenumber cn uid"
335echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
336echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
337$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
338	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
339RC=$?
340if test $RC != 0 ; then
341	echo "ldapsearch failed ($RC)!"
342	test $KILLSERVERS != no && kill -HUP $KILLPIDS
343	exit $RC
344fi
345
346CNT=`expr $CNT + 1`
347FILTER="(mail=jaj@mail.alumni.example.com)"
348ATTRS="cn sn title uid"
349echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
350echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
351$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
352	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
353RC=$?
354
355if test $RC != 0 ; then
356	echo "ldapsearch failed ($RC)!"
357	test $KILLSERVERS != no && kill -HUP $KILLPIDS
358	exit $RC
359fi
360
361CNT=`expr $CNT + 1`
362FILTER="(mail=*example.com)"
363ATTRS="cn sn title uid"
364USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
365PASSWD="bjorn"
366echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
367echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
368$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
369	-D "$USERDN" -w "$PASSWD" \
370	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
371RC=$?
372case $RC in
3730)
374	echo "ldapsearch should have failed!"
375	test $KILLSERVERS != no && kill -HUP $KILLPIDS
376	exit $RC
377	;;
3784)
379	echo "ldapsearch failed ($RC)"
380	;;
381*)
382	echo "ldapsearch failed ($RC)!"
383	test $KILLSERVERS != no && kill -HUP $KILLPIDS
384	exit $RC
385	;;
386esac
387
388CNT=`expr $CNT + 1`
389FILTER="(uid=b*)"
390ATTRS="mail"
391USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
392PASSWD="bjorn"
393echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
394echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
395$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
396	-D "$USERDN" -w "$PASSWD" \
397	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
398RC=$?
399case $RC in
4000)
401	echo "ldapsearch should have failed!"
402	test $KILLSERVERS != no && kill -HUP $KILLPIDS
403	exit $RC
404	;;
4054)
406	echo "ldapsearch failed ($RC)"
407	;;
408*)
409	echo "ldapsearch failed ($RC)!"
410	test $KILLSERVERS != no && kill -HUP $KILLPIDS
411	exit $RC
412	;;
413esac
414
415#queries 10-12,15 are answerable, 13-14 are not
416#actually, 12 would be answerable, but since 8 made mail=*example.com
417#not answerable because of sizelimit, queries contained in it are no longer
418#answerable as well
419ANSWERABILITY=111001
420grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{
421		if (NR > FIRST) {
422			if ($2 == "NOT")
423				printf "Query %d not answerable\n",NR
424			else
425				printf "Query %d answerable\n",NR
426		}
427	}'
428ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{
429		if (NR > FIRST) {
430			if ($2 == "NOT")
431				printf "0"
432			else
433				printf "1"
434		}
435	}'`
436
437test $KILLSERVERS != no && kill -HUP $KILLPIDS
438
439if test "$ANSWERABILITY" = "$ANSWERED" ; then
440	echo "Successfully verified answerability"
441else
442	echo "Error in verifying answerability"
443	exit 1
444fi
445
446echo "Filtering ldapsearch results..."
447. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
448echo "Filtering original ldif..."
449. $LDIFFILTER < $PROXYCACHEOUT > $LDIFFLT
450echo "Comparing filter output..."
451$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
452
453if test $? != 0 ; then
454	echo "Comparison failed"
455	exit 1
456fi
457
458echo ">>>>> Test succeeded"
459
460test $KILLSERVERS != no && wait
461
462exit 0
463