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

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: 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
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
34 // terminal callbacks have been invoked at the time of onRequestFinished().
35 // See crbug.com/710877.
36 private static class AssertCallbackDoneRequestFinishedListener
37 extends TestRequestFinishedListener {
38 private final TestUrlRequestCallback mCallback;
39 public AssertCallbackDoneRequestFinishedListener(TestUrlRequestCallback callback) {
40 mCallback = callback;
41 }
42
43 @Override
44 public void onRequestFinished(RequestFinishedInfo requestInfo) {
45 assertTrue(mCallback.isDone());
46 super.onRequestFinished(requestInfo);
47 }
48 };
49
33 @Override 50 @Override
34 protected void setUp() throws Exception { 51 protected void setUp() throws Exception {
35 super.setUp(); 52 super.setUp();
36 mTestServer = EmbeddedTestServer.createAndStartServer(getContext()); 53 mTestServer = EmbeddedTestServer.createAndStartServer(getContext());
37 mUrl = mTestServer.getURL("/echo?status=200"); 54 mUrl = mTestServer.getURL("/echo?status=200");
38 } 55 }
39 56
40 @Override 57 @Override
41 protected void tearDown() throws Exception { 58 protected void tearDown() throws Exception {
42 mTestServer.stopAndDestroyServer(); 59 mTestServer.stopAndDestroyServer();
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 assertEquals(new Date(sslStart), metrics.getSslStart()); 377 assertEquals(new Date(sslStart), metrics.getSslStart());
361 assertEquals(new Date(sslEnd), metrics.getSslEnd()); 378 assertEquals(new Date(sslEnd), metrics.getSslEnd());
362 assertEquals(new Date(pushStart), metrics.getPushStart()); 379 assertEquals(new Date(pushStart), metrics.getPushStart());
363 assertEquals(new Date(pushEnd), metrics.getPushEnd()); 380 assertEquals(new Date(pushEnd), metrics.getPushEnd());
364 assertEquals(new Date(responseStart), metrics.getResponseStart()); 381 assertEquals(new Date(responseStart), metrics.getResponseStart());
365 assertEquals(new Date(requestEnd), metrics.getRequestEnd()); 382 assertEquals(new Date(requestEnd), metrics.getRequestEnd());
366 assertEquals(socketReused, metrics.getSocketReused()); 383 assertEquals(socketReused, metrics.getSocketReused());
367 assertEquals(sentByteCount, (long) metrics.getSentByteCount()); 384 assertEquals(sentByteCount, (long) metrics.getSentByteCount());
368 assertEquals(receivedByteCount, (long) metrics.getReceivedByteCount()); 385 assertEquals(receivedByteCount, (long) metrics.getReceivedByteCount());
369 } 386 }
387
388 @SmallTest
389 @OnlyRunNativeCronet
390 @Feature({"Cronet"})
391 @SuppressWarnings("deprecation")
392 public void testOrderSuccessfulRequest() throws Exception {
393 mTestFramework = startCronetTestFramework();
394 final TestUrlRequestCallback callback = new TestUrlRequestCallback();
395 TestRequestFinishedListener requestFinishedListener =
396 new AssertCallbackDoneRequestFinishedListener(callback);
397 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
398 ExperimentalUrlRequest.Builder urlRequestBuilder =
399 (ExperimentalUrlRequest.Builder) mTestFramework.mCronetEngine.ne wUrlRequestBuilder(
400 mUrl, callback, callback.getExecutor());
401 Date startTime = new Date();
402 urlRequestBuilder.addRequestAnnotation("request annotation")
403 .addRequestAnnotation(this)
404 .build()
405 .start();
406 callback.blockForDone();
407 requestFinishedListener.blockUntilDone();
408 Date endTime = new Date();
409
410 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
411 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, e ndTime);
412 assertEquals(RequestFinishedInfo.SUCCEEDED, requestInfo.getFinishedReaso n());
413 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, false);
414 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
415 new HashSet<Object>(requestInfo.getAnnotations()));
416 mTestFramework.mCronetEngine.shutdown();
417 }
418
419 @SmallTest
420 @OnlyRunNativeCronet
421 @Feature({"Cronet"})
422 // Tests a failed request where the error originates from Java.
423 public void testOrderFailedRequestJava() throws Exception {
424 mTestFramework = startCronetTestFramework();
425 final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
426 @Override
427 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
428 throw new RuntimeException("make this request fail");
429 }
430 };
431 TestRequestFinishedListener requestFinishedListener =
432 new AssertCallbackDoneRequestFinishedListener(callback);
433 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
434 UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newU rlRequestBuilder(
435 mUrl, callback, callback.getExecutor());
436 urlRequestBuilder.build().start();
437 callback.blockForDone();
438 assertTrue(callback.mOnErrorCalled);
439 requestFinishedListener.blockUntilDone();
440 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
441 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
442 assertEquals(mUrl, requestInfo.getUrl());
443 assertTrue(requestInfo.getAnnotations().isEmpty());
444 assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason() );
445 assertNotNull(requestInfo.getException());
446 assertEquals("Exception received from UrlRequest.Callback",
447 requestInfo.getException().getMessage());
448 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
449 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
450 mTestFramework.mCronetEngine.shutdown();
451 }
452
453 @SmallTest
454 @OnlyRunNativeCronet
455 @Feature({"Cronet"})
456 // Tests a failed request where the error originates from native code.
457 public void testOrderFailedRequestNative() throws Exception {
458 String connectionRefusedUrl = "http://127.0.0.1:3";
459 mTestFramework = startCronetTestFramework();
460 final TestUrlRequestCallback callback = new TestUrlRequestCallback();
461 TestRequestFinishedListener requestFinishedListener =
462 new AssertCallbackDoneRequestFinishedListener(callback);
463 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
464 UrlRequest.Builder urlRequestBuilder = mTestFramework.mCronetEngine.newU rlRequestBuilder(
465 connectionRefusedUrl, callback, callback.getExecutor());
466 urlRequestBuilder.build().start();
467 callback.blockForDone();
468 assertTrue(callback.mOnErrorCalled);
469 requestFinishedListener.blockUntilDone();
470 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
471 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
472 assertEquals(connectionRefusedUrl, requestInfo.getUrl());
473 assertTrue(requestInfo.getAnnotations().isEmpty());
474 assertEquals(RequestFinishedInfo.FAILED, requestInfo.getFinishedReason() );
475 assertNotNull(requestInfo.getException());
476 assertEquals(NetworkException.ERROR_CONNECTION_REFUSED,
477 ((NetworkException) requestInfo.getException()).getErrorCode());
478 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
479 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
480 mTestFramework.mCronetEngine.shutdown();
481 }
482
483 @SmallTest
484 @OnlyRunNativeCronet
485 @Feature({"Cronet"})
486 public void testOrderCanceledRequest() throws Exception {
487 mTestFramework = startCronetTestFramework();
488 final TestUrlRequestCallback callback = new TestUrlRequestCallback() {
489 @Override
490 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
491 super.onResponseStarted(request, info);
492 request.cancel();
493 }
494 };
495
496 TestRequestFinishedListener requestFinishedListener =
497 new AssertCallbackDoneRequestFinishedListener(callback);
498 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
499 ExperimentalUrlRequest.Builder urlRequestBuilder =
500 mTestFramework.mCronetEngine.newUrlRequestBuilder(
501 mUrl, callback, callback.getExecutor());
502 Date startTime = new Date();
503 urlRequestBuilder.addRequestAnnotation("request annotation")
504 .addRequestAnnotation(this)
505 .build()
506 .start();
507 callback.blockForDone();
508 requestFinishedListener.blockUntilDone();
509 Date endTime = new Date();
510
511 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
512 MetricsTestUtil.checkRequestFinishedInfo(requestInfo, mUrl, startTime, e ndTime);
513 assertEquals(RequestFinishedInfo.CANCELED, requestInfo.getFinishedReason ());
514 MetricsTestUtil.checkHasConnectTiming(requestInfo.getMetrics(), startTim e, endTime, false);
515
516 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
517 new HashSet<Object>(requestInfo.getAnnotations()));
518 mTestFramework.mCronetEngine.shutdown();
519 }
370 } 520 }
OLDNEW
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698