diff --git a/network/src/main/java/org/openjdk/skara/network/RestRequestCache.java b/network/src/main/java/org/openjdk/skara/network/RestRequestCache.java index 60ec22fb5..4940a8a27 100644 --- a/network/src/main/java/org/openjdk/skara/network/RestRequestCache.java +++ b/network/src/main/java/org/openjdk/skara/network/RestRequestCache.java @@ -217,6 +217,14 @@ HttpResponse send(String authId, HttpRequest.Builder requestBuilder) thr } try (var ignored = new LockWithTimeout(authLock)) { return client.send(finalRequest, HttpResponse.BodyHandlers.ofString()); + } finally { + // Invalidate any related GET caches + var postUriString = unauthenticatedRequest.uri().toString(); + for (var cachedResponse : cachedResponses.keySet()) { + if (cachedResponse.unauthenticatedRequest.uri().toString().startsWith(postUriString)) { + cachedUpdated.put(cachedResponse, Instant.now().minus(Duration.ofDays(1))); + } + } } } } diff --git a/network/src/test/java/org/openjdk/skara/network/RestRequestTests.java b/network/src/test/java/org/openjdk/skara/network/RestRequestTests.java index 77e5a4cc0..f76f23231 100644 --- a/network/src/test/java/org/openjdk/skara/network/RestRequestTests.java +++ b/network/src/test/java/org/openjdk/skara/network/RestRequestTests.java @@ -268,6 +268,38 @@ void cached() throws IOException { } } + @Test + void cacheFlush() throws IOException { + try (var receiver = new RestReceiver()) { + var request = new RestRequest(receiver.getEndpoint()); + request.get("/test").execute(); + assertFalse(receiver.usedCached()); + request.post("/test").execute(); + request.get("/test").execute(); + assertFalse(receiver.usedCached()); + var anotherRequest = new RestRequest(receiver.getEndpoint()); + request.post("/test").execute(); + anotherRequest.get("/test").execute(); + assertFalse(receiver.usedCached()); + } + } + + @Test + void cacheFlushPartial() throws IOException { + try (var receiver = new RestReceiver()) { + var request = new RestRequest(receiver.getEndpoint()); + request.get("/test?1").execute(); + assertFalse(receiver.usedCached()); + request.get("/test?1").execute(); + assertTrue(receiver.usedCached()); + request.post("/test").execute(); + request.get("/test?1").execute(); + assertFalse(receiver.usedCached()); + request.get("/test?1").execute(); + assertTrue(receiver.usedCached()); + } + } + @Test void cachedSeparateAuth() throws IOException { try (var receiver = new RestReceiver()) {