| 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 b96cf5d7d46b19a9c2899fa4570792cb7ef0db09..937a43527db59a512f8e0c545baf048ff2144033 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
|
| @@ -84,8 +84,8 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| }
|
| }
|
|
|
| - private static class TestRequestFinishedListener extends RequestFinishedInfo.Listener {
|
| - private RequestFinishedInfo mRequestInfo;
|
| + static class TestRequestFinishedListener extends RequestFinishedInfo.Listener {
|
| + RequestFinishedInfo mRequestInfo;
|
|
|
| public TestRequestFinishedListener(Executor executor) {
|
| super(executor);
|
| @@ -99,7 +99,38 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| }
|
| }
|
|
|
| + /**
|
| + * Check existence of all the timing metrics that apply to most test requests.
|
| + * Also check some timing differences, focusing on things we can't check with asserts in the
|
| + * CronetMetrics constructor.
|
| + * Don't check SSL and push times here.
|
| + */
|
| + static void checkTimingMetrics(
|
| + RequestFinishedInfo.Metrics metrics, Date startTime, Date endTime) {
|
| + assertNotNull(metrics.getRequestStart());
|
| + assertTrue(metrics.getRequestStart().after(startTime));
|
| + assertNotNull(metrics.getDnsStart());
|
| + assertTrue(metrics.getDnsStart().after(startTime));
|
| + assertNotNull(metrics.getDnsEnd());
|
| + assertTrue(metrics.getDnsEnd().before(endTime));
|
| + assertNotNull(metrics.getConnectStart());
|
| + assertTrue(metrics.getConnectStart().after(startTime));
|
| + assertNotNull(metrics.getConnectEnd());
|
| + assertTrue(metrics.getConnectEnd().before(endTime));
|
| + assertNotNull(metrics.getSendingStart());
|
| + assertTrue(metrics.getSendingStart().after(startTime));
|
| + assertNotNull(metrics.getSendingEnd());
|
| + assertTrue(metrics.getSendingEnd().before(endTime));
|
| + assertNotNull(metrics.getResponseStart());
|
| + assertTrue(metrics.getResponseStart().after(startTime));
|
| + assertNotNull(metrics.getResponseEnd());
|
| + assertTrue(metrics.getResponseEnd().before(endTime));
|
| + // Entire request should take more than 0 ms
|
| + assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart().getTime() > 0);
|
| + }
|
| +
|
| @SmallTest
|
| + @OnlyRunNativeCronet
|
| @Feature({"Cronet"})
|
| @SuppressWarnings("deprecation")
|
| public void testRequestFinishedListener() throws Exception {
|
| @@ -111,11 +142,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
|
| mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| + Date startTime = new Date();
|
| urlRequestBuilder.addRequestAnnotation("request annotation")
|
| .addRequestAnnotation(this)
|
| .build()
|
| .start();
|
| callback.blockForDone();
|
| + Date endTime = new Date();
|
| testExecutor.runAllTasks();
|
|
|
| RequestFinishedInfo requestInfo = requestFinishedListener.mRequestInfo;
|
| @@ -126,13 +159,22 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| new HashSet<Object>(requestInfo.getAnnotations()));
|
| RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
|
| assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
|
| + // Check old (deprecated) timing metrics
|
| assertTrue(metrics.getTotalTimeMs() > 0);
|
| assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
|
| + // Check new timing metrics
|
| + checkTimingMetrics(metrics, startTime, endTime);
|
| + assertNull(metrics.getSslStart());
|
| + assertNull(metrics.getSslEnd());
|
| + assertNull(metrics.getPushStart());
|
| + assertNull(metrics.getPushEnd());
|
| + // Check data use metrics
|
| assertTrue(metrics.getReceivedBytesCount() > 0);
|
| mTestFramework.mCronetEngine.shutdown();
|
| }
|
|
|
| @SmallTest
|
| + @OnlyRunNativeCronet
|
| @Feature({"Cronet"})
|
| @SuppressWarnings("deprecation")
|
| public void testRequestFinishedListenerDirectExecutor() throws Exception {
|
| @@ -144,11 +186,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
|
| mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| + Date startTime = new Date();
|
| urlRequestBuilder.addRequestAnnotation("request annotation")
|
| .addRequestAnnotation(this)
|
| .build()
|
| .start();
|
| callback.blockForDone();
|
| + Date endTime = new Date();
|
|
|
| RequestFinishedInfo requestInfo = requestFinishedListener.mRequestInfo;
|
| assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
|
| @@ -160,11 +204,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
|
| assertTrue(metrics.getTotalTimeMs() > 0);
|
| assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
|
| + checkTimingMetrics(metrics, startTime, endTime);
|
| assertTrue(metrics.getReceivedBytesCount() > 0);
|
| mTestFramework.mCronetEngine.shutdown();
|
| }
|
|
|
| @SmallTest
|
| + @OnlyRunNativeCronet
|
| @Feature({"Cronet"})
|
| @SuppressWarnings("deprecation")
|
| public void testRequestFinishedListenerDifferentThreads() throws Exception {
|
| @@ -177,11 +223,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
|
| mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| + Date startTime = new Date();
|
| urlRequestBuilder.addRequestAnnotation("request annotation")
|
| .addRequestAnnotation(this)
|
| .build()
|
| .start();
|
| callback.blockForDone();
|
| + Date endTime = new Date();
|
| testExecutor.joinAll();
|
|
|
| RequestFinishedInfo firstRequestInfo = firstListener.mRequestInfo;
|
| @@ -200,16 +248,19 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| assertNotNull("RequestFinishedInfo.getMetrics() must not be null", firstMetrics);
|
| assertTrue(firstMetrics.getTotalTimeMs() > 0);
|
| assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs());
|
| + checkTimingMetrics(firstMetrics, startTime, endTime);
|
| assertTrue(firstMetrics.getReceivedBytesCount() > 0);
|
| RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics();
|
| assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secondMetrics);
|
| assertTrue(secondMetrics.getTotalTimeMs() > 0);
|
| assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs());
|
| + checkTimingMetrics(secondMetrics, startTime, endTime);
|
| assertTrue(secondMetrics.getReceivedBytesCount() > 0);
|
| mTestFramework.mCronetEngine.shutdown();
|
| }
|
|
|
| @SmallTest
|
| + @OnlyRunNativeCronet
|
| @Feature({"Cronet"})
|
| @SuppressWarnings("deprecation")
|
| public void testRequestFinishedListenerFailedRequest() throws Exception {
|
| @@ -222,8 +273,10 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connectionRefusedUrl,
|
| callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| + Date startTime = new Date();
|
| urlRequestBuilder.build().start();
|
| callback.blockForDone();
|
| + Date endTime = new Date();
|
| assertTrue(callback.mOnErrorCalled);
|
| testExecutor.runAllTasks();
|
|
|
| @@ -236,11 +289,28 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| // The failure is occasionally fast enough that time reported is 0, so just check for null
|
| assertNotNull(metrics.getTotalTimeMs());
|
| assertNull(metrics.getTtfbMs());
|
| +
|
| + // Check the timing metrics
|
| + assertNotNull(metrics.getRequestStart());
|
| + assertTrue(metrics.getRequestStart().after(startTime));
|
| + assertNull(metrics.getDnsStart());
|
| + assertNull(metrics.getDnsEnd());
|
| + assertNull(metrics.getConnectStart());
|
| + assertNull(metrics.getConnectEnd());
|
| + assertNull(metrics.getSendingStart());
|
| + assertNull(metrics.getSendingEnd());
|
| + assertNull(metrics.getResponseStart());
|
| + assertNotNull(metrics.getResponseEnd());
|
| + assertTrue(metrics.getResponseEnd().before(endTime));
|
| + // Entire request should take more than 0 ms
|
| + assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart().getTime() > 0);
|
| +
|
| assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceivedBytesCount() == 0);
|
| mTestFramework.mCronetEngine.shutdown();
|
| }
|
|
|
| @SmallTest
|
| + @OnlyRunNativeCronet
|
| @Feature({"Cronet"})
|
| @SuppressWarnings("deprecation")
|
| public void testRequestFinishedListenerRemoved() throws Exception {
|
| @@ -249,11 +319,12 @@ public class RequestFinishedInfoTest extends CronetTestBase {
|
| TestRequestFinishedListener requestFinishedListener =
|
| new TestRequestFinishedListener(testExecutor);
|
| mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
|
| - mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinishedListener);
|
| TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
|
| mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| - urlRequestBuilder.build().start();
|
| + UrlRequest request = urlRequestBuilder.build();
|
| + mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinishedListener);
|
| + request.start();
|
| callback.blockForDone();
|
| testExecutor.runAllTasks();
|
|
|
|
|