Skip to content

Commit 1563f30

Browse files
committed
BAEL-3353: added more examples to PR
1 parent 37e1f84 commit 1563f30

3 files changed

Lines changed: 134 additions & 30 deletions

File tree

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,37 @@
11
package controllers;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.google.common.collect.ImmutableMap;
6+
import java.util.Map;
37
import play.mvc.Controller;
8+
import play.mvc.Http;
49
import play.mvc.Result;
510

611
/**
7-
* This controller contains an action to handle HTTP requests
8-
* to the application's home page.
12+
* This controller contains an action to handle HTTP requests to the application's home page.
913
*/
1014
public class HomeController extends Controller {
1115

1216
/**
13-
* An action that renders an HTML page with a welcome message.
14-
* The configuration in the <code>routes</code> file means that
15-
* this method will be called when the application receives a
17+
* An action that renders an HTML page with a welcome message. The configuration in the
18+
* <code>routes</code> file means that this method will be called when the application receives
19+
* a
1620
* <code>GET</code> request with a path of <code>/</code>.
1721
*/
18-
public Result index() {
19-
return ok("OK");
22+
public Result index(Http.Request request) throws JsonProcessingException {
23+
return ok(printStats(request));
24+
}
25+
26+
private String printStats(Http.Request request) throws JsonProcessingException {
27+
Map<String, String[]> stringMap = request.body()
28+
.asFormUrlEncoded();
29+
Map<String, Object> map = ImmutableMap.of(
30+
"Result", "ok",
31+
"GetParams", request.queryString(),
32+
"PostParams", stringMap == null ? "null" : stringMap,
33+
"Headers", request.getHeaders().toMap()
34+
);
35+
return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(map);
2036
}
2137
}

play-framework/async-http/conf/routes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
# ~~~~
44

55
# An example controller showing a sample home page
6-
GET / controllers.HomeController.index
6+
GET / controllers.HomeController.index(request: Request)
7+
POST / controllers.HomeController.index(request: Request)
78

89
# Map static resources from the /public folder to the /assets URL path
910
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)

play-framework/async-http/test/controllers/HomeControllerTest.java

Lines changed: 109 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package controllers;
22

3+
import java.util.concurrent.ExecutionException;
34
import org.junit.Before;
45
import org.junit.Test;
56
import org.slf4j.Logger;
@@ -8,6 +9,7 @@
89
import play.inject.guice.GuiceApplicationBuilder;
910
import play.libs.concurrent.Futures;
1011
import play.libs.ws.WSClient;
12+
import play.libs.ws.WSResponse;
1113
import play.libs.ws.ahc.AhcCurlRequestLogger;
1214
import play.mvc.Result;
1315
import play.mvc.Results;
@@ -25,7 +27,12 @@
2527
import static org.junit.Assert.assertEquals;
2628
import static play.mvc.Http.Status.SERVICE_UNAVAILABLE;
2729

30+
import play.mvc.Http.MultipartFormData.*;
31+
import akka.stream.javadsl.*;
32+
import akka.util.ByteString;
33+
2834
public class HomeControllerTest extends WithServer {
35+
2936
private final Logger log = LoggerFactory.getLogger(HomeControllerTest.class);
3037
private String url;
3138
private int port;
@@ -47,41 +54,120 @@ public void setup() {
4754
}
4855
}
4956

57+
@Test
58+
public void givenASingleGetRequestWhenResponseThenBlockWithCompletableAndLog()
59+
throws InterruptedException, ExecutionException {
60+
AtomicInteger completedReqs = new AtomicInteger(0);
61+
WSClient ws = play.test.WSTestClient.newClient(port);
62+
WSResponse wsResponse = ws.url(url)
63+
.setRequestFilter(new AhcCurlRequestLogger())
64+
.addHeader("key", "value")
65+
.addQueryParameter("num", "" + 1)
66+
.get()
67+
.toCompletableFuture()
68+
.get();
69+
70+
log.debug("Thread#" + Thread.currentThread()
71+
.getId() + " Request complete: Response code = "
72+
+ wsResponse.getStatus()
73+
+ " | Response: " + wsResponse.getBody() + " | Current Time:"
74+
+ System.currentTimeMillis());
75+
}
76+
77+
@Test
78+
public void givenASingleGetRequestWhenResponseThenLog() throws InterruptedException {
79+
AtomicInteger completedReqs = new AtomicInteger(0);
80+
WSClient ws = play.test.WSTestClient.newClient(port);
81+
ws.url(url)
82+
.setRequestFilter(new AhcCurlRequestLogger())
83+
.addHeader("key", "value")
84+
.addQueryParameter("num", "" + 1)
85+
.get()
86+
.thenAccept(r -> {
87+
log.debug("Thread#" + Thread.currentThread()
88+
.getId() + " Request complete: Response code = "
89+
+ r.getStatus()
90+
+ " | Response: " + r.getBody() + " | Current Time:" + System.currentTimeMillis());
91+
completedReqs.incrementAndGet();
92+
});
93+
94+
log.debug(
95+
"Waiting for requests to be completed. Current Time: " + System.currentTimeMillis());
96+
while (completedReqs.get() != 1) {
97+
Thread.sleep(100);
98+
}
99+
log.debug("All requests have been completed. Exiting test.");
100+
}
101+
102+
@Test
103+
public void givenASinglePostRequestWhenResponseThenLog() throws InterruptedException {
104+
AtomicInteger completedReqs = new AtomicInteger(0);
105+
WSClient ws = play.test.WSTestClient.newClient(port);
106+
ws.url(url)
107+
.setContentType("application/x-www-form-urlencoded")
108+
.post("key1=value1&key2=value2")
109+
.thenAccept(r -> {
110+
log.debug("Thread#" + Thread.currentThread()
111+
.getId() + " Request complete: Response code = "
112+
+ r.getStatus()
113+
+ " | Response: " + r.getBody() + " | Current Time:" + System.currentTimeMillis());
114+
completedReqs.incrementAndGet();
115+
});
116+
117+
log.debug(
118+
"Waiting for requests to be completed. Current Time: " + System.currentTimeMillis());
119+
while (completedReqs.get() != 1) {
120+
Thread.sleep(100);
121+
}
122+
log.debug("All requests have been completed. Exiting test.");
123+
}
124+
50125
@Test
51126
public void givenMultipleRequestsWhenResponseThenLog() throws InterruptedException {
52127
AtomicInteger completedReqs = new AtomicInteger(0);
53128
WSClient ws = play.test.WSTestClient.newClient(port);
54-
IntStream.range(0, 100).parallel().forEach(num ->
55-
ws.url(url)
56-
.setRequestFilter(new AhcCurlRequestLogger())
57-
.addHeader("key", "value")
58-
.addQueryParameter("num", "" + num)
59-
.get()
60-
.thenAccept(r -> {
61-
log.debug("Thread#" + num + " Request complete: Response code = " + r.getStatus() + " | Response: " + r.getBody() + " | Current Time:" + System.currentTimeMillis());
62-
completedReqs.incrementAndGet();
63-
})
64-
);
129+
IntStream.range(0, 100)
130+
.parallel()
131+
.forEach(num ->
132+
ws.url(url)
133+
.setRequestFilter(new AhcCurlRequestLogger())
134+
.addHeader("key", "value")
135+
.addQueryParameter("num", "" + num)
136+
.get()
137+
.thenAccept(r -> {
138+
log.debug(
139+
"Thread#" + num + " Request complete: Response code = " + r.getStatus()
140+
+ " | Response: " + r.getBody() + " | Current Time:"
141+
+ System.currentTimeMillis());
142+
completedReqs.incrementAndGet();
143+
})
144+
);
65145

66-
log.debug("Waiting for requests to be completed. Current Time: " + System.currentTimeMillis());
146+
log.debug(
147+
"Waiting for requests to be completed. Current Time: " + System.currentTimeMillis());
67148
while (completedReqs.get() != 100) {
68149
Thread.sleep(100);
69150
}
70151
log.debug("All requests have been completed. Exiting test.");
71152
}
72153

73154
@Test
74-
public void givenLongResponseWhenTimeoutThenHandle() {
155+
public void givenLongResponseWhenTimeoutThenHandle() throws InterruptedException {
75156
WSClient ws = play.test.WSTestClient.newClient(port);
76-
Futures futures = app.injector().instanceOf(Futures.class);
77-
CompletionStage<Result> f = futures.timeout(ws.url(url).setRequestTimeout(Duration.of(1, SECONDS)).get().thenApply(result -> {
78-
try {
79-
Thread.sleep(2000L);
80-
return Results.ok();
81-
} catch (InterruptedException e) {
82-
return Results.status(SERVICE_UNAVAILABLE);
83-
}
84-
}), 1L, TimeUnit.SECONDS);
157+
Futures futures = app.injector()
158+
.instanceOf(Futures.class);
159+
CompletionStage<Result> f = futures.timeout(ws.url(url)
160+
.setRequestTimeout(Duration.of(1, SECONDS))
161+
.get()
162+
.thenApply(result -> {
163+
try {
164+
Thread.sleep(2000L);
165+
return Results.ok();
166+
} catch (InterruptedException e) {
167+
return Results.status(
168+
SERVICE_UNAVAILABLE);
169+
}
170+
}), 1L, TimeUnit.SECONDS);
85171
CompletionStage<Object> res = f.handleAsync((result, e) -> {
86172
if (e != null) {
87173
log.error("Exception thrown", e);
@@ -93,5 +179,6 @@ public void givenLongResponseWhenTimeoutThenHandle() {
93179
res.thenAccept(result ->
94180
assertEquals(TimeoutException.class, result)
95181
);
182+
Thread.sleep(2500);
96183
}
97184
}

0 commit comments

Comments
 (0)