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

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

Powered by Google App Engine
This is Rietveld 408576698