]> git.sur5r.net Git - openldap/commitdiff
ITS#6152 add tests for cache refresh and Bind caching
authorHoward Chu <hyc@openldap.org>
Fri, 21 Aug 2009 13:25:38 +0000 (13:25 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 21 Aug 2009 13:25:38 +0000 (13:25 +0000)
servers/slapd/overlays/pcache.c
tests/data/slapd-proxycache.conf
tests/scripts/conf.sh
tests/scripts/test020-proxycache

index fc886a30ce6a276e680af15405eef983e287d70e..1ed62fc14ea195cef115a1935cb39f5a7bccb734 100644 (file)
@@ -2563,7 +2563,7 @@ pc_setpw( Operation *op, struct berval *pwd, cache_manager *cm )
                op->o_dn = op->o_bd->be_rootdn;
                op->o_ndn = op->o_bd->be_rootndn;
                op->o_callback = &cb;
-               Debug( pcache_debug, "pc_setpw: caching bind for %s\n",
+               Debug( pcache_debug, "pc_setpw: CACHING BIND for %s\n",
                        op->o_req_dn.bv_val, 0, 0 );
                rc = op->o_bd->be_modify( op, &sr );
                ch_free( vals[0].bv_val );
@@ -2845,6 +2845,9 @@ pcache_op_bind(
                BackendDB *be = op->o_bd;
                op->o_bd = &cm->db;
 
+               Debug( pcache_debug, "pcache_op_bind: CACHED BIND for %s\n",
+                       op->o_req_dn.bv_val, 0, 0 );
+
                if ( op->o_bd->be_bind( op, rs ) == LDAP_SUCCESS ) {
                        op->o_conn->c_authz_cookie = cm->db.be_private;
                }
index f5427d01a9b32dbfa68534e7549bec0b6a46cceb..e0da53b26b7818a733fbf63cff4d937682173e54 100644 (file)
@@ -44,13 +44,15 @@ uri         "@URI1@"
 limits         dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" size=1
 
 overlay                pcache
-proxycache     @BACKEND@ 100 2 @ENTRY_LIMIT@ @CACHETTL@
-proxyattrset 0         sn cn title uid
-proxyattrset 1         mail postaladdress telephonenumber cn uid
-proxytemplate          (|(cn=)(sn=)) 0 @CACHETTL@ @NCACHETTL@ @SCACHETTL@
-proxytemplate          (sn=) 0 @CACHETTL@ @NCACHETTL@ @SCACHETTL@
-proxytemplate          (uid=) 1 @CACHETTL@ @NCACHETTL@ @SCACHETTL@
-proxytemplate          (mail=) 0 @CACHETTL@ @NCACHETTL@ @SCACHETTL@
+pcache @BACKEND@ 100 2 @ENTRY_LIMIT@ @CCPERIOD@
+pcacheattrset 0        sn cn title uid
+pcacheattrset 1        mail postaladdress telephonenumber cn uid
+pcachetemplate         (|(cn=)(sn=)) 0 @TTL@ @NTTL@ @STTL@
+pcachetemplate         (sn=) 0 @TTL@ @NTTL@ @STTL@
+pcachetemplate         (uid=) 1 @TTL@ @NTTL@ @STTL@
+pcachetemplate         (mail=) 0 @TTL@ @NTTL@ @STTL@
+pcachetemplate         (&(objectclass=)(uid=)) 1 @TTL@ @NTTL@ @STTL@ @TTR@
+pcachebind             (&(objectclass=person)(uid=)) 1 @BTTR@ sub "ou=Alumni Association,ou=people,dc=example,dc=com"
 
 #bdb#cachesize 20
 #hdb#cachesize 20
index c537b00a2a4900740b19c883d3b760352c26bcb2..ed6f034e2ce0392e833a1e85cd107f1b57bac696 100755 (executable)
@@ -71,10 +71,6 @@ sed -e "s/@BACKEND@/${BACKEND}/"                     \
        -e "s;@PORT5@;${PORT5};"                        \
        -e "s;@PORT6@;${PORT6};"                        \
        -e "s/@SASL_MECH@/${SASL_MECH}/"                \
-       -e "s/@CACHETTL@/${CACHETTL}/"                  \
-       -e "s/@NCACHETTL@/${NCACHETTL}/"                \
-       -e "s/@SCACHETTL@/${SCACHETTL}/"                \
-       -e "s/@ENTRY_LIMIT@/${CACHE_ENTRY_LIMIT}/"      \
        -e "s;@TESTDIR@;${TESTDIR};"                    \
        -e "s;@DATADIR@;${DATADIR};"                    \
        -e "s;@SCHEMADIR@;${SCHEMADIR};"
index 4feed27053a9da9440b29db9c49033ea77d79b95..8502b4eda1fedb5c3dd9b197f0c91d535de33462 100755 (executable)
 ## top-level directory of the distribution or, alternatively, at
 ## <http://www.OpenLDAP.org/license.html>.
 
-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
 
@@ -82,7 +85,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
@@ -226,11 +238,11 @@ 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
@@ -253,11 +265,11 @@ 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
@@ -362,11 +374,11 @@ 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
@@ -389,11 +401,11 @@ 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
@@ -434,12 +446,11 @@ ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{
                } 
        }'`
 
-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
 
@@ -452,9 +463,109 @@ $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 <<EOF \
+       > /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
+
+SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD`
+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 0
+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 0
+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 0
+fi
+
+test $KILLSERVERS != no && kill -HUP $KILLPIDS
+
 echo ">>>>> Test succeeded"
 
 test $KILLSERVERS != no && wait