OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 android.os.ConditionVariable; | 7 import android.os.ConditionVariable; |
8 import android.os.StrictMode; | 8 import android.os.StrictMode; |
9 import android.test.MoreAsserts; | 9 import android.test.MoreAsserts; |
10 import android.test.suitebuilder.annotation.SmallTest; | 10 import android.test.suitebuilder.annotation.SmallTest; |
11 import android.util.Log; | 11 import android.util.Log; |
12 | 12 |
13 import org.chromium.base.test.util.Feature; | 13 import org.chromium.base.test.util.Feature; |
14 import org.chromium.net.TestUrlRequestCallback.FailureType; | 14 import org.chromium.net.TestUrlRequestCallback.FailureType; |
15 import org.chromium.net.TestUrlRequestCallback.ResponseStep; | 15 import org.chromium.net.TestUrlRequestCallback.ResponseStep; |
16 import org.chromium.net.impl.CronetUrlRequest; | 16 import org.chromium.net.impl.CronetUrlRequest; |
17 import org.chromium.net.test.FailurePhase; | 17 import org.chromium.net.test.FailurePhase; |
18 | 18 |
19 import java.io.IOException; | 19 import java.io.IOException; |
20 import java.net.ConnectException; | 20 import java.net.ConnectException; |
21 import java.nio.ByteBuffer; | 21 import java.nio.ByteBuffer; |
22 import java.util.AbstractMap; | 22 import java.util.AbstractMap; |
23 import java.util.ArrayList; | 23 import java.util.ArrayList; |
24 import java.util.Arrays; | 24 import java.util.Arrays; |
25 import java.util.List; | 25 import java.util.List; |
26 import java.util.Map; | 26 import java.util.Map; |
| 27 import java.util.concurrent.Executor; |
27 import java.util.concurrent.ExecutorService; | 28 import java.util.concurrent.ExecutorService; |
28 import java.util.concurrent.Executors; | 29 import java.util.concurrent.Executors; |
29 import java.util.concurrent.atomic.AtomicBoolean; | 30 import java.util.concurrent.atomic.AtomicBoolean; |
30 import java.util.regex.Matcher; | 31 import java.util.regex.Matcher; |
31 import java.util.regex.Pattern; | 32 import java.util.regex.Pattern; |
32 | 33 |
33 /** | 34 /** |
34 * Test functionality of CronetUrlRequest. | 35 * Test functionality of CronetUrlRequest. |
35 */ | 36 */ |
36 public class CronetUrlRequestTest extends CronetTestBase { | 37 public class CronetUrlRequestTest extends CronetTestBase { |
(...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1367 dataProvider.assertClosed(); | 1368 dataProvider.assertClosed(); |
1368 | 1369 |
1369 assertEquals(1, dataProvider.getNumReadCalls()); | 1370 assertEquals(1, dataProvider.getNumReadCalls()); |
1370 assertEquals(0, dataProvider.getNumRewindCalls()); | 1371 assertEquals(0, dataProvider.getNumRewindCalls()); |
1371 | 1372 |
1372 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); | 1373 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); |
1373 assertEquals("Async read failure", callback.mError.getCause().getMessage
()); | 1374 assertEquals("Async read failure", callback.mError.getCause().getMessage
()); |
1374 assertEquals(null, callback.mResponseInfo); | 1375 assertEquals(null, callback.mResponseInfo); |
1375 } | 1376 } |
1376 | 1377 |
| 1378 /** This test uses a direct executor for upload, and non direct for callback
s */ |
| 1379 @SmallTest |
| 1380 @Feature({"Cronet"}) |
| 1381 public void testDirectExecutorUploadProhibitedByDefault() throws Exception { |
| 1382 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1383 Executor myExecutor = new Executor() { |
| 1384 |
| 1385 @Override |
| 1386 public void execute(Runnable command) { |
| 1387 command.run(); |
| 1388 } |
| 1389 }; |
| 1390 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1391 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1392 |
| 1393 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1394 TestUploadDataProvider.SuccessCallbackMode.SYNC, myExecutor); |
| 1395 // This will never be read, but if the length is 0, read may never be |
| 1396 // called. |
| 1397 dataProvider.addRead("test".getBytes()); |
| 1398 builder.setUploadDataProvider(dataProvider, myExecutor); |
| 1399 builder.addHeader("Content-Type", "useless/string"); |
| 1400 builder.build().start(); |
| 1401 callback.blockForDone(); |
| 1402 |
| 1403 assertEquals(0, dataProvider.getNumReadCalls()); |
| 1404 assertEquals(0, dataProvider.getNumRewindCalls()); |
| 1405 |
| 1406 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); |
| 1407 assertEquals("Inline execution is prohibited for this request", |
| 1408 callback.mError.getCause().getMessage()); |
| 1409 assertEquals(null, callback.mResponseInfo); |
| 1410 } |
| 1411 |
| 1412 /** This test uses a direct executor for callbacks, and non direct for uploa
d */ |
| 1413 @SmallTest |
| 1414 @Feature({"Cronet"}) |
| 1415 public void testDirectExecutorProhibitedByDefault() throws Exception { |
| 1416 System.out.println("testing with " + mTestFramework.mCronetEngine); |
| 1417 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1418 Executor myExecutor = new Executor() { |
| 1419 |
| 1420 @Override |
| 1421 public void execute(Runnable command) { |
| 1422 command.run(); |
| 1423 } |
| 1424 }; |
| 1425 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1426 callback, myExecutor, mTestFramework.mCronetEngine); |
| 1427 |
| 1428 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1429 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
| 1430 // This will never be read, but if the length is 0, read may never be |
| 1431 // called. |
| 1432 dataProvider.addRead("test".getBytes()); |
| 1433 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
| 1434 builder.addHeader("Content-Type", "useless/string"); |
| 1435 builder.build().start(); |
| 1436 callback.blockForDone(); |
| 1437 |
| 1438 assertEquals(1, dataProvider.getNumReadCalls()); |
| 1439 assertEquals(0, dataProvider.getNumRewindCalls()); |
| 1440 |
| 1441 callback.mError.printStackTrace(); |
| 1442 assertEquals("Exception posting task to executor", callback.mError.getMe
ssage()); |
| 1443 assertEquals("Inline execution is prohibited for this request", |
| 1444 callback.mError.getCause().getMessage()); |
| 1445 assertEquals(null, callback.mResponseInfo); |
| 1446 dataProvider.assertClosed(); |
| 1447 } |
| 1448 |
| 1449 @SmallTest |
| 1450 @Feature({"Cronet"}) |
| 1451 public void testDirectExecutorAllowed() throws Exception { |
| 1452 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1453 callback.setAllowDirectExecutor(true); |
| 1454 Executor myExecutor = new Executor() { |
| 1455 |
| 1456 @Override |
| 1457 public void execute(Runnable command) { |
| 1458 command.run(); |
| 1459 } |
| 1460 }; |
| 1461 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1462 callback, myExecutor, mTestFramework.mCronetEngine); |
| 1463 UploadDataProvider dataProvider = UploadDataProviders.create("test".getB
ytes("UTF-8")); |
| 1464 builder.setUploadDataProvider(dataProvider, myExecutor); |
| 1465 builder.addHeader("Content-Type", "useless/string"); |
| 1466 builder.allowDirectExecutor(); |
| 1467 builder.build().start(); |
| 1468 callback.blockForDone(); |
| 1469 |
| 1470 if (callback.mOnErrorCalled) { |
| 1471 throw callback.mError; |
| 1472 } |
| 1473 |
| 1474 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1475 assertEquals("test", callback.mResponseAsString); |
| 1476 } |
| 1477 |
1377 @SmallTest | 1478 @SmallTest |
1378 @Feature({"Cronet"}) | 1479 @Feature({"Cronet"}) |
1379 public void testUploadReadFailThrown() throws Exception { | 1480 public void testUploadReadFailThrown() throws Exception { |
1380 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1481 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
1381 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), | 1482 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
1382 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1483 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
1383 | 1484 |
1384 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 1485 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
1385 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); | 1486 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
1386 dataProvider.setReadFailure(0, TestUploadDataProvider.FailMode.THROWN); | 1487 dataProvider.setReadFailure(0, TestUploadDataProvider.FailMode.THROWN); |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1916 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int
end) { | 2017 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int
end) { |
1917 // Use a duplicate to avoid modifying byteBuffer. | 2018 // Use a duplicate to avoid modifying byteBuffer. |
1918 ByteBuffer duplicate = byteBuffer.duplicate(); | 2019 ByteBuffer duplicate = byteBuffer.duplicate(); |
1919 duplicate.position(start); | 2020 duplicate.position(start); |
1920 duplicate.limit(end); | 2021 duplicate.limit(end); |
1921 byte[] contents = new byte[duplicate.remaining()]; | 2022 byte[] contents = new byte[duplicate.remaining()]; |
1922 duplicate.get(contents); | 2023 duplicate.get(contents); |
1923 return new String(contents); | 2024 return new String(contents); |
1924 } | 2025 } |
1925 } | 2026 } |
OLD | NEW |