Chromium Code Reviews| 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 |