Updated Branches:
  refs/heads/wicket-6.x 853b568a5 -> e0ed8e7ff

WICKET-5441 IResourceCachingStrategy implementations should only set caching if 
version matches

(cherry picked from commit 8ccb1f6de4479bef623bc97dd4ad4abeb7b802df)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e0ed8e7f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e0ed8e7f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e0ed8e7f

Branch: refs/heads/wicket-6.x
Commit: e0ed8e7ff5981cffc1ba6cb9d5eb7080f00235ef
Parents: 853b568
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Dec 16 15:16:22 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Mon Dec 16 15:16:55 2013 +0200

----------------------------------------------------------------------
 ...enameWithVersionResourceCachingStrategy.java |  9 +++-
 ...tringWithVersionResourceCachingStrategy.java |  9 +++-
 ...eWithVersionResourceCachingStrategyTest.java | 49 ++++++++++++++++----
 ...gWithVersionResourceCachingStrategyTest.java | 45 +++++++++++++++---
 4 files changed, 94 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e0ed8e7f/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
index ee8e60c..0d461a8 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
@@ -196,7 +196,12 @@ public class FilenameWithVersionResourceCachingStrategy 
implements IResourceCach
        @Override
        public void decorateResponse(AbstractResource.ResourceResponse 
response, IStaticCacheableResource resource)
        {
-               response.setCacheDurationToMaximum();
-               response.setCacheScope(WebResponse.CacheScope.PUBLIC);
+               String requestedVersion = 
RequestCycle.get().getMetaData(URL_VERSION);
+               String calculatedVersion = 
this.resourceVersion.getVersion(resource);
+               if (calculatedVersion != null && 
calculatedVersion.equals(requestedVersion))
+               {
+                       response.setCacheDurationToMaximum();
+                       response.setCacheScope(WebResponse.CacheScope.PUBLIC);
+               }
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/e0ed8e7f/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
index 292f159..e40e082 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
@@ -127,7 +127,12 @@ public class QueryStringWithVersionResourceCachingStrategy 
implements IResourceC
        @Override
        public void decorateResponse(AbstractResource.ResourceResponse 
response, IStaticCacheableResource resource)
        {
-               response.setCacheDurationToMaximum();
-               response.setCacheScope(WebResponse.CacheScope.PUBLIC);
+               String requestedVersion = 
RequestCycle.get().getMetaData(URL_VERSION);
+               String calculatedVersion = 
this.resourceVersion.getVersion(resource);
+               if (calculatedVersion != null && 
calculatedVersion.equals(requestedVersion))
+               {
+                       response.setCacheDurationToMaximum();
+                       response.setCacheScope(WebResponse.CacheScope.PUBLIC);
+               }
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/e0ed8e7f/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
index 4923003..9ad3a7f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
@@ -16,12 +16,17 @@
  */
 package org.apache.wicket.request.resource.caching;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import 
org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
+import org.apache.wicket.util.tester.BaseWicketTester;
 import org.apache.wicket.util.tester.WicketTester;
+import org.apache.wicket.util.time.Duration;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,6 +35,8 @@ import org.junit.Test;
  */
 public class FilenameWithVersionResourceCachingStrategyTest extends Assert
 {
+       public static final String TEST_RESOURCE_VERSION = 
"9A0364B9E99BB480DD25E1F0284C8555";
+
        private final String versionPrefix = "--vers--";
        private final IResourceVersion resourceVersion = new 
MessageDigestResourceVersion();
        private final FilenameWithVersionResourceCachingStrategy strategy =
@@ -41,13 +48,13 @@ public class FilenameWithVersionResourceCachingStrategyTest 
extends Assert
                ResourceUrl resourceUrl = new ResourceUrl("some-resource.txt", 
new PageParameters());
                strategy.decorateUrl(resourceUrl, new TestResource());
 
-               
assertEquals("some-resource--vers--9A0364B9E99BB480DD25E1F0284C8555.txt", 
resourceUrl.getFileName());
+               
assertEquals("some-resource--vers--"+TEST_RESOURCE_VERSION+".txt", 
resourceUrl.getFileName());
        }
 
        @Test
        public void testUndecorateUrl() throws Exception
        {
-               ResourceUrl resourceUrl = new 
ResourceUrl("some-resource--vers--9A0364B9E99BB480DD25E1F0284C8555.txt", new 
PageParameters());
+               ResourceUrl resourceUrl = new 
ResourceUrl("some-resource--vers--"+TEST_RESOURCE_VERSION+".txt", new 
PageParameters());
                strategy.undecorateUrl(resourceUrl);
 
                assertEquals("some-resource.txt", resourceUrl.getFileName());
@@ -56,11 +63,37 @@ public class FilenameWithVersionResourceCachingStrategyTest 
extends Assert
        @Test
        public void testDecorateResponse() throws Exception
        {
-               AbstractResource.ResourceResponse response = new 
AbstractResource.ResourceResponse();
-               strategy.decorateResponse(response, new TestResource());
+               Duration defaultDuration = Duration.minutes(60);
+
+               // setup RequestCycle
+               BaseWicketTester tester = new BaseWicketTester();
+               RequestCycle requestCycle = ThreadContext.getRequestCycle();
+               
Application.get().getResourceSettings().setDefaultCacheDuration(defaultDuration);
+
+               try
+               {
+                       // version match
+                       
requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, 
TEST_RESOURCE_VERSION);
+
+                       AbstractResource.ResourceResponse response = new 
AbstractResource.ResourceResponse();
+                       strategy.decorateResponse(response, new TestResource());
+
+                       assertEquals(WebResponse.MAX_CACHE_DURATION, 
response.getCacheDuration());
+                       assertEquals(WebResponse.CacheScope.PUBLIC, 
response.getCacheScope());
 
-               assertEquals(WebResponse.MAX_CACHE_DURATION, 
response.getCacheDuration());
-               assertEquals(WebResponse.CacheScope.PUBLIC, 
response.getCacheScope());
+                       // version mismatch
+                       
requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo");
+
+                       response = new AbstractResource.ResourceResponse();
+                       strategy.decorateResponse(response, new TestResource());
+
+                       assertEquals(defaultDuration, 
response.getCacheDuration());
+                       assertEquals(WebResponse.CacheScope.PRIVATE, 
response.getCacheScope());
+               }
+               finally
+               {
+                       tester.destroy();
+               }
        }
 
        @Test
@@ -71,12 +104,12 @@ public class 
FilenameWithVersionResourceCachingStrategyTest extends Assert
 
                try
                {
-                       ResourceUrl resourceUrl = new 
ResourceUrl("some-resource--vers--9A0364B9E99BB480DD25E1F0284C8555.txt", new 
PageParameters());
+                       ResourceUrl resourceUrl = new 
ResourceUrl("some-resource--vers--"+TEST_RESOURCE_VERSION+".txt", new 
PageParameters());
                        strategy.undecorateUrl(resourceUrl);
 
                        String version = 
tester.getRequestCycle().getMetaData(IResourceCachingStrategy.URL_VERSION);
 
-                       assertEquals("9A0364B9E99BB480DD25E1F0284C8555", 
version);
+                       assertEquals(TEST_RESOURCE_VERSION, version);
                }
                finally
                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/e0ed8e7f/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
index acfee96..6611a57 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
@@ -16,12 +16,17 @@
  */
 package org.apache.wicket.request.resource.caching;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import 
org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
+import org.apache.wicket.util.tester.BaseWicketTester;
 import org.apache.wicket.util.tester.WicketTester;
+import org.apache.wicket.util.time.Duration;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,6 +35,8 @@ import org.junit.Test;
  */
 public class QueryStringWithVersionResourceCachingStrategyTest extends Assert
 {
+       public static final String TEST_RESOURCE_VERSION = 
"9A0364B9E99BB480DD25E1F0284C8555";
+
        private final String versionParameter = "vers";
        private final IResourceVersion resourceVersion = new 
MessageDigestResourceVersion();
        private final IResourceCachingStrategy strategy =
@@ -42,14 +49,14 @@ public class 
QueryStringWithVersionResourceCachingStrategyTest extends Assert
                strategy.decorateUrl(resourceUrl, new TestResource());
 
                assertEquals("some-resource.txt", resourceUrl.getFileName());
-               assertEquals("9A0364B9E99BB480DD25E1F0284C8555", 
resourceUrl.getParameters().get(versionParameter).toString());
+               assertEquals(TEST_RESOURCE_VERSION, 
resourceUrl.getParameters().get(versionParameter).toString());
        }
 
        @Test
        public void testUndecorateUrl() throws Exception
        {
                PageParameters urlParameters = new PageParameters();
-               urlParameters.add(versionParameter, 
"9A0364B9E99BB480DD25E1F0284C8555");
+               urlParameters.add(versionParameter, TEST_RESOURCE_VERSION);
                ResourceUrl resourceUrl = new ResourceUrl("some-resource.txt", 
urlParameters);
                strategy.undecorateUrl(resourceUrl);
 
@@ -60,11 +67,37 @@ public class 
QueryStringWithVersionResourceCachingStrategyTest extends Assert
        @Test
        public void testDecorateResponse() throws Exception
        {
-               AbstractResource.ResourceResponse response = new 
AbstractResource.ResourceResponse();
-               strategy.decorateResponse(response, new TestResource());
+               Duration defaultDuration = Duration.minutes(60);
+
+               // setup RequestCycle
+               BaseWicketTester tester = new BaseWicketTester();
+               RequestCycle requestCycle = ThreadContext.getRequestCycle();
+               
Application.get().getResourceSettings().setDefaultCacheDuration(defaultDuration);
+
+               try
+               {
+                       // version match
+                       
requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, 
TEST_RESOURCE_VERSION);
+
+                       AbstractResource.ResourceResponse response = new 
AbstractResource.ResourceResponse();
+                       strategy.decorateResponse(response, new TestResource());
+
+                       assertEquals(WebResponse.MAX_CACHE_DURATION, 
response.getCacheDuration());
+                       assertEquals(WebResponse.CacheScope.PUBLIC, 
response.getCacheScope());
 
-               assertEquals(WebResponse.MAX_CACHE_DURATION, 
response.getCacheDuration());
-               assertEquals(WebResponse.CacheScope.PUBLIC, 
response.getCacheScope());
+                       // version mismatch
+                       
requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo");
+
+                       response = new AbstractResource.ResourceResponse();
+                       strategy.decorateResponse(response, new TestResource());
+
+                       assertEquals(defaultDuration, 
response.getCacheDuration());
+                       assertEquals(WebResponse.CacheScope.PRIVATE, 
response.getCacheScope());
+               }
+               finally
+               {
+                       tester.destroy();
+               }
        }
 
        @Test

Reply via email to