X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tests%2Fscripts%2Ftest020-proxycache;h=e09c26fab83e5bffff938831834028d4a7420b0c;hb=1adc0b9b1c39ac588adf22acf46f30e24b802682;hp=4feed27053a9da9440b29db9c49033ea77d79b95;hpb=4af9eb971559e3a1f0432615e93ec870dc753ddb;p=openldap diff --git a/tests/scripts/test020-proxycache b/tests/scripts/test020-proxycache index 4feed27053..e09c26fab8 100755 --- a/tests/scripts/test020-proxycache +++ b/tests/scripts/test020-proxycache @@ -2,7 +2,7 @@ # $OpenLDAP$ ## This work is part of OpenLDAP Software . ## -## Copyright 1998-2009 The OpenLDAP Foundation. +## Copyright 1998-2011 The OpenLDAP Foundation. ## All rights reserved. ## ## Redistribution and use in source and binary forms, with or without @@ -13,10 +13,13 @@ ## top-level directory of the distribution or, alternatively, at ## . -CACHETTL="1m" -NCACHETTL="1m" -SCACHETTL="1m" -CACHE_ENTRY_LIMIT=6 +PCACHETTL=${PCACHETTL-"1m"} +PCACHENTTL=${PCACHENTTL-"1m"} +PCACHESTTL=${PCACHESTTL-"1m"} +PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"} +PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"} +PCACHETTR=${PCACHETTR-"2"} +PCACHEBTTR=${PCACHEBTTR-"5"} . $SRCDIR/scripts/defines.sh @@ -30,6 +33,13 @@ if test $BACKLDAP = "ldapno" ; then exit 0 fi +if test $BACKEND = ldif ; then + # The (mail=example.com*) queries hit a sizelimit, so which + # entry is returned depends on the ordering in the backend. + echo "Test does not support $BACKEND backend, test skipped" + exit 0 +fi + mkdir -p $TESTDIR $DBDIR1 $DBDIR2 # Test proxy caching: @@ -82,7 +92,16 @@ if test $RC != 0 ; then fi echo "Starting proxy cache on TCP/IP port $PORT2..." -. $CONFFILTER < $PROXYCACHECONF > $CONF2 +. $CONFFILTER < $PROXYCACHECONF | sed \ + -e "s/@TTL@/${PCACHETTL}/" \ + -e "s/@NTTL@/${PCACHENTTL}/" \ + -e "s/@STTL@/${PCACHENTTL}/" \ + -e "s/@TTR@/${PCACHETTR}/" \ + -e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/" \ + -e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/" \ + -e "s/@BTTR@/${PCACHEBTTR}/" \ + > $CONF2 + $SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 & CACHEPID=$! if test $WAIT != 0 ; then @@ -133,7 +152,7 @@ fi grep "query template" $LOG2 > /dev/null RC=$? if test $RC != 0 ; then - echo "Debug messages unavailable, test aborted..." + echo "Debug messages unavailable, remaining test skipped..." test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait exit 0 fi @@ -226,18 +245,18 @@ CNT=`expr $CNT + 1` FILTER="(mail=*example.com)" ATTRS="cn sn title uid" USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" -PASSWD="bjorn" +UPASSWD="bjorn" echo "Query $CNT: filter:$FILTER attrs:$ATTRS" echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ - -D "$USERDN" -w "$PASSWD" \ + -D "$USERDN" -w "$UPASSWD" \ "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT RC=$? case $RC in 0) echo "ldapsearch should have failed!" test $KILLSERVERS != no && kill -HUP $KILLPIDS - exit $RC + exit 1 ;; 4) echo "ldapsearch failed ($RC)" @@ -253,18 +272,18 @@ CNT=`expr $CNT + 1` FILTER="(uid=b*)" ATTRS="mail" USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" -PASSWD="bjorn" +UPASSWD="bjorn" echo "Query $CNT: filter:$FILTER attrs:$ATTRS" echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ - -D "$USERDN" -w "$PASSWD" \ + -D "$USERDN" -w "$UPASSWD" \ "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT RC=$? case $RC in 0) echo "ldapsearch should have failed!" test $KILLSERVERS != no && kill -HUP $KILLPIDS - exit $RC + exit 1 ;; 4) echo "ldapsearch failed ($RC)" @@ -276,18 +295,32 @@ case $RC in ;; esac +CNT=`expr $CNT + 1` +FILTER="(|(cn=All Staff)(sn=All Staff))" +ATTRS="sn cn title uid undefinedAttr" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + FIRST=$CNT -# queries 2-6,8-9 are cacheable -CACHEABILITY=011111011 +# queries 2-6,8-10 are cacheable +CACHEABILITY=0111110111 grep CACHEABLE $LOG2 | awk '{ - if ($2 == "NOT") + if ($3 == "NOT") printf "Query %d not cacheable\n",NR else printf "Query %d cacheable\n",NR }' CACHED=`grep CACHEABLE $LOG2 | awk '{ - if ($2 == "NOT") + if ($3 == "NOT") printf "0" else printf "1" @@ -297,6 +330,8 @@ if test "$CACHEABILITY" = "$CACHED" ; then echo "Successfully verified cacheability" else echo "Error in verifying cacheability" + echo "$CACHED" + echo "$CACHEABILITY" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi @@ -362,18 +397,18 @@ CNT=`expr $CNT + 1` FILTER="(mail=*example.com)" ATTRS="cn sn title uid" USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" -PASSWD="bjorn" +UPASSWD="bjorn" echo "Query $CNT: filter:$FILTER attrs:$ATTRS" echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ - -D "$USERDN" -w "$PASSWD" \ + -D "$USERDN" -w "$UPASSWD" \ "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT RC=$? case $RC in 0) echo "ldapsearch should have failed!" test $KILLSERVERS != no && kill -HUP $KILLPIDS - exit $RC + exit 1 ;; 4) echo "ldapsearch failed ($RC)" @@ -389,18 +424,18 @@ CNT=`expr $CNT + 1` FILTER="(uid=b*)" ATTRS="mail" USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" -PASSWD="bjorn" +UPASSWD="bjorn" echo "Query $CNT: filter:$FILTER attrs:$ATTRS" echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ - -D "$USERDN" -w "$PASSWD" \ + -D "$USERDN" -w "$UPASSWD" \ "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT RC=$? case $RC in 0) echo "ldapsearch should have failed!" test $KILLSERVERS != no && kill -HUP $KILLPIDS - exit $RC + exit 1 ;; 4) echo "ldapsearch failed ($RC)" @@ -412,14 +447,28 @@ case $RC in ;; esac -#queries 10-12,15 are answerable, 13-14 are not -#actually, 12 would be answerable, but since 8 made mail=*example.com +CNT=`expr $CNT + 1` +FILTER="(|(cn=All Staff)(sn=All Staff))" +ATTRS="sn cn title uid undefinedAttr" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#queries 11-13,16-17 are answerable, 14-15 are not +#actually, 14 would be answerable, but since 8 made mail=*example.com #not answerable because of sizelimit, queries contained in it are no longer #answerable as well -ANSWERABILITY=111001 +ANSWERABILITY=1110011 grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ if (NR > FIRST) { - if ($2 == "NOT") + if ($3 == "NOT") printf "Query %d not answerable\n",NR else printf "Query %d answerable\n",NR @@ -427,33 +476,176 @@ grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ }' ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ if (NR > FIRST) { - if ($2 == "NOT") + if ($3 == "NOT") printf "0" else printf "1" } }'` -test $KILLSERVERS != no && kill -HUP $KILLPIDS - if test "$ANSWERABILITY" = "$ANSWERED" ; then echo "Successfully verified answerability" else echo "Error in verifying answerability" + test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi echo "Filtering ldapsearch results..." -. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT +$LDIFFILTER -s ldif=a < $SEARCHOUT > $SEARCHFLT echo "Filtering original ldif..." -. $LDIFFILTER < $PROXYCACHEOUT > $LDIFFLT +$LDIFFILTER -s ldif=a < $PROXYCACHEOUT > $LDIFFLT echo "Comparing filter output..." $CMP $SEARCHFLT $LDIFFLT > $CMPOUT if test $? != 0 ; then echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "" +echo "Testing cache refresh" + +CNT=`expr $CNT + 1` +FILTER="(&(objectclass=person)(uid=dots))" +ATTRS="cn mail telephonenumber" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < /dev/null 2>&1 +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +replace: mail +mail: dots@admin.example2.com +- + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD + 1` +echo "Waiting $SLEEP seconds for cache to refresh" + +sleep $SLEEP + +echo "Checking entry again" +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "^mail: dots@admin" $SEARCHOUT > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "" +echo "Testing Bind caching" + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: $USERDN" +echo "# Query $CNT: $USERDN" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "CACHING BIND" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "CACHED BIND" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "" +echo "Testing pwdModify" +$LDAPPASSWD -h $LOCALHOST -p $PORT2 \ + -D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACH.* BIND" $LOG2 | wc -l` +if test $RC != 3 ; then + echo "ldappasswd didn't update the cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD=newpw +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACH.* BIND" $LOG2 | wc -l` +if test $RC != 4 ; then + echo "Bind wasn't answered from cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait exit 1 fi +test $KILLSERVERS != no && kill -HUP $KILLPIDS echo ">>>>> Test succeeded"