From 0aa14be89305bfa5fb490e458cc6f688b11a9698 Mon Sep 17 00:00:00 2001 From: Stefan Fussenegger Date: Thu, 12 Dec 2013 15:39:51 +0100 Subject: [PATCH 1/2] WICKET-5441 IResourceCachingStrategy implementations should only set caching if version matches --- ...ameWithVersionResourceCachingStrategy.java | 8 +++- ...ingWithVersionResourceCachingStrategy.java | 8 +++- ...ithVersionResourceCachingStrategyTest.java | 37 ++++++++++++++++--- ...ithVersionResourceCachingStrategyTest.java | 37 ++++++++++++++++--- 4 files changed, 76 insertions(+), 14 deletions(-) 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 2125f35b0e8..1d49ff6aad3 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,11 @@ public void undecorateUrl(ResourceUrl url) @Override public void decorateResponse(AbstractResource.ResourceResponse response, IStaticCacheableResource resource) { - response.setCacheDurationToMaximum(); - response.setCacheScope(WebResponse.CacheScope.PUBLIC); + String requestedVersion = RequestCycle.get().getMetaData(URL_VERSION); + if (requestedVersion != null && requestedVersion.equals(this.resourceVersion.getVersion(resource))) + { + response.setCacheDurationToMaximum(); + response.setCacheScope(WebResponse.CacheScope.PUBLIC); + } } } 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 292f1590505..0faaaa73ba7 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,11 @@ public void undecorateUrl(ResourceUrl url) @Override public void decorateResponse(AbstractResource.ResourceResponse response, IStaticCacheableResource resource) { - response.setCacheDurationToMaximum(); - response.setCacheScope(WebResponse.CacheScope.PUBLIC); + String requestedVersion = RequestCycle.get().getMetaData(URL_VERSION); + if (requestedVersion != null && requestedVersion.equals(this.resourceVersion.getVersion(resource))) + { + response.setCacheDurationToMaximum(); + response.setCacheScope(WebResponse.CacheScope.PUBLIC); + } } } 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 4923003622e..503098ea902 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; @@ -56,11 +61,33 @@ public void testUndecorateUrl() throws Exception @Test public void testDecorateResponse() throws Exception { - AbstractResource.ResourceResponse response = new AbstractResource.ResourceResponse(); - strategy.decorateResponse(response, new TestResource()); - - assertEquals(WebResponse.MAX_CACHE_DURATION, response.getCacheDuration()); - assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); + 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, "9A0364B9E99BB480DD25E1F0284C8555"); + + AbstractResource.ResourceResponse response = new AbstractResource.ResourceResponse(); + strategy.decorateResponse(response, new TestResource()); + + assertEquals(WebResponse.MAX_CACHE_DURATION, response.getCacheDuration()); + assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); + + // version missmatch + requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo"); + + response = new AbstractResource.ResourceResponse(); + strategy.decorateResponse(response, new TestResource()); + + assertEquals(defaultDuration, response.getCacheDuration()); + } finally { + tester.destroy(); + } } @Test 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 acfee961cf5..0fbd91c6a52 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; @@ -60,11 +65,33 @@ public void testUndecorateUrl() throws Exception @Test public void testDecorateResponse() throws Exception { - AbstractResource.ResourceResponse response = new AbstractResource.ResourceResponse(); - strategy.decorateResponse(response, new TestResource()); - - assertEquals(WebResponse.MAX_CACHE_DURATION, response.getCacheDuration()); - assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); + 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, "9A0364B9E99BB480DD25E1F0284C8555"); + + AbstractResource.ResourceResponse response = new AbstractResource.ResourceResponse(); + strategy.decorateResponse(response, new TestResource()); + + assertEquals(WebResponse.MAX_CACHE_DURATION, response.getCacheDuration()); + assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); + + // version missmatch + requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo"); + + response = new AbstractResource.ResourceResponse(); + strategy.decorateResponse(response, new TestResource()); + + assertEquals(defaultDuration, response.getCacheDuration()); + } finally { + tester.destroy(); + } } @Test From 71d4c0fb70d03008cbff8c47cedadc1f816dd68b Mon Sep 17 00:00:00 2001 From: Stefan Fussenegger Date: Thu, 12 Dec 2013 15:48:49 +0100 Subject: [PATCH 2/2] WICKET-5441 IResourceCachingStrategy implementations should only set caching if version matches - check cacheScope in unit test --- .../FilenameWithVersionResourceCachingStrategyTest.java | 3 ++- .../QueryStringWithVersionResourceCachingStrategyTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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 503098ea902..584325bf474 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 @@ -79,12 +79,13 @@ public void testDecorateResponse() throws Exception assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); // version missmatch - requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo"); + 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(); } 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 0fbd91c6a52..eb85b809a12 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 @@ -83,12 +83,13 @@ public void testDecorateResponse() throws Exception assertEquals(WebResponse.CacheScope.PUBLIC, response.getCacheScope()); // version missmatch - requestCycle.setMetaData(IResourceCachingStrategy.URL_VERSION, "foo"); + 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(); }