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

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

Issue 2844803002: [Cronet] Make metrics reporting happen after terminal callbacks. (Closed)
Patch Set: self 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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.os.ConditionVariable; 9 import android.os.ConditionVariable;
10 import android.support.test.filters.SmallTest; 10 import android.support.test.filters.SmallTest;
(...skipping 12 matching lines...) Expand all
23 import java.util.concurrent.RejectedExecutionException; 23 import java.util.concurrent.RejectedExecutionException;
24 24
25 /** 25 /**
26 * Test RequestFinishedInfo.Listener and the metrics information it provides. 26 * Test RequestFinishedInfo.Listener and the metrics information it provides.
27 */ 27 */
28 public class RequestFinishedInfoTest extends CronetTestBase { 28 public class RequestFinishedInfoTest extends CronetTestBase {
29 CronetTestFramework mTestFramework; 29 CronetTestFramework mTestFramework;
30 private EmbeddedTestServer mTestServer; 30 private EmbeddedTestServer mTestServer;
31 private String mUrl; 31 private String mUrl;
32 32
33 // A subclass of TestRequestFinishedListener to additionally assert that Url Request.Callback's
mgersh 2017/05/01 15:29:22 What do you think about modifying TestRequestFinis
xunjieli 2017/05/01 19:17:16 This subclass associates with exactly on UrlReques
34 // terminal callbacks have been invoked at the time of onRequestFinished(). Note that this
35 // listener runs callbacks on a separated thread, so tests use this is racy by design. See
mef 2017/04/28 21:16:55 nit: could you rephrase 'so tests use this is racy
xunjieli 2017/05/01 19:17:16 Done.
36 // crbug.com/710877.
37 private static class AssertCallbackDoneRequestFinishedListener
38 extends TestRequestFinishedListener {
39 private final TestUrlRequestCallback mCallback;
40 public AssertCallbackDoneRequestFinishedListener(TestUrlRequestCallback callback) {
41 mCallback = callback;
42 }
43
44 @Override
45 public void onRequestFinished(RequestFinishedInfo requestInfo) {
46 assertTrue(mCallback.isDone());
47 super.onRequestFinished(requestInfo);
48 }
49 };
50
33 @Override 51 @Override
34 protected void setUp() throws Exception { 52 protected void setUp() throws Exception {
35 super.setUp(); 53 super.setUp();
36 mTestServer = EmbeddedTestServer.createAndStartServer(getContext()); 54 mTestServer = EmbeddedTestServer.createAndStartServer(getContext());
37 mUrl = mTestServer.getURL("/echo?status=200"); 55 mUrl = mTestServer.getURL("/echo?status=200");
38 } 56 }
39 57
40 @Override 58 @Override
41 protected void tearDown() throws Exception { 59 protected void tearDown() throws Exception {
42 mTestServer.stopAndDestroyServer(); 60 mTestServer.stopAndDestroyServer();
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 assertEquals(new Date(sslStart), metrics.getSslStart()); 378 assertEquals(new Date(sslStart), metrics.getSslStart());
361 assertEquals(new Date(sslEnd), metrics.getSslEnd()); 379 assertEquals(new Date(sslEnd), metrics.getSslEnd());
362 assertEquals(new Date(pushStart), metrics.getPushStart()); 380 assertEquals(new Date(pushStart), metrics.getPushStart());
363 assertEquals(new Date(pushEnd), metrics.getPushEnd()); 381 assertEquals(new Date(pushEnd), metrics.getPushEnd());
364 assertEquals(new Date(responseStart), metrics.getResponseStart()); 382 assertEquals(new Date(responseStart), metrics.getResponseStart());
365 assertEquals(new Date(requestEnd), metrics.getRequestEnd()); 383 assertEquals(new Date(requestEnd), metrics.getRequestEnd());
366 assertEquals(socketReused, metrics.getSocketReused()); 384 assertEquals(socketReused, metrics.getSocketReused());
367 assertEquals(sentByteCount, (long) metrics.getSentByteCount()); 385 assertEquals(sentByteCount, (long) metrics.getSentByteCount());
368 assertEquals(receivedByteCount, (long) metrics.getReceivedByteCount()); 386 assertEquals(receivedByteCount, (long) metrics.getReceivedByteCount());
369 } 387 }
388
389 @SmallTest
390 @OnlyRunNativeCronet
391 @Feature({"Cronet"})
392 @SuppressWarnings("deprecation")
393 public void testOrderSuccessfulRequest() throws Exception {
394 mTestFramework = startCronetTestFramework();
395 final TestUrlRequestCallback callback = new TestUrlRequestCallback();
396 TestRequestFinishedListener requestFinishedListener =
397 new AssertCallbackDoneRequestFinishedListener(callback);
398 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
399 ExperimentalUrlRequest.Builder urlRequestBuilder =
400 (ExperimentalUrlRequest.Builder) mTestFramework.mCronetEngine.ne wUrlRequestBuilder(
401 mUrl, callback, callback.getExecutor());
402 Date startTime = new Date();
403 urlRequestBuilder.addRequestAnnotation("request annotation")
404 .addRequestAnnotation(this)
405 .build()
406 .start();
407 callback.blockForDone();
408 requestFinishedListener.blockUntilDone();
409 Date endTime = new Date();
410
411 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
412 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, e ndTime);
413 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n());
414 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, false);
415 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
416 new HashSet<Object>(requestInfo.getAnnotations()));
417 mTestFramework.mCronetEngine.shutdown();
418 }
419
420 @SmallTest
421 @OnlyRunNativeCronet
422 @Feature({"Cronet"})
423 // Tests a failed request where the error originates from Java.
424 public void testOrderFailedRequestJava() throws Exception {
425 mTestFramework = startCronetTestFramework();
426 final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
427 @Override
428 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
429 throw new RuntimeException("make this request fail");
430 }
431 };
432 TestRequestFinishedListener requestFinishedListener =
433 new AssertCallbackDoneRequestFinishedListener(callback);
434 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
435 UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newU rlRequestBuilder(
436 mUrl, callback, callback.getExecutor());
437 urlRequestBuilder.build().start();
438 callback.blockForDone();
439 assertTrue(callback.mOnErrorCalled);
440 requestFinishedListener.blockUntilDone();
441 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
442 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
443 assertEquals(mUrl, requestInfo.getUrl());
444 assertTrue(requestInfo.getAnnotations().isEmpty());
445 assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason() );
446 assertNotNull(requestInfo.getException());
447 assertEquals("Exception received from UrlRequest.Callback",
448 requestInfo.getException().getMessage());
449 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
450 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
451 mTestFramework.mCronetEngine.shutdown();
452 }
453
454 @SmallTest
455 @OnlyRunNativeCronet
456 @Feature({"Cronet"})
457 // Tests a failed request where the error originates from native code.
458 public void testOrderFailedRequestNative() throws Exception {
459 String connectionRefusedUrl = "http://127.0.0.1:3";
460 mTestFramework = startCronetTestFramework();
461 final TestUrlRequestCallback callback = new TestUrlRequestCallback();
462 TestRequestFinishedListener requestFinishedListener =
463 new AssertCallbackDoneRequestFinishedListener(callback);
464 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
465 UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newU rlRequestBuilder(
466 connectionRefusedUrl, callback, callback.getExecutor());
467 urlRequestBuilder.build().start();
468 callback.blockForDone();
469 assertTrue(callback.mOnErrorCalled);
470 requestFinishedListener.blockUntilDone();
471 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
472 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
473 assertEquals(connectionRefusedUrl, requestInfo.getUrl());
474 assertTrue(requestInfo.getAnnotations().isEmpty());
475 assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason() );
476 assertNotNull(requestInfo.getException());
477 assertEquals(NetworkException.ERROR_CONNECTION_REFUSED,
478 ((NetworkException) requestInfo.getException()).getErrorCode());
479 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
480 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
481 mTestFramework.mCronetEngine.shutdown();
482 }
483
484 @SmallTest
485 @OnlyRunNativeCronet
486 @Feature({"Cronet"})
487 public void testOrderCanceledRequest() throws Exception {
488 mTestFramework = startCronetTestFramework();
489 final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
490 @Override
491 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
492 super.onResponseStarted(request, info);
493 request.cancel();
494 }
495 };
496
497 TestRequestFinishedListener requestFinishedListener =
498 new AssertCallbackDoneRequestFinishedListener(callback);
499 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
500 ExperimentalUrlRequest.Builder urlRequestBuilder =
501 mTestFramework.mCronetEngine.newUrlRequestBuilder(
502 mUrl, callback, callback.getExecutor());
503 Date startTime = new Date();
504 urlRequestBuilder.addRequestAnnotation("request annotation")
505 .addRequestAnnotation(this)
506 .build()
507 .start();
508 callback.blockForDone();
509 requestFinishedListener.blockUntilDone();
510 Date endTime = new Date();
511
512 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
513 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, e ndTime);
514 assertEquals(RequestFinishedInfo.CANCELED, requestInfo.getFinishedReason ());
515 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, false);
516
517 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
518 new HashSet<Object>(requestInfo.getAnnotations()));
519 mTestFramework.mCronetEngine.shutdown();
520 }
370 } 521 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698