From ade756b7e46ab3c3fbf89f3d9175fecdfc21bccd Mon Sep 17 00:00:00 2001 From: Pascal Lacombe Date: Wed, 26 Jul 2023 16:09:11 -0400 Subject: [PATCH] Add disabled test for HTTPCLIENT-2284 --- .../impl/cache/SimpleHttpCacheStorage.java | 4 +-- .../http/impl/cache/TestBasicHttpCache.java | 30 ++++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/SimpleHttpCacheStorage.java b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/SimpleHttpCacheStorage.java index 8dcfad757..337d30b9f 100644 --- a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/SimpleHttpCacheStorage.java +++ b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/SimpleHttpCacheStorage.java @@ -39,8 +39,8 @@ class SimpleHttpCacheStorage implements HttpCacheStorage { public final Map map; - public SimpleHttpCacheStorage() { - map = new HashMap<>(); + public SimpleHttpCacheStorage(final int maxEntries) { + map = new CacheMap(maxEntries); } @Override diff --git a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestBasicHttpCache.java b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestBasicHttpCache.java index 2986fa607..9c9c99265 100644 --- a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestBasicHttpCache.java +++ b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestBasicHttpCache.java @@ -58,6 +58,7 @@ import org.hamcrest.MatcherAssert; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -74,7 +75,7 @@ public void setUp() throws Exception { host = new HttpHost("foo.example.com"); now = Instant.now(); tenSecondsAgo = now.minusSeconds(10); - backing = Mockito.spy(new SimpleHttpCacheStorage()); + backing = Mockito.spy(new SimpleHttpCacheStorage(10)); impl = new BasicHttpCache(new HeapResourceFactory(), backing); } @@ -262,6 +263,33 @@ public void testGetVariantCacheEntriesReturnsAllVariants() throws Exception { MatcherAssert.assertThat(variants.get(hit1.getEntryKey()), HttpCacheEntryMatcher.equivalent(hit1.entry)); MatcherAssert.assertThat(variants.get(hit2.getEntryKey()), HttpCacheEntryMatcher.equivalent(hit2.entry)); } + + @Test + @Disabled("HTTPCLIENT-2284 Fails because dangling variant entries are not cleaned from root variantMap") + public void testPutVariantEntriesCleanup() throws Exception { + final HttpHost host = new HttpHost("foo.example.com"); + final HttpRequest req = new HttpGet("http://foo.example.com/bar"); + + final HttpResponse resp = HttpTestUtils.make200Response(); + resp.setHeader("Date", DateUtils.formatStandardDate(now)); + resp.setHeader("Cache-Control", "max-age=3600, public"); + resp.setHeader("ETag", "\"etag1\""); + resp.setHeader("Vary", "x-variant"); + resp.setHeader("Content-Encoding","gzip"); + + CacheHit hit = null; + for (int i = 0; i < 10; ++i) { + req.setHeader("x-variant", Long.toString(now.getEpochSecond() + i)); + hit = impl.store(host, req, resp, null, now, now); + } + + // Expect cache storage to contain 10 entries, 9 being variant and 1 being the root + assertEquals(10, backing.map.size()); + + // Expect root entry to contain 9 variants, as the oldest variant was evicted due to + // cache size being limited to 10 + assertEquals(9, impl.getInternal(hit.rootKey).getVariantMap().size()); + } @Test public void testInvalidatesUnsafeRequests() throws Exception { -- 2.41.0