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

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java

Issue 2892013002: [Cronet] Clean up tests (Closed)
Patch Set: address comments Created 3 years, 7 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 unified diff | Download patch
OLDNEW
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.support.test.filters.LargeTest; 7 import android.support.test.filters.LargeTest;
8 import android.support.test.filters.SmallTest; 8 import android.support.test.filters.SmallTest;
9 9
10 import org.json.JSONObject; 10 import org.json.JSONObject;
(...skipping 10 matching lines...) Expand all
21 import java.io.IOException; 21 import java.io.IOException;
22 import java.util.Date; 22 import java.util.Date;
23 import java.util.concurrent.Executors; 23 import java.util.concurrent.Executors;
24 24
25 /** 25 /**
26 * Tests making requests using QUIC. 26 * Tests making requests using QUIC.
27 */ 27 */
28 public class QuicTest extends CronetTestBase { 28 public class QuicTest extends CronetTestBase {
29 private static final String TAG = QuicTest.class.getSimpleName(); 29 private static final String TAG = QuicTest.class.getSimpleName();
30 private static final String QUIC_PROTOCOL_STRING_PREFIX = "http/2+quic/"; 30 private static final String QUIC_PROTOCOL_STRING_PREFIX = "http/2+quic/";
31 private CronetTestFramework mTestFramework;
32 private ExperimentalCronetEngine.Builder mBuilder; 31 private ExperimentalCronetEngine.Builder mBuilder;
33 32
34 @Override 33 @Override
35 protected void setUp() throws Exception { 34 protected void setUp() throws Exception {
36 super.setUp(); 35 super.setUp();
37 // Load library first, since we need the Quic test server's URL. 36 // Load library first, since we need the Quic test server's URL.
38 System.loadLibrary("cronet_tests"); 37 System.loadLibrary("cronet_tests");
39 QuicTestServer.startQuicTestServer(getContext()); 38 QuicTestServer.startQuicTestServer(getContext());
40 39
41 mBuilder = new ExperimentalCronetEngine.Builder(getContext()); 40 mBuilder = new ExperimentalCronetEngine.Builder(getContext());
42 mBuilder.enableNetworkQualityEstimator(true).enableQuic(true); 41 mBuilder.enableNetworkQualityEstimator(true).enableQuic(true);
43 mBuilder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getS erverPort(), 42 mBuilder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getS erverPort(),
44 QuicTestServer.getServerPort()); 43 QuicTestServer.getServerPort());
45 44
46 // TODO(mgersh): Enable connection migration once it works, see http://c rbug.com/634910 45 // TODO(mgersh): Enable connection migration once it works, see http://c rbug.com/634910
47 JSONObject quicParams = new JSONObject() 46 JSONObject quicParams = new JSONObject()
48 .put("connection_options", "PACE,IW10,FO O,DEADBEEF") 47 .put("connection_options", "PACE,IW10,FO O,DEADBEEF")
49 .put("max_server_configs_stored_in_prope rties", 2) 48 .put("max_server_configs_stored_in_prope rties", 2)
50 .put("idle_connection_timeout_seconds", 300) 49 .put("idle_connection_timeout_seconds", 300)
51 .put("close_sessions_on_ip_change", fals e) 50 .put("close_sessions_on_ip_change", fals e)
52 .put("migrate_sessions_on_network_change ", false) 51 .put("migrate_sessions_on_network_change ", false)
53 .put("migrate_sessions_early", false) 52 .put("migrate_sessions_early", false)
54 .put("race_cert_verification", true); 53 .put("race_cert_verification", true);
55 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules (); 54 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules ();
56 JSONObject experimentalOptions = new JSONObject() 55 JSONObject experimentalOptions = new JSONObject()
57 .put("QUIC", quicParams) 56 .put("QUIC", quicParams)
58 .put("HostResolverRules", hostR esolverParams); 57 .put("HostResolverRules", hostR esolverParams);
59 mBuilder.setExperimentalOptions(experimentalOptions.toString()); 58 mBuilder.setExperimentalOptions(experimentalOptions.toString());
60 mBuilder.setStoragePath(CronetTestFramework.getTestStorage(getContext()) ); 59 mBuilder.setStoragePath(getTestStorage(getContext()));
61 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1 000 * 1024); 60 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1 000 * 1024);
62 CronetTestUtil.setMockCertVerifierForTesting( 61 CronetTestUtil.setMockCertVerifierForTesting(
63 mBuilder, QuicTestServer.createMockCertVerifier()); 62 mBuilder, QuicTestServer.createMockCertVerifier());
64 } 63 }
65 64
66 @Override 65 @Override
67 protected void tearDown() throws Exception { 66 protected void tearDown() throws Exception {
68 QuicTestServer.shutdownQuicTestServer(); 67 QuicTestServer.shutdownQuicTestServer();
69 super.tearDown(); 68 super.tearDown();
70 } 69 }
71 70
72 @LargeTest 71 @LargeTest
73 @Feature({"Cronet"}) 72 @Feature({"Cronet"})
74 @OnlyRunNativeCronet 73 @OnlyRunNativeCronet
75 public void testQuicLoadUrl() throws Exception { 74 public void testQuicLoadUrl() throws Exception {
76 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, mBuilder); 75 ExperimentalCronetEngine cronetEngine = mBuilder.build();
77 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; 76 String quicURL = QuicTestServer.getServerURL() + "/simple.txt";
78 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 77 TestUrlRequestCallback callback = new TestUrlRequestCallback();
79 78
80 // Although the native stack races QUIC and SPDY for the first request, 79 // Although the native stack races QUIC and SPDY for the first request,
81 // since there is no http server running on the corresponding TCP port, 80 // since there is no http server running on the corresponding TCP port,
82 // QUIC will always succeed with a 200 (see 81 // QUIC will always succeed with a 200 (see
83 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). 82 // net::HttpStreamFactoryImpl::Request::OnStreamFailed).
84 UrlRequest.Builder requestBuilder = mTestFramework.mCronetEngine.newUrlR equestBuilder( 83 UrlRequest.Builder requestBuilder =
85 quicURL, callback, callback.getExecutor()); 84 cronetEngine.newUrlRequestBuilder(quicURL, callback, callback.ge tExecutor());
86 requestBuilder.build().start(); 85 requestBuilder.build().start();
87 callback.blockForDone(); 86 callback.blockForDone();
88 87
89 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 88 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
90 String expectedContent = "This is a simple text file served by QUIC.\n"; 89 String expectedContent = "This is a simple text file served by QUIC.\n";
91 assertEquals(expectedContent, callback.mResponseAsString); 90 assertEquals(expectedContent, callback.mResponseAsString);
92 assertIsQuic(callback.mResponseInfo); 91 assertIsQuic(callback.mResponseInfo);
93 // The total received bytes should be larger than the content length, to account for 92 // The total received bytes should be larger than the content length, to account for
94 // headers. 93 // headers.
95 assertTrue(callback.mResponseInfo.getReceivedByteCount() > expectedConte nt.length()); 94 assertTrue(callback.mResponseInfo.getReceivedByteCount() > expectedConte nt.length());
96 // This test takes a long time, since the update will only be scheduled 95 // This test takes a long time, since the update will only be scheduled
97 // after kUpdatePrefsDelayMs in http_server_properties_manager.cc. 96 // after kUpdatePrefsDelayMs in http_server_properties_manager.cc.
98 while (true) { 97 while (true) {
99 Log.i(TAG, "Still waiting for pref file update....."); 98 Log.i(TAG, "Still waiting for pref file update.....");
100 Thread.sleep(10000); 99 Thread.sleep(10000);
101 boolean contains = false; 100 boolean contains = false;
102 try { 101 try {
103 if (fileContainsString("local_prefs.json", "quic")) break; 102 if (fileContainsString("local_prefs.json", "quic")) break;
104 } catch (FileNotFoundException e) { 103 } catch (FileNotFoundException e) {
105 // Ignored this exception since the file will only be created wh en updates are 104 // Ignored this exception since the file will only be created wh en updates are
106 // flushed to the disk. 105 // flushed to the disk.
107 } 106 }
108 } 107 }
109 assertTrue(fileContainsString("local_prefs.json", 108 assertTrue(fileContainsString("local_prefs.json",
110 QuicTestServer.getServerHost() + ":" + QuicTestServer.getServerP ort())); 109 QuicTestServer.getServerHost() + ":" + QuicTestServer.getServerP ort()));
111 mTestFramework.mCronetEngine.shutdown(); 110 cronetEngine.shutdown();
112 111
113 // Make another request using a new context but with no QUIC hints. 112 // Make another request using a new context but with no QUIC hints.
114 ExperimentalCronetEngine.Builder builder = 113 ExperimentalCronetEngine.Builder builder =
115 new ExperimentalCronetEngine.Builder(getContext()); 114 new ExperimentalCronetEngine.Builder(getContext());
116 builder.setStoragePath(CronetTestFramework.getTestStorage(getContext())) ; 115 builder.setStoragePath(getTestStorage(getContext()));
117 builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1000 * 102 4); 116 builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1000 * 102 4);
118 builder.enableQuic(true); 117 builder.enableQuic(true);
119 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules (); 118 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules ();
120 JSONObject experimentalOptions = new JSONObject() 119 JSONObject experimentalOptions = new JSONObject()
121 .put("HostResolverRules", hostR esolverParams); 120 .put("HostResolverRules", hostR esolverParams);
122 builder.setExperimentalOptions(experimentalOptions.toString()); 121 builder.setExperimentalOptions(experimentalOptions.toString());
123 CronetTestUtil.setMockCertVerifierForTesting( 122 CronetTestUtil.setMockCertVerifierForTesting(
124 builder, QuicTestServer.createMockCertVerifier()); 123 builder, QuicTestServer.createMockCertVerifier());
125 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, builder); 124 cronetEngine = builder.build();
126 TestUrlRequestCallback callback2 = new TestUrlRequestCallback(); 125 TestUrlRequestCallback callback2 = new TestUrlRequestCallback();
127 requestBuilder = mTestFramework.mCronetEngine.newUrlRequestBuilder( 126 requestBuilder =
128 quicURL, callback2, callback2.getExecutor()); 127 cronetEngine.newUrlRequestBuilder(quicURL, callback2, callback2. getExecutor());
129 requestBuilder.build().start(); 128 requestBuilder.build().start();
130 callback2.blockForDone(); 129 callback2.blockForDone();
131 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); 130 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode());
132 assertEquals(expectedContent, callback2.mResponseAsString); 131 assertEquals(expectedContent, callback2.mResponseAsString);
133 assertIsQuic(callback.mResponseInfo); 132 assertIsQuic(callback.mResponseInfo);
134 // The total received bytes should be larger than the content length, to account for 133 // The total received bytes should be larger than the content length, to account for
135 // headers. 134 // headers.
136 assertTrue(callback2.mResponseInfo.getReceivedByteCount() > expectedCont ent.length()); 135 assertTrue(callback2.mResponseInfo.getReceivedByteCount() > expectedCont ent.length());
137 } 136 }
138 137
139 // Returns whether a file contains a particular string. 138 // Returns whether a file contains a particular string.
140 @SuppressFBWarnings("OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE") 139 @SuppressFBWarnings("OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE")
141 private boolean fileContainsString(String filename, String content) throws I OException { 140 private boolean fileContainsString(String filename, String content) throws I OException {
142 File file = 141 File file = new File(getTestStorage(getContext()) + "/prefs/" + filename );
143 new File(CronetTestFramework.getTestStorage(getContext()) + "/pr efs/" + filename);
144 FileInputStream fileInputStream = new FileInputStream(file); 142 FileInputStream fileInputStream = new FileInputStream(file);
145 byte[] data = new byte[(int) file.length()]; 143 byte[] data = new byte[(int) file.length()];
146 fileInputStream.read(data); 144 fileInputStream.read(data);
147 fileInputStream.close(); 145 fileInputStream.close();
148 return new String(data, "UTF-8").contains(content); 146 return new String(data, "UTF-8").contains(content);
149 } 147 }
150 148
151 /** 149 /**
152 * Tests that the network quality listeners are propoerly notified when QUIC is enabled. 150 * Tests that the network quality listeners are propoerly notified when QUIC is enabled.
153 */ 151 */
154 @LargeTest 152 @LargeTest
155 @Feature({"Cronet"}) 153 @Feature({"Cronet"})
156 @OnlyRunNativeCronet 154 @OnlyRunNativeCronet
157 @SuppressWarnings("deprecation") 155 @SuppressWarnings("deprecation")
158 public void testNQEWithQuic() throws Exception { 156 public void testNQEWithQuic() throws Exception {
159 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, mBuilder); 157 ExperimentalCronetEngine cronetEngine = mBuilder.build();
160 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; 158 String quicURL = QuicTestServer.getServerURL() + "/simple.txt";
161 159
162 TestNetworkQualityRttListener rttListener = 160 TestNetworkQualityRttListener rttListener =
163 new TestNetworkQualityRttListener(Executors.newSingleThreadExecu tor()); 161 new TestNetworkQualityRttListener(Executors.newSingleThreadExecu tor());
164 TestNetworkQualityThroughputListener throughputListener = 162 TestNetworkQualityThroughputListener throughputListener =
165 new TestNetworkQualityThroughputListener(Executors.newSingleThre adExecutor()); 163 new TestNetworkQualityThroughputListener(Executors.newSingleThre adExecutor());
166 164
167 mTestFramework.mCronetEngine.addRttListener(rttListener); 165 cronetEngine.addRttListener(rttListener);
168 mTestFramework.mCronetEngine.addThroughputListener(throughputListener); 166 cronetEngine.addThroughputListener(throughputListener);
169 167
170 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true, true); 168 cronetEngine.configureNetworkQualityEstimatorForTesting(true, true, true );
171 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 169 TestUrlRequestCallback callback = new TestUrlRequestCallback();
172 170
173 // Although the native stack races QUIC and SPDY for the first request, 171 // Although the native stack races QUIC and SPDY for the first request,
174 // since there is no http server running on the corresponding TCP port, 172 // since there is no http server running on the corresponding TCP port,
175 // QUIC will always succeed with a 200 (see 173 // QUIC will always succeed with a 200 (see
176 // net::HttpStreamFactoryImpl::Request::OnStreamFailed). 174 // net::HttpStreamFactoryImpl::Request::OnStreamFailed).
177 UrlRequest.Builder requestBuilder = mTestFramework.mCronetEngine.newUrlR equestBuilder( 175 UrlRequest.Builder requestBuilder =
178 quicURL, callback, callback.getExecutor()); 176 cronetEngine.newUrlRequestBuilder(quicURL, callback, callback.ge tExecutor());
179 requestBuilder.build().start(); 177 requestBuilder.build().start();
180 callback.blockForDone(); 178 callback.blockForDone();
181 179
182 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 180 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
183 String expectedContent = "This is a simple text file served by QUIC.\n"; 181 String expectedContent = "This is a simple text file served by QUIC.\n";
184 assertEquals(expectedContent, callback.mResponseAsString); 182 assertEquals(expectedContent, callback.mResponseAsString);
185 assertIsQuic(callback.mResponseInfo); 183 assertIsQuic(callback.mResponseInfo);
186 184
187 // Throughput observation is posted to the network quality estimator on the network thread 185 // Throughput observation is posted to the network quality estimator on the network thread
188 // after the UrlRequest is completed. The observations are then eventual ly posted to 186 // after the UrlRequest is completed. The observations are then eventual ly posted to
189 // throughput listeners on the executor provided to network quality. 187 // throughput listeners on the executor provided to network quality.
190 throughputListener.waitUntilFirstThroughputObservationReceived(); 188 throughputListener.waitUntilFirstThroughputObservationReceived();
191 189
192 // Wait for RTT observation (at the URL request layer) to be posted. 190 // Wait for RTT observation (at the URL request layer) to be posted.
193 rttListener.waitUntilFirstUrlRequestRTTReceived(); 191 rttListener.waitUntilFirstUrlRequestRTTReceived();
194 192
195 assertTrue(throughputListener.throughputObservationCount() > 0); 193 assertTrue(throughputListener.throughputObservationCount() > 0);
196 194
197 // Check RTT observation count after throughput observation has been rec eived. This ensures 195 // Check RTT observation count after throughput observation has been rec eived. This ensures
198 // that executor has finished posting the RTT observation to the RTT lis teners. 196 // that executor has finished posting the RTT observation to the RTT lis teners.
199 // NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST 197 // NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST
200 assertTrue(rttListener.rttObservationCount(0) > 0); 198 assertTrue(rttListener.rttObservationCount(0) > 0);
201 199
202 // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC 200 // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC
203 assertTrue(rttListener.rttObservationCount(2) > 0); 201 assertTrue(rttListener.rttObservationCount(2) > 0);
204 202
205 // Verify that effective connection type callback is received and 203 // Verify that effective connection type callback is received and
206 // effective connection type is correctly set. 204 // effective connection type is correctly set.
207 assertTrue(mTestFramework.mCronetEngine.getEffectiveConnectionType() 205 assertTrue(
208 != EffectiveConnectionType.TYPE_UNKNOWN); 206 cronetEngine.getEffectiveConnectionType() != EffectiveConnection Type.TYPE_UNKNOWN);
209 207
210 // Verify that the HTTP RTT, transport RTT and downstream throughput 208 // Verify that the HTTP RTT, transport RTT and downstream throughput
211 // estimates are available. 209 // estimates are available.
212 assertTrue(mTestFramework.mCronetEngine.getHttpRttMs() >= 0); 210 assertTrue(cronetEngine.getHttpRttMs() >= 0);
213 assertTrue(mTestFramework.mCronetEngine.getTransportRttMs() >= 0); 211 assertTrue(cronetEngine.getTransportRttMs() >= 0);
214 assertTrue(mTestFramework.mCronetEngine.getDownstreamThroughputKbps() >= 0); 212 assertTrue(cronetEngine.getDownstreamThroughputKbps() >= 0);
215 213
216 // Verify that the cached estimates were written to the prefs. 214 // Verify that the cached estimates were written to the prefs.
217 while (true) { 215 while (true) {
218 Log.i(TAG, "Still waiting for pref file update....."); 216 Log.i(TAG, "Still waiting for pref file update.....");
219 Thread.sleep(10000); 217 Thread.sleep(10000);
220 try { 218 try {
221 if (fileContainsString("local_prefs.json", "network_qualities")) { 219 if (fileContainsString("local_prefs.json", "network_qualities")) {
222 break; 220 break;
223 } 221 }
224 } catch (FileNotFoundException e) { 222 } catch (FileNotFoundException e) {
225 // Ignored this exception since the file will only be created wh en updates are 223 // Ignored this exception since the file will only be created wh en updates are
226 // flushed to the disk. 224 // flushed to the disk.
227 } 225 }
228 } 226 }
229 assertTrue(fileContainsString("local_prefs.json", "network_qualities")); 227 assertTrue(fileContainsString("local_prefs.json", "network_qualities"));
230 mTestFramework.mCronetEngine.shutdown(); 228 cronetEngine.shutdown();
231 } 229 }
232 230
233 @SmallTest 231 @SmallTest
234 @OnlyRunNativeCronet 232 @OnlyRunNativeCronet
235 @Feature({"Cronet"}) 233 @Feature({"Cronet"})
236 public void testMetricsWithQuic() throws Exception { 234 public void testMetricsWithQuic() throws Exception {
237 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, mBuilder); 235 ExperimentalCronetEngine cronetEngine = mBuilder.build();
238 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 236 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
239 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 237 cronetEngine.addRequestFinishedListener(requestFinishedListener);
240 238
241 String quicURL = QuicTestServer.getServerURL() + "/simple.txt"; 239 String quicURL = QuicTestServer.getServerURL() + "/simple.txt";
242 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 240 TestUrlRequestCallback callback = new TestUrlRequestCallback();
243 241
244 UrlRequest.Builder requestBuilder = mTestFramework.mCronetEngine.newUrlR equestBuilder( 242 UrlRequest.Builder requestBuilder =
245 quicURL, callback, callback.getExecutor()); 243 cronetEngine.newUrlRequestBuilder(quicURL, callback, callback.ge tExecutor());
246 Date startTime = new Date(); 244 Date startTime = new Date();
247 requestBuilder.build().start(); 245 requestBuilder.build().start();
248 callback.blockForDone(); 246 callback.blockForDone();
249 requestFinishedListener.blockUntilDone(); 247 requestFinishedListener.blockUntilDone();
250 Date endTime = new Date(); 248 Date endTime = new Date();
251 249
252 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 250 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
253 assertIsQuic(callback.mResponseInfo); 251 assertIsQuic(callback.mResponseInfo);
254 252
255 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); 253 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
256 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, quicURL, startTime , endTime); 254 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, quicURL, startTime , endTime);
257 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n()); 255 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n());
258 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, true); 256 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, true);
259 257
260 // Second request should use the same connection and not have ConnectTim ing numbers 258 // Second request should use the same connection and not have ConnectTim ing numbers
261 callback = new TestUrlRequestCallback(); 259 callback = new TestUrlRequestCallback();
262 requestFinishedListener.reset(); 260 requestFinishedListener.reset();
263 requestBuilder = mTestFramework.mCronetEngine.newUrlRequestBuilder( 261 requestBuilder =
264 quicURL, callback, callback.getExecutor()); 262 cronetEngine.newUrlRequestBuilder(quicURL, callback, callback.ge tExecutor());
265 startTime = new Date(); 263 startTime = new Date();
266 requestBuilder.build().start(); 264 requestBuilder.build().start();
267 callback.blockForDone(); 265 callback.blockForDone();
268 requestFinishedListener.blockUntilDone(); 266 requestFinishedListener.blockUntilDone();
269 endTime = new Date(); 267 endTime = new Date();
270 268
271 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 269 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
272 assertIsQuic(callback.mResponseInfo); 270 assertIsQuic(callback.mResponseInfo);
273 271
274 requestInfo = requestFinishedListener.getRequestInfo(); 272 requestInfo = requestFinishedListener.getRequestInfo();
275 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, quicURL, startTime , endTime); 273 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, quicURL, startTime , endTime);
276 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n()); 274 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n());
277 MetricsTestUtil.checkNoConnectTiming(requestInfo.getMetrics()); 275 MetricsTestUtil.checkNoConnectTiming(requestInfo.getMetrics());
278 276
279 mTestFramework.mCronetEngine.shutdown(); 277 cronetEngine.shutdown();
280 } 278 }
281 279
282 // Helper method to assert that the request is negotiated over QUIC. 280 // Helper method to assert that the request is negotiated over QUIC.
283 private void assertIsQuic(UrlResponseInfo responseInfo) { 281 private void assertIsQuic(UrlResponseInfo responseInfo) {
284 assertTrue(responseInfo.getNegotiatedProtocol().startsWith(QUIC_PROTOCOL _STRING_PREFIX)); 282 assertTrue(responseInfo.getNegotiatedProtocol().startsWith(QUIC_PROTOCOL _STRING_PREFIX));
285 } 283 }
286 } 284 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698