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 74327d51edbbef1c397dd635291814a2be9cbd81..f8cde707f1d4f84fea97766dce344fdd5c2aa030 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 |
@@ -24,6 +24,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; |
@@ -1374,6 +1375,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 { |