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
