Skip to content

Commit e86d1f4

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 423c0ab commit e86d1f4

File tree

4 files changed

+194
-0
lines changed

4 files changed

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

src/test/java/com/ning/http/client/async/netty/NettyAsyncProviderBasicTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,27 @@
1212
*/
1313
package com.ning.http.client.async.netty;
1414

15+
import static org.testng.Assert.assertEquals;
16+
1517
import org.testng.annotations.Test;
1618

19+
import com.google.common.base.Joiner;
1720
import com.ning.http.client.AsyncHttpClient;
1821
import com.ning.http.client.AsyncHttpClientConfig;
1922
import com.ning.http.client.AsyncHttpProviderConfig;
23+
import com.ning.http.client.Request;
24+
import com.ning.http.client.RequestBuilder;
2025
import com.ning.http.client.async.AsyncProvidersBasicTest;
26+
import com.ning.http.client.async.EventCollectingHandler;
2127
import com.ning.http.client.async.ProviderUtil;
2228
import com.ning.http.client.providers.netty.NettyAsyncHttpProviderConfig;
2329

30+
import java.util.Arrays;
31+
import java.util.List;
32+
import java.util.concurrent.ExecutionException;
33+
import java.util.concurrent.TimeUnit;
34+
import java.util.concurrent.TimeoutException;
35+
2436
@Test
2537
public class NettyAsyncProviderBasicTest extends AsyncProvidersBasicTest {
2638

@@ -38,4 +50,29 @@ public AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
3850
protected String generatedAcceptEncodingHeader() {
3951
return "gzip,deflate";
4052
}
53+
54+
@Test(groups = { "standalone", "default_provider", "async" })
55+
public void testNewConnectionEventsFired() throws InterruptedException, TimeoutException, ExecutionException {
56+
Request request = new RequestBuilder("GET").setUrl("http://127.0.0.1:" + port1 + "/Test").build();
57+
58+
try (AsyncHttpClient client = getAsyncHttpClient(null)) {
59+
EventCollectingHandler handler = new EventCollectingHandler();
60+
client.executeRequest(request, handler).get(3, TimeUnit.SECONDS);
61+
handler.waitForCompletion();
62+
63+
List<String> expectedEvents = Arrays.asList(
64+
"PoolConnection",
65+
"OpenConnection",
66+
"ConnectionOpen",
67+
"SendRequest",
68+
"HeaderWriteCompleted",
69+
"StatusReceived",
70+
"HeadersReceived",
71+
"Completed");
72+
73+
assertEquals(handler.firedEvents, expectedEvents,
74+
"Got: " + Joiner.on(", ").join(handler.firedEvents));
75+
}
76+
77+
}
4178
}

src/test/java/com/ning/http/client/async/netty/NettyBasicHttpsTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,49 @@
1212
*/
1313
package com.ning.http.client.async.netty;
1414

15+
import static org.testng.Assert.assertEquals;
16+
17+
import org.testng.annotations.Test;
18+
19+
import com.google.common.base.Joiner;
1520
import com.ning.http.client.AsyncHttpClient;
1621
import com.ning.http.client.AsyncHttpClientConfig;
1722
import com.ning.http.client.async.BasicHttpsTest;
23+
import com.ning.http.client.async.EventCollectingHandler;
1824
import com.ning.http.client.async.ProviderUtil;
1925

26+
import java.util.Arrays;
27+
import java.util.List;
28+
import java.util.concurrent.ExecutionException;
29+
import java.util.concurrent.TimeUnit;
30+
import java.util.concurrent.TimeoutException;
31+
import java.util.concurrent.atomic.AtomicBoolean;
32+
2033
public class NettyBasicHttpsTest extends BasicHttpsTest {
2134

35+
@Test
36+
public void testNormalEventsFired() throws InterruptedException, TimeoutException, ExecutionException {
37+
try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setSSLContext(createSSLContext(new AtomicBoolean(true))).build())) {
38+
EventCollectingHandler handler = new EventCollectingHandler();
39+
client.preparePost(getTargetUrl()).setBody("whatever").execute(handler).get(3, TimeUnit.SECONDS);
40+
handler.waitForCompletion();
41+
42+
List<String> expectedEvents = Arrays.asList(
43+
"PoolConnection",
44+
"OpenConnection",
45+
"ConnectionOpen",
46+
"SendRequest",
47+
"HeaderWriteCompleted",
48+
"StatusReceived",
49+
"HeadersReceived",
50+
"Completed");
51+
52+
assertEquals(handler.firedEvents, expectedEvents,
53+
"Got: " + Joiner.on(", ").join(handler.firedEvents));
54+
}
55+
56+
}
57+
2258
@Override
2359
public AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
2460
return ProviderUtil.nettyProvider(config);

src/test/java/com/ning/http/client/async/netty/NettyConnectionPoolTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@
2121
import org.jboss.netty.channel.Channel;
2222
import org.testng.annotations.Test;
2323

24+
import com.google.common.base.Joiner;
2425
import com.ning.http.client.AsyncHttpClient;
2526
import com.ning.http.client.AsyncHttpClientConfig;
27+
import com.ning.http.client.Request;
28+
import com.ning.http.client.RequestBuilder;
2629
import com.ning.http.client.Response;
2730
import com.ning.http.client.async.ConnectionPoolTest;
31+
import com.ning.http.client.async.EventCollectingHandler;
2832
import com.ning.http.client.async.ProviderUtil;
2933
import com.ning.http.client.providers.netty.NettyAsyncHttpProviderConfig;
3034
import com.ning.http.client.providers.netty.channel.pool.ChannelPool;
3135
import com.ning.http.client.providers.netty.channel.pool.NoopChannelPool;
3236

3337
import java.net.ConnectException;
38+
import java.util.Arrays;
39+
import java.util.List;
3440
import java.util.concurrent.TimeUnit;
3541

3642
public class NettyConnectionPoolTest extends ConnectionPoolTest {
@@ -131,5 +137,31 @@ public void testHostNotContactable() {
131137
}
132138
}
133139

140+
@Test
141+
public void testPooledEventsFired() throws Exception {
142+
Request request = new RequestBuilder("GET").setUrl("http://127.0.0.1:" + port1 + "/Test").build();
143+
144+
try (AsyncHttpClient client = getAsyncHttpClient(null)) {
145+
EventCollectingHandler firstHandler = new EventCollectingHandler();
146+
client.executeRequest(request, firstHandler).get(3, TimeUnit.SECONDS);
147+
firstHandler.waitForCompletion();
148+
149+
EventCollectingHandler secondHandler = new EventCollectingHandler();
150+
client.executeRequest(request, secondHandler).get(3, TimeUnit.SECONDS);
151+
secondHandler.waitForCompletion();
152+
153+
List<String> expectedEvents = Arrays.asList(
154+
"PoolConnection",
155+
"ConnectionPooled",
156+
"SendRequest",
157+
"HeaderWriteCompleted",
158+
"StatusReceived",
159+
"HeadersReceived",
160+
"Completed");
161+
162+
assertEquals(secondHandler.firedEvents, expectedEvents,
163+
"Got: " + Joiner.on(", ").join(secondHandler.firedEvents));
164+
}
165+
}
134166

135167
}

0 commit comments

Comments
 (0)