| Index: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
|
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
|
| index ebb1012f8ec04d3381c75d0a99cab0a22cc9715b..d9a7df6d1b0a3339e91291cbec3f4b16042afdcf 100644
|
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
|
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
|
| @@ -23,6 +23,7 @@ import java.util.ArrayList;
|
| import java.util.Arrays;
|
| import java.util.List;
|
| import java.util.Map;
|
| +import java.util.concurrent.Executor;
|
| import java.util.concurrent.ExecutorService;
|
| import java.util.concurrent.Executors;
|
| import java.util.concurrent.atomic.AtomicBoolean;
|
| @@ -1341,6 +1342,106 @@ public class CronetUrlRequestTest extends CronetTestBase {
|
| assertEquals(null, callback.mResponseInfo);
|
| }
|
|
|
| + /** This test uses a direct executor for upload, and non direct for callbacks */
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testDirectExecutorUploadProhibitedByDefault() throws Exception {
|
| + TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| + Executor myExecutor = new Executor() {
|
| +
|
| + @Override
|
| + public void execute(Runnable command) {
|
| + command.run();
|
| + }
|
| + };
|
| + UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getEchoBodyURL(),
|
| + callback, callback.getExecutor(), mTestFramework.mCronetEngine);
|
| +
|
| + TestUploadDataProvider dataProvider = new TestUploadDataProvider(
|
| + TestUploadDataProvider.SuccessCallbackMode.SYNC, myExecutor);
|
| + // This will never be read, but if the length is 0, read may never be
|
| + // called.
|
| + dataProvider.addRead("test".getBytes());
|
| + builder.setUploadDataProvider(dataProvider, myExecutor);
|
| + builder.addHeader("Content-Type", "useless/string");
|
| + builder.build().start();
|
| + callback.blockForDone();
|
| +
|
| + assertEquals(0, dataProvider.getNumReadCalls());
|
| + assertEquals(0, dataProvider.getNumRewindCalls());
|
| +
|
| + assertEquals("Exception received from UploadDataProvider", callback.mError.getMessage());
|
| + assertEquals("Inline execution is prohibited for this request",
|
| + callback.mError.getCause().getMessage());
|
| + assertEquals(null, callback.mResponseInfo);
|
| + }
|
| +
|
| + /** This test uses a direct executor for callbacks, and non direct for upload */
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testDirectExecutorProhibitedByDefault() throws Exception {
|
| + System.out.println("testing with " + mTestFramework.mCronetEngine);
|
| + TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| + Executor myExecutor = new Executor() {
|
| +
|
| + @Override
|
| + public void execute(Runnable command) {
|
| + command.run();
|
| + }
|
| + };
|
| + UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getEchoBodyURL(),
|
| + callback, myExecutor, mTestFramework.mCronetEngine);
|
| +
|
| + TestUploadDataProvider dataProvider = new TestUploadDataProvider(
|
| + TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExecutor());
|
| + // This will never be read, but if the length is 0, read may never be
|
| + // called.
|
| + dataProvider.addRead("test".getBytes());
|
| + builder.setUploadDataProvider(dataProvider, callback.getExecutor());
|
| + builder.addHeader("Content-Type", "useless/string");
|
| + builder.build().start();
|
| + callback.blockForDone();
|
| +
|
| + assertEquals(1, dataProvider.getNumReadCalls());
|
| + assertEquals(0, dataProvider.getNumRewindCalls());
|
| +
|
| + callback.mError.printStackTrace();
|
| + assertEquals("Exception posting task to executor", callback.mError.getMessage());
|
| + assertEquals("Inline execution is prohibited for this request",
|
| + callback.mError.getCause().getMessage());
|
| + assertEquals(null, callback.mResponseInfo);
|
| + dataProvider.assertClosed();
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testDirectExecutorAllowed() throws Exception {
|
| + TestUrlRequestCallback callback = new TestUrlRequestCallback();
|
| + callback.setAllowDirectExecutor(true);
|
| + Executor myExecutor = new Executor() {
|
| +
|
| + @Override
|
| + public void execute(Runnable command) {
|
| + command.run();
|
| + }
|
| + };
|
| + UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getEchoBodyURL(),
|
| + callback, myExecutor, mTestFramework.mCronetEngine);
|
| + UploadDataProvider dataProvider = UploadDataProviders.create("test".getBytes("UTF-8"));
|
| + builder.setUploadDataProvider(dataProvider, myExecutor);
|
| + builder.addHeader("Content-Type", "useless/string");
|
| + builder.allowDirectExecutor();
|
| + builder.build().start();
|
| + callback.blockForDone();
|
| +
|
| + if (callback.mOnErrorCalled) {
|
| + throw callback.mError;
|
| + }
|
| +
|
| + assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
|
| + assertEquals("test", callback.mResponseAsString);
|
| + }
|
| +
|
| @SmallTest
|
| @Feature({"Cronet"})
|
| public void testUploadReadFailThrown() throws Exception {
|
|
|