| 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; |
| 34 import java.util.concurrent.Callable; | 36 import java.util.concurrent.Callable; |
| 35 import java.util.concurrent.Executor; | 37 import java.util.concurrent.Executor; |
| 36 import java.util.concurrent.FutureTask; | 38 import java.util.concurrent.FutureTask; |
| 37 import java.util.concurrent.atomic.AtomicReference; | 39 import java.util.concurrent.atomic.AtomicReference; |
| 38 | 40 |
| 39 /** | 41 /** |
| 40 * Test CronetEngine. | 42 * Test CronetEngine. |
| 41 */ | 43 */ |
| 42 @JNINamespace("cronet") | 44 @JNINamespace("cronet") |
| (...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, cron
etEngineBuilder); | 1271 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, cron
etEngineBuilder); |
| 1270 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1272 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1271 URL requestUrl = | 1273 URL requestUrl = |
| 1272 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl
.getFile()); | 1274 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl
.getFile()); |
| 1273 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr
lRequestBuilder( | 1275 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr
lRequestBuilder( |
| 1274 requestUrl.toString(), callback, callback.getExecutor()); | 1276 requestUrl.toString(), callback, callback.getExecutor()); |
| 1275 urlRequestBuilder.build().start(); | 1277 urlRequestBuilder.build().start(); |
| 1276 callback.blockForDone(); | 1278 callback.blockForDone(); |
| 1277 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1279 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1278 } | 1280 } |
| 1281 |
| 1282 /** |
| 1283 * Runs {@code r} on {@code engine}'s network thread. |
| 1284 */ |
| 1285 private static void postToNetworkThread(final CronetEngine engine, final Run
nable r) { |
| 1286 // Works by requesting an invalid URL which results in onFailed() being
called, which is |
| 1287 // done through a direct executor which causes onFailed to be run on the
network thread. |
| 1288 Executor directExecutor = new Executor() { |
| 1289 @Override |
| 1290 public void execute(Runnable runable) { |
| 1291 runable.run(); |
| 1292 } |
| 1293 }; |
| 1294 UrlRequest.Callback callback = new UrlRequest.Callback() { |
| 1295 @Override |
| 1296 public void onRedirectReceived( |
| 1297 UrlRequest request, UrlResponseInfo responseInfo, String new
LocationUrl) {} |
| 1298 @Override |
| 1299 public void onResponseStarted(UrlRequest request, UrlResponseInfo re
sponseInfo) {} |
| 1300 @Override |
| 1301 public void onReadCompleted( |
| 1302 UrlRequest request, UrlResponseInfo responseInfo, ByteBuffer
byteBuffer) {} |
| 1303 @Override |
| 1304 public void onSucceeded(UrlRequest request, UrlResponseInfo response
Info) {} |
| 1305 |
| 1306 @Override |
| 1307 public void onFailed( |
| 1308 UrlRequest request, UrlResponseInfo responseInfo, CronetExce
ption error) { |
| 1309 r.run(); |
| 1310 } |
| 1311 }; |
| 1312 engine.newUrlRequestBuilder("", callback, directExecutor).build().start(
); |
| 1313 } |
| 1314 |
| 1315 /** |
| 1316 * @returns the thread priority of {@code engine}'s network thread. |
| 1317 */ |
| 1318 private int getThreadPriority(CronetEngine engine) throws Exception { |
| 1319 FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>
() { |
| 1320 public Integer call() { |
| 1321 return Process.getThreadPriority(Process.myTid()); |
| 1322 } |
| 1323 }); |
| 1324 postToNetworkThread(engine, task); |
| 1325 return task.get(); |
| 1326 } |
| 1327 |
| 1328 @SmallTest |
| 1329 @Feature({"Cronet"}) |
| 1330 public void testCronetEngineThreadPriority() throws Exception { |
| 1331 ExperimentalCronetEngine.Builder builder = |
| 1332 new ExperimentalCronetEngine.Builder(getContext()); |
| 1333 // Try out of bounds thread priorities. |
| 1334 try { |
| 1335 builder.setThreadPriority(-21); |
| 1336 fail(); |
| 1337 } catch (IllegalArgumentException e) { |
| 1338 assertEquals("Thread priority invalid", e.getMessage()); |
| 1339 } |
| 1340 try { |
| 1341 builder.setThreadPriority(20); |
| 1342 fail(); |
| 1343 } catch (IllegalArgumentException e) { |
| 1344 assertEquals("Thread priority invalid", e.getMessage()); |
| 1345 } |
| 1346 // Test that valid thread priority range (-20..19) is working. |
| 1347 for (int threadPriority = -20; threadPriority < 20; threadPriority++) { |
| 1348 builder.setThreadPriority(threadPriority); |
| 1349 CronetEngine engine = builder.build(); |
| 1350 assertEquals(threadPriority, getThreadPriority(engine)); |
| 1351 engine.shutdown(); |
| 1352 } |
| 1353 } |
| 1279 } | 1354 } |
| OLD | NEW |