Skip to content

Commit 0b77060

Browse files
committed
Add tests for connection events
This is groundwork for adding more events in AsyncHttpClient#732. Sadly I couldn’t put these higher up in the test hierarchy, because the Grizzly provider doesn’t seem to fire most events.
1 parent 39c696c commit 0b77060

File tree

4 files changed

+193
-4
lines changed

4 files changed

+193
-4
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package org.asynchttpclient.async.util;
2+
3+
import org.asynchttpclient.AsyncCompletionHandlerBase;
4+
import org.asynchttpclient.AsyncHandlerExtensions;
5+
import org.asynchttpclient.HttpResponseHeaders;
6+
import org.asynchttpclient.HttpResponseStatus;
7+
import org.asynchttpclient.Response;
8+
import org.testng.Assert;
9+
10+
import java.util.Queue;
11+
import java.util.concurrent.ConcurrentLinkedQueue;
12+
import java.util.concurrent.CountDownLatch;
13+
import java.util.concurrent.TimeUnit;
14+
15+
public class EventCollectingHandler extends AsyncCompletionHandlerBase implements AsyncHandlerExtensions {
16+
public Queue<String> firedEvents = new ConcurrentLinkedQueue<String>();
17+
private CountDownLatch completionLatch = new CountDownLatch(1);
18+
19+
public void waitForCompletion(int timeout, TimeUnit unit) throws InterruptedException {
20+
if (!completionLatch.await(timeout, unit)) {
21+
Assert.fail("Timeout out");
22+
}
23+
}
24+
25+
@Override
26+
public Response onCompleted(Response response) throws Exception {
27+
firedEvents.add("Completed");
28+
try {
29+
return super.onCompleted(response);
30+
} finally {
31+
completionLatch.countDown();
32+
}
33+
}
34+
35+
@Override
36+
public STATE onStatusReceived(HttpResponseStatus status) throws Exception {
37+
firedEvents.add("StatusReceived");
38+
return super.onStatusReceived(status);
39+
}
40+
41+
@Override
42+
public STATE onHeadersReceived(HttpResponseHeaders headers) throws Exception {
43+
firedEvents.add("HeadersReceived");
44+
return super.onHeadersReceived(headers);
45+
}
46+
47+
@Override
48+
public STATE onHeaderWriteCompleted() {
49+
firedEvents.add("HeaderWriteCompleted");
50+
return super.onHeaderWriteCompleted();
51+
}
52+
53+
@Override
54+
public STATE onContentWriteCompleted() {
55+
firedEvents.add("ContentWriteCompleted");
56+
return super.onContentWriteCompleted();
57+
}
58+
59+
@Override
60+
public void onOpenConnection() {
61+
firedEvents.add("OpenConnection");
62+
}
63+
64+
@Override
65+
public void onConnectionOpen() {
66+
firedEvents.add("ConnectionOpen");
67+
}
68+
69+
@Override
70+
public void onPoolConnection() {
71+
firedEvents.add("PoolConnection");
72+
}
73+
74+
@Override
75+
public void onConnectionPooled() {
76+
firedEvents.add("ConnectionPooled");
77+
}
78+
79+
@Override
80+
public void onSendRequest(Object request) {
81+
firedEvents.add("SendRequest");
82+
}
83+
84+
@Override
85+
public void onRetry() {
86+
firedEvents.add("Retry");
87+
}
88+
}

providers/netty/src/test/java/org/asynchttpclient/providers/netty/NettyAsyncProviderBasicTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,20 @@
1212
*/
1313
package org.asynchttpclient.providers.netty;
1414

15+
import static org.testng.Assert.assertEquals;
16+
1517
import org.asynchttpclient.AsyncHttpClient;
1618
import org.asynchttpclient.AsyncHttpClientConfig;
1719
import org.asynchttpclient.AsyncHttpProviderConfig;
20+
import org.asynchttpclient.Request;
21+
import org.asynchttpclient.RequestBuilder;
1822
import org.asynchttpclient.async.AsyncProvidersBasicTest;
23+
import org.asynchttpclient.async.util.EventCollectingHandler;
24+
import org.testng.annotations.Test;
25+
26+
import java.util.Arrays;
27+
import java.util.List;
28+
import java.util.concurrent.TimeUnit;
1929

2030
import io.netty.channel.ChannelOption;
2131

@@ -35,4 +45,28 @@ public AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
3545
protected String acceptEncodingHeader() {
3646
return "gzip,deflate";
3747
}
48+
49+
@Test(groups = { "standalone", "default_provider", "async" })
50+
public void testNewConnectionEventsFired() throws Exception {
51+
Request request = new RequestBuilder("GET").setUrl("http://127.0.0.1:" + port1 + "/Test").build();
52+
53+
try (AsyncHttpClient client = getAsyncHttpClient(null)) {
54+
EventCollectingHandler handler = new EventCollectingHandler();
55+
client.executeRequest(request, handler).get(3, TimeUnit.SECONDS);
56+
handler.waitForCompletion(3, TimeUnit.SECONDS);
57+
58+
List<String> expectedEvents = Arrays.asList(
59+
"PoolConnection",
60+
"OpenConnection",
61+
"ConnectionOpen",
62+
"SendRequest",
63+
"HeaderWriteCompleted",
64+
"StatusReceived",
65+
"HeadersReceived",
66+
"Completed");
67+
68+
assertEquals(handler.firedEvents, expectedEvents, "Got " + Arrays.toString(handler.firedEvents.toArray()));
69+
}
70+
71+
}
3872
}

providers/netty/src/test/java/org/asynchttpclient/providers/netty/NettyBasicHttpsTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,46 @@
1212
*/
1313
package org.asynchttpclient.providers.netty;
1414

15+
import static org.asynchttpclient.async.util.TestUtils.createSSLContext;
16+
import static org.testng.Assert.assertEquals;
17+
1518
import org.asynchttpclient.AsyncHttpClient;
1619
import org.asynchttpclient.AsyncHttpClientConfig;
1720
import org.asynchttpclient.async.BasicHttpsTest;
21+
import org.asynchttpclient.async.util.EventCollectingHandler;
22+
import org.testng.annotations.Test;
23+
24+
import java.util.Arrays;
25+
import java.util.List;
26+
import java.util.concurrent.ExecutionException;
27+
import java.util.concurrent.TimeUnit;
28+
import java.util.concurrent.TimeoutException;
29+
import java.util.concurrent.atomic.AtomicBoolean;
1830

1931
public class NettyBasicHttpsTest extends BasicHttpsTest {
2032

33+
@Test(groups = { "standalone", "default_provider" })
34+
public void testNormalEventsFired() throws InterruptedException, TimeoutException, ExecutionException {
35+
try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setSSLContext(createSSLContext(new AtomicBoolean(true))).build())) {
36+
EventCollectingHandler handler = new EventCollectingHandler();
37+
client.preparePost(getTargetUrl()).setBody("whatever").execute(handler).get(3, TimeUnit.SECONDS);
38+
handler.waitForCompletion(3, TimeUnit.SECONDS);
39+
40+
List<String> expectedEvents = Arrays.asList(
41+
"PoolConnection",
42+
"OpenConnection",
43+
"ConnectionOpen",
44+
"SendRequest",
45+
"HeaderWriteCompleted",
46+
"StatusReceived",
47+
"HeadersReceived",
48+
"Completed");
49+
50+
assertEquals(handler.firedEvents, expectedEvents, "Got " + Arrays.toString(handler.firedEvents.toArray()));
51+
}
52+
53+
}
54+
2155
@Override
2256
public AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
2357
return NettyProviderUtil.nettyProvider(config);

providers/netty/src/test/java/org/asynchttpclient/providers/netty/NettyConnectionPoolTest.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,25 @@
1414
import static org.testng.Assert.assertNull;
1515
import static org.testng.Assert.assertTrue;
1616
import static org.testng.Assert.fail;
17-
import io.netty.channel.Channel;
18-
19-
import java.net.ConnectException;
20-
import java.util.concurrent.TimeUnit;
2117

2218
import org.asynchttpclient.AsyncHttpClient;
2319
import org.asynchttpclient.AsyncHttpClientConfig;
20+
import org.asynchttpclient.Request;
21+
import org.asynchttpclient.RequestBuilder;
2422
import org.asynchttpclient.Response;
2523
import org.asynchttpclient.async.ConnectionPoolTest;
24+
import org.asynchttpclient.async.util.EventCollectingHandler;
2625
import org.asynchttpclient.providers.netty.channel.pool.ChannelPool;
2726
import org.asynchttpclient.providers.netty.channel.pool.NoopChannelPool;
2827
import org.testng.annotations.Test;
2928

29+
import java.net.ConnectException;
30+
import java.util.Arrays;
31+
import java.util.List;
32+
import java.util.concurrent.TimeUnit;
33+
34+
import io.netty.channel.Channel;
35+
3036
public class NettyConnectionPoolTest extends ConnectionPoolTest {
3137

3238
@Override
@@ -125,4 +131,31 @@ public void testHostNotContactable() {
125131
client.close();
126132
}
127133
}
134+
135+
@Test(groups = { "standalone", "default_provider" })
136+
public void testPooledEventsFired() throws Exception {
137+
Request request = new RequestBuilder("GET").setUrl("http://127.0.0.1:" + port1 + "/Test").build();
138+
139+
try (AsyncHttpClient client = getAsyncHttpClient(null)) {
140+
EventCollectingHandler firstHandler = new EventCollectingHandler();
141+
client.executeRequest(request, firstHandler).get(3, TimeUnit.SECONDS);
142+
firstHandler.waitForCompletion(3, TimeUnit.SECONDS);
143+
144+
EventCollectingHandler secondHandler = new EventCollectingHandler();
145+
client.executeRequest(request, secondHandler).get(3, TimeUnit.SECONDS);
146+
secondHandler.waitForCompletion(3, TimeUnit.SECONDS);
147+
148+
List<String> expectedEvents = Arrays.asList(
149+
"PoolConnection",
150+
"ConnectionPooled",
151+
"SendRequest",
152+
"HeaderWriteCompleted",
153+
"StatusReceived",
154+
"HeadersReceived",
155+
"Completed");
156+
157+
assertEquals(secondHandler.firedEvents, expectedEvents, "Got " + Arrays.toString(secondHandler.firedEvents.toArray()));
158+
}
159+
}
160+
128161
}

0 commit comments

Comments
 (0)