Index: components/cronet/android/test/smoketests/src/org/chromium/net/smoke/QuicTest.java |
diff --git a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/QuicTest.java b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/QuicTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5719a93beedd62fd32e357bf070932c4ad37cd9e |
--- /dev/null |
+++ b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/QuicTest.java |
@@ -0,0 +1,72 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.net.smoke; |
+ |
+import android.support.test.filters.SmallTest; |
+ |
+import org.json.JSONObject; |
+ |
+import static org.chromium.net.smoke.TestSupport.Protocol.QUIC; |
+ |
+import org.chromium.net.UrlRequest; |
+ |
+import java.net.URL; |
+ |
+/** |
+ * QUIC Tests. |
+ */ |
+public class QuicTest extends NativeCronetTestCase { |
+ private TestSupport.TestServer mServer; |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ mServer = mTestSupport.createTestServer(getContext(), QUIC); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ mServer.shutdown(); |
+ super.tearDown(); |
+ } |
+ |
+ @SmallTest |
+ public void testQuic() throws Exception { |
+ assertTrue(mServer.start()); |
+ final String urlString = mServer.getSuccessURL(); |
+ final URL url = new URL(urlString); |
+ |
+ mCronetEngineBuilder.enableQuic(true); |
+ mCronetEngineBuilder.addQuicHint(url.getHost(), url.getPort(), url.getPort()); |
+ mTestSupport.installMockCertVerifierForTesting(mCronetEngineBuilder); |
+ |
+ JSONObject quicParams = new JSONObject().put("delay_tcp_race", true); |
+ JSONObject experimentalOptions = new JSONObject().put("QUIC", quicParams); |
+ mTestSupport.addHostResolverRules(experimentalOptions); |
+ experimentalOptions.put("host_whitelist", url.getHost()); |
+ |
+ mCronetEngineBuilder.setExperimentalOptions(experimentalOptions.toString()); |
+ |
+ initCronetEngine(); |
+ |
+ // QUIC is not guaranteed to win the race even with |delay_tcp_race| set, so try |
+ // multiple times. |
+ boolean quicNegotiated = false; |
+ |
+ for (int i = 0; i < 5; i++) { |
+ SmokeTestRequestCallback callback = new SmokeTestRequestCallback(); |
+ UrlRequest.Builder requestBuilder = |
+ mCronetEngine.newUrlRequestBuilder(urlString, callback, callback.getExecutor()); |
+ requestBuilder.build().start(); |
+ callback.blockForDone(); |
+ assertSuccessfulNonEmptyResponse(callback, urlString); |
+ if (callback.getResponseInfo().getNegotiatedProtocol().startsWith("http/2+quic/")) { |
+ quicNegotiated = true; |
+ break; |
+ } |
+ } |
+ assertTrue(quicNegotiated); |
+ } |
+} |