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

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

Issue 2283243002: Allow direct executors in cronet. (Closed)
Patch Set: Improve thread checking Created 4 years, 3 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 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 {

Powered by Google App Engine
This is Rietveld 408576698