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

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: self 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
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..c71559b5308225692f75b873ae55a4d234fad0c2 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,24 @@ public class RequestFinishedInfoTest extends CronetTestBase {
private EmbeddedTestServer mTestServer;
private String mUrl;
+ // A subclass of TestRequestFinishedListener to additionally assert that UrlRequest.Callback's
mgersh 2017/05/01 15:29:22 What do you think about modifying TestRequestFinis
xunjieli 2017/05/01 19:17:16 This subclass associates with exactly on UrlReques
+ // terminal callbacks have been invoked at the time of onRequestFinished(). Note that this
+ // listener runs callbacks on a separated thread, so tests use this is racy by design. See
mef 2017/04/28 21:16:55 nit: could you rephrase 'so tests use this is racy
xunjieli 2017/05/01 19:17:16 Done.
+ // 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 +385,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();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698