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

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

Issue 2045703003: Enable NQE when Cronet Engine is built (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed mef comments Created 4 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 static org.chromium.base.CollectionUtil.newHashSet; 7 import static org.chromium.base.CollectionUtil.newHashSet;
8 8
9 import android.content.Context; 9 import android.content.Context;
10 import android.content.ContextWrapper; 10 import android.content.ContextWrapper;
11 import android.os.ConditionVariable; 11 import android.os.ConditionVariable;
12 import android.os.Handler; 12 import android.os.Handler;
13 import android.os.Looper; 13 import android.os.Looper;
14 import android.os.StrictMode;
14 import android.test.suitebuilder.annotation.SmallTest; 15 import android.test.suitebuilder.annotation.SmallTest;
15 16
16 import org.chromium.base.PathUtils; 17 import org.chromium.base.PathUtils;
17 import org.chromium.base.annotations.JNINamespace; 18 import org.chromium.base.annotations.JNINamespace;
18 import org.chromium.base.test.util.Feature; 19 import org.chromium.base.test.util.Feature;
19 import org.chromium.base.test.util.FlakyTest; 20 import org.chromium.base.test.util.FlakyTest;
20 import org.chromium.net.CronetEngine.UrlRequestInfo; 21 import org.chromium.net.CronetEngine.UrlRequestInfo;
21 import org.chromium.net.TestUrlRequestCallback.ResponseStep; 22 import org.chromium.net.TestUrlRequestCallback.ResponseStep;
22 import org.chromium.net.test.EmbeddedTestServer; 23 import org.chromium.net.test.EmbeddedTestServer;
23 24
24 import java.io.BufferedReader; 25 import java.io.BufferedReader;
25 import java.io.File; 26 import java.io.File;
26 import java.io.FileReader; 27 import java.io.FileReader;
27 import java.util.Arrays; 28 import java.util.Arrays;
28 import java.util.HashSet; 29 import java.util.HashSet;
29 import java.util.LinkedList; 30 import java.util.LinkedList;
30 import java.util.NoSuchElementException; 31 import java.util.NoSuchElementException;
31 import java.util.concurrent.Executor; 32 import java.util.concurrent.Executor;
32 import java.util.concurrent.Executors; 33 import java.util.concurrent.Executors;
34 import java.util.concurrent.ThreadFactory;
33 35
34 /** 36 /**
35 * Test CronetEngine. 37 * Test CronetEngine.
36 */ 38 */
37 @JNINamespace("cronet") 39 @JNINamespace("cronet")
38 public class CronetUrlRequestContextTest extends CronetTestBase { 40 public class CronetUrlRequestContextTest extends CronetTestBase {
39 // URLs used for tests. 41 // URLs used for tests.
40 private static final String MOCK_CRONET_TEST_FAILED_URL = 42 private static final String MOCK_CRONET_TEST_FAILED_URL =
41 "http://mock.failed.request/-2"; 43 "http://mock.failed.request/-2";
42 private static final String MOCK_CRONET_TEST_SUCCESS_URL = 44 private static final String MOCK_CRONET_TEST_SUCCESS_URL =
43 "http://mock.http/success.txt"; 45 "http://mock.http/success.txt";
44 46
45 private EmbeddedTestServer mTestServer; 47 private EmbeddedTestServer mTestServer;
46 private String mUrl; 48 private String mUrl;
47 private String mUrl404; 49 private String mUrl404;
48 private String mUrl500; 50 private String mUrl500;
49 CronetTestFramework mTestFramework; 51 CronetTestFramework mTestFramework;
50 52
53 // Thread on which network quality listeners should be notified.
54 private Thread mNetworkQualityThread;
55
51 @Override 56 @Override
52 protected void setUp() throws Exception { 57 protected void setUp() throws Exception {
53 super.setUp(); 58 super.setUp();
54 mTestServer = EmbeddedTestServer.createAndStartDefaultServer(getContext( )); 59 mTestServer = EmbeddedTestServer.createAndStartDefaultServer(getContext( ));
55 mUrl = mTestServer.getURL("/echo?status=200"); 60 mUrl = mTestServer.getURL("/echo?status=200");
56 mUrl404 = mTestServer.getURL("/echo?status=404"); 61 mUrl404 = mTestServer.getURL("/echo?status=404");
57 mUrl500 = mTestServer.getURL("/echo?status=500"); 62 mUrl500 = mTestServer.getURL("/echo?status=500");
58 } 63 }
59 64
60 @Override 65 @Override
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 public void runAllTasks() { 123 public void runAllTasks() {
119 try { 124 try {
120 while (mTaskQueue.size() > 0) { 125 while (mTaskQueue.size() > 0) {
121 mTaskQueue.remove().run(); 126 mTaskQueue.remove().run();
122 } 127 }
123 } catch (NoSuchElementException e) { 128 } catch (NoSuchElementException e) {
124 } 129 }
125 } 130 }
126 } 131 }
127 132
128 static class TestNetworkQualityListener 133 private class ExecutorThreadFactory implements ThreadFactory {
129 implements NetworkQualityRttListener, NetworkQualityThroughputListen er { 134 public Thread newThread(final Runnable r) {
130 // Lock to ensure that observation counts can be updated and read by dif ferent threads. 135 mNetworkQualityThread = new Thread(new Runnable() {
131 private final Object mLock = new Object(); 136 @Override
132 private final ConditionVariable mWaitForThroughput; 137 public void run() {
133 private int mRttObservationCount; 138 StrictMode.ThreadPolicy threadPolicy = StrictMode.getThreadP olicy();
134 private int mThroughputObservationCount; 139 try {
135 140 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.B uilder()
136 TestNetworkQualityListener(ConditionVariable waitForThroughput) { 141 .detectNetwork()
137 mWaitForThroughput = waitForThroughput; 142 .penaltyLog()
138 } 143 .penaltyDeath()
139 144 .build());
140 @Override 145 r.run();
141 public void onRttObservation(int rttMs, long when, int source) { 146 } finally {
142 synchronized (mLock) { 147 StrictMode.setThreadPolicy(threadPolicy);
143 mRttObservationCount++; 148 }
144 }
145 }
146
147 @Override
148 public void onThroughputObservation(int throughputKbps, long when, int s ource) {
149 synchronized (mLock) {
150 if (mWaitForThroughput != null) {
151 mWaitForThroughput.open();
152 } 149 }
153 mThroughputObservationCount++; 150 });
154 } 151 return mNetworkQualityThread;
155 }
156
157 public int rttObservationCount() {
158 synchronized (mLock) {
159 return mRttObservationCount;
160 }
161 }
162
163 public int throughputObservationCount() {
164 synchronized (mLock) {
165 return mThroughputObservationCount;
166 }
167 } 152 }
168 } 153 }
169 154
170 @SmallTest 155 @SmallTest
171 @Feature({"Cronet"}) 156 @Feature({"Cronet"})
172 public void testConfigUserAgent() throws Exception { 157 public void testConfigUserAgent() throws Exception {
173 String userAgentName = "User-Agent"; 158 String userAgentName = "User-Agent";
174 String userAgentValue = "User-Agent-Value"; 159 String userAgentValue = "User-Agent-Value";
175 CronetEngine.Builder cronetEngineBuilder = new CronetEngine.Builder(getC ontext()); 160 CronetEngine.Builder cronetEngineBuilder = new CronetEngine.Builder(getC ontext());
176 if (testingJavaImpl()) { 161 if (testingJavaImpl()) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 // Proxy logic configured to use the test server as its proxy. 218 // Proxy logic configured to use the test server as its proxy.
234 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 219 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
235 assertEquals(serverHostPort, callback.mResponseInfo.getProxyServer()); 220 assertEquals(serverHostPort, callback.mResponseInfo.getProxyServer());
236 assertEquals("http://DomainThatDoesnt.Resolve/datareductionproxysuccess. txt", 221 assertEquals("http://DomainThatDoesnt.Resolve/datareductionproxysuccess. txt",
237 callback.mResponseInfo.getUrl()); 222 callback.mResponseInfo.getUrl());
238 } 223 }
239 224
240 @SmallTest 225 @SmallTest
241 @Feature({"Cronet"}) 226 @Feature({"Cronet"})
242 public void testRealTimeNetworkQualityObservationsNotEnabled() throws Except ion { 227 public void testRealTimeNetworkQualityObservationsNotEnabled() throws Except ion {
243 mTestFramework = startCronetTestFramework(); 228 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
244 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener(null); 229 mTestFramework =
230 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
231 Executor networkQualityExecutor = Executors.newSingleThreadExecutor();
232 TestNetworkQualityRttListener rttListener =
233 new TestNetworkQualityRttListener(networkQualityExecutor);
234 TestNetworkQualityThroughputListener throughputListener =
235 new TestNetworkQualityThroughputListener(networkQualityExecutor, null);
245 try { 236 try {
246 mTestFramework.mCronetEngine.addRttListener(networkQualityListener); 237 mTestFramework.mCronetEngine.addRttListener(rttListener);
247 fail("Should throw an exception."); 238 fail("Should throw an exception.");
248 } catch (IllegalStateException e) { 239 } catch (IllegalStateException e) {
249 } 240 }
250 try { 241 try {
251 mTestFramework.mCronetEngine.addThroughputListener(networkQualityLis tener); 242 mTestFramework.mCronetEngine.addThroughputListener(throughputListene r);
252 fail("Should throw an exception."); 243 fail("Should throw an exception.");
253 } catch (IllegalStateException e) { 244 } catch (IllegalStateException e) {
254 } 245 }
255 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 246 TestUrlRequestCallback callback = new TestUrlRequestCallback();
256 UrlRequest urlRequest = 247 UrlRequest urlRequest =
257 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor()); 248 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
258 urlRequest.start(); 249 urlRequest.start();
259 callback.blockForDone(); 250 callback.blockForDone();
260 assertEquals(0, networkQualityListener.rttObservationCount()); 251 assertEquals(0, rttListener.rttObservationCount());
261 assertEquals(0, networkQualityListener.throughputObservationCount()); 252 assertEquals(0, throughputListener.throughputObservationCount());
253 mTestFramework.mCronetEngine.shutdown();
254 }
255
256 @SmallTest
257 @Feature({"Cronet"})
258 public void testRealTimeNetworkQualityObservationsNotEnabled_LegacyAPI() thr ows Exception {
259 mTestFramework = startCronetTestFramework();
260 TestNetworkQualityRttListener rttListener = new TestNetworkQualityRttLis tener();
261 try {
262 mTestFramework.mCronetEngine.addRttListener(rttListener);
263 fail("Should throw an exception.");
264 } catch (IllegalStateException e) {
265 }
266 TestUrlRequestCallback callback = new TestUrlRequestCallback();
267 UrlRequest urlRequest =
268 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
269 urlRequest.start();
270 callback.blockForDone();
271 assertEquals(0, rttListener.rttObservationCount());
262 mTestFramework.mCronetEngine.shutdown(); 272 mTestFramework.mCronetEngine.shutdown();
263 } 273 }
264 274
265 @SmallTest 275 @SmallTest
266 @Feature({"Cronet"}) 276 @Feature({"Cronet"})
267 public void testRealTimeNetworkQualityObservationsListenerRemoved() throws E xception { 277 public void testRealTimeNetworkQualityObservationsListenerRemoved() throws E xception {
278 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
279 TestExecutor networkQualityExecutor = new TestExecutor();
280 TestNetworkQualityRttListener rttListener =
281 new TestNetworkQualityRttListener(networkQualityExecutor);
282 mCronetEngineBuilder.enableNetworkQualityEstimator(true);
283 mTestFramework =
284 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
285 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true);
286
287 mTestFramework.mCronetEngine.addRttListener(rttListener);
288 mTestFramework.mCronetEngine.removeRttListener(rttListener);
289 TestUrlRequestCallback callback = new TestUrlRequestCallback();
290 UrlRequest urlRequest =
291 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
292 urlRequest.start();
293 callback.blockForDone();
294 networkQualityExecutor.runAllTasks();
295 assertEquals(0, rttListener.rttObservationCount());
296 mTestFramework.mCronetEngine.shutdown();
297 }
298
299 @SmallTest
300 @Feature({"Cronet"})
301 public void testRealTimeNetworkQualityObservationsListenerRemoved_LegacyAPI( ) throws Exception {
268 mTestFramework = startCronetTestFramework(); 302 mTestFramework = startCronetTestFramework();
269 TestExecutor testExecutor = new TestExecutor(); 303 TestExecutor testExecutor = new TestExecutor();
270 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener(null); 304 TestNetworkQualityRttListener rttListener = new TestNetworkQualityRttLis tener();
271 mTestFramework.mCronetEngine.enableNetworkQualityEstimatorForTesting( 305 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
272 true, true, testExecutor); 306 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true);
273 mTestFramework.mCronetEngine.addRttListener(networkQualityListener); 307 mTestFramework.mCronetEngine.addRttListener(rttListener);
274 mTestFramework.mCronetEngine.addThroughputListener(networkQualityListene r); 308 mTestFramework.mCronetEngine.removeRttListener(rttListener);
275 mTestFramework.mCronetEngine.removeRttListener(networkQualityListener);
276 mTestFramework.mCronetEngine.removeThroughputListener(networkQualityList ener);
277 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 309 TestUrlRequestCallback callback = new TestUrlRequestCallback();
278 UrlRequest urlRequest = 310 UrlRequest urlRequest =
279 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor()); 311 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
280 urlRequest.start(); 312 urlRequest.start();
281 callback.blockForDone(); 313 callback.blockForDone();
282 testExecutor.runAllTasks(); 314 testExecutor.runAllTasks();
283 assertEquals(0, networkQualityListener.rttObservationCount()); 315 assertEquals(0, rttListener.rttObservationCount());
284 assertEquals(0, networkQualityListener.throughputObservationCount());
285 mTestFramework.mCronetEngine.shutdown(); 316 mTestFramework.mCronetEngine.shutdown();
286 } 317 }
287 318
288 @SmallTest 319 @SmallTest
289 @Feature({"Cronet"}) 320 @Feature({"Cronet"})
290 public void testRealTimeNetworkQualityObservations() throws Exception { 321 public void testRealTimeNetworkQualityObservationsQuicDisabled() throws Exce ption {
322 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
323 Executor requestFinishedListenerExecutor =
324 Executors.newSingleThreadExecutor(new ExecutorThreadFactory());
325 Executor listenersExecutor = Executors.newSingleThreadExecutor(new Execu torThreadFactory());
326 ConditionVariable waitForThroughput = new ConditionVariable();
327 TestNetworkQualityRttListener rttListener =
328 new TestNetworkQualityRttListener(listenersExecutor);
329 TestNetworkQualityThroughputListener throughputListener =
330 new TestNetworkQualityThroughputListener(listenersExecutor, wait ForThroughput);
331 mCronetEngineBuilder.enableHTTP2(true).enableQUIC(false).enableNetworkQu alityEstimator(
332 true);
333 mTestFramework =
334 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
335 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true);
336 // requestFinishedListenerExecutor should not be used for notifying the RTT and
337 // throughput listeners.
338 mTestFramework.mCronetEngine.setRequestFinishedListenerExecutor(
339 requestFinishedListenerExecutor);
340
341 mTestFramework.mCronetEngine.addRttListener(rttListener);
342 mTestFramework.mCronetEngine.addThroughputListener(throughputListener);
343
344 TestUrlRequestCallback callback = new TestUrlRequestCallback();
345 UrlRequest urlRequest =
346 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
347 urlRequest.start();
348 callback.blockForDone();
349
350 // Throughput observation is posted to the network quality estimator on the network thread
351 // after the UrlRequest is completed. The observations are then eventual ly posted to
352 // throughput listeners on the executor provided to network quality.
353 waitForThroughput.block();
354 assertTrue(throughputListener.throughputObservationCount() > 0);
355
356 // Check RTT observation count after throughput observation has been rec eived. This ensures
357 // that executor has finished posting the RTT observation to the RTT lis teners.
358 assertTrue(rttListener.rttObservationCount() > 0);
359
360 // NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST
361 assertTrue(rttListener.rttObservationCount(0) > 0);
362
363 // NETWORK_QUALITY_OBSERVATION_SOURCE_TCP
364 assertTrue(rttListener.rttObservationCount(1) > 0);
365
366 // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC
367 assertEquals(0, rttListener.rttObservationCount(2));
368
369 // Verify that the listeners were notified on the expected thread.
370 assertEquals(mNetworkQualityThread, rttListener.getThread());
371 assertEquals(mNetworkQualityThread, throughputListener.getThread());
372
373 mTestFramework.mCronetEngine.shutdown();
374 }
375
376 @SmallTest
377 @Feature({"Cronet"})
378 public void testRealTimeNetworkQualityObservations_LegacyAPI() throws Except ion {
291 mTestFramework = startCronetTestFramework(); 379 mTestFramework = startCronetTestFramework();
292 Executor executor = Executors.newSingleThreadExecutor(); 380 Executor executor = Executors.newSingleThreadExecutor();
293 ConditionVariable waitForThroughput = new ConditionVariable(); 381 ConditionVariable waitForThroughput = new ConditionVariable();
294 TestNetworkQualityListener networkQualityListener = 382 TestNetworkQualityRttListener rttListener = new TestNetworkQualityRttLis tener();
295 new TestNetworkQualityListener(waitForThroughput); 383 TestNetworkQualityThroughputListener throughputListener =
296 mTestFramework.mCronetEngine.enableNetworkQualityEstimatorForTesting(tru e, true, executor); 384 new TestNetworkQualityThroughputListener(executor, waitForThroug hput);
297 mTestFramework.mCronetEngine.addRttListener(networkQualityListener); 385 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(executor);
298 mTestFramework.mCronetEngine.addThroughputListener(networkQualityListene r); 386 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true);
387 mTestFramework.mCronetEngine.addRttListener(rttListener);
388 mTestFramework.mCronetEngine.addThroughputListener(throughputListener);
299 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 389 TestUrlRequestCallback callback = new TestUrlRequestCallback();
300 UrlRequest urlRequest = 390 UrlRequest urlRequest =
301 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor()); 391 mTestFramework.mCronetEngine.createRequest(mUrl, callback, callb ack.getExecutor());
302 urlRequest.start(); 392 urlRequest.start();
303 callback.blockForDone(); 393 callback.blockForDone();
304 394
305 // Throughput observation is posted to the network quality estimator on the network thread 395 // Throughput observation is posted to the network quality estimator on the network thread
306 // after the UrlRequest is completed. The observations are then eventual ly posted to 396 // after the UrlRequest is completed. The observations are then eventual ly posted to
307 // throughput listeners on the executor provided to network quality. 397 // throughput listeners on the executor provided to network quality.
308 waitForThroughput.block(); 398 waitForThroughput.block();
309 assertTrue(networkQualityListener.throughputObservationCount() > 0); 399 assertTrue(throughputListener.throughputObservationCount() > 0);
310 400
311 // Check RTT observation count after throughput observation has been rec eived. This ensures 401 // Check RTT observation count after throughput observation has been rec eived. This ensures
312 // that executor has finished posting the RTT observation to the RTT lis teners. 402 // that executor has finished posting the RTT observation to the RTT lis teners.
313 assertTrue(networkQualityListener.rttObservationCount() > 0); 403 assertTrue(rttListener.rttObservationCount() > 0);
314 404
315 mTestFramework.mCronetEngine.shutdown(); 405 mTestFramework.mCronetEngine.shutdown();
316 } 406 }
317 407
408 // TODO(tbansal): http://crbug.com/618034 Remove this.
318 private static class TestRequestFinishedListener 409 private static class TestRequestFinishedListener
319 implements CronetEngine.RequestFinishedListener { 410 implements CronetEngine.RequestFinishedListener {
320 private UrlRequestInfo mRequestInfo = null; 411 private UrlRequestInfo mRequestInfo = null;
321 412
322 @Override 413 @Override
323 public void onRequestFinished(UrlRequestInfo requestInfo) { 414 public void onRequestFinished(UrlRequestInfo requestInfo) {
324 assertNull("onRequestFinished called repeatedly", mRequestInfo); 415 assertNull("onRequestFinished called repeatedly", mRequestInfo);
325 assertNotNull(requestInfo); 416 assertNotNull(requestInfo);
326 mRequestInfo = requestInfo; 417 mRequestInfo = requestInfo;
327 } 418 }
328 } 419 }
329 420
330 @SmallTest 421 @SmallTest
331 @Feature({"Cronet"}) 422 @Feature({"Cronet"})
332 @SuppressWarnings("deprecation") 423 @SuppressWarnings("deprecation")
333 public void testRequestFinishedListener() throws Exception { 424 public void testRequestFinishedListener_LegacyAPI() throws Exception {
334 mTestFramework = startCronetTestFramework(); 425 mTestFramework = startCronetTestFramework();
335 TestExecutor testExecutor = new TestExecutor(); 426 TestExecutor testExecutor = new TestExecutor();
336 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 427 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
337 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ; 428 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
338 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 429 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
339 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 430 TestUrlRequestCallback callback = new TestUrlRequestCallback();
340 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( 431 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
341 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); 432 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
342 urlRequestBuilder.addRequestAnnotation("request annotation") 433 urlRequestBuilder.addRequestAnnotation("request annotation")
343 .addRequestAnnotation(this) 434 .addRequestAnnotation(this)
344 .build() 435 .build()
345 .start(); 436 .start();
346 callback.blockForDone(); 437 callback.blockForDone();
347 testExecutor.runAllTasks(); 438 testExecutor.runAllTasks();
348 439
349 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo; 440 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
350 assertNotNull("RequestFinishedListener must be called", requestInfo); 441 assertNotNull("RequestFinishedListener must be called", requestInfo);
351 assertEquals(mUrl, requestInfo.getUrl()); 442 assertEquals(mUrl, requestInfo.getUrl());
352 assertNotNull(requestInfo.getResponseInfo()); 443 assertNotNull(requestInfo.getResponseInfo());
353 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. 444 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
354 new HashSet<Object>(requestInfo.getAnnotations())); 445 new HashSet<Object>(requestInfo.getAnnotations()));
355 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics(); 446 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
356 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics); 447 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
357 assertTrue(metrics.getTotalTimeMs() > 0); 448 assertTrue(metrics.getTotalTimeMs() > 0);
358 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); 449 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
359 assertTrue(metrics.getReceivedBytesCount() > 0); 450 assertTrue(metrics.getReceivedBytesCount() > 0);
360 mTestFramework.mCronetEngine.shutdown(); 451 mTestFramework.mCronetEngine.shutdown();
361 } 452 }
362 453
454 @SmallTest
455 @Feature({"Cronet"})
456 @SuppressWarnings("deprecation")
457 public void testRequestFinishedListenerWithExecutorSetLater_LegacyAPI() thro ws Exception {
458 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
459 TestExecutor testExecutor = new TestExecutor();
460 mCronetEngineBuilder.enableHTTP2(true).enableQUIC(false).enableNetworkQu alityEstimator(
461 true);
462 mTestFramework =
463 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
464 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
465 mTestFramework.mCronetEngine.setRequestFinishedListenerExecutor(testExec utor);
466 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
467 TestUrlRequestCallback callback = new TestUrlRequestCallback();
468 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
469 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
470 urlRequestBuilder.addRequestAnnotation("request annotation")
471 .addRequestAnnotation(this)
472 .build()
473 .start();
474 callback.blockForDone();
475 testExecutor.runAllTasks();
476
477 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
478 assertNotNull("RequestFinishedListener must be called", requestInfo);
479 assertEquals(mUrl, requestInfo.getUrl());
480 assertNotNull(requestInfo.getResponseInfo());
481 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
482 new HashSet<Object>(requestInfo.getAnnotations()));
483 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
484 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
485 assertTrue(metrics.getTotalTimeMs() > 0);
486 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
487 assertTrue(metrics.getReceivedBytesCount() > 0);
488 mTestFramework.mCronetEngine.shutdown();
489 }
490
363 /* 491 /*
364 @SmallTest 492 @SmallTest
365 @Feature({"Cronet"}) 493 @Feature({"Cronet"})
366 @SuppressWarnings("deprecation") 494 @SuppressWarnings("deprecation")
367 */ 495 */
368 @FlakyTest(message = "https://crbug.com/592444") 496 @FlakyTest(message = "https://crbug.com/592444")
369 public void testRequestFinishedListenerFailedRequest() throws Exception { 497 public void testRequestFinishedListenerFailedRequest_LegacyAPI() throws Exce ption {
370 String connectionRefusedUrl = "http://127.0.0.1:3"; 498 String connectionRefusedUrl = "http://127.0.0.1:3";
371 mTestFramework = startCronetTestFramework(); 499 mTestFramework = startCronetTestFramework();
372 TestExecutor testExecutor = new TestExecutor(); 500 TestExecutor testExecutor = new TestExecutor();
373 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 501 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
374 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ; 502 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
375 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 503 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
376 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 504 TestUrlRequestCallback callback = new TestUrlRequestCallback();
377 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl, 505 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl,
378 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 506 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
379 urlRequestBuilder.build().start(); 507 urlRequestBuilder.build().start();
380 callback.blockForDone(); 508 callback.blockForDone();
381 assertTrue(callback.mOnErrorCalled); 509 assertTrue(callback.mOnErrorCalled);
382 testExecutor.runAllTasks(); 510 testExecutor.runAllTasks();
383 511
384 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo; 512 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
385 assertNotNull("RequestFinishedListener must be called", requestInfo); 513 assertNotNull("RequestFinishedListener must be called", requestInfo);
386 assertEquals(connectionRefusedUrl, requestInfo.getUrl()); 514 assertEquals(connectionRefusedUrl, requestInfo.getUrl());
387 assertTrue(requestInfo.getAnnotations().isEmpty()); 515 assertTrue(requestInfo.getAnnotations().isEmpty());
388 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics(); 516 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
389 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics); 517 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
390 assertTrue(metrics.getTotalTimeMs() > 0); 518 assertTrue(metrics.getTotalTimeMs() > 0);
391 assertNull(metrics.getTtfbMs()); 519 assertNull(metrics.getTtfbMs());
392 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0); 520 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0);
393 mTestFramework.mCronetEngine.shutdown(); 521 mTestFramework.mCronetEngine.shutdown();
394 } 522 }
395 523
396 @SmallTest 524 @SmallTest
397 @Feature({"Cronet"}) 525 @Feature({"Cronet"})
398 @SuppressWarnings("deprecation") 526 @SuppressWarnings("deprecation")
399 public void testRequestFinishedListenerRemoved() throws Exception { 527 public void testRequestFinishedListenerRemoved_LegacyAPI() throws Exception {
400 mTestFramework = startCronetTestFramework(); 528 mTestFramework = startCronetTestFramework();
401 TestExecutor testExecutor = new TestExecutor(); 529 TestExecutor testExecutor = new TestExecutor();
402 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 530 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
403 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ; 531 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
404 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 532 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
405 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener); 533 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener);
406 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 534 TestUrlRequestCallback callback = new TestUrlRequestCallback();
407 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( 535 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
408 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); 536 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
409 urlRequestBuilder.build().start(); 537 urlRequestBuilder.build().start();
410 callback.blockForDone(); 538 callback.blockForDone();
411 testExecutor.runAllTasks(); 539 testExecutor.runAllTasks();
412 540
413 assertNull( 541 assertNull(
414 "RequestFinishedListener must not be called", requestFinishedLis tener.mRequestInfo); 542 "RequestFinishedListener must not be called", requestFinishedLis tener.mRequestInfo);
415 mTestFramework.mCronetEngine.shutdown(); 543 mTestFramework.mCronetEngine.shutdown();
416 } 544 }
417 545
418 @SmallTest 546 @SmallTest
419 @Feature({"Cronet"}) 547 @Feature({"Cronet"})
420 @SuppressWarnings("deprecation") 548 @SuppressWarnings("deprecation")
421 public void testRequestFinishedListenerDisabled() throws Exception { 549 public void testRequestFinishedListenerDisabled_LegacyAPI() throws Exception {
422 mTestFramework = startCronetTestFramework(); 550 mTestFramework = startCronetTestFramework();
423 TestExecutor testExecutor = new TestExecutor(); 551 TestExecutor testExecutor = new TestExecutor();
424 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 552 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
425 try { 553 try {
426 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinis hedListener); 554 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinis hedListener);
427 fail("addRequestFinishedListener unexpectedly succeeded " 555 fail("addRequestFinishedListener unexpectedly succeeded "
428 + "without a call to enableNetworkQualityEstimator()"); 556 + "without a call to enableNetworkQualityEstimator()");
429 } catch (RuntimeException e) { 557 } catch (RuntimeException e) {
430 // Expected. 558 // Expected.
431 } 559 }
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 } 1296 }
1169 }.start(); 1297 }.start();
1170 otherThreadDone.block(); 1298 otherThreadDone.block();
1171 builder.build().shutdown(); 1299 builder.build().shutdown();
1172 uiThreadDone.open(); 1300 uiThreadDone.open();
1173 } 1301 }
1174 }); 1302 });
1175 assertTrue(uiThreadDone.block(1000)); 1303 assertTrue(uiThreadDone.block(1000));
1176 } 1304 }
1177 } 1305 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698