Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java

Issue 2283243002: Allow direct executors in cronet. (Closed)
Patch Set: Refactor DirectPreventingExecutor, and fix closing logic Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 {
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.
+ 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 {

Powered by Google App Engine
This is Rietveld 408576698