Actually, I wasn't right. Code has now been fixed to treat no-cache as per spec, i.e. it can be cached, but must be revalidated.
On 8 July 2012 15:57, Philippe Mouawad <[email protected]> wrote: > You're right , I fixed it. > Thanks > > On Sun, Jul 8, 2012 at 4:35 PM, sebb <[email protected]> wrote: > >> On 8 July 2012 15:23, <[email protected]> wrote: >> > Author: pmouawad >> > Date: Sun Jul 8 14:23:54 2012 >> > New Revision: 1358746 >> > >> > URL: http://svn.apache.org/viewvc?rev=1358746&view=rev >> > Log: >> > Bug 53522 - Cache Manager should not store at all response with header >> "no-cache" and store other types of Cache-Control having max-age value >> > Bugzilla Id: 53522 >> > >> > Modified: >> > >> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java >> > >> jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManager.java >> > jmeter/trunk/xdocs/changes.xml >> > jmeter/trunk/xdocs/usermanual/component_reference.xml >> > >> > Modified: >> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java >> > URL: >> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java?rev=1358746&r1=1358745&r2=1358746&view=diff >> > >> ============================================================================== >> > --- >> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java >> (original) >> > +++ >> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java >> Sun Jul 8 14:23:54 2012 >> > @@ -160,13 +160,17 @@ public class CacheManager extends Config >> > Date expiresDate = null; // i.e. not using Expires >> > if (useExpires) {// Check that we are processing >> Expires/CacheControl >> > final String MAX_AGE = "max-age="; >> > - // TODO - check for other CacheControl attributes? >> > - if (cacheControl != null && >> (cacheControl.contains("public") || cacheControl.contains("private")) && >> cacheControl.contains(MAX_AGE)) { >> > - long maxAgeInSecs = Long.parseLong( >> > - >> cacheControl.substring(cacheControl.indexOf(MAX_AGE)+MAX_AGE.length()) >> > - .split("[, ]")[0] // Bug 51932 - allow for >> optional trailing attributes >> > - ); >> > - expiresDate=new >> Date(System.currentTimeMillis()+maxAgeInSecs*1000); >> > + if(cacheControl != null) { >> > + if(cacheControl.contains("no-cache")) { >> > + return; >> > + } >> >> Surely the check for no-cache should be done regardless of whether >> useExpires is true? >> >> useExpires should only be used to decide whether to use max-age or not. >> >> > + if(cacheControl.contains(MAX_AGE)) { >> > + long maxAgeInSecs = Long.parseLong( >> > + >> cacheControl.substring(cacheControl.indexOf(MAX_AGE)+MAX_AGE.length()) >> > + .split("[, ]")[0] // Bug 51932 - allow >> for optional trailing attributes >> > + ); >> > + expiresDate=new >> Date(System.currentTimeMillis()+maxAgeInSecs*1000); >> > + } >> > } else if (expires != null) { >> > try { >> > expiresDate = DateUtil.parseDate(expires); >> > >> > Modified: >> jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManager.java >> > URL: >> http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManager.java?rev=1358746&r1=1358745&r2=1358746&view=diff >> > >> ============================================================================== >> > --- >> jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManager.java >> (original) >> > +++ >> jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManager.java >> Sun Jul 8 14:23:54 2012 >> > @@ -258,7 +258,7 @@ public class TestCacheManager extends JM >> > assertFalse("Should not find valid >> entry",this.cacheManager.inCache(url)); >> > ((HttpMethodStub)httpMethod).cacheControl="no-cache"; >> > this.cacheManager.saveDetails(httpMethod, sampleResultOK); >> > - assertNotNull("Should find >> entry",getThreadCacheEntry(LOCAL_HOST)); >> > + assertNull("Should find entry",getThreadCacheEntry(LOCAL_HOST)); >> > assertFalse("Should not find valid >> entry",this.cacheManager.inCache(url)); >> > } >> > >> > >> > Modified: jmeter/trunk/xdocs/changes.xml >> > URL: >> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1358746&r1=1358745&r2=1358746&view=diff >> > >> ============================================================================== >> > --- jmeter/trunk/xdocs/changes.xml (original) >> > +++ jmeter/trunk/xdocs/changes.xml Sun Jul 8 14:23:54 2012 >> > @@ -70,6 +70,7 @@ in ScriptEngine context, see <bugzilla>5 >> > <h3>HTTP Samplers and Proxy</h3> >> > <ul> >> > <li><bugzilla>53521</bugzilla> - Cache Manager should cache content >> with Cache-control=private</li> >> > +<li><bugzilla>53522</bugzilla> - Cache Manager should not store at all >> response with header "no-cache" and store other types of Cache-Control >> having max-age value</li> >> > </ul> >> > >> > <h3>Other Samplers</h3> >> > >> > Modified: jmeter/trunk/xdocs/usermanual/component_reference.xml >> > URL: >> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1358746&r1=1358745&r2=1358746&view=diff >> > >> ============================================================================== >> > --- jmeter/trunk/xdocs/usermanual/component_reference.xml (original) >> > +++ jmeter/trunk/xdocs/usermanual/component_reference.xml Sun Jul 8 >> 14:23:54 2012 >> > @@ -3217,7 +3217,8 @@ and if so, the If-Last-Modified and If-N >> > Additionally, if the "Use Cache-Control/Expires header" option is >> selected, then the Cache-Control/Expires value is checked against the >> current time. >> > If the request is a GET request, and the timestamp is in the future, >> then the sampler returns immediately, >> > without requesting the URL from the remote server. This is intended to >> emulate browser behaviour. >> > -Note that the Cache-Control header must be "public" and only the >> "max-age" expiry option is processed. >> > +Note that if Cache-Control header is "no-cache", response will not be >> stored in cache, if Cache-Control has any other value, >> > +only the "max-age" expiry option is processed to compute entry lifetime. >> > </p> >> > <p> >> > By default, Cache Manager will store up to 5000 items in cache using >> LRU algorithm. Use property to modify this value. >> > >> > >> > > > > -- > Cordialement. > Philippe Mouawad.
