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