Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.content.Context; | 7 import android.content.Context; |
| 8 import android.content.ContextWrapper; | 8 import android.content.ContextWrapper; |
| 9 import android.os.ConditionVariable; | 9 import android.os.ConditionVariable; |
| 10 import android.os.Handler; | 10 import android.os.Handler; |
| 11 import android.os.Looper; | 11 import android.os.Looper; |
| 12 import android.os.Process; | |
| 12 import android.support.test.filters.SmallTest; | 13 import android.support.test.filters.SmallTest; |
| 13 | 14 |
| 14 import org.json.JSONObject; | 15 import org.json.JSONObject; |
| 15 | 16 |
| 16 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; | 17 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; |
| 17 | 18 |
| 18 import org.chromium.base.FileUtils; | 19 import org.chromium.base.FileUtils; |
| 19 import org.chromium.base.PathUtils; | 20 import org.chromium.base.PathUtils; |
| 20 import org.chromium.base.annotations.JNINamespace; | 21 import org.chromium.base.annotations.JNINamespace; |
| 21 import org.chromium.base.test.util.Feature; | 22 import org.chromium.base.test.util.Feature; |
| 22 import org.chromium.net.TestUrlRequestCallback.ResponseStep; | 23 import org.chromium.net.TestUrlRequestCallback.ResponseStep; |
| 23 import org.chromium.net.impl.CronetEngineBase; | 24 import org.chromium.net.impl.CronetEngineBase; |
| 24 import org.chromium.net.impl.CronetEngineBuilderImpl; | 25 import org.chromium.net.impl.CronetEngineBuilderImpl; |
| 25 import org.chromium.net.impl.CronetLibraryLoader; | 26 import org.chromium.net.impl.CronetLibraryLoader; |
| 26 import org.chromium.net.impl.CronetUrlRequestContext; | 27 import org.chromium.net.impl.CronetUrlRequestContext; |
| 27 import org.chromium.net.test.EmbeddedTestServer; | 28 import org.chromium.net.test.EmbeddedTestServer; |
| 28 | 29 |
| 29 import java.io.BufferedReader; | 30 import java.io.BufferedReader; |
| 30 import java.io.File; | 31 import java.io.File; |
| 31 import java.io.FileReader; | 32 import java.io.FileReader; |
| 32 import java.net.URL; | 33 import java.net.URL; |
| 34 import java.nio.ByteBuffer; | |
| 33 import java.util.Arrays; | 35 import java.util.Arrays; |
| 36 import java.util.concurrent.Callable; | |
| 34 import java.util.concurrent.Executor; | 37 import java.util.concurrent.Executor; |
| 38 import java.util.concurrent.FutureTask; | |
| 35 import java.util.concurrent.atomic.AtomicReference; | 39 import java.util.concurrent.atomic.AtomicReference; |
| 36 | 40 |
| 37 /** | 41 /** |
| 38 * Test CronetEngine. | 42 * Test CronetEngine. |
| 39 */ | 43 */ |
| 40 @JNINamespace("cronet") | 44 @JNINamespace("cronet") |
| 41 public class CronetUrlRequestContextTest extends CronetTestBase { | 45 public class CronetUrlRequestContextTest extends CronetTestBase { |
| 42 private static final String TAG = CronetUrlRequestContextTest.class.getSimpl eName(); | 46 private static final String TAG = CronetUrlRequestContextTest.class.getSimpl eName(); |
| 43 | 47 |
| 44 // URLs used for tests. | 48 // URLs used for tests. |
| (...skipping 1214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1259 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, cron etEngineBuilder); | 1263 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, cron etEngineBuilder); |
| 1260 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1264 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1261 URL requestUrl = | 1265 URL requestUrl = |
| 1262 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl .getFile()); | 1266 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl .getFile()); |
| 1263 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( | 1267 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( |
| 1264 requestUrl.toString(), callback, callback.getExecutor()); | 1268 requestUrl.toString(), callback, callback.getExecutor()); |
| 1265 urlRequestBuilder.build().start(); | 1269 urlRequestBuilder.build().start(); |
| 1266 callback.blockForDone(); | 1270 callback.blockForDone(); |
| 1267 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1271 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1268 } | 1272 } |
| 1273 | |
| 1274 /** | |
| 1275 * Runs {@code r} on {@code engine}'s network thread. | |
| 1276 */ | |
| 1277 private static void postToNetworkThread(final CronetEngine engine, final Run nable r) { | |
| 1278 // Works by requesting an invalid URL which results in onFailed() being called, which is | |
| 1279 // done through a direct executor which causes onFailed to be run on the network thread. | |
| 1280 Executor directExecutor = new Executor() { | |
| 1281 @Override | |
| 1282 public void execute(Runnable runable) { | |
| 1283 runable.run(); | |
| 1284 } | |
| 1285 }; | |
| 1286 UrlRequest.Callback callback = new UrlRequest.Callback() { | |
| 1287 @Override | |
| 1288 public void onRedirectReceived( | |
| 1289 UrlRequest request, UrlResponseInfo responseInfo, String new LocationUrl) {} | |
| 1290 @Override | |
| 1291 public void onResponseStarted(UrlRequest request, UrlResponseInfo re sponseInfo) {} | |
| 1292 @Override | |
| 1293 public void onReadCompleted( | |
| 1294 UrlRequest request, UrlResponseInfo responseInfo, ByteBuffer byteBuffer) {} | |
| 1295 @Override | |
| 1296 public void onSucceeded(UrlRequest request, UrlResponseInfo response Info) {} | |
| 1297 | |
| 1298 @Override | |
| 1299 public void onFailed( | |
| 1300 UrlRequest request, UrlResponseInfo responseInfo, CronetExce ption error) { | |
| 1301 r.run(); | |
| 1302 } | |
| 1303 }; | |
| 1304 engine.newUrlRequestBuilder("", callback, directExecutor).build().start( ); | |
| 1305 } | |
| 1306 | |
| 1307 /** | |
| 1308 * @returns the thread priority of {@code engine}'s network thread. | |
| 1309 */ | |
| 1310 private int getThreadPriority(CronetEngine engine) throws Exception { | |
| 1311 FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer> () { | |
| 1312 public Integer call() { | |
| 1313 return Process.getThreadPriority(Process.myTid()); | |
| 1314 } | |
| 1315 }); | |
| 1316 postToNetworkThread(engine, task); | |
| 1317 return task.get(); | |
| 1318 } | |
| 1319 | |
| 1320 @SmallTest | |
| 1321 @Feature({"Cronet"}) | |
| 1322 public void testCronetEngineThreadPriority() throws Exception { | |
| 1323 ExperimentalCronetEngine.Builder builder = | |
| 1324 new ExperimentalCronetEngine.Builder(getContext()); | |
| 1325 // Try out of bounds thread priorities. | |
| 1326 try { | |
| 1327 builder.setThreadPriority(-21); | |
| 1328 fail(); | |
| 1329 } catch (IllegalArgumentException e) { | |
| 1330 assertEquals("Thread priority invalid", e.getMessage()); | |
| 1331 } | |
| 1332 try { | |
| 1333 builder.setThreadPriority(20); | |
| 1334 fail(); | |
| 1335 } catch (IllegalArgumentException e) { | |
| 1336 assertEquals("Thread priority invalid", e.getMessage()); | |
| 1337 } | |
| 1338 // Test that valid thread priority range (-20..19) is working. | |
| 1339 for (int threadPriority = -20; threadPriority < 20; threadPriority++) { | |
| 1340 builder.setThreadPriority(threadPriority); | |
| 1341 assertEquals(threadPriority, getThreadPriority(builder.build())); | |
|
mef
2017/05/15 17:20:11
This loop creates and leaks 40*2 CronetEngines.
I
pauljensen
2017/05/16 13:19:45
Done.
| |
| 1342 } | |
| 1343 } | |
| 1269 } | 1344 } |
| OLD | NEW |