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 |