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

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

Issue 2351793003: Implement timing metrics for UrlRequest (Closed)
Patch Set: Small cleanups Created 4 years, 2 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/test/javatests/src/org/chromium/net/QuicTest.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 e646547e86e018b22e48f59f78c9e9cfb81d713b..55988a598b2dc6ad4f05dc058525d32d76ddb0ee 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
@@ -6,6 +6,7 @@ package org.chromium.net;
import static org.chromium.base.CollectionUtil.newHashSet;
+import android.os.ConditionVariable;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.test.util.Feature;
@@ -42,9 +43,16 @@ public class RequestFinishedInfoTest extends CronetTestBase {
}
static class DirectExecutor implements Executor {
+ private ConditionVariable mBlock = new ConditionVariable();
+
@Override
public void execute(Runnable task) {
task.run();
+ mBlock.open();
+ }
+
+ public void blockUntilDone() {
+ mBlock.block();
}
}
@@ -66,23 +74,24 @@ public class RequestFinishedInfoTest extends CronetTestBase {
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListener() throws Exception {
mTestFramework = startCronetTestFramework();
- TestExecutor testExecutor = new TestExecutor();
- TestRequestFinishedListener requestFinishedListener =
- new TestRequestFinishedListener(testExecutor);
+ TestRequestFinishedListener requestFinishedListener = new TestRequestFinishedListener();
mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
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();
- testExecutor.runAllTasks();
+ requestFinishedListener.blockUntilDone();
+ Date endTime = new Date();
RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
@@ -92,29 +101,42 @@ 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
+ MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime);
+ MetricsTestUtil.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 {
mTestFramework = startCronetTestFramework();
- Executor testExecutor = new DirectExecutor();
+ DirectExecutor testExecutor = new DirectExecutor();
TestRequestFinishedListener requestFinishedListener =
new TestRequestFinishedListener(testExecutor);
mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
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();
+ // Block on the executor, not the listener, since blocking on the listener doesn't work when
+ // it's created with a non-default executor.
+ testExecutor.blockUntilDone();
+ Date endTime = new Date();
RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
@@ -126,29 +148,34 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
assertTrue(metrics.getTotalTimeMs() > 0);
assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
+ MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime);
+ MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false);
assertTrue(metrics.getReceivedBytesCount() > 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerDifferentThreads() throws Exception {
mTestFramework = startCronetTestFramework();
- ThreadExecutor testExecutor = new ThreadExecutor();
- TestRequestFinishedListener firstListener = new TestRequestFinishedListener(testExecutor);
- TestRequestFinishedListener secondListener = new TestRequestFinishedListener(testExecutor);
+ TestRequestFinishedListener firstListener = new TestRequestFinishedListener();
+ TestRequestFinishedListener secondListener = new TestRequestFinishedListener();
mTestFramework.mCronetEngine.addRequestFinishedListener(firstListener);
mTestFramework.mCronetEngine.addRequestFinishedListener(secondListener);
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();
- testExecutor.joinAll();
+ firstListener.blockUntilDone();
+ secondListener.blockUntilDone();
+ Date endTime = new Date();
RequestFinishedInfo firstRequestInfo = firstListener.getRequestInfo();
RequestFinishedInfo secondRequestInfo = secondListener.getRequestInfo();
@@ -166,32 +193,37 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", firstMetrics);
assertTrue(firstMetrics.getTotalTimeMs() > 0);
assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs());
+ MetricsTestUtil.checkTimingMetrics(firstMetrics, startTime, endTime);
+ MetricsTestUtil.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());
+ MetricsTestUtil.checkTimingMetrics(secondMetrics, startTime, endTime);
+ MetricsTestUtil.checkHasConnectTiming(secondMetrics, startTime, endTime, false);
assertTrue(secondMetrics.getReceivedBytesCount() > 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerFailedRequest() throws Exception {
String connectionRefusedUrl = "http://127.0.0.1:3";
mTestFramework = startCronetTestFramework();
- TestExecutor testExecutor = new TestExecutor();
- TestRequestFinishedListener requestFinishedListener =
- new TestRequestFinishedListener(testExecutor);
+ TestRequestFinishedListener requestFinishedListener = new TestRequestFinishedListener();
mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
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();
assertTrue(callback.mOnErrorCalled);
- testExecutor.runAllTasks();
+ requestFinishedListener.blockUntilDone();
+ Date endTime = new Date();
RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
@@ -202,11 +234,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));
+ MetricsTestUtil.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 {
@@ -215,11 +261,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();
@@ -229,6 +276,52 @@ public class RequestFinishedInfoTest extends CronetTestBase {
}
@SmallTest
+ @OnlyRunNativeCronet
+ @Feature({"Cronet"})
+ public void testRequestFinishedListenerCanceledRequest() throws Exception {
+ mTestFramework = startCronetTestFramework();
+ TestRequestFinishedListener requestFinishedListener = new TestRequestFinishedListener();
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
+ TestUrlRequestCallback callback = new TestUrlRequestCallback() {
+ @Override
+ public void onResponseStarted(UrlRequest request, UrlResponseInfo info) {
+ super.onResponseStarted(request, info);
+ request.cancel();
+ }
+ };
+ 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();
+ requestFinishedListener.blockUntilDone();
+ Date endTime = new Date();
+
+ RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo();
+ assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
+ assertEquals(mUrl, requestInfo.getUrl());
+ assertNotNull(requestInfo.getResponseInfo());
+ assertEquals(newHashSet("request annotation", this), // Use sets for unordered comparison.
+ 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
+ MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime);
+ MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false);
+ assertNull(metrics.getPushStart());
+ assertNull(metrics.getPushEnd());
+ // Check data use metrics
+ assertTrue(metrics.getReceivedBytesCount() > 0);
+ mTestFramework.mCronetEngine.shutdown();
+ }
+
+ @SmallTest
@Feature({"Cronet"})
public void testMetricsGetters() throws Exception {
long requestStart = 1;
« no previous file with comments | « components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698