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.test.MoreAsserts; | 8 import android.test.MoreAsserts; |
9 import android.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
10 import android.util.Log; | 10 import android.util.Log; |
11 | 11 |
12 import org.chromium.base.test.util.Feature; | 12 import org.chromium.base.test.util.Feature; |
13 import org.chromium.net.TestUrlRequestCallback.FailureType; | 13 import org.chromium.net.TestUrlRequestCallback.FailureType; |
14 import org.chromium.net.TestUrlRequestCallback.ResponseStep; | 14 import org.chromium.net.TestUrlRequestCallback.ResponseStep; |
15 import org.chromium.net.impl.CronetUrlRequest; | 15 import org.chromium.net.impl.CronetUrlRequest; |
16 import org.chromium.net.test.FailurePhase; | 16 import org.chromium.net.test.FailurePhase; |
17 | 17 |
18 import java.io.IOException; | 18 import java.io.IOException; |
19 import java.net.ConnectException; | 19 import java.net.ConnectException; |
20 import java.nio.ByteBuffer; | 20 import java.nio.ByteBuffer; |
21 import java.util.AbstractMap; | 21 import java.util.AbstractMap; |
22 import java.util.ArrayList; | 22 import java.util.ArrayList; |
23 import java.util.Arrays; | 23 import java.util.Arrays; |
24 import java.util.List; | 24 import java.util.List; |
25 import java.util.Map; | 25 import java.util.Map; |
| 26 import java.util.concurrent.Executor; |
26 import java.util.concurrent.ExecutorService; | 27 import java.util.concurrent.ExecutorService; |
27 import java.util.concurrent.Executors; | 28 import java.util.concurrent.Executors; |
28 import java.util.concurrent.atomic.AtomicBoolean; | 29 import java.util.concurrent.atomic.AtomicBoolean; |
29 import java.util.regex.Matcher; | 30 import java.util.regex.Matcher; |
30 import java.util.regex.Pattern; | 31 import java.util.regex.Pattern; |
31 | 32 |
32 /** | 33 /** |
33 * Test functionality of CronetUrlRequest. | 34 * Test functionality of CronetUrlRequest. |
34 */ | 35 */ |
35 public class CronetUrlRequestTest extends CronetTestBase { | 36 public class CronetUrlRequestTest extends CronetTestBase { |
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1334 dataProvider.assertClosed(); | 1335 dataProvider.assertClosed(); |
1335 | 1336 |
1336 assertEquals(1, dataProvider.getNumReadCalls()); | 1337 assertEquals(1, dataProvider.getNumReadCalls()); |
1337 assertEquals(0, dataProvider.getNumRewindCalls()); | 1338 assertEquals(0, dataProvider.getNumRewindCalls()); |
1338 | 1339 |
1339 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); | 1340 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); |
1340 assertEquals("Async read failure", callback.mError.getCause().getMessage
()); | 1341 assertEquals("Async read failure", callback.mError.getCause().getMessage
()); |
1341 assertEquals(null, callback.mResponseInfo); | 1342 assertEquals(null, callback.mResponseInfo); |
1342 } | 1343 } |
1343 | 1344 |
| 1345 /** This test uses a direct executor for upload, and non direct for callback
s */ |
| 1346 @SmallTest |
| 1347 @Feature({"Cronet"}) |
| 1348 public void testDirectExecutorUploadProhibitedByDefault() throws Exception { |
| 1349 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1350 Executor myExecutor = new Executor() { |
| 1351 |
| 1352 @Override |
| 1353 public void execute(Runnable command) { |
| 1354 command.run(); |
| 1355 } |
| 1356 }; |
| 1357 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1358 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1359 |
| 1360 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1361 TestUploadDataProvider.SuccessCallbackMode.SYNC, myExecutor); |
| 1362 // This will never be read, but if the length is 0, read may never be |
| 1363 // called. |
| 1364 dataProvider.addRead("test".getBytes()); |
| 1365 builder.setUploadDataProvider(dataProvider, myExecutor); |
| 1366 builder.addHeader("Content-Type", "useless/string"); |
| 1367 builder.build().start(); |
| 1368 callback.blockForDone(); |
| 1369 |
| 1370 assertEquals(0, dataProvider.getNumReadCalls()); |
| 1371 assertEquals(0, dataProvider.getNumRewindCalls()); |
| 1372 |
| 1373 assertEquals("Exception received from UploadDataProvider", callback.mErr
or.getMessage()); |
| 1374 assertEquals("Inline execution is prohibited for this request", |
| 1375 callback.mError.getCause().getMessage()); |
| 1376 assertEquals(null, callback.mResponseInfo); |
| 1377 } |
| 1378 |
| 1379 /** This test uses a direct executor for callbacks, and non direct for uploa
d */ |
| 1380 @SmallTest |
| 1381 @Feature({"Cronet"}) |
| 1382 public void testDirectExecutorProhibitedByDefault() throws Exception { |
| 1383 System.out.println("testing with " + mTestFramework.mCronetEngine); |
| 1384 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1385 Executor myExecutor = new Executor() { |
| 1386 |
| 1387 @Override |
| 1388 public void execute(Runnable command) { |
| 1389 command.run(); |
| 1390 } |
| 1391 }; |
| 1392 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1393 callback, myExecutor, mTestFramework.mCronetEngine); |
| 1394 |
| 1395 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1396 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
| 1397 // This will never be read, but if the length is 0, read may never be |
| 1398 // called. |
| 1399 dataProvider.addRead("test".getBytes()); |
| 1400 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
| 1401 builder.addHeader("Content-Type", "useless/string"); |
| 1402 builder.build().start(); |
| 1403 callback.blockForDone(); |
| 1404 |
| 1405 assertEquals(1, dataProvider.getNumReadCalls()); |
| 1406 assertEquals(0, dataProvider.getNumRewindCalls()); |
| 1407 |
| 1408 callback.mError.printStackTrace(); |
| 1409 assertEquals("Exception posting task to executor", callback.mError.getMe
ssage()); |
| 1410 assertEquals("Inline execution is prohibited for this request", |
| 1411 callback.mError.getCause().getMessage()); |
| 1412 assertEquals(null, callback.mResponseInfo); |
| 1413 dataProvider.assertClosed(); |
| 1414 } |
| 1415 |
| 1416 @SmallTest |
| 1417 @Feature({"Cronet"}) |
| 1418 public void testDirectExecutorAllowed() throws Exception { |
| 1419 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1420 callback.setAllowDirectExecutor(true); |
| 1421 Executor myExecutor = new Executor() { |
| 1422 |
| 1423 @Override |
| 1424 public void execute(Runnable command) { |
| 1425 command.run(); |
| 1426 } |
| 1427 }; |
| 1428 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1429 callback, myExecutor, mTestFramework.mCronetEngine); |
| 1430 UploadDataProvider dataProvider = UploadDataProviders.create("test".getB
ytes("UTF-8")); |
| 1431 builder.setUploadDataProvider(dataProvider, myExecutor); |
| 1432 builder.addHeader("Content-Type", "useless/string"); |
| 1433 builder.allowDirectExecutor(); |
| 1434 builder.build().start(); |
| 1435 callback.blockForDone(); |
| 1436 |
| 1437 if (callback.mOnErrorCalled) { |
| 1438 throw callback.mError; |
| 1439 } |
| 1440 |
| 1441 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1442 assertEquals("test", callback.mResponseAsString); |
| 1443 } |
| 1444 |
1344 @SmallTest | 1445 @SmallTest |
1345 @Feature({"Cronet"}) | 1446 @Feature({"Cronet"}) |
1346 public void testUploadReadFailThrown() throws Exception { | 1447 public void testUploadReadFailThrown() throws Exception { |
1347 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1448 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
1348 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), | 1449 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
1349 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1450 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
1350 | 1451 |
1351 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 1452 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
1352 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); | 1453 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
1353 dataProvider.setReadFailure(0, TestUploadDataProvider.FailMode.THROWN); | 1454 dataProvider.setReadFailure(0, TestUploadDataProvider.FailMode.THROWN); |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1814 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int
end) { | 1915 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int
end) { |
1815 // Use a duplicate to avoid modifying byteBuffer. | 1916 // Use a duplicate to avoid modifying byteBuffer. |
1816 ByteBuffer duplicate = byteBuffer.duplicate(); | 1917 ByteBuffer duplicate = byteBuffer.duplicate(); |
1817 duplicate.position(start); | 1918 duplicate.position(start); |
1818 duplicate.limit(end); | 1919 duplicate.limit(end); |
1819 byte[] contents = new byte[duplicate.remaining()]; | 1920 byte[] contents = new byte[duplicate.remaining()]; |
1820 duplicate.get(contents); | 1921 duplicate.get(contents); |
1821 return new String(contents); | 1922 return new String(contents); |
1822 } | 1923 } |
1823 } | 1924 } |
OLD | NEW |