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

Side by Side 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, 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 unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698