xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test020-proxycache (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
12de962bdSlukem#! /bin/sh
2d11b170bStron# $OpenLDAP$
32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>.
42de962bdSlukem##
5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation.
62de962bdSlukem## All rights reserved.
72de962bdSlukem##
82de962bdSlukem## Redistribution and use in source and binary forms, with or without
92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP
102de962bdSlukem## Public License.
112de962bdSlukem##
122de962bdSlukem## A copy of this license is available in the file LICENSE in the
132de962bdSlukem## top-level directory of the distribution or, alternatively, at
142de962bdSlukem## <http://www.OpenLDAP.org/license.html>.
152de962bdSlukem
164e6df137SlukemPCACHETTL=${PCACHETTL-"1m"}
174e6df137SlukemPCACHENTTL=${PCACHENTTL-"1m"}
184e6df137SlukemPCACHESTTL=${PCACHESTTL-"1m"}
194e6df137SlukemPCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"}
204e6df137SlukemPCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"}
214e6df137SlukemPCACHETTR=${PCACHETTR-"2"}
224e6df137SlukemPCACHEBTTR=${PCACHEBTTR-"5"}
232de962bdSlukem
242de962bdSlukem. $SRCDIR/scripts/defines.sh
252de962bdSlukem
262de962bdSlukemif test $PROXYCACHE = pcacheno; then
272de962bdSlukem	echo "Proxy cache overlay not available, test skipped"
282de962bdSlukem	exit 0
292de962bdSlukemfi
302de962bdSlukem
312de962bdSlukemif test $BACKLDAP = "ldapno" ; then
322de962bdSlukem	echo "LDAP backend not available, test skipped"
332de962bdSlukem	exit 0
342de962bdSlukemfi
352de962bdSlukem
36ef2f90d3Sadamif test $BACKEND = ldif ; then
37ef2f90d3Sadam	# The (mail=example.com*) queries hit a sizelimit, so which
38ef2f90d3Sadam	# entry is returned depends on the ordering in the backend.
39ef2f90d3Sadam	echo "Test does not support $BACKEND backend, test skipped"
40ef2f90d3Sadam	exit 0
41ef2f90d3Sadamfi
42ef2f90d3Sadam
432de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $DBDIR2
442de962bdSlukem
452de962bdSlukem# Test proxy caching:
46*e670fd5cSchristos# - start provider
472de962bdSlukem# - start proxy cache
48*e670fd5cSchristos# - populate provider
492de962bdSlukem# - perform first set of searches at the proxy
502de962bdSlukem# - verify cacheability
512de962bdSlukem# - perform second set of searches at the proxy
522de962bdSlukem# - verify answerability
532de962bdSlukem
54*e670fd5cSchristosecho "Starting provider slapd on TCP/IP port $PORT1..."
55*e670fd5cSchristos. $CONFFILTER < $CACHEPROVIDERCONF > $CONF1
562de962bdSlukem$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
572de962bdSlukemPID=$!
582de962bdSlukemif test $WAIT != 0 ; then
592de962bdSlukem	echo PID $PID
602de962bdSlukem	read foo
612de962bdSlukemfi
622de962bdSlukemKILLPIDS="$PID"
632de962bdSlukem
642de962bdSlukemsleep 1
652de962bdSlukem
66*e670fd5cSchristosecho "Using ldapsearch to check that provider slapd is running..."
672de962bdSlukemfor i in 0 1 2 3 4 5; do
68*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
692de962bdSlukem		'objectclass=*' > /dev/null 2>&1
702de962bdSlukem	RC=$?
712de962bdSlukem	if test $RC = 0 ; then
722de962bdSlukem		break
732de962bdSlukem	fi
742de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
752de962bdSlukem	sleep 5
762de962bdSlukemdone
772de962bdSlukem
782de962bdSlukemif test $RC != 0 ; then
792de962bdSlukem	echo "ldapsearch failed ($RC)!"
802de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
812de962bdSlukem	exit $RC
822de962bdSlukemfi
832de962bdSlukem
84*e670fd5cSchristosecho "Using ldapadd to populate the provider directory..."
85*e670fd5cSchristos$LDAPADD -x -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
862de962bdSlukem	$LDIFORDERED > /dev/null 2>&1
872de962bdSlukemRC=$?
882de962bdSlukemif test $RC != 0 ; then
892de962bdSlukem	echo "ldapadd failed ($RC)!"
902de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
912de962bdSlukem	exit $RC
922de962bdSlukemfi
932de962bdSlukem
942de962bdSlukemecho "Starting proxy cache on TCP/IP port $PORT2..."
954e6df137Slukem. $CONFFILTER < $PROXYCACHECONF | sed \
964e6df137Slukem	-e "s/@TTL@/${PCACHETTL}/"			\
974e6df137Slukem	-e "s/@NTTL@/${PCACHENTTL}/"		\
984e6df137Slukem	-e "s/@STTL@/${PCACHENTTL}/"		\
994e6df137Slukem	-e "s/@TTR@/${PCACHETTR}/"			\
1004e6df137Slukem	-e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/"	\
1014e6df137Slukem	-e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/"			\
1024e6df137Slukem	-e "s/@BTTR@/${PCACHEBTTR}/"			\
1034e6df137Slukem	> $CONF2
1044e6df137Slukem
1052de962bdSlukem$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 &
1062de962bdSlukemCACHEPID=$!
1072de962bdSlukemif test $WAIT != 0 ; then
1082de962bdSlukem	echo CACHEPID $CACHEPID
1092de962bdSlukem	read foo
1102de962bdSlukemfi
1112de962bdSlukemKILLPIDS="$KILLPIDS $CACHEPID"
1122de962bdSlukem
1132de962bdSlukemsleep 1
1142de962bdSlukem
1152de962bdSlukemecho "Using ldapsearch to check that proxy slapd is running..."
1162de962bdSlukemfor i in 0 1 2 3 4 5; do
117*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
1182de962bdSlukem		'objectclass=*' > /dev/null 2>&1
1192de962bdSlukem	RC=$?
1202de962bdSlukem	if test $RC = 0 ; then
1212de962bdSlukem		break
1222de962bdSlukem	fi
1232de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
1242de962bdSlukem	sleep 5
1252de962bdSlukemdone
1262de962bdSlukem
1272de962bdSlukemif test $RC != 0 ; then
1282de962bdSlukem	echo "ldapsearch failed ($RC)!"
1292de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1302de962bdSlukem	exit $RC
1312de962bdSlukemfi
1322de962bdSlukem
1332de962bdSlukemcat /dev/null > $SEARCHOUT
1342de962bdSlukem
1352de962bdSlukemecho "Making queries on the proxy cache..."
1362de962bdSlukemCNT=0
1372de962bdSlukem
1382de962bdSlukemCNT=`expr $CNT + 1`
1392de962bdSlukemFILTER="(sn=Jon)"
1402de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:all (expect nothing)"
1412de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT
142*e670fd5cSchristos$LDAPSEARCH -x -S "" -b "$BASEDN" -H $URI2 \
1432de962bdSlukem	"$FILTER" >> $SEARCHOUT 2>> $TESTOUT
1442de962bdSlukemRC=$?
1452de962bdSlukemif test $RC != 0 ; then
1462de962bdSlukem	echo "ldapsearch failed ($RC)!"
1472de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1482de962bdSlukem	exit $RC
1492de962bdSlukemfi
1502de962bdSlukem
1512de962bdSlukem# ITS#4491, if debug messages are unavailable, we can't verify the tests.
1522de962bdSlukemgrep "query template" $LOG2 > /dev/null
1532de962bdSlukemRC=$?
1542de962bdSlukemif test $RC != 0 ; then
155d11b170bStron	echo "Debug messages unavailable, remaining test skipped..."
1562de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
1572de962bdSlukem	exit 0
1582de962bdSlukemfi
1592de962bdSlukem
1602de962bdSlukemCNT=`expr $CNT + 1`
1612de962bdSlukemFILTER="(|(cn=*Jon*)(sn=Jon*))"
1622de962bdSlukemATTRS="cn sn title uid"
1632de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
1642de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
165*e670fd5cSchristos$LDAPSEARCH -x -S "" -b "$BASEDN" -H $URI2 \
1662de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
1672de962bdSlukemRC=$?
1682de962bdSlukemif test $RC != 0 ; then
1692de962bdSlukem	echo "ldapsearch failed ($RC)!"
1702de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1712de962bdSlukem	exit $RC
1722de962bdSlukemfi
1732de962bdSlukem
1742de962bdSlukemCNT=`expr $CNT + 1`
1752de962bdSlukemFILTER="(sn=Smith*)"
1762de962bdSlukemATTRS="cn sn uid"
1772de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
1782de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
179*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
1802de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
1812de962bdSlukemRC=$?
1822de962bdSlukemif test $RC != 0 ; then
1832de962bdSlukem	echo "ldapsearch failed ($RC)!"
1842de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1852de962bdSlukem	exit $RC
1862de962bdSlukemfi
1872de962bdSlukem
1882de962bdSlukemCNT=`expr $CNT + 1`
1892de962bdSlukemFILTER="(sn=Doe*)"
1902de962bdSlukemATTRS="cn sn title uid"
1912de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
1922de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
193*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
1942de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
1952de962bdSlukemRC=$?
1962de962bdSlukemif test $RC != 0 ; then
1972de962bdSlukem	echo "ldapsearch failed ($RC)!"
1982de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1992de962bdSlukem	exit $RC
2002de962bdSlukemfi
2012de962bdSlukem
2022de962bdSlukemCNT=`expr $CNT + 1`
2032de962bdSlukemFILTER="(uid=johnd)"
2042de962bdSlukemATTRS="mail postaladdress telephonenumber cn uid"
2052de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
2062de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
207*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
2082de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
2092de962bdSlukemRC=$?
2102de962bdSlukemif test $RC != 0 ; then
2112de962bdSlukem	echo "ldapsearch failed ($RC)!"
2122de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2132de962bdSlukem	exit $RC
2142de962bdSlukemfi
2152de962bdSlukem
2162de962bdSlukemCNT=`expr $CNT + 1`
2172de962bdSlukemFILTER="(mail=*@mail.alumni.example.com)"
2182de962bdSlukemATTRS="cn sn title uid"
2192de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
2202de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
221*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
2222de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
2232de962bdSlukemRC=$?
2242de962bdSlukemif test $RC != 0 ; then
2252de962bdSlukem	echo "ldapsearch failed ($RC)!"
2262de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2272de962bdSlukem	exit $RC
2282de962bdSlukemfi
2292de962bdSlukem
2302de962bdSlukemCNT=`expr $CNT + 1`
2312de962bdSlukemFILTER="(mail=*)"
2322de962bdSlukemATTRS="cn sn title uid"
2332de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
2342de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
235*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
2362de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
2372de962bdSlukemRC=$?
2382de962bdSlukemif test $RC != 0 ; then
2392de962bdSlukem	echo "ldapsearch failed ($RC)!"
2402de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2412de962bdSlukem	exit $RC
2422de962bdSlukemfi
2432de962bdSlukem
2442de962bdSlukemCNT=`expr $CNT + 1`
2452de962bdSlukemFILTER="(mail=*example.com)"
2462de962bdSlukemATTRS="cn sn title uid"
2472de962bdSlukemUSERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
2484e6df137SlukemUPASSWD="bjorn"
2492de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
2502de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
251*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
2524e6df137Slukem	-D "$USERDN" -w "$UPASSWD" \
2532de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
2542de962bdSlukemRC=$?
2552de962bdSlukemcase $RC in
2562de962bdSlukem0)
2572de962bdSlukem	echo "ldapsearch should have failed!"
2582de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
259d11b170bStron	exit 1
2602de962bdSlukem	;;
2612de962bdSlukem4)
2622de962bdSlukem	echo "ldapsearch failed ($RC)"
2632de962bdSlukem	;;
2642de962bdSlukem*)
2652de962bdSlukem	echo "ldapsearch failed ($RC)!"
2662de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2672de962bdSlukem	exit $RC
2682de962bdSlukem	;;
2692de962bdSlukemesac
2702de962bdSlukem
2712de962bdSlukemCNT=`expr $CNT + 1`
2722de962bdSlukemFILTER="(uid=b*)"
2732de962bdSlukemATTRS="mail"
2742de962bdSlukemUSERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
2754e6df137SlukemUPASSWD="bjorn"
2762de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
2772de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
278*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
2794e6df137Slukem	-D "$USERDN" -w "$UPASSWD" \
2802de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
2812de962bdSlukemRC=$?
2822de962bdSlukemcase $RC in
2832de962bdSlukem0)
2842de962bdSlukem	echo "ldapsearch should have failed!"
2852de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
286d11b170bStron	exit 1
2872de962bdSlukem	;;
2882de962bdSlukem4)
2892de962bdSlukem	echo "ldapsearch failed ($RC)"
2902de962bdSlukem	;;
2912de962bdSlukem*)
2922de962bdSlukem	echo "ldapsearch failed ($RC)!"
2932de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2942de962bdSlukem	exit $RC
2952de962bdSlukem	;;
2962de962bdSlukemesac
2972de962bdSlukem
298d11b170bStronCNT=`expr $CNT + 1`
299d11b170bStronFILTER="(|(cn=All Staff)(sn=All Staff))"
300d11b170bStronATTRS="sn cn title uid undefinedAttr"
301d11b170bStronecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
302d11b170bStronecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
303*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
304d11b170bStron	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
305d11b170bStronRC=$?
306d11b170bStronif test $RC != 0 ; then
307d11b170bStron	echo "ldapsearch failed ($RC)!"
308d11b170bStron	test $KILLSERVERS != no && kill -HUP $KILLPIDS
309d11b170bStron	exit $RC
310d11b170bStronfi
311d11b170bStron
3122de962bdSlukemFIRST=$CNT
3132de962bdSlukem
314d11b170bStron# queries 2-6,8-10 are cacheable
315d11b170bStronCACHEABILITY=0111110111
316*e670fd5cSchristosgrep CACHEABLE $LOG2 | awk '
317*e670fd5cSchristos		/NOT CACHEABLE/{printf "Query %d not cacheable\n",NR}
318*e670fd5cSchristos		/QUERY CACHEABLE/{printf "Query %d cacheable\n",NR}'
319*e670fd5cSchristosCACHED=`grep CACHEABLE $LOG2 | awk '
320*e670fd5cSchristos		/NOT CACHEABLE/{printf "0"}
321*e670fd5cSchristos		/QUERY CACHEABLE/{printf "1"}'`
3222de962bdSlukem
3232de962bdSlukemif test "$CACHEABILITY" = "$CACHED" ; then
3242de962bdSlukem	echo "Successfully verified cacheability"
3252de962bdSlukemelse
3262de962bdSlukem	echo "Error in verifying cacheability"
327d11b170bStron	echo "$CACHED"
328d11b170bStron	echo "$CACHEABILITY"
3292de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3302de962bdSlukem	exit 1
3312de962bdSlukemfi
3322de962bdSlukem
3332de962bdSlukemCNT=`expr $CNT + 1`
3342de962bdSlukemFILTER="(|(cn=*Jones)(sn=Jones))"
3352de962bdSlukemATTRS="cn sn title uid"
3362de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
3372de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
338*e670fd5cSchristos$LDAPSEARCH -x -S "" -b "$BASEDN" -H $URI2 \
3392de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
3402de962bdSlukemRC=$?
3412de962bdSlukemif test $RC != 0 ; then
3422de962bdSlukem	echo "ldapsearch failed ($RC)!"
3432de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3442de962bdSlukem	exit $RC
3452de962bdSlukemfi
3462de962bdSlukem
3472de962bdSlukemCNT=`expr $CNT + 1`
3482de962bdSlukemFILTER="(sn=Smith)"
3492de962bdSlukemATTRS="cn sn title uid"
3502de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
3512de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
352*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
3532de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
3542de962bdSlukemRC=$?
3552de962bdSlukemif test $RC != 0 ; then
3562de962bdSlukem	echo "ldapsearch failed ($RC)!"
3572de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3582de962bdSlukem	exit $RC
3592de962bdSlukemfi
3602de962bdSlukem
3612de962bdSlukemCNT=`expr $CNT + 1`
3622de962bdSlukemFILTER="(uid=bjorn)"
3632de962bdSlukemATTRS="mail postaladdress telephonenumber cn uid"
3642de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
3652de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
366*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
3672de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
3682de962bdSlukemRC=$?
3692de962bdSlukemif test $RC != 0 ; then
3702de962bdSlukem	echo "ldapsearch failed ($RC)!"
3712de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3722de962bdSlukem	exit $RC
3732de962bdSlukemfi
3742de962bdSlukem
3752de962bdSlukemCNT=`expr $CNT + 1`
3762de962bdSlukemFILTER="(mail=jaj@mail.alumni.example.com)"
3772de962bdSlukemATTRS="cn sn title uid"
3782de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
3792de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
380*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
3812de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
3822de962bdSlukemRC=$?
3832de962bdSlukem
3842de962bdSlukemif test $RC != 0 ; then
3852de962bdSlukem	echo "ldapsearch failed ($RC)!"
3862de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3872de962bdSlukem	exit $RC
3882de962bdSlukemfi
3892de962bdSlukem
3902de962bdSlukemCNT=`expr $CNT + 1`
3912de962bdSlukemFILTER="(mail=*example.com)"
3922de962bdSlukemATTRS="cn sn title uid"
3932de962bdSlukemUSERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
3944e6df137SlukemUPASSWD="bjorn"
3952de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
3962de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
397*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
3984e6df137Slukem	-D "$USERDN" -w "$UPASSWD" \
3992de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
4002de962bdSlukemRC=$?
4012de962bdSlukemcase $RC in
4022de962bdSlukem0)
4032de962bdSlukem	echo "ldapsearch should have failed!"
4042de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
405d11b170bStron	exit 1
4062de962bdSlukem	;;
4072de962bdSlukem4)
4082de962bdSlukem	echo "ldapsearch failed ($RC)"
4092de962bdSlukem	;;
4102de962bdSlukem*)
4112de962bdSlukem	echo "ldapsearch failed ($RC)!"
4122de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4132de962bdSlukem	exit $RC
4142de962bdSlukem	;;
4152de962bdSlukemesac
4162de962bdSlukem
4172de962bdSlukemCNT=`expr $CNT + 1`
4182de962bdSlukemFILTER="(uid=b*)"
4192de962bdSlukemATTRS="mail"
4202de962bdSlukemUSERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
4214e6df137SlukemUPASSWD="bjorn"
4222de962bdSlukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
4232de962bdSlukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
424*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
4254e6df137Slukem	-D "$USERDN" -w "$UPASSWD" \
4262de962bdSlukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
4272de962bdSlukemRC=$?
4282de962bdSlukemcase $RC in
4292de962bdSlukem0)
4302de962bdSlukem	echo "ldapsearch should have failed!"
4312de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
432d11b170bStron	exit 1
4332de962bdSlukem	;;
4342de962bdSlukem4)
4352de962bdSlukem	echo "ldapsearch failed ($RC)"
4362de962bdSlukem	;;
4372de962bdSlukem*)
4382de962bdSlukem	echo "ldapsearch failed ($RC)!"
4392de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4402de962bdSlukem	exit $RC
4412de962bdSlukem	;;
4422de962bdSlukemesac
4432de962bdSlukem
444d11b170bStronCNT=`expr $CNT + 1`
445d11b170bStronFILTER="(|(cn=All Staff)(sn=All Staff))"
446d11b170bStronATTRS="sn cn title uid undefinedAttr"
447d11b170bStronecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
448d11b170bStronecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
449*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI2 \
450d11b170bStron	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
451d11b170bStronRC=$?
452d11b170bStronif test $RC != 0 ; then
453d11b170bStron	echo "ldapsearch failed ($RC)!"
454d11b170bStron	test $KILLSERVERS != no && kill -HUP $KILLPIDS
455d11b170bStron	exit $RC
456d11b170bStronfi
457d11b170bStron
458d11b170bStron#queries 11-13,16-17 are answerable, 14-15 are not
459d11b170bStron#actually, 14 would be answerable, but since 8 made mail=*example.com
4602de962bdSlukem#not answerable because of sizelimit, queries contained in it are no longer
4612de962bdSlukem#answerable as well
462d11b170bStronANSWERABILITY=1110011
463*e670fd5cSchristosgrep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'
464*e670fd5cSchristos		/NOT ANSWERABLE/{if (NR > FIRST) printf "Query %d not answerable\n",NR}
465*e670fd5cSchristos		/QUERY ANSWERABLE/{if (NR > FIRST) printf "Query %d answerable\n",NR}'
466*e670fd5cSchristosANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'
467*e670fd5cSchristos		/NOT ANSWERABLE/{if (NR > FIRST) printf "0"}
468*e670fd5cSchristos		/QUERY ANSWERABLE/{if (NR > FIRST) printf "1"}'`
4692de962bdSlukem
4702de962bdSlukemif test "$ANSWERABILITY" = "$ANSWERED" ; then
4712de962bdSlukem	echo "Successfully verified answerability"
4722de962bdSlukemelse
4732de962bdSlukem	echo "Error in verifying answerability"
4744e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4752de962bdSlukem	exit 1
4762de962bdSlukemfi
4772de962bdSlukem
4782de962bdSlukemecho "Filtering ldapsearch results..."
479d11b170bStron$LDIFFILTER -s ldif=a < $SEARCHOUT > $SEARCHFLT
4802de962bdSlukemecho "Filtering original ldif..."
481d11b170bStron$LDIFFILTER -s ldif=a < $PROXYCACHEOUT > $LDIFFLT
4822de962bdSlukemecho "Comparing filter output..."
4832de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
4842de962bdSlukem
4852de962bdSlukemif test $? != 0 ; then
4862de962bdSlukem	echo "Comparison failed"
4874e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4882de962bdSlukem	exit 1
4892de962bdSlukemfi
4902de962bdSlukem
4914e6df137Slukemecho ""
4924e6df137Slukemecho "Testing cache refresh"
4934e6df137Slukem
4944e6df137SlukemCNT=`expr $CNT + 1`
4954e6df137SlukemFILTER="(&(objectclass=person)(uid=dots))"
4964e6df137SlukemATTRS="cn mail telephonenumber"
4974e6df137Slukemecho "Query $CNT: filter:$FILTER attrs:$ATTRS"
4984e6df137Slukemecho "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
499*e670fd5cSchristos$LDAPSEARCH -x -S "" -b "$BASEDN" -H $URI2 \
5004e6df137Slukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
5014e6df137SlukemRC=$?
5024e6df137Slukemif test $RC != 0 ; then
5034e6df137Slukem	echo "ldapsearch failed ($RC)!"
5044e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5054e6df137Slukem	exit $RC
5064e6df137Slukemfi
5074e6df137Slukem
508*e670fd5cSchristos$LDAPMODIFY -x -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF \
5094e6df137Slukem	> /dev/null 2>&1
5104e6df137Slukemdn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
5114e6df137Slukemchangetype: modify
5124e6df137Slukemreplace: mail
5134e6df137Slukemmail: dots@admin.example2.com
5144e6df137Slukem-
5154e6df137Slukem
5164e6df137SlukemEOF
5174e6df137SlukemRC=$?
5184e6df137Slukemif test $RC != 0 ; then
5194e6df137Slukem	echo "ldapmodify failed ($RC)!"
5204e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5214e6df137Slukem	exit $RC
5224e6df137Slukemfi
5234e6df137Slukem
524d11b170bStronSLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD + 1`
5254e6df137Slukemecho "Waiting $SLEEP seconds for cache to refresh"
5264e6df137Slukem
5274e6df137Slukemsleep $SLEEP
5284e6df137Slukem
5294e6df137Slukemecho "Checking entry again"
530*e670fd5cSchristos$LDAPSEARCH -x -S "" -b "$BASEDN" -H $URI2 \
5314e6df137Slukem	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
5324e6df137SlukemRC=$?
5334e6df137Slukemif test $RC != 0 ; then
5344e6df137Slukem	echo "ldapsearch failed ($RC)!"
5354e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5364e6df137Slukem	exit $RC
5374e6df137Slukemfi
5384e6df137Slukem
5394e6df137Slukemgrep "^mail: dots@admin" $SEARCHOUT > /dev/null
5404e6df137SlukemRC=$?
5414e6df137Slukemif test $RC != 0 ; then
5424e6df137Slukem	echo "Refresh failed"
5434e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
544d11b170bStron	exit 1
5454e6df137Slukemfi
5464e6df137Slukem
5474e6df137Slukemecho ""
5484e6df137Slukemecho "Testing Bind caching"
5494e6df137Slukem
5504e6df137SlukemCNT=`expr $CNT + 1`
5514e6df137SlukemUSERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
5524e6df137SlukemUPASSWD="jaj"
5534e6df137Slukemecho "Query $CNT: $USERDN"
5544e6df137Slukemecho "# Query $CNT: $USERDN" >> $SEARCHOUT
555*e670fd5cSchristos$LDAPSEARCH -S "" -b "" -s base -H $URI2 \
5564e6df137Slukem	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
5574e6df137SlukemRC=$?
5584e6df137Slukemif test $RC != 0 ; then
5594e6df137Slukem	echo "ldapsearch failed ($RC)!"
5604e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5614e6df137Slukem	exit $RC
5624e6df137Slukemfi
5634e6df137Slukem
5644e6df137Slukemgrep "CACHING BIND" $LOG2 > /dev/null
5654e6df137SlukemRC=$?
5664e6df137Slukemif test $RC != 0 ; then
5674e6df137Slukem	echo "Refresh failed"
5684e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
569d11b170bStron	exit 1
5704e6df137Slukemfi
5714e6df137Slukem
5724e6df137SlukemCNT=`expr $CNT + 1`
5734e6df137SlukemUSERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
5744e6df137SlukemUPASSWD="jaj"
5754e6df137Slukemecho "Query $CNT: (Bind should be cached)"
5764e6df137Slukemecho "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
577*e670fd5cSchristos$LDAPSEARCH -S "" -b "" -s base -H $URI2 \
5784e6df137Slukem	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
5794e6df137SlukemRC=$?
5804e6df137Slukemif test $RC != 0 ; then
5814e6df137Slukem	echo "ldapsearch failed ($RC)!"
5824e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
5834e6df137Slukem	exit $RC
5844e6df137Slukemfi
5854e6df137Slukem
5864e6df137Slukemgrep "CACHED BIND" $LOG2 > /dev/null
5874e6df137SlukemRC=$?
5884e6df137Slukemif test $RC != 0 ; then
5894e6df137Slukem	echo "Refresh failed"
5904e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
591d11b170bStron	exit 1
5924e6df137Slukemfi
5934e6df137Slukem
5944e6df137Slukemecho ""
5954e6df137Slukemecho "Testing pwdModify"
596*e670fd5cSchristos$LDAPPASSWD -H $URI2 \
5974e6df137Slukem	-D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1
5984e6df137SlukemRC=$?
5994e6df137Slukemif test $RC != 0 ; then
6004e6df137Slukem	echo "ldappasswd failed ($RC)!"
6014e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6024e6df137Slukem	exit $RC
6034e6df137Slukemfi
6044e6df137Slukem
6054e6df137SlukemRC=`grep "CACH.* BIND" $LOG2 | wc -l`
6064e6df137Slukemif test $RC != 3 ; then
6074e6df137Slukem	echo "ldappasswd didn't update the cache"
6084e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
609d11b170bStron	exit 1
6104e6df137Slukemfi
6114e6df137Slukem
6124e6df137SlukemCNT=`expr $CNT + 1`
6134e6df137SlukemUSERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
6144e6df137SlukemUPASSWD=newpw
6154e6df137Slukemecho "Query $CNT: (Bind should be cached)"
6164e6df137Slukemecho "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
617*e670fd5cSchristos$LDAPSEARCH -S "" -b "" -s base -H $URI2 \
6184e6df137Slukem	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
6194e6df137SlukemRC=$?
6204e6df137Slukemif test $RC != 0 ; then
6214e6df137Slukem	echo "ldapsearch failed ($RC)!"
6224e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
6234e6df137Slukem	exit $RC
6244e6df137Slukemfi
6254e6df137Slukem
6264e6df137SlukemRC=`grep "CACH.* BIND" $LOG2 | wc -l`
6274e6df137Slukemif test $RC != 4 ; then
6284e6df137Slukem	echo "Bind wasn't answered from cache"
6294e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
630d11b170bStron	exit 1
6314e6df137Slukemfi
6324e6df137Slukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
6334e6df137Slukem
6342de962bdSlukemecho ">>>>> Test succeeded"
6352de962bdSlukem
6362de962bdSlukemtest $KILLSERVERS != no && wait
6372de962bdSlukem
6382de962bdSlukemexit 0
639