Index: components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java |
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java |
index 0e220e26967e58ec4471839703eafea128ac1cc0..c47c96c29c6c81c7cb7b28eaef1abe7edbdeb088 100644 |
--- a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java |
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java |
@@ -4,6 +4,7 @@ |
package org.chromium.net; |
+import android.os.ConditionVariable; |
import android.test.suitebuilder.annotation.LargeTest; |
import android.test.suitebuilder.annotation.SmallTest; |
@@ -18,6 +19,7 @@ import java.io.FileInputStream; |
import java.io.FileNotFoundException; |
import java.io.IOException; |
import java.util.HashMap; |
+import java.util.concurrent.Executors; |
/** |
* Tests making requests using QUIC. |
@@ -35,7 +37,7 @@ public class QuicTest extends CronetTestBase { |
QuicTestServer.startQuicTestServer(getContext()); |
mBuilder = new CronetEngine.Builder(getContext()); |
- mBuilder.enableQUIC(true); |
+ mBuilder.enableQUIC(true).enableNetworkQualityEstimator(true); |
mBuilder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getServerPort(), |
QuicTestServer.getServerPort()); |
@@ -170,4 +172,57 @@ public class QuicTest extends CronetTestBase { |
fileInputStream.close(); |
return new String(data, "UTF-8").contains(content); |
} |
+ |
+ @LargeTest |
+ @Feature({"Cronet"}) |
+ @OnlyRunNativeCronet |
+ @SuppressWarnings("deprecation") |
+ public void testRealTimeNetworkQualityObservationsWithQuic() throws Exception { |
+ mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mBuilder); |
+ registerHostResolver(mTestFramework); |
+ String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; |
+ ConditionVariable waitForThroughput = new ConditionVariable(); |
+ |
+ TestNetworkQualityRttListener rttListener = |
+ new TestNetworkQualityRttListener(Executors.newSingleThreadExecutor()); |
+ TestNetworkQualityThroughputListener throughputListener = |
+ new TestNetworkQualityThroughputListener( |
+ Executors.newSingleThreadExecutor(), waitForThroughput); |
+ |
+ mTestFramework.mCronetEngine.addRttListener(rttListener); |
+ mTestFramework.mCronetEngine.addThroughputListener(throughputListener); |
+ |
+ mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting(true, true); |
+ TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
+ |
+ // Although the native stack races QUIC and SPDY for the first request, |
+ // since there is no http server running on the corresponding TCP port, |
+ // QUIC will always succeed with a 200 (see |
+ // net::HttpStreamFactoryImpl::Request::OnStreamFailed). |
+ UrlRequest.Builder requestBuilder = new UrlRequest.Builder( |
+ quicURL, callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
+ requestBuilder.build().start(); |
+ callback.blockForDone(); |
+ |
+ assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
+ String expectedContent = "This is a simple text file served by QUIC.\n"; |
+ assertEquals(expectedContent, callback.mResponseAsString); |
+ assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtocol()); |
+ |
+ // Throughput observation is posted to the network quality estimator on the network thread |
+ // after the UrlRequest is completed. The observations are then eventually posted to |
+ // throughput listeners on the executor provided to network quality. |
+ waitForThroughput.block(); |
+ assertTrue(throughputListener.throughputObservationCount() > 0); |
+ |
+ // Check RTT observation count after throughput observation has been received. This ensures |
+ // that executor has finished posting the RTT observation to the RTT listeners. |
+ // NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST |
+ assertTrue(rttListener.rttObservationCount(0) > 0); |
+ |
+ // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC |
+ assertTrue(rttListener.rttObservationCount(2) > 0); |
+ |
+ mTestFramework.mCronetEngine.shutdown(); |
+ } |
} |