Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java

Issue 2844803002: [Cronet] Make metrics reporting happen after terminal callbacks. (Closed)
Patch Set: address comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
index dab3af9725da13d0c8a56ee622b54f0564caa238..e59765e6bcc47fc88ac1d427276c18e8b46eb273 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
@@ -30,6 +30,23 @@ public class RequestFinishedInfoTest extends CronetTestBase {
private EmbeddedTestServer mTestServer;
private String mUrl;
+ // A subclass of TestRequestFinishedListener to additionally assert that UrlRequest.Callback's
+ // terminal callbacks have been invoked at the time of onRequestFinished().
+ // See crbug.com/710877.
+ private static class AssertCallbackDoneRequestFinishedListener
+ extends TestRequestFinishedListener {
+ private final TestUrlRequestCallback mCallback;
+ public AssertCallbackDoneRequestFinishedListener(TestUrlRequestCallback callback) {
+ mCallback = callback;
+ }
+
+ @Override
+ public void onRequestFinished(RequestFinishedInfo requestInfo) {
+ assertTrue(mCallback.isDone());
+ super.onRequestFinished(requestInfo);
+ }
+ };
+
@Override
protected void setUp() throws Exception {
super.setUp();
@@ -367,4 +384,137 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertEquals(sentByteCount, (long) metrics.getSentByteCount());
assertEquals(receivedByteCount, (long) metrics.getReceivedByteCount());
}
+
+ @SmallTest
+ @OnlyRunNativeCronet
+ @Feature({"Cronet"})
+ @SuppressWarnings("deprecation")
+ public void testOrderSuccessfulRequest() throws Exception {
+ mTestFramework = startCronetTestFramework();
+ final TestUrlRequestCallback callback = new TestUrlRequestCallback();
+ TestRequestFinishedListener requestFinishedListener =
+ new AssertCallbackDoneRequestFinishedListener(callback);
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
+ ExperimentalUrlRequest.Builder urlRequestBuilder =
+ (ExperimentalUrlRequest.Builder) mTestFramework.mCronetEngine.newUrlRequestBuilder(
+ mUrl, callback, callback.getExecutor());
+ Date startTime = new Date();
+ urlRequestBuilder.addRequestAnnotation("request annotation")
+ .addRequestAnnotation(this)
+ .build()
+ .start();
+ callback.blockForDone();
+ requestFinishedListener.blockUntilDone();
+ Date endTime = new Date();
+
+ RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
+ MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, endTime);
+ assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReason());
+ MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTime, endTime, false);
+ assertEquals(newHashSet("request annotation", this), // Use sets for unordered comparison.
+ new HashSet<Object>(requestInfo.getAnnotations()));
+ mTestFramework.mCronetEngine.shutdown();
+ }
+
+ @SmallTest
+ @OnlyRunNativeCronet
+ @Feature({"Cronet"})
+ // Tests a failed request where the error originates from Java.
+ public void testOrderFailedRequestJava() throws Exception {
+ mTestFramework = startCronetTestFramework();
+ final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
+ @Override
+ public void onResponseStarted(UrlRequest request, UrlResponseInfo info) {
+ throw new RuntimeException("make this request fail");
+ }
+ };
+ TestRequestFinishedListener requestFinishedListener =
+ new AssertCallbackDoneRequestFinishedListener(callback);
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
+ UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newUrlRequestBuilder(
+ mUrl, callback, callback.getExecutor());
+ urlRequestBuilder.build().start();
+ callback.blockForDone();
+ assertTrue(callback.mOnErrorCalled);
+ requestFinishedListener.blockUntilDone();
+ RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
+ assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
+ assertEquals(mUrl, requestInfo.getUrl());
+ assertTrue(requestInfo.getAnnotations().isEmpty());
+ assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason());
+ assertNotNull(requestInfo.getException());
+ assertEquals("Exception received from UrlRequest.Callback",
+ requestInfo.getException().getMessage());
+ RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
+ assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
+ mTestFramework.mCronetEngine.shutdown();
+ }
+
+ @SmallTest
+ @OnlyRunNativeCronet
+ @Feature({"Cronet"})
+ // Tests a failed request where the error originates from native code.
+ public void testOrderFailedRequestNative() throws Exception {
+ String connectionRefusedUrl = "http://127.0.0.1:3";
+ mTestFramework = startCronetTestFramework();
+ final TestUrlRequestCallback callback = new TestUrlRequestCallback();
+ TestRequestFinishedListener requestFinishedListener =
+ new AssertCallbackDoneRequestFinishedListener(callback);
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
+ UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newUrlRequestBuilder(
+ connectionRefusedUrl, callback, callback.getExecutor());
+ urlRequestBuilder.build().start();
+ callback.blockForDone();
+ assertTrue(callback.mOnErrorCalled);
+ requestFinishedListener.blockUntilDone();
+ RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
+ assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
+ assertEquals(connectionRefusedUrl, requestInfo.getUrl());
+ assertTrue(requestInfo.getAnnotations().isEmpty());
+ assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason());
+ assertNotNull(requestInfo.getException());
+ assertEquals(NetworkException.ERROR_CONNECTION_REFUSED,
+ ((NetworkException) requestInfo.getException()).getErrorCode());
+ RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
+ assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
+ mTestFramework.mCronetEngine.shutdown();
+ }
+
+ @SmallTest
+ @OnlyRunNativeCronet
+ @Feature({"Cronet"})
+ public void testOrderCanceledRequest() throws Exception {
+ mTestFramework = startCronetTestFramework();
+ final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
+ @Override
+ public void onResponseStarted(UrlRequest request, UrlResponseInfo info) {
+ super.onResponseStarted(request, info);
+ request.cancel();
+ }
+ };
+
+ TestRequestFinishedListener requestFinishedListener =
+ new AssertCallbackDoneRequestFinishedListener(callback);
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
+ ExperimentalUrlRequest.Builder urlRequestBuilder =
+ mTestFramework.mCronetEngine.newUrlRequestBuilder(
+ mUrl, callback, callback.getExecutor());
+ Date startTime = new Date();
+ urlRequestBuilder.addRequestAnnotation("request annotation")
+ .addRequestAnnotation(this)
+ .build()
+ .start();
+ callback.blockForDone();
+ requestFinishedListener.blockUntilDone();
+ Date endTime = new Date();
+
+ RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
+ MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, endTime);
+ assertEquals(RequestFinishedInfo.CANCELED, requestInfo.getFinishedReason());
+ MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTime, endTime, false);
+
+ assertEquals(newHashSet("request annotation", this), // Use sets for unordered comparison.
+ new HashSet<Object>(requestInfo.getAnnotations()));
+ mTestFramework.mCronetEngine.shutdown();
+ }
}
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698