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 { | |
mef
2016/09/01 15:17:18
Would it make sense to add a test that canceling r
Charles
2016/09/01 16:45:24
Done.
| |
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 |