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..3fc4edf6cf67c31b31c1cb768ea13f704e76d769 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 { |
xunjieli
2016/09/20 21:53:33
Instead of making these classes packet protected,
mgersh
2016/09/30 23:47:14
Done.
|
+ RequestFinishedInfo mRequestInfo; |
public TestRequestFinishedListener(Executor executor) { |
super(executor); |
@@ -97,9 +97,67 @@ public class RequestFinishedInfoTest extends CronetTestBase { |
assertNotNull(requestInfo); |
mRequestInfo = requestInfo; |
} |
+ |
+ public void reset() { |
+ mRequestInfo = null; |
+ } |
+ } |
+ |
+ /** |
+ * Check existence of all the timing metrics that apply to most test requests, |
+ * except those that come from net::LoadTimingInfo::ConnectTiming. |
+ * Also check some timing differences, focusing on things we can't check with asserts in the |
+ * CronetMetrics constructor. |
+ * Don't check push times here. |
+ */ |
+ static void checkTimingMetrics( |
+ RequestFinishedInfo.Metrics metrics, Date startTime, Date endTime) { |
+ assertNotNull(metrics.getRequestStart()); |
+ assertTrue(metrics.getRequestStart().after(startTime)); |
+ 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); |
+ } |
+ |
+ static void checkHasConnectTiming( |
+ RequestFinishedInfo.Metrics metrics, Date startTime, Date endTime, boolean isSsl) { |
+ 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)); |
+ if (isSsl) { |
+ assertNotNull(metrics.getSslStart()); |
+ assertTrue(metrics.getSslStart().after(startTime)); |
+ assertNotNull(metrics.getSslEnd()); |
+ assertTrue(metrics.getSslEnd().before(endTime)); |
+ } else { |
+ assertNull(metrics.getSslStart()); |
+ assertNull(metrics.getSslEnd()); |
+ } |
+ } |
+ |
+ static void checkNoConnectTiming(RequestFinishedInfo.Metrics metrics) { |
xunjieli
2016/09/20 21:53:33
It will be great if you can move these to a standa
mgersh
2016/09/30 23:47:14
Done.
|
+ assertNull(metrics.getDnsStart()); |
+ assertNull(metrics.getDnsEnd()); |
+ assertNull(metrics.getSslStart()); |
+ assertNull(metrics.getSslEnd()); |
+ assertNull(metrics.getConnectStart()); |
+ assertNull(metrics.getConnectEnd()); |
} |
@SmallTest |
+ @OnlyRunNativeCronet |
@Feature({"Cronet"}) |
@SuppressWarnings("deprecation") |
public void testRequestFinishedListener() throws Exception { |
@@ -111,11 +169,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 +186,21 @@ 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); |
+ checkHasConnectTiming(metrics, startTime, endTime, false); |
+ 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 +212,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 +230,14 @@ 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); |
+ checkHasConnectTiming(metrics, startTime, endTime, false); |
assertTrue(metrics.getReceivedBytesCount() > 0); |
mTestFramework.mCronetEngine.shutdown(); |
} |
@SmallTest |
+ @OnlyRunNativeCronet |
@Feature({"Cronet"}) |
@SuppressWarnings("deprecation") |
public void testRequestFinishedListenerDifferentThreads() throws Exception { |
@@ -177,11 +250,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 +275,21 @@ 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); |
+ checkHasConnectTiming(firstMetrics, startTime, endTime, false); |
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); |
+ checkHasConnectTiming(secondMetrics, startTime, endTime, false); |
assertTrue(secondMetrics.getReceivedBytesCount() > 0); |
mTestFramework.mCronetEngine.shutdown(); |
} |
@SmallTest |
+ @OnlyRunNativeCronet |
@Feature({"Cronet"}) |
@SuppressWarnings("deprecation") |
public void testRequestFinishedListenerFailedRequest() throws Exception { |
@@ -222,8 +302,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 +318,25 @@ 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)); |
+ checkNoConnectTiming(metrics); |
+ 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 +345,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(); |