Skip to content

Commit 314b40d

Browse files
yschimkeswankjesse
authored andcommitted
Failed, second connection and call.enqueue EventListener tests (square#3562)
* more tests * cleanup * review comments * fix flaky test
1 parent a73c217 commit 314b40d

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

okhttp-tests/src/test/java/okhttp3/EventListenerTest.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import java.util.Arrays;
2424
import java.util.Collections;
2525
import java.util.List;
26+
import java.util.concurrent.CountDownLatch;
2627
import java.util.concurrent.TimeUnit;
2728
import javax.annotation.Nullable;
29+
import okhttp3.RecordingEventListener.CallEnd;
2830
import okhttp3.RecordingEventListener.CallFailed;
2931
import okhttp3.RecordingEventListener.ConnectEnd;
3032
import okhttp3.RecordingEventListener.ConnectFailed;
@@ -59,6 +61,7 @@
5961
import static java.util.Arrays.asList;
6062
import static okhttp3.TestUtil.defaultClient;
6163
import static org.hamcrest.CoreMatchers.any;
64+
import static org.hamcrest.CoreMatchers.either;
6265
import static org.hamcrest.CoreMatchers.equalTo;
6366
import static org.junit.Assert.assertEquals;
6467
import static org.junit.Assert.assertFalse;
@@ -116,6 +119,58 @@ public final class EventListenerTest {
116119
assertEquals(expectedEvents, listener.recordedEventTypes());
117120
}
118121

122+
@Test public void successfulCallEventSequenceForEnqueue() throws Exception {
123+
server.enqueue(new MockResponse()
124+
.setBody("abc"));
125+
126+
Call call = client.newCall(new Request.Builder()
127+
.url(server.url("/"))
128+
.build());
129+
130+
final CountDownLatch completionLatch = new CountDownLatch(1);
131+
Callback callback = new Callback() {
132+
@Override public void onFailure(Call call, IOException e) {
133+
completionLatch.countDown();
134+
}
135+
136+
@Override public void onResponse(Call call, Response response) throws IOException {
137+
response.close();
138+
completionLatch.countDown();
139+
}
140+
};
141+
142+
call.enqueue(callback);
143+
144+
completionLatch.await();
145+
146+
List<String> expectedEvents = Arrays.asList("CallStart", "DnsStart", "DnsEnd",
147+
"ConnectionAcquired", "ConnectStart", "ConnectEnd", "RequestHeadersStart",
148+
"RequestHeadersEnd", "ResponseHeadersStart", "ResponseHeadersEnd", "ResponseBodyStart",
149+
"ResponseBodyEnd", "ConnectionReleased", "CallEnd");
150+
assertEquals(expectedEvents, listener.recordedEventTypes());
151+
}
152+
153+
@Test public void failedCallEventSequence() throws IOException {
154+
server.enqueue(new MockResponse().setBodyDelay(2, TimeUnit.SECONDS));
155+
156+
client = client.newBuilder().readTimeout(250, TimeUnit.MILLISECONDS).build();
157+
158+
Call call = client.newCall(new Request.Builder()
159+
.url(server.url("/"))
160+
.build());
161+
try {
162+
call.execute();
163+
fail();
164+
} catch (IOException expected) {
165+
assertThat(expected.getMessage(), either(equalTo("timeout")).or(equalTo("Read timed out")));
166+
}
167+
168+
List<String> expectedEvents = Arrays.asList("CallStart", "DnsStart", "DnsEnd",
169+
"ConnectionAcquired", "ConnectStart", "ConnectEnd", "RequestHeadersStart",
170+
"RequestHeadersEnd", "ResponseHeadersStart", "ConnectionReleased", "CallFailed");
171+
assertEquals(expectedEvents, listener.recordedEventTypes());
172+
}
173+
119174
@Test public void canceledCallEventSequence() throws IOException {
120175
Call call = client.newCall(new Request.Builder()
121176
.url(server.url("/"))
@@ -151,6 +206,31 @@ private void assertSuccessfulEventOrder(Matcher<Response> responseMatcher) throw
151206
assertEquals(expectedEvents, listener.recordedEventTypes());
152207
}
153208

209+
@Test public void secondCallEventSequence() throws IOException {
210+
enableTlsWithTunnel(false);
211+
server.setProtocols(Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1));
212+
server.enqueue(new MockResponse());
213+
server.enqueue(new MockResponse());
214+
215+
client.newCall(new Request.Builder()
216+
.url(server.url("/"))
217+
.build()).execute().close();
218+
219+
listener.removeUpToEvent(CallEnd.class);
220+
221+
Call call = client.newCall(new Request.Builder()
222+
.url(server.url("/"))
223+
.build());
224+
Response response = call.execute();
225+
response.close();
226+
227+
List<String> expectedEvents = asList("CallStart", "ConnectionAcquired",
228+
"RequestHeadersStart", "RequestHeadersEnd", "ResponseHeadersStart", "ResponseHeadersEnd",
229+
"ResponseBodyStart", "ResponseBodyEnd", "ConnectionReleased", "CallEnd");
230+
231+
assertEquals(expectedEvents, listener.recordedEventTypes());
232+
}
233+
154234
private void assertBytesReadWritten(RecordingEventListener listener,
155235
@Nullable Matcher<Long> requestHeaderLength, @Nullable Matcher<Long> requestBodyBytes,
156236
@Nullable Matcher<Long> responseHeaderLength, @Nullable Matcher<Long> responseBodyBytes) {

0 commit comments

Comments
 (0)