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

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

Issue 2178053002: Change RequestFinishedListener to provide executor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: formatting Created 4 years, 4 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;
8
9 import android.content.Context; 7 import android.content.Context;
10 import android.content.ContextWrapper; 8 import android.content.ContextWrapper;
11 import android.os.ConditionVariable; 9 import android.os.ConditionVariable;
12 import android.os.Handler; 10 import android.os.Handler;
13 import android.os.Looper; 11 import android.os.Looper;
14 import android.os.StrictMode; 12 import android.os.StrictMode;
15 import android.test.suitebuilder.annotation.SmallTest; 13 import android.test.suitebuilder.annotation.SmallTest;
16 14
17 import org.chromium.base.PathUtils; 15 import org.chromium.base.PathUtils;
18 import org.chromium.base.annotations.JNINamespace; 16 import org.chromium.base.annotations.JNINamespace;
19 import org.chromium.base.test.util.Feature; 17 import org.chromium.base.test.util.Feature;
20 import org.chromium.base.test.util.FlakyTest; 18 import org.chromium.base.test.util.FlakyTest;
21 import org.chromium.net.CronetEngine.UrlRequestInfo;
22 import org.chromium.net.TestUrlRequestCallback.ResponseStep; 19 import org.chromium.net.TestUrlRequestCallback.ResponseStep;
23 import org.chromium.net.impl.CronetLibraryLoader; 20 import org.chromium.net.impl.CronetLibraryLoader;
24 import org.chromium.net.impl.CronetUrlRequestContext; 21 import org.chromium.net.impl.CronetUrlRequestContext;
25 import org.chromium.net.test.EmbeddedTestServer; 22 import org.chromium.net.test.EmbeddedTestServer;
26 23
27 import java.io.BufferedReader; 24 import java.io.BufferedReader;
28 import java.io.File; 25 import java.io.File;
29 import java.io.FileReader; 26 import java.io.FileReader;
30 import java.util.Arrays; 27 import java.util.Arrays;
31 import java.util.HashSet;
32 import java.util.LinkedList; 28 import java.util.LinkedList;
33 import java.util.NoSuchElementException; 29 import java.util.NoSuchElementException;
34 import java.util.concurrent.Executor; 30 import java.util.concurrent.Executor;
35 import java.util.concurrent.Executors; 31 import java.util.concurrent.Executors;
36 import java.util.concurrent.ThreadFactory; 32 import java.util.concurrent.ThreadFactory;
37 33
38 /** 34 /**
39 * Test CronetEngine. 35 * Test CronetEngine.
40 */ 36 */
41 @JNINamespace("cronet") 37 @JNINamespace("cronet")
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 callback.blockForDone(); 274 callback.blockForDone();
279 networkQualityExecutor.runAllTasks(); 275 networkQualityExecutor.runAllTasks();
280 assertEquals(0, rttListener.rttObservationCount()); 276 assertEquals(0, rttListener.rttObservationCount());
281 mTestFramework.mCronetEngine.shutdown(); 277 mTestFramework.mCronetEngine.shutdown();
282 } 278 }
283 279
284 @SmallTest 280 @SmallTest
285 @Feature({"Cronet"}) 281 @Feature({"Cronet"})
286 public void testRealTimeNetworkQualityObservationsQuicDisabled() throws Exce ption { 282 public void testRealTimeNetworkQualityObservationsQuicDisabled() throws Exce ption {
287 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context()); 283 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
288 Executor requestFinishedListenerExecutor =
289 Executors.newSingleThreadExecutor(new ExecutorThreadFactory());
290 Executor listenersExecutor = Executors.newSingleThreadExecutor(new Execu torThreadFactory()); 284 Executor listenersExecutor = Executors.newSingleThreadExecutor(new Execu torThreadFactory());
291 ConditionVariable waitForThroughput = new ConditionVariable(); 285 ConditionVariable waitForThroughput = new ConditionVariable();
292 TestNetworkQualityRttListener rttListener = 286 TestNetworkQualityRttListener rttListener =
293 new TestNetworkQualityRttListener(listenersExecutor); 287 new TestNetworkQualityRttListener(listenersExecutor);
294 TestNetworkQualityThroughputListener throughputListener = 288 TestNetworkQualityThroughputListener throughputListener =
295 new TestNetworkQualityThroughputListener(listenersExecutor, wait ForThroughput); 289 new TestNetworkQualityThroughputListener(listenersExecutor, wait ForThroughput);
296 mCronetEngineBuilder.enableHTTP2(true).enableQUIC(false).enableNetworkQu alityEstimator( 290 mCronetEngineBuilder.enableHTTP2(true).enableQUIC(false).enableNetworkQu alityEstimator(
297 true); 291 true);
298 mTestFramework = 292 mTestFramework =
299 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder); 293 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
300 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true); 294 mTestFramework.mCronetEngine.configureNetworkQualityEstimatorForTesting( true, true);
301 // requestFinishedListenerExecutor should not be used for notifying the RTT and
302 // throughput listeners.
303 mTestFramework.mCronetEngine.setRequestFinishedListenerExecutor(
304 requestFinishedListenerExecutor);
305 295
306 mTestFramework.mCronetEngine.addRttListener(rttListener); 296 mTestFramework.mCronetEngine.addRttListener(rttListener);
307 mTestFramework.mCronetEngine.addThroughputListener(throughputListener); 297 mTestFramework.mCronetEngine.addThroughputListener(throughputListener);
308 298
309 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 299 TestUrlRequestCallback callback = new TestUrlRequestCallback();
310 UrlRequest.Builder builder = new UrlRequest.Builder( 300 UrlRequest.Builder builder = new UrlRequest.Builder(
311 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); 301 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
312 UrlRequest urlRequest = builder.build(); 302 UrlRequest urlRequest = builder.build();
313 urlRequest.start(); 303 urlRequest.start();
314 callback.blockForDone(); 304 callback.blockForDone();
(...skipping 17 matching lines...) Expand all
332 // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC 322 // NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC
333 assertEquals(0, rttListener.rttObservationCount(2)); 323 assertEquals(0, rttListener.rttObservationCount(2));
334 324
335 // Verify that the listeners were notified on the expected thread. 325 // Verify that the listeners were notified on the expected thread.
336 assertEquals(mNetworkQualityThread, rttListener.getThread()); 326 assertEquals(mNetworkQualityThread, rttListener.getThread());
337 assertEquals(mNetworkQualityThread, throughputListener.getThread()); 327 assertEquals(mNetworkQualityThread, throughputListener.getThread());
338 328
339 mTestFramework.mCronetEngine.shutdown(); 329 mTestFramework.mCronetEngine.shutdown();
340 } 330 }
341 331
342 // TODO(tbansal): http://crbug.com/618034 Remove this.
343 private static class TestRequestFinishedListener
344 implements CronetEngine.RequestFinishedListener {
345 private UrlRequestInfo mRequestInfo = null;
346 332
347 @Override
348 public void onRequestFinished(UrlRequestInfo requestInfo) {
349 assertNull("onRequestFinished called repeatedly", mRequestInfo);
350 assertNotNull(requestInfo);
351 mRequestInfo = requestInfo;
352 }
353 }
354
355 @SmallTest
356 @Feature({"Cronet"})
357 @SuppressWarnings("deprecation")
358 public void testRequestFinishedListener_LegacyAPI() throws Exception {
359 mTestFramework = startCronetTestFramework();
360 TestExecutor testExecutor = new TestExecutor();
361 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
362 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
363 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
364 TestUrlRequestCallback callback = new TestUrlRequestCallback();
365 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
366 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
367 urlRequestBuilder.addRequestAnnotation("request annotation")
368 .addRequestAnnotation(this)
369 .build()
370 .start();
371 callback.blockForDone();
372 testExecutor.runAllTasks();
373
374 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
375 assertNotNull("RequestFinishedListener must be called", requestInfo);
376 assertEquals(mUrl, requestInfo.getUrl());
377 assertNotNull(requestInfo.getResponseInfo());
378 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
379 new HashSet<Object>(requestInfo.getAnnotations()));
380 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
381 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
382 assertTrue(metrics.getTotalTimeMs() > 0);
383 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
384 assertTrue(metrics.getReceivedBytesCount() > 0);
385 mTestFramework.mCronetEngine.shutdown();
386 }
387
388 @SmallTest
389 @Feature({"Cronet"})
390 @SuppressWarnings("deprecation")
391 public void testRequestFinishedListenerWithExecutorSetLater_LegacyAPI() thro ws Exception {
392 CronetEngine.Builder mCronetEngineBuilder = new CronetEngine.Builder(get Context());
393 TestExecutor testExecutor = new TestExecutor();
394 mCronetEngineBuilder.enableHTTP2(true).enableQUIC(false).enableNetworkQu alityEstimator(
395 true);
396 mTestFramework =
397 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, mCro netEngineBuilder);
398 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
399 mTestFramework.mCronetEngine.setRequestFinishedListenerExecutor(testExec utor);
400 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
401 TestUrlRequestCallback callback = new TestUrlRequestCallback();
402 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
403 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
404 urlRequestBuilder.addRequestAnnotation("request annotation")
405 .addRequestAnnotation(this)
406 .build()
407 .start();
408 callback.blockForDone();
409 testExecutor.runAllTasks();
410
411 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
412 assertNotNull("RequestFinishedListener must be called", requestInfo);
413 assertEquals(mUrl, requestInfo.getUrl());
414 assertNotNull(requestInfo.getResponseInfo());
415 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
416 new HashSet<Object>(requestInfo.getAnnotations()));
417 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
418 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
419 assertTrue(metrics.getTotalTimeMs() > 0);
420 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
421 assertTrue(metrics.getReceivedBytesCount() > 0);
422 mTestFramework.mCronetEngine.shutdown();
423 }
424
425 /*
426 @SmallTest
427 @Feature({"Cronet"})
428 @SuppressWarnings("deprecation")
429 */
430 @FlakyTest(message = "https://crbug.com/592444")
431 public void testRequestFinishedListenerFailedRequest_LegacyAPI() throws Exce ption {
432 String connectionRefusedUrl = "http://127.0.0.1:3";
433 mTestFramework = startCronetTestFramework();
434 TestExecutor testExecutor = new TestExecutor();
435 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
436 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
437 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
438 TestUrlRequestCallback callback = new TestUrlRequestCallback();
439 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl,
440 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
441 urlRequestBuilder.build().start();
442 callback.blockForDone();
443 assertTrue(callback.mOnErrorCalled);
444 testExecutor.runAllTasks();
445
446 CronetEngine.UrlRequestInfo requestInfo = requestFinishedListener.mReque stInfo;
447 assertNotNull("RequestFinishedListener must be called", requestInfo);
448 assertEquals(connectionRefusedUrl, requestInfo.getUrl());
449 assertTrue(requestInfo.getAnnotations().isEmpty());
450 CronetEngine.UrlRequestMetrics metrics = requestInfo.getMetrics();
451 assertNotNull("UrlRequestInfo.getMetrics() must not be null", metrics);
452 assertTrue(metrics.getTotalTimeMs() > 0);
453 assertNull(metrics.getTtfbMs());
454 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0);
455 mTestFramework.mCronetEngine.shutdown();
456 }
457
458 @SmallTest
459 @Feature({"Cronet"})
460 @SuppressWarnings("deprecation")
461 public void testRequestFinishedListenerRemoved_LegacyAPI() throws Exception {
462 mTestFramework = startCronetTestFramework();
463 TestExecutor testExecutor = new TestExecutor();
464 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
465 mTestFramework.mCronetEngine.enableNetworkQualityEstimator(testExecutor) ;
466 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
467 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener);
468 TestUrlRequestCallback callback = new TestUrlRequestCallback();
469 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
470 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
471 urlRequestBuilder.build().start();
472 callback.blockForDone();
473 testExecutor.runAllTasks();
474
475 assertNull(
476 "RequestFinishedListener must not be called", requestFinishedLis tener.mRequestInfo);
477 mTestFramework.mCronetEngine.shutdown();
478 }
479
480 @SmallTest
481 @Feature({"Cronet"})
482 @SuppressWarnings("deprecation")
483 public void testRequestFinishedListenerDisabled_LegacyAPI() throws Exception {
484 mTestFramework = startCronetTestFramework();
485 TestExecutor testExecutor = new TestExecutor();
486 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
487 try {
488 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinis hedListener);
489 fail("addRequestFinishedListener unexpectedly succeeded "
490 + "without a call to enableNetworkQualityEstimator()");
491 } catch (RuntimeException e) {
492 // Expected.
493 }
494 TestUrlRequestCallback callback = new TestUrlRequestCallback();
495 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
496 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
497 urlRequestBuilder.build().start();
498 callback.blockForDone();
499 testExecutor.runAllTasks();
500
501 assertNull(
502 "RequestFinishedListener must not be called", requestFinishedLis tener.mRequestInfo);
503 mTestFramework.mCronetEngine.shutdown();
504 }
505 333
506 /** 334 /**
507 @SmallTest 335 @SmallTest
508 @Feature({"Cronet"}) 336 @Feature({"Cronet"})
509 https://crbug.com/596929 337 https://crbug.com/596929
510 */ 338 */
511 @FlakyTest 339 @FlakyTest
512 public void testShutdown() throws Exception { 340 public void testShutdown() throws Exception {
513 mTestFramework = startCronetTestFramework(); 341 mTestFramework = startCronetTestFramework();
514 TestUrlRequestCallback callback = new ShutdownTestUrlRequestCallback(); 342 TestUrlRequestCallback callback = new ShutdownTestUrlRequestCallback();
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 } 1113 }
1286 }.start(); 1114 }.start();
1287 otherThreadDone.block(); 1115 otherThreadDone.block();
1288 builder.build().shutdown(); 1116 builder.build().shutdown();
1289 uiThreadDone.open(); 1117 uiThreadDone.open();
1290 } 1118 }
1291 }); 1119 });
1292 assertTrue(uiThreadDone.block(1000)); 1120 assertTrue(uiThreadDone.block(1000));
1293 } 1121 }
1294 } 1122 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698