Home | History | Annotate | Line # | Download | only in scripts
test020-proxycache revision 1.1.1.4
      1 #! /bin/sh
      2 # $OpenLDAP$
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 1998-2014 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 
     16 PCACHETTL=${PCACHETTL-"1m"}
     17 PCACHENTTL=${PCACHENTTL-"1m"}
     18 PCACHESTTL=${PCACHESTTL-"1m"}
     19 PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"}
     20 PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"}
     21 PCACHETTR=${PCACHETTR-"2"}
     22 PCACHEBTTR=${PCACHEBTTR-"5"}
     23 
     24 . $SRCDIR/scripts/defines.sh
     25 
     26 if test $PROXYCACHE = pcacheno; then 
     27 	echo "Proxy cache overlay not available, test skipped"
     28 	exit 0
     29 fi 
     30 
     31 if test $BACKLDAP = "ldapno" ; then 
     32 	echo "LDAP backend not available, test skipped"
     33 	exit 0
     34 fi 
     35 
     36 if test $BACKEND = ldif ; then
     37 	# The (mail=example.com*) queries hit a sizelimit, so which
     38 	# entry is returned depends on the ordering in the backend.
     39 	echo "Test does not support $BACKEND backend, test skipped"
     40 	exit 0
     41 fi
     42 
     43 mkdir -p $TESTDIR $DBDIR1 $DBDIR2
     44 
     45 # Test proxy caching:
     46 # - start master
     47 # - start proxy cache
     48 # - populate master 
     49 # - perform first set of searches at the proxy
     50 # - verify cacheability
     51 # - perform second set of searches at the proxy 
     52 # - verify answerability
     53 
     54 echo "Starting master slapd on TCP/IP port $PORT1..."
     55 . $CONFFILTER < $CACHEMASTERCONF > $CONF1
     56 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
     57 PID=$!
     58 if test $WAIT != 0 ; then
     59 	echo PID $PID
     60 	read foo
     61 fi
     62 KILLPIDS="$PID"
     63 
     64 sleep 1
     65 
     66 echo "Using ldapsearch to check that master slapd is running..."
     67 for i in 0 1 2 3 4 5; do
     68 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     69 		'objectclass=*' > /dev/null 2>&1
     70 	RC=$?
     71 	if test $RC = 0 ; then
     72 		break
     73 	fi
     74 	echo "Waiting 5 seconds for slapd to start..."
     75 	sleep 5
     76 done
     77 
     78 if test $RC != 0 ; then
     79 	echo "ldapsearch failed ($RC)!"
     80 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     81 	exit $RC
     82 fi
     83 
     84 echo "Using ldapadd to populate the master directory..."
     85 $LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
     86 	$LDIFORDERED > /dev/null 2>&1
     87 RC=$?
     88 if test $RC != 0 ; then
     89 	echo "ldapadd failed ($RC)!"
     90 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     91 	exit $RC
     92 fi
     93 
     94 echo "Starting proxy cache on TCP/IP port $PORT2..."
     95 . $CONFFILTER < $PROXYCACHECONF | sed \
     96 	-e "s/@TTL@/${PCACHETTL}/"			\
     97 	-e "s/@NTTL@/${PCACHENTTL}/"		\
     98 	-e "s/@STTL@/${PCACHENTTL}/"		\
     99 	-e "s/@TTR@/${PCACHETTR}/"			\
    100 	-e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/"	\
    101 	-e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/"			\
    102 	-e "s/@BTTR@/${PCACHEBTTR}/"			\
    103 	> $CONF2
    104 
    105 $SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 &
    106 CACHEPID=$!
    107 if test $WAIT != 0 ; then
    108 	echo CACHEPID $CACHEPID
    109 	read foo
    110 fi
    111 KILLPIDS="$KILLPIDS $CACHEPID"
    112 
    113 sleep 1
    114 
    115 echo "Using ldapsearch to check that proxy slapd is running..."
    116 for i in 0 1 2 3 4 5; do
    117 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
    118 		'objectclass=*' > /dev/null 2>&1
    119 	RC=$?
    120 	if test $RC = 0 ; then
    121 		break
    122 	fi
    123 	echo "Waiting 5 seconds for slapd to start..."
    124 	sleep 5
    125 done
    126 
    127 if test $RC != 0 ; then
    128 	echo "ldapsearch failed ($RC)!"
    129 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    130 	exit $RC
    131 fi
    132 
    133 cat /dev/null > $SEARCHOUT
    134 
    135 echo "Making queries on the proxy cache..." 
    136 CNT=0
    137 
    138 CNT=`expr $CNT + 1`
    139 FILTER="(sn=Jon)"
    140 echo "Query $CNT: filter:$FILTER attrs:all (expect nothing)" 
    141 echo "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT
    142 $LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    143 	"$FILTER" >> $SEARCHOUT 2>> $TESTOUT
    144 RC=$?
    145 if test $RC != 0 ; then
    146 	echo "ldapsearch failed ($RC)!"
    147 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    148 	exit $RC
    149 fi
    150 
    151 # ITS#4491, if debug messages are unavailable, we can't verify the tests.
    152 grep "query template" $LOG2 > /dev/null
    153 RC=$?
    154 if test $RC != 0 ; then
    155 	echo "Debug messages unavailable, remaining test skipped..."
    156 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    157 	exit 0
    158 fi
    159 
    160 CNT=`expr $CNT + 1`
    161 FILTER="(|(cn=*Jon*)(sn=Jon*))"
    162 ATTRS="cn sn title uid"
    163 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    164 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    165 $LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    166 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    167 RC=$?
    168 if test $RC != 0 ; then
    169 	echo "ldapsearch failed ($RC)!"
    170 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    171 	exit $RC
    172 fi
    173 
    174 CNT=`expr $CNT + 1`
    175 FILTER="(sn=Smith*)"
    176 ATTRS="cn sn uid"
    177 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    178 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    179 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    180 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    181 RC=$?
    182 if test $RC != 0 ; then
    183 	echo "ldapsearch failed ($RC)!"
    184 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    185 	exit $RC
    186 fi
    187 
    188 CNT=`expr $CNT + 1`
    189 FILTER="(sn=Doe*)"
    190 ATTRS="cn sn title uid"
    191 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    192 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    193 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    194 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    195 RC=$?
    196 if test $RC != 0 ; then
    197 	echo "ldapsearch failed ($RC)!"
    198 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    199 	exit $RC
    200 fi
    201 
    202 CNT=`expr $CNT + 1`
    203 FILTER="(uid=johnd)"
    204 ATTRS="mail postaladdress telephonenumber cn uid"
    205 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    206 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    207 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    208 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    209 RC=$?
    210 if test $RC != 0 ; then
    211 	echo "ldapsearch failed ($RC)!"
    212 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    213 	exit $RC
    214 fi
    215 
    216 CNT=`expr $CNT + 1`
    217 FILTER="(mail=*@mail.alumni.example.com)"
    218 ATTRS="cn sn title uid"
    219 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    220 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    221 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    222 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    223 RC=$?
    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 CNT=`expr $CNT + 1`
    231 FILTER="(mail=*)"
    232 ATTRS="cn sn title uid"
    233 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    234 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    235 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    236 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    237 RC=$?
    238 if test $RC != 0 ; then
    239 	echo "ldapsearch failed ($RC)!"
    240 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    241 	exit $RC
    242 fi
    243 
    244 CNT=`expr $CNT + 1`
    245 FILTER="(mail=*example.com)"
    246 ATTRS="cn sn title uid"
    247 USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
    248 UPASSWD="bjorn"
    249 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    250 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    251 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    252 	-D "$USERDN" -w "$UPASSWD" \
    253 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    254 RC=$?
    255 case $RC in
    256 0)
    257 	echo "ldapsearch should have failed!"
    258 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    259 	exit 1
    260 	;;
    261 4)
    262 	echo "ldapsearch failed ($RC)"
    263 	;;
    264 *)
    265 	echo "ldapsearch failed ($RC)!"
    266 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    267 	exit $RC
    268 	;;
    269 esac
    270 
    271 CNT=`expr $CNT + 1`
    272 FILTER="(uid=b*)"
    273 ATTRS="mail"
    274 USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
    275 UPASSWD="bjorn"
    276 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    277 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    278 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    279 	-D "$USERDN" -w "$UPASSWD" \
    280 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    281 RC=$?
    282 case $RC in
    283 0)
    284 	echo "ldapsearch should have failed!"
    285 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    286 	exit 1
    287 	;;
    288 4)
    289 	echo "ldapsearch failed ($RC)"
    290 	;;
    291 *)
    292 	echo "ldapsearch failed ($RC)!"
    293 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    294 	exit $RC
    295 	;;
    296 esac
    297 
    298 CNT=`expr $CNT + 1`
    299 FILTER="(|(cn=All Staff)(sn=All Staff))"
    300 ATTRS="sn cn title uid undefinedAttr"
    301 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    302 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    303 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    304 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    305 RC=$?
    306 if test $RC != 0 ; then
    307 	echo "ldapsearch failed ($RC)!"
    308 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    309 	exit $RC
    310 fi
    311 
    312 FIRST=$CNT
    313 
    314 # queries 2-6,8-10 are cacheable
    315 CACHEABILITY=0111110111
    316 grep CACHEABLE $LOG2 | awk '{ 
    317 		if ($3 == "NOT") 
    318 			printf "Query %d not cacheable\n",NR
    319 		else 
    320 			printf "Query %d cacheable\n",NR
    321 	}' 
    322 CACHED=`grep CACHEABLE $LOG2 | awk '{ 
    323 		if ($3 == "NOT") 
    324 			printf "0" 
    325 		else 
    326 			printf "1" 
    327 	}'`
    328 
    329 if test "$CACHEABILITY" = "$CACHED" ; then
    330 	echo "Successfully verified cacheability"
    331 else 
    332 	echo "Error in verifying cacheability"
    333 	echo "$CACHED"
    334 	echo "$CACHEABILITY"
    335 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    336 	exit 1
    337 fi
    338 
    339 CNT=`expr $CNT + 1`
    340 FILTER="(|(cn=*Jones)(sn=Jones))"
    341 ATTRS="cn sn title uid"
    342 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    343 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    344 $LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    345 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    346 RC=$?
    347 if test $RC != 0 ; then
    348 	echo "ldapsearch failed ($RC)!"
    349 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    350 	exit $RC
    351 fi
    352 
    353 CNT=`expr $CNT + 1`
    354 FILTER="(sn=Smith)"
    355 ATTRS="cn sn title uid"
    356 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    357 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    358 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    359 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    360 RC=$?
    361 if test $RC != 0 ; then
    362 	echo "ldapsearch failed ($RC)!"
    363 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    364 	exit $RC
    365 fi
    366 
    367 CNT=`expr $CNT + 1`
    368 FILTER="(uid=bjorn)"
    369 ATTRS="mail postaladdress telephonenumber cn uid"
    370 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    371 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    372 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    373 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    374 RC=$?
    375 if test $RC != 0 ; then
    376 	echo "ldapsearch failed ($RC)!"
    377 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    378 	exit $RC
    379 fi
    380 
    381 CNT=`expr $CNT + 1`
    382 FILTER="(mail=jaj (at] mail.alumni.example.com)"
    383 ATTRS="cn sn title uid"
    384 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    385 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    386 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    387 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    388 RC=$?
    389 
    390 if test $RC != 0 ; then
    391 	echo "ldapsearch failed ($RC)!"
    392 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    393 	exit $RC
    394 fi
    395 
    396 CNT=`expr $CNT + 1`
    397 FILTER="(mail=*example.com)"
    398 ATTRS="cn sn title uid"
    399 USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
    400 UPASSWD="bjorn"
    401 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    402 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    403 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    404 	-D "$USERDN" -w "$UPASSWD" \
    405 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    406 RC=$?
    407 case $RC in
    408 0)
    409 	echo "ldapsearch should have failed!"
    410 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    411 	exit 1
    412 	;;
    413 4)
    414 	echo "ldapsearch failed ($RC)"
    415 	;;
    416 *)
    417 	echo "ldapsearch failed ($RC)!"
    418 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    419 	exit $RC
    420 	;;
    421 esac
    422 
    423 CNT=`expr $CNT + 1`
    424 FILTER="(uid=b*)"
    425 ATTRS="mail"
    426 USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
    427 UPASSWD="bjorn"
    428 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    429 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    430 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    431 	-D "$USERDN" -w "$UPASSWD" \
    432 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    433 RC=$?
    434 case $RC in
    435 0)
    436 	echo "ldapsearch should have failed!"
    437 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    438 	exit 1
    439 	;;
    440 4)
    441 	echo "ldapsearch failed ($RC)"
    442 	;;
    443 *)
    444 	echo "ldapsearch failed ($RC)!"
    445 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    446 	exit $RC
    447 	;;
    448 esac
    449 
    450 CNT=`expr $CNT + 1`
    451 FILTER="(|(cn=All Staff)(sn=All Staff))"
    452 ATTRS="sn cn title uid undefinedAttr"
    453 echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
    454 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    455 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    456 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    457 RC=$?
    458 if test $RC != 0 ; then
    459 	echo "ldapsearch failed ($RC)!"
    460 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    461 	exit $RC
    462 fi
    463 
    464 #queries 11-13,16-17 are answerable, 14-15 are not
    465 #actually, 14 would be answerable, but since 8 made mail=*example.com
    466 #not answerable because of sizelimit, queries contained in it are no longer
    467 #answerable as well
    468 ANSWERABILITY=1110011
    469 grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
    470 		if (NR > FIRST) { 
    471 			if ($3 == "NOT") 
    472 				printf "Query %d not answerable\n",NR
    473 			else 
    474 				printf "Query %d answerable\n",NR 
    475 		}
    476 	}' 
    477 ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
    478 		if (NR > FIRST) { 
    479 			if ($3 == "NOT") 
    480 				printf "0" 
    481 			else 
    482 				printf "1"
    483 		} 
    484 	}'`
    485 
    486 if test "$ANSWERABILITY" = "$ANSWERED" ; then
    487 	echo "Successfully verified answerability"
    488 else 
    489 	echo "Error in verifying answerability"
    490 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    491 	exit 1
    492 fi
    493 
    494 echo "Filtering ldapsearch results..."
    495 $LDIFFILTER -s ldif=a < $SEARCHOUT > $SEARCHFLT
    496 echo "Filtering original ldif..."
    497 $LDIFFILTER -s ldif=a < $PROXYCACHEOUT > $LDIFFLT
    498 echo "Comparing filter output..."
    499 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    500 
    501 if test $? != 0 ; then
    502 	echo "Comparison failed"
    503 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    504 	exit 1
    505 fi
    506 
    507 echo ""
    508 echo "Testing cache refresh"
    509 
    510 CNT=`expr $CNT + 1`
    511 FILTER="(&(objectclass=person)(uid=dots))"
    512 ATTRS="cn mail telephonenumber"
    513 echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 
    514 echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
    515 $LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    516 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    517 RC=$?
    518 if test $RC != 0 ; then
    519 	echo "ldapsearch failed ($RC)!"
    520 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    521 	exit $RC
    522 fi
    523 
    524 $LDAPMODIFY -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD <<EOF \
    525 	> /dev/null 2>&1
    526 dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
    527 changetype: modify
    528 replace: mail
    529 mail: dots@admin.example2.com
    530 -
    531 
    532 EOF
    533 RC=$?
    534 if test $RC != 0 ; then
    535 	echo "ldapmodify failed ($RC)!"
    536 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    537 	exit $RC
    538 fi
    539 
    540 SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD + 1`
    541 echo "Waiting $SLEEP seconds for cache to refresh"
    542 
    543 sleep $SLEEP
    544 
    545 echo "Checking entry again"
    546 $LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
    547 	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
    548 RC=$?
    549 if test $RC != 0 ; then
    550 	echo "ldapsearch failed ($RC)!"
    551 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    552 	exit $RC
    553 fi
    554 
    555 grep "^mail: dots@admin" $SEARCHOUT > /dev/null
    556 RC=$?
    557 if test $RC != 0 ; then
    558 	echo "Refresh failed"
    559 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    560 	exit 1
    561 fi
    562 
    563 echo ""
    564 echo "Testing Bind caching"
    565 
    566 CNT=`expr $CNT + 1`
    567 USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    568 UPASSWD="jaj"
    569 echo "Query $CNT: $USERDN"
    570 echo "# Query $CNT: $USERDN" >> $SEARCHOUT
    571 $LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
    572 	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
    573 RC=$?
    574 if test $RC != 0 ; then
    575 	echo "ldapsearch failed ($RC)!"
    576 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    577 	exit $RC
    578 fi
    579 
    580 grep "CACHING BIND" $LOG2 > /dev/null
    581 RC=$?
    582 if test $RC != 0 ; then
    583 	echo "Refresh failed"
    584 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    585 	exit 1
    586 fi
    587 
    588 CNT=`expr $CNT + 1`
    589 USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    590 UPASSWD="jaj"
    591 echo "Query $CNT: (Bind should be cached)"
    592 echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
    593 $LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
    594 	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
    595 RC=$?
    596 if test $RC != 0 ; then
    597 	echo "ldapsearch failed ($RC)!"
    598 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    599 	exit $RC
    600 fi
    601 
    602 grep "CACHED BIND" $LOG2 > /dev/null
    603 RC=$?
    604 if test $RC != 0 ; then
    605 	echo "Refresh failed"
    606 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    607 	exit 1
    608 fi
    609 
    610 echo ""
    611 echo "Testing pwdModify"
    612 $LDAPPASSWD -h $LOCALHOST -p $PORT2 \
    613 	-D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1
    614 RC=$?
    615 if test $RC != 0 ; then
    616 	echo "ldappasswd failed ($RC)!"
    617 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    618 	exit $RC
    619 fi
    620 
    621 RC=`grep "CACH.* BIND" $LOG2 | wc -l`
    622 if test $RC != 3 ; then
    623 	echo "ldappasswd didn't update the cache"
    624 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    625 	exit 1
    626 fi
    627 
    628 CNT=`expr $CNT + 1`
    629 USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    630 UPASSWD=newpw
    631 echo "Query $CNT: (Bind should be cached)"
    632 echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
    633 $LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
    634 	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
    635 RC=$?
    636 if test $RC != 0 ; then
    637 	echo "ldapsearch failed ($RC)!"
    638 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    639 	exit $RC
    640 fi
    641 
    642 RC=`grep "CACH.* BIND" $LOG2 | wc -l`
    643 if test $RC != 4 ; then
    644 	echo "Bind wasn't answered from cache"
    645 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    646 	exit 1
    647 fi
    648 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    649 
    650 echo ">>>>> Test succeeded"
    651 
    652 test $KILLSERVERS != no && wait
    653 
    654 exit 0
    655