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