Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |