Skip to content
This repository was archived by the owner on Aug 6, 2025. It is now read-only.

Commit ef7f643

Browse files
committed
flexible to set ttl for each executeRequest
1 parent ec33fb3 commit ef7f643

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-3
lines changed

src/main/java/com/wego/httpcache/services/AsyncHttpCacheService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@
99
public interface AsyncHttpCacheService {
1010
Optional<ListenableFuture<Response>> executeRequest(
1111
Request request, AsyncCompletionHandlerBase handler) throws Exception;
12+
13+
Optional<ListenableFuture<Response>> executeRequest(
14+
Request request, AsyncCompletionHandlerBase handler, long ttl) throws Exception;
1215
}

src/main/java/com/wego/httpcache/services/impl/AsyncHttpCacheServiceImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public AsyncHttpCacheServiceImpl(@Assisted AsyncHttpClient asyncHttpClient, @Ass
3232
@Override
3333
public Optional<ListenableFuture<Response>> executeRequest(
3434
Request request, AsyncCompletionHandlerBase handler) throws Exception {
35+
return executeRequest(request, handler, ttl);
36+
}
37+
38+
@Override
39+
public Optional<ListenableFuture<Response>> executeRequest(
40+
Request request, AsyncCompletionHandlerBase handler, long ttl) throws Exception {
3541

3642
ListenableFuture<Response> responseListenableFuture = null;
3743
String responseId = buildResponseId(request);
@@ -42,7 +48,8 @@ public Optional<ListenableFuture<Response>> executeRequest(
4248
handler.onCompleted(cachedResponse.get());
4349
} else {
4450
responseListenableFuture =
45-
this.asyncHttpClient.executeRequest(request, buildCachingHandler(handler, responseId));
51+
this.asyncHttpClient.executeRequest(
52+
request, buildCachingHandler(handler, responseId, ttl));
4653
}
4754

4855
return Optional.ofNullable(responseListenableFuture);
@@ -58,14 +65,14 @@ private String buildResponseId(Request request) {
5865
}
5966

6067
private AsyncCompletionHandlerBase buildCachingHandler(
61-
final AsyncCompletionHandlerBase handler, final String responseId) {
68+
final AsyncCompletionHandlerBase handler, final String responseId, final long cachingTtl) {
6269

6370
return new AsyncCompletionHandlerBase() {
6471
@Override
6572
public Response onCompleted(Response response) throws Exception {
6673
CachedResponse cachedResponse =
6774
new CachedResponse.Builder(response).setId(responseId).build();
68-
cachedResponseService.save(cachedResponse, ttl);
75+
cachedResponseService.save(cachedResponse, cachingTtl);
6976

7077
return handler.onCompleted(response);
7178
}

src/test/java/com/wego/httpcache/services/impl/TestAsyncHttpCachedServiceImpl.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,41 @@ public void executeRequest_whenWasNotCached_executeHttpRequestAndCacheNewRespons
112112
assertThat(savedCachedResponses.get(0).getId()).isNotEmpty();
113113
}
114114

115+
@Test
116+
public void executeRequest_withTtl_whenWasNotCached_executeHttpRequestAndCacheNewResponse()
117+
throws Exception {
118+
final Request request =
119+
new RequestBuilder().setMethod("GET").setUrl("http://localhost:8089/resources/").build();
120+
final List<CachedResponse> savedCachedResponses = Lists.newArrayList();
121+
final long customTtl = 10;
122+
123+
stubFor(
124+
get(urlEqualTo("/resources/"))
125+
.willReturn(
126+
aResponse()
127+
.withStatus(200)
128+
.withHeader("Content-Type", "text/json")
129+
.withBody("This is body")));
130+
131+
when(cachedResponseService.findById(anyString())).thenReturn(Optional.empty());
132+
when(cachedResponseService.save(any(), eq(customTtl)))
133+
.thenAnswer(
134+
invocation -> {
135+
CachedResponse cr = invocation.getArgumentAt(0, CachedResponse.class);
136+
savedCachedResponses.add(cr);
137+
return Optional.of(cr);
138+
});
139+
140+
Optional<ListenableFuture<Response>> responseListenableFuture =
141+
asyncHttpCacheService.executeRequest(request, new AsyncCompletionHandlerBase(), customTtl);
142+
143+
responseListenableFuture.get().get();
144+
145+
verify(asyncHttpClient).executeRequest(any(), any());
146+
assertThat(savedCachedResponses.size()).isEqualTo(1);
147+
assertThat(savedCachedResponses.get(0).getId()).isNotEmpty();
148+
}
149+
115150
@Test
116151
public void buildResponseId_returnsDifferentIdsForDifferentRequest() throws Exception {
117152

0 commit comments

Comments
 (0)