| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import android.os.ConditionVariable; | 7 import android.os.ConditionVariable; |
| 8 import android.test.suitebuilder.annotation.LargeTest; | 8 import android.test.suitebuilder.annotation.LargeTest; |
| 9 import android.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 .put("host_whitelist", "test.example.com
") | 47 .put("host_whitelist", "test.example.com
") |
| 48 .put("max_server_configs_stored_in_prope
rties", 2) | 48 .put("max_server_configs_stored_in_prope
rties", 2) |
| 49 .put("delay_tcp_race", true) | 49 .put("delay_tcp_race", true) |
| 50 .put("max_number_of_lossy_connections",
10) | 50 .put("max_number_of_lossy_connections",
10) |
| 51 .put("packet_loss_threshold", 0.5) | 51 .put("packet_loss_threshold", 0.5) |
| 52 .put("idle_connection_timeout_seconds",
300) | 52 .put("idle_connection_timeout_seconds",
300) |
| 53 .put("close_sessions_on_ip_change", fals
e) | 53 .put("close_sessions_on_ip_change", fals
e) |
| 54 .put("migrate_sessions_on_network_change
", false) | 54 .put("migrate_sessions_on_network_change
", false) |
| 55 .put("migrate_sessions_early", false) | 55 .put("migrate_sessions_early", false) |
| 56 .put("race_cert_verification", true); | 56 .put("race_cert_verification", true); |
| 57 JSONObject experimentalOptions = new JSONObject().put("QUIC", quicParams
); | 57 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); |
| 58 JSONObject experimentalOptions = new JSONObject() |
| 59 .put("QUIC", quicParams) |
| 60 .put("HostResolverRules", hostR
esolverParams); |
| 58 mBuilder.setExperimentalOptions(experimentalOptions.toString()); | 61 mBuilder.setExperimentalOptions(experimentalOptions.toString()); |
| 59 mBuilder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVeri
fier()); | 62 mBuilder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVeri
fier()); |
| 60 mBuilder.setStoragePath(CronetTestFramework.getTestStorage(getContext())
); | 63 mBuilder.setStoragePath(CronetTestFramework.getTestStorage(getContext())
); |
| 61 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1
000 * 1024); | 64 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1
000 * 1024); |
| 62 } | 65 } |
| 63 | 66 |
| 64 @Override | 67 @Override |
| 65 protected void tearDown() throws Exception { | 68 protected void tearDown() throws Exception { |
| 66 QuicTestServer.shutdownQuicTestServer(); | 69 QuicTestServer.shutdownQuicTestServer(); |
| 67 super.tearDown(); | 70 super.tearDown(); |
| 68 } | 71 } |
| 69 | 72 |
| 70 @SmallTest | 73 @SmallTest |
| 71 @Feature({"Cronet"}) | 74 @Feature({"Cronet"}) |
| 72 @SuppressWarnings("deprecation") | 75 @SuppressWarnings("deprecation") |
| 73 @OnlyRunNativeCronet | 76 @OnlyRunNativeCronet |
| 74 public void testQuicLoadUrl_LegacyAPI() throws Exception { | 77 public void testQuicLoadUrl_LegacyAPI() throws Exception { |
| 75 String[] commandLineArgs = { | 78 String[] commandLineArgs = { |
| 76 CronetTestFramework.LIBRARY_INIT_KEY, CronetTestFramework.Librar
yInitType.LEGACY}; | 79 CronetTestFramework.LIBRARY_INIT_KEY, CronetTestFramework.Librar
yInitType.LEGACY}; |
| 77 mTestFramework = new CronetTestFramework(null, commandLineArgs, getConte
xt(), mBuilder); | 80 mTestFramework = new CronetTestFramework(null, commandLineArgs, getConte
xt(), mBuilder); |
| 78 registerHostResolver(mTestFramework, true); | |
| 79 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; | 81 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; |
| 80 | 82 |
| 81 HashMap<String, String> headers = new HashMap<String, String>(); | 83 HashMap<String, String> headers = new HashMap<String, String>(); |
| 82 TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); | 84 TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); |
| 83 | 85 |
| 84 // Although the native stack races QUIC and SPDY for the first request, | 86 // Although the native stack races QUIC and SPDY for the first request, |
| 85 // since there is no http server running on the corresponding TCP port, | 87 // since there is no http server running on the corresponding TCP port, |
| 86 // QUIC will always succeed with a 200 (see | 88 // QUIC will always succeed with a 200 (see |
| 87 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). | 89 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). |
| 88 HttpUrlRequest request = mTestFramework.mRequestFactory.createRequest( | 90 HttpUrlRequest request = mTestFramework.mRequestFactory.createRequest( |
| 89 quicURL, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listen
er); | 91 quicURL, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listen
er); |
| 90 request.start(); | 92 request.start(); |
| 91 listener.blockForComplete(); | 93 listener.blockForComplete(); |
| 92 assertEquals(200, listener.mHttpStatusCode); | 94 assertEquals(200, listener.mHttpStatusCode); |
| 93 assertEquals( | 95 assertEquals( |
| 94 "This is a simple text file served by QUIC.\n", | 96 "This is a simple text file served by QUIC.\n", |
| 95 listener.mResponseAsString); | 97 listener.mResponseAsString); |
| 96 assertEquals("quic/1+spdy/3", listener.mNegotiatedProtocol); | 98 assertEquals("quic/1+spdy/3", listener.mNegotiatedProtocol); |
| 97 } | 99 } |
| 98 | 100 |
| 99 @LargeTest | 101 @LargeTest |
| 100 @Feature({"Cronet"}) | 102 @Feature({"Cronet"}) |
| 101 @OnlyRunNativeCronet | 103 @OnlyRunNativeCronet |
| 102 public void testQuicLoadUrl() throws Exception { | 104 public void testQuicLoadUrl() throws Exception { |
| 103 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); | 105 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); |
| 104 registerHostResolver(mTestFramework); | |
| 105 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; | 106 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; |
| 106 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 107 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 107 | 108 |
| 108 // Although the native stack races QUIC and SPDY for the first request, | 109 // Although the native stack races QUIC and SPDY for the first request, |
| 109 // since there is no http server running on the corresponding TCP port, | 110 // since there is no http server running on the corresponding TCP port, |
| 110 // QUIC will always succeed with a 200 (see | 111 // QUIC will always succeed with a 200 (see |
| 111 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). | 112 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). |
| 112 UrlRequest.Builder requestBuilder = new UrlRequest.Builder( | 113 UrlRequest.Builder requestBuilder = new UrlRequest.Builder( |
| 113 quicURL, callback, callback.getExecutor(), mTestFramework.mCrone
tEngine); | 114 quicURL, callback, callback.getExecutor(), mTestFramework.mCrone
tEngine); |
| 114 requestBuilder.build().start(); | 115 requestBuilder.build().start(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 137 assertTrue(fileContainsString("local_prefs.json", | 138 assertTrue(fileContainsString("local_prefs.json", |
| 138 QuicTestServer.getServerHost() + ":" + QuicTestServer.getServerP
ort())); | 139 QuicTestServer.getServerHost() + ":" + QuicTestServer.getServerP
ort())); |
| 139 mTestFramework.mCronetEngine.shutdown(); | 140 mTestFramework.mCronetEngine.shutdown(); |
| 140 | 141 |
| 141 // Make another request using a new context but with no QUIC hints. | 142 // Make another request using a new context but with no QUIC hints. |
| 142 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 143 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); |
| 143 builder.setStoragePath(CronetTestFramework.getTestStorage(getContext()))
; | 144 builder.setStoragePath(CronetTestFramework.getTestStorage(getContext()))
; |
| 144 builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1000 * 102
4); | 145 builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1000 * 102
4); |
| 145 builder.enableQuic(true); | 146 builder.enableQuic(true); |
| 146 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); | 147 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); |
| 147 JSONObject experimentalOptions = new JSONObject().put("QUIC", quicParams
); | 148 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); |
| 149 JSONObject experimentalOptions = new JSONObject() |
| 150 .put("QUIC", quicParams) |
| 151 .put("HostResolverRules", hostR
esolverParams); |
| 148 builder.setExperimentalOptions(experimentalOptions.toString()); | 152 builder.setExperimentalOptions(experimentalOptions.toString()); |
| 149 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 153 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); |
| 150 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 154 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
| 151 registerHostResolver(mTestFramework); | |
| 152 TestUrlRequestCallback callback2 = new TestUrlRequestCallback(); | 155 TestUrlRequestCallback callback2 = new TestUrlRequestCallback(); |
| 153 requestBuilder = new UrlRequest.Builder( | 156 requestBuilder = new UrlRequest.Builder( |
| 154 quicURL, callback2, callback2.getExecutor(), mTestFramework.mCro
netEngine); | 157 quicURL, callback2, callback2.getExecutor(), mTestFramework.mCro
netEngine); |
| 155 requestBuilder.build().start(); | 158 requestBuilder.build().start(); |
| 156 callback2.blockForDone(); | 159 callback2.blockForDone(); |
| 157 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); | 160 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); |
| 158 assertEquals(expectedContent, callback2.mResponseAsString); | 161 assertEquals(expectedContent, callback2.mResponseAsString); |
| 159 assertEquals("quic/1+spdy/3", callback2.mResponseInfo.getNegotiatedProto
col()); | 162 assertEquals("quic/1+spdy/3", callback2.mResponseInfo.getNegotiatedProto
col()); |
| 160 // The total received bytes should be larger than the content length, to
account for | 163 // The total received bytes should be larger than the content length, to
account for |
| 161 // headers. | 164 // headers. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 173 fileInputStream.close(); | 176 fileInputStream.close(); |
| 174 return new String(data, "UTF-8").contains(content); | 177 return new String(data, "UTF-8").contains(content); |
| 175 } | 178 } |
| 176 | 179 |
| 177 @LargeTest | 180 @LargeTest |
| 178 @Feature({"Cronet"}) | 181 @Feature({"Cronet"}) |
| 179 @OnlyRunNativeCronet | 182 @OnlyRunNativeCronet |
| 180 @SuppressWarnings("deprecation") | 183 @SuppressWarnings("deprecation") |
| 181 public void testRealTimeNetworkQualityObservationsWithQuic() throws Exceptio
n { | 184 public void testRealTimeNetworkQualityObservationsWithQuic() throws Exceptio
n { |
| 182 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); | 185 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); |
| 183 registerHostResolver(mTestFramework); | |
| 184 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; | 186 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; |
| 185 ConditionVariable waitForThroughput = new ConditionVariable(); | 187 ConditionVariable waitForThroughput = new ConditionVariable(); |
| 186 | 188 |
| 187 TestNetworkQualityRttListener rttListener = | 189 TestNetworkQualityRttListener rttListener = |
| 188 new TestNetworkQualityRttListener(Executors.newSingleThreadExecu
tor()); | 190 new TestNetworkQualityRttListener(Executors.newSingleThreadExecu
tor()); |
| 189 TestNetworkQualityThroughputListener throughputListener = | 191 TestNetworkQualityThroughputListener throughputListener = |
| 190 new TestNetworkQualityThroughputListener( | 192 new TestNetworkQualityThroughputListener( |
| 191 Executors.newSingleThreadExecutor(), waitForThroughput); | 193 Executors.newSingleThreadExecutor(), waitForThroughput); |
| 192 | 194 |
| 193 mTestFramework.mCronetEngine.addRttListener(rttListener); | 195 mTestFramework.mCronetEngine.addRttListener(rttListener); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 assertTrue(rttListener.rttObservationCount(2) > 0); | 227 assertTrue(rttListener.rttObservationCount(2) > 0); |
| 226 | 228 |
| 227 // Verify that effective connection type callback is received and | 229 // Verify that effective connection type callback is received and |
| 228 // effective connection type is correctly set. | 230 // effective connection type is correctly set. |
| 229 assertTrue(mTestFramework.mCronetEngine.getEffectiveConnectionType() | 231 assertTrue(mTestFramework.mCronetEngine.getEffectiveConnectionType() |
| 230 != EffectiveConnectionType.EFFECTIVE_CONNECTION_TYPE_UNKNOWN); | 232 != EffectiveConnectionType.EFFECTIVE_CONNECTION_TYPE_UNKNOWN); |
| 231 | 233 |
| 232 mTestFramework.mCronetEngine.shutdown(); | 234 mTestFramework.mCronetEngine.shutdown(); |
| 233 } | 235 } |
| 234 } | 236 } |
| OLD | NEW |