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

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java

Issue 1363723002: [Cronet] Create Builders, rename UrlRequestContext to CronetEngine (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Ben's tests Created 5 years, 2 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.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.test.suitebuilder.annotation.SmallTest; 12 import android.test.suitebuilder.annotation.SmallTest;
13 13
14 import org.chromium.base.PathUtils; 14 import org.chromium.base.PathUtils;
15 import org.chromium.base.test.util.Feature; 15 import org.chromium.base.test.util.Feature;
16 import org.chromium.net.TestUrlRequestListener.ResponseStep; 16 import org.chromium.net.TestUrlRequestListener.ResponseStep;
17 17
18 import java.io.BufferedReader; 18 import java.io.BufferedReader;
19 import java.io.File; 19 import java.io.File;
20 import java.io.FileReader; 20 import java.io.FileReader;
21 import java.util.LinkedList; 21 import java.util.LinkedList;
22 import java.util.NoSuchElementException; 22 import java.util.NoSuchElementException;
23 import java.util.concurrent.Executor; 23 import java.util.concurrent.Executor;
24 24
25 /** 25 /**
26 * Test CronetUrlRequestContext. 26 * Test CronetEngine.
27 */ 27 */
28 public class CronetUrlRequestContextTest extends CronetTestBase { 28 public class CronetUrlRequestContextTest extends CronetTestBase {
29 // URLs used for tests. 29 // URLs used for tests.
30 private static final String TEST_URL = "http://127.0.0.1:8000"; 30 private static final String TEST_URL = "http://127.0.0.1:8000";
31 private static final String URL_404 = "http://127.0.0.1:8000/notfound404"; 31 private static final String URL_404 = "http://127.0.0.1:8000/notfound404";
32 private static final String MOCK_CRONET_TEST_FAILED_URL = 32 private static final String MOCK_CRONET_TEST_FAILED_URL =
33 "http://mock.failed.request/-2"; 33 "http://mock.failed.request/-2";
34 private static final String MOCK_CRONET_TEST_SUCCESS_URL = 34 private static final String MOCK_CRONET_TEST_SUCCESS_URL =
35 "http://mock.http/success.txt"; 35 "http://mock.http/success.txt";
36 36
37 CronetTestActivity mActivity; 37 CronetTestActivity mActivity;
38 38
39 static class RequestThread extends Thread { 39 static class RequestThread extends Thread {
40 public TestUrlRequestListener mListener; 40 public TestUrlRequestListener mListener;
41 41
42 final CronetTestActivity mActivity; 42 final CronetTestActivity mActivity;
43 final String mUrl; 43 final String mUrl;
44 final ConditionVariable mRunBlocker; 44 final ConditionVariable mRunBlocker;
45 45
46 public RequestThread(CronetTestActivity activity, String url, 46 public RequestThread(CronetTestActivity activity, String url,
47 ConditionVariable runBlocker) { 47 ConditionVariable runBlocker) {
48 mActivity = activity; 48 mActivity = activity;
49 mUrl = url; 49 mUrl = url;
50 mRunBlocker = runBlocker; 50 mRunBlocker = runBlocker;
51 } 51 }
52 52
53 @Override 53 @Override
54 public void run() { 54 public void run() {
55 mRunBlocker.block(); 55 mRunBlocker.block();
56 UrlRequestContext requestContext = mActivity.initRequestContext(); 56 CronetEngine cronetEngine = mActivity.initCronetEngine();
57 mListener = new TestUrlRequestListener(); 57 mListener = new TestUrlRequestListener();
58 UrlRequest urlRequest = 58 UrlRequest.Builder urlRequestBuilder =
59 requestContext.createRequest(mUrl, mListener, mListener.getE xecutor()); 59 new UrlRequest.Builder(mUrl, mListener, mListener.getExecuto r(), cronetEngine);
60 urlRequest.start(); 60 urlRequestBuilder.build().start();
61 mListener.blockForDone(); 61 mListener.blockForDone();
62 } 62 }
63 } 63 }
64 64
65 /** 65 /**
66 * Listener that shutdowns the request context when request has succeeded 66 * Listener that shutdowns the request context when request has succeeded
67 * or failed. 67 * or failed.
68 */ 68 */
69 class ShutdownTestUrlRequestListener extends TestUrlRequestListener { 69 class ShutdownTestUrlRequestListener extends TestUrlRequestListener {
70 @Override 70 @Override
71 public void onSucceeded(UrlRequest request, ExtendedResponseInfo info) { 71 public void onSucceeded(UrlRequest request, ExtendedResponseInfo info) {
72 super.onSucceeded(request, info); 72 super.onSucceeded(request, info);
73 mActivity.mUrlRequestContext.shutdown(); 73 mActivity.mCronetEngine.shutdown();
74 } 74 }
75 75
76 @Override 76 @Override
77 public void onFailed(UrlRequest request, 77 public void onFailed(UrlRequest request,
78 ResponseInfo info, 78 ResponseInfo info,
79 UrlRequestException error) { 79 UrlRequestException error) {
80 super.onFailed(request, info, error); 80 super.onFailed(request, info, error);
81 mActivity.mUrlRequestContext.shutdown(); 81 mActivity.mCronetEngine.shutdown();
82 } 82 }
83 } 83 }
84 84
85 static class TestExecutor implements Executor { 85 static class TestExecutor implements Executor {
86 private final LinkedList<Runnable> mTaskQueue = new LinkedList<Runnable> (); 86 private final LinkedList<Runnable> mTaskQueue = new LinkedList<Runnable> ();
87 87
88 @Override 88 @Override
89 public void execute(Runnable task) { 89 public void execute(Runnable task) {
90 mTaskQueue.add(task); 90 mTaskQueue.add(task);
91 } 91 }
(...skipping 28 matching lines...) Expand all
120 public int throughputObservationCount() { 120 public int throughputObservationCount() {
121 return mThroughputObservationCount; 121 return mThroughputObservationCount;
122 } 122 }
123 } 123 }
124 124
125 @SmallTest 125 @SmallTest
126 @Feature({"Cronet"}) 126 @Feature({"Cronet"})
127 public void testConfigUserAgent() throws Exception { 127 public void testConfigUserAgent() throws Exception {
128 String userAgentName = "User-Agent"; 128 String userAgentName = "User-Agent";
129 String userAgentValue = "User-Agent-Value"; 129 String userAgentValue = "User-Agent-Value";
130 UrlRequestContextConfig config = new UrlRequestContextConfig(); 130 CronetEngine.Builder cronetEngineBuilder = new CronetEngine.Builder(mAct ivity);
131 config.setUserAgent(userAgentValue); 131 cronetEngineBuilder.setUserAgent(userAgentValue);
132 config.setLibraryName("cronet_tests"); 132 cronetEngineBuilder.setLibraryName("cronet_tests");
133 String[] commandLineArgs = { 133 String[] commandLineArgs = {CronetTestActivity.CONFIG_KEY, cronetEngineB uilder.toString()};
134 CronetTestActivity.CONFIG_KEY, config.toString()
135 };
136 mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(TEST_URL, 134 mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(TEST_URL,
137 commandLineArgs); 135 commandLineArgs);
138 assertTrue(NativeTestServer.startNativeTestServer( 136 assertTrue(NativeTestServer.startNativeTestServer(
139 getInstrumentation().getTargetContext())); 137 getInstrumentation().getTargetContext()));
140 TestUrlRequestListener listener = new TestUrlRequestListener(); 138 TestUrlRequestListener listener = new TestUrlRequestListener();
141 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 139 UrlRequest.Builder urlRequestBuilder =
142 NativeTestServer.getEchoHeaderURL(userAgentName), listener, 140 new UrlRequest.Builder(NativeTestServer.getEchoHeaderURL(userAge ntName), listener,
143 listener.getExecutor()); 141 listener.getExecutor(), mActivity.mCronetEngine);
144 urlRequest.start(); 142 urlRequestBuilder.build().start();
145 listener.blockForDone(); 143 listener.blockForDone();
146 assertEquals(userAgentValue, listener.mResponseAsString); 144 assertEquals(userAgentValue, listener.mResponseAsString);
147 } 145 }
148 146
149 @SmallTest 147 @SmallTest
150 @Feature({"Cronet"}) 148 @Feature({"Cronet"})
151 public void testDataReductionProxyEnabled() throws Exception { 149 public void testDataReductionProxyEnabled() throws Exception {
152 mActivity = launchCronetTestAppAndSkipFactoryInit(); 150 mActivity = launchCronetTestAppAndSkipFactoryInit();
153 151
154 // Ensure native code is loaded before trying to start test server. 152 // Ensure native code is loaded before trying to start test server.
155 UrlRequestContext.createContext( 153 new CronetEngine.Builder(getInstrumentation().getTargetContext())
156 getInstrumentation().getTargetContext(), 154 .setLibraryName("cronet_tests")
157 new UrlRequestContextConfig().setLibraryName("cronet_tests")) 155 .build()
158 .shutdown(); 156 .shutdown();
159 157
160 assertTrue(NativeTestServer.startNativeTestServer( 158 assertTrue(NativeTestServer.startNativeTestServer(
161 getInstrumentation().getTargetContext())); 159 getInstrumentation().getTargetContext()));
162 if (!NativeTestServer.isDataReductionProxySupported()) { 160 if (!NativeTestServer.isDataReductionProxySupported()) {
163 return; 161 return;
164 } 162 }
165 String serverHostPort = NativeTestServer.getHostPort(); 163 String serverHostPort = NativeTestServer.getHostPort();
166 164
167 // Enable the Data Reduction Proxy and configure it to use the test 165 // Enable the Data Reduction Proxy and configure it to use the test
168 // server as its primary proxy, and to check successfully that this 166 // server as its primary proxy, and to check successfully that this
169 // proxy is OK to use. 167 // proxy is OK to use.
170 UrlRequestContextConfig config = new UrlRequestContextConfig(); 168 CronetEngine.Builder cronetEngineBuilder =
171 config.enableDataReductionProxy("test-key"); 169 new CronetEngine.Builder(getInstrumentation().getTargetContext() );
172 config.setDataReductionProxyOptions( 170 cronetEngineBuilder.enableDataReductionProxy("test-key");
173 serverHostPort, "unused.net:9999", 171 cronetEngineBuilder.setDataReductionProxyOptions(serverHostPort, "unused .net:9999",
174 NativeTestServer.getFileURL("/secureproxychecksuccess.txt")); 172 NativeTestServer.getFileURL("/secureproxychecksuccess.txt"));
175 config.setLibraryName("cronet_tests"); 173 cronetEngineBuilder.setLibraryName("cronet_tests");
176 mActivity.mUrlRequestContext = UrlRequestContext.createContext( 174 mActivity.mCronetEngine = cronetEngineBuilder.build();
177 getInstrumentation().getTargetContext(), config);
178 TestUrlRequestListener listener = new TestUrlRequestListener(); 175 TestUrlRequestListener listener = new TestUrlRequestListener();
179 176
180 // Construct and start a request that can only be returned by the test 177 // Construct and start a request that can only be returned by the test
181 // server. This request will fail if the configuration logic for the 178 // server. This request will fail if the configuration logic for the
182 // Data Reduction Proxy is not used. 179 // Data Reduction Proxy is not used.
183 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 180 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
184 "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt", 181 "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt", listener,
185 listener, listener.getExecutor()); 182 listener.getExecutor(), mActivity.mCronetEngine);
186 urlRequest.start(); 183 urlRequestBuilder.build().start();
187 listener.blockForDone(); 184 listener.blockForDone();
188 185
189 // Verify that the request is successful and that the Data Reduction 186 // Verify that the request is successful and that the Data Reduction
190 // Proxy logic configured to use the test server as its proxy. 187 // Proxy logic configured to use the test server as its proxy.
191 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); 188 assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
192 assertEquals(serverHostPort, listener.mResponseInfo.getProxyServer()); 189 assertEquals(serverHostPort, listener.mResponseInfo.getProxyServer());
193 assertEquals( 190 assertEquals(
194 "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt", 191 "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt",
195 listener.mResponseInfo.getUrl()); 192 listener.mResponseInfo.getUrl());
196 } 193 }
197 194
198 @SmallTest 195 @SmallTest
199 @Feature({"Cronet"}) 196 @Feature({"Cronet"})
200 public void testRealTimeNetworkQualityObservationsNotEnabled() throws Except ion { 197 public void testRealTimeNetworkQualityObservationsNotEnabled() throws Except ion {
201 mActivity = launchCronetTestApp(); 198 mActivity = launchCronetTestApp();
202 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener(); 199 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener();
203 try { 200 try {
204 mActivity.mUrlRequestContext.addRttListener(networkQualityListener); 201 mActivity.mCronetEngine.addRttListener(networkQualityListener);
205 fail("Should throw an exception."); 202 fail("Should throw an exception.");
206 } catch (IllegalStateException e) { 203 } catch (IllegalStateException e) {
207 } 204 }
208 try { 205 try {
209 mActivity.mUrlRequestContext.addThroughputListener(networkQualityLis tener); 206 mActivity.mCronetEngine.addThroughputListener(networkQualityListener );
210 fail("Should throw an exception."); 207 fail("Should throw an exception.");
211 } catch (IllegalStateException e) { 208 } catch (IllegalStateException e) {
212 } 209 }
213 TestUrlRequestListener listener = new TestUrlRequestListener(); 210 TestUrlRequestListener listener = new TestUrlRequestListener();
214 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 211 UrlRequest urlRequest =
215 TEST_URL, listener, listener.getExecutor()); 212 mActivity.mCronetEngine.createRequest(TEST_URL, listener, listen er.getExecutor());
216 urlRequest.start(); 213 urlRequest.start();
217 listener.blockForDone(); 214 listener.blockForDone();
218 assertEquals(0, networkQualityListener.rttObservationCount()); 215 assertEquals(0, networkQualityListener.rttObservationCount());
219 assertEquals(0, networkQualityListener.throughputObservationCount()); 216 assertEquals(0, networkQualityListener.throughputObservationCount());
220 mActivity.mUrlRequestContext.shutdown(); 217 mActivity.mCronetEngine.shutdown();
221 } 218 }
222 219
223 @SmallTest 220 @SmallTest
224 @Feature({"Cronet"}) 221 @Feature({"Cronet"})
225 public void testRealTimeNetworkQualityObservationsListenerRemoved() throws E xception { 222 public void testRealTimeNetworkQualityObservationsListenerRemoved() throws E xception {
226 mActivity = launchCronetTestApp(); 223 mActivity = launchCronetTestApp();
227 TestExecutor testExecutor = new TestExecutor(); 224 TestExecutor testExecutor = new TestExecutor();
228 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener(); 225 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener();
229 mActivity.mUrlRequestContext.enableNetworkQualityEstimatorForTesting( 226 mActivity.mCronetEngine.enableNetworkQualityEstimatorForTesting(true, tr ue, testExecutor);
230 true, true, testExecutor); 227 mActivity.mCronetEngine.addRttListener(networkQualityListener);
231 mActivity.mUrlRequestContext.addRttListener(networkQualityListener); 228 mActivity.mCronetEngine.addThroughputListener(networkQualityListener);
232 mActivity.mUrlRequestContext.addThroughputListener(networkQualityListene r); 229 mActivity.mCronetEngine.removeRttListener(networkQualityListener);
233 mActivity.mUrlRequestContext.removeRttListener(networkQualityListener); 230 mActivity.mCronetEngine.removeThroughputListener(networkQualityListener) ;
234 mActivity.mUrlRequestContext.removeThroughputListener(networkQualityList ener);
235 TestUrlRequestListener listener = new TestUrlRequestListener(); 231 TestUrlRequestListener listener = new TestUrlRequestListener();
236 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 232 UrlRequest urlRequest =
237 TEST_URL, listener, listener.getExecutor()); 233 mActivity.mCronetEngine.createRequest(TEST_URL, listener, listen er.getExecutor());
238 urlRequest.start(); 234 urlRequest.start();
239 listener.blockForDone(); 235 listener.blockForDone();
240 testExecutor.runAllTasks(); 236 testExecutor.runAllTasks();
241 assertEquals(0, networkQualityListener.rttObservationCount()); 237 assertEquals(0, networkQualityListener.rttObservationCount());
242 assertEquals(0, networkQualityListener.throughputObservationCount()); 238 assertEquals(0, networkQualityListener.throughputObservationCount());
243 mActivity.mUrlRequestContext.shutdown(); 239 mActivity.mCronetEngine.shutdown();
244 } 240 }
245 241
246 @SmallTest 242 @SmallTest
247 @Feature({"Cronet"}) 243 @Feature({"Cronet"})
248 public void testRealTimeNetworkQualityObservations() throws Exception { 244 public void testRealTimeNetworkQualityObservations() throws Exception {
249 mActivity = launchCronetTestApp(); 245 mActivity = launchCronetTestApp();
250 TestExecutor testExecutor = new TestExecutor(); 246 TestExecutor testExecutor = new TestExecutor();
251 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener(); 247 TestNetworkQualityListener networkQualityListener = new TestNetworkQuali tyListener();
252 mActivity.mUrlRequestContext.enableNetworkQualityEstimatorForTesting( 248 mActivity.mCronetEngine.enableNetworkQualityEstimatorForTesting(true, tr ue, testExecutor);
253 true, true, testExecutor); 249 mActivity.mCronetEngine.addRttListener(networkQualityListener);
254 mActivity.mUrlRequestContext.addRttListener(networkQualityListener); 250 mActivity.mCronetEngine.addThroughputListener(networkQualityListener);
255 mActivity.mUrlRequestContext.addThroughputListener(networkQualityListene r);
256 TestUrlRequestListener listener = new TestUrlRequestListener(); 251 TestUrlRequestListener listener = new TestUrlRequestListener();
257 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 252 UrlRequest urlRequest =
258 TEST_URL, listener, listener.getExecutor()); 253 mActivity.mCronetEngine.createRequest(TEST_URL, listener, listen er.getExecutor());
259 urlRequest.start(); 254 urlRequest.start();
260 listener.blockForDone(); 255 listener.blockForDone();
261 testExecutor.runAllTasks(); 256 testExecutor.runAllTasks();
262 assertTrue(networkQualityListener.rttObservationCount() > 0); 257 assertTrue(networkQualityListener.rttObservationCount() > 0);
263 assertTrue(networkQualityListener.throughputObservationCount() > 0); 258 assertTrue(networkQualityListener.throughputObservationCount() > 0);
264 mActivity.mUrlRequestContext.shutdown(); 259 mActivity.mCronetEngine.shutdown();
265 } 260 }
266 261
267 @SmallTest 262 @SmallTest
268 @Feature({"Cronet"}) 263 @Feature({"Cronet"})
269 public void testShutdown() throws Exception { 264 public void testShutdown() throws Exception {
270 mActivity = launchCronetTestApp(); 265 mActivity = launchCronetTestApp();
271 TestUrlRequestListener listener = new ShutdownTestUrlRequestListener(); 266 TestUrlRequestListener listener = new ShutdownTestUrlRequestListener();
272 // Block listener when response starts to verify that shutdown fails 267 // Block listener when response starts to verify that shutdown fails
273 // if there are active requests. 268 // if there are active requests.
274 listener.setAutoAdvance(false); 269 listener.setAutoAdvance(false);
275 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 270 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
276 TEST_URL, listener, listener.getExecutor()); 271 TEST_URL, listener, listener.getExecutor(), mActivity.mCronetEng ine);
272 UrlRequest urlRequest = urlRequestBuilder.build();
277 urlRequest.start(); 273 urlRequest.start();
278 try { 274 try {
279 mActivity.mUrlRequestContext.shutdown(); 275 mActivity.mCronetEngine.shutdown();
280 fail("Should throw an exception"); 276 fail("Should throw an exception");
281 } catch (Exception e) { 277 } catch (Exception e) {
282 assertEquals("Cannot shutdown with active requests.", 278 assertEquals("Cannot shutdown with active requests.",
283 e.getMessage()); 279 e.getMessage());
284 } 280 }
285 281
286 listener.waitForNextStep(); 282 listener.waitForNextStep();
287 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); 283 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep);
288 try { 284 try {
289 mActivity.mUrlRequestContext.shutdown(); 285 mActivity.mCronetEngine.shutdown();
290 fail("Should throw an exception"); 286 fail("Should throw an exception");
291 } catch (Exception e) { 287 } catch (Exception e) {
292 assertEquals("Cannot shutdown with active requests.", 288 assertEquals("Cannot shutdown with active requests.",
293 e.getMessage()); 289 e.getMessage());
294 } 290 }
295 listener.startNextRead(urlRequest); 291 listener.startNextRead(urlRequest);
296 292
297 listener.waitForNextStep(); 293 listener.waitForNextStep();
298 assertEquals(ResponseStep.ON_READ_COMPLETED, listener.mResponseStep); 294 assertEquals(ResponseStep.ON_READ_COMPLETED, listener.mResponseStep);
299 try { 295 try {
300 mActivity.mUrlRequestContext.shutdown(); 296 mActivity.mCronetEngine.shutdown();
301 fail("Should throw an exception"); 297 fail("Should throw an exception");
302 } catch (Exception e) { 298 } catch (Exception e) {
303 assertEquals("Cannot shutdown with active requests.", 299 assertEquals("Cannot shutdown with active requests.",
304 e.getMessage()); 300 e.getMessage());
305 } 301 }
306 302
307 // May not have read all the data, in theory. Just enable auto-advance 303 // May not have read all the data, in theory. Just enable auto-advance
308 // and finish the request. 304 // and finish the request.
309 listener.setAutoAdvance(true); 305 listener.setAutoAdvance(true);
310 listener.startNextRead(urlRequest); 306 listener.startNextRead(urlRequest);
(...skipping 17 matching lines...) Expand all
328 fail("Caught " + e.getMessage()); 324 fail("Caught " + e.getMessage());
329 } 325 }
330 } 326 }
331 }; 327 };
332 // Ensure that test is not running on the main thread. 328 // Ensure that test is not running on the main thread.
333 assertTrue(Looper.getMainLooper() != Looper.myLooper()); 329 assertTrue(Looper.getMainLooper() != Looper.myLooper());
334 new Handler(Looper.getMainLooper()).post(blockingTask); 330 new Handler(Looper.getMainLooper()).post(blockingTask);
335 331
336 // Create new request context, but its initialization on the main thread 332 // Create new request context, but its initialization on the main thread
337 // will be stuck behind blockingTask. 333 // will be stuck behind blockingTask.
338 final UrlRequestContext requestContext = activity.initRequestContext(); 334 final CronetEngine cronetEngine = activity.initCronetEngine();
339 // Unblock the main thread, so context gets initialized and shutdown on 335 // Unblock the main thread, so context gets initialized and shutdown on
340 // it. 336 // it.
341 block.open(); 337 block.open();
342 // Shutdown will wait for init to complete on main thread. 338 // Shutdown will wait for init to complete on main thread.
343 requestContext.shutdown(); 339 cronetEngine.shutdown();
344 // Verify that context is shutdown. 340 // Verify that context is shutdown.
345 try { 341 try {
346 requestContext.stopNetLog(); 342 cronetEngine.stopNetLog();
347 fail("Should throw an exception."); 343 fail("Should throw an exception.");
348 } catch (Exception e) { 344 } catch (Exception e) {
349 assertEquals("Context is shut down.", e.getMessage()); 345 assertEquals("Engine is shut down.", e.getMessage());
350 } 346 }
351 } 347 }
352 348
353 @SmallTest 349 @SmallTest
354 @Feature({"Cronet"}) 350 @Feature({"Cronet"})
355 public void testInitAndShutdownOnMainThread() throws Exception { 351 public void testInitAndShutdownOnMainThread() throws Exception {
356 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t(); 352 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t();
357 final ConditionVariable block = new ConditionVariable(false); 353 final ConditionVariable block = new ConditionVariable(false);
358 354
359 // Post a task to main thread to init and shutdown on the main thread. 355 // Post a task to main thread to init and shutdown on the main thread.
360 Runnable blockingTask = new Runnable() { 356 Runnable blockingTask = new Runnable() {
361 public void run() { 357 public void run() {
362 // Create new request context, loading the library. 358 // Create new request context, loading the library.
363 final UrlRequestContext requestContext = activity.initRequestCon text(); 359 final CronetEngine cronetEngine = activity.initCronetEngine();
364 // Shutdown right after init. 360 // Shutdown right after init.
365 requestContext.shutdown(); 361 cronetEngine.shutdown();
366 // Verify that context is shutdown. 362 // Verify that context is shutdown.
367 try { 363 try {
368 requestContext.stopNetLog(); 364 cronetEngine.stopNetLog();
369 fail("Should throw an exception."); 365 fail("Should throw an exception.");
370 } catch (Exception e) { 366 } catch (Exception e) {
371 assertEquals("Context is shut down.", e.getMessage()); 367 assertEquals("Engine is shut down.", e.getMessage());
372 } 368 }
373 block.open(); 369 block.open();
374 } 370 }
375 }; 371 };
376 new Handler(Looper.getMainLooper()).post(blockingTask); 372 new Handler(Looper.getMainLooper()).post(blockingTask);
377 // Wait for shutdown to complete on main thread. 373 // Wait for shutdown to complete on main thread.
378 block.block(); 374 block.block();
379 } 375 }
380 376
381 @SmallTest 377 @SmallTest
382 @Feature({"Cronet"}) 378 @Feature({"Cronet"})
383 public void testMultipleShutdown() throws Exception { 379 public void testMultipleShutdown() throws Exception {
384 mActivity = launchCronetTestApp(); 380 mActivity = launchCronetTestApp();
385 try { 381 try {
386 mActivity.mUrlRequestContext.shutdown(); 382 mActivity.mCronetEngine.shutdown();
387 mActivity.mUrlRequestContext.shutdown(); 383 mActivity.mCronetEngine.shutdown();
388 fail("Should throw an exception"); 384 fail("Should throw an exception");
389 } catch (Exception e) { 385 } catch (Exception e) {
390 assertEquals("Context is shut down.", 386 assertEquals("Engine is shut down.", e.getMessage());
391 e.getMessage());
392 } 387 }
393 } 388 }
394 389
395 @SmallTest 390 @SmallTest
396 @Feature({"Cronet"}) 391 @Feature({"Cronet"})
397 public void testShutdownAfterError() throws Exception { 392 public void testShutdownAfterError() throws Exception {
398 mActivity = launchCronetTestApp(); 393 mActivity = launchCronetTestApp();
399 TestUrlRequestListener listener = new ShutdownTestUrlRequestListener(); 394 TestUrlRequestListener listener = new ShutdownTestUrlRequestListener();
400 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 395 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(MOCK_CRONE T_TEST_FAILED_URL,
401 MOCK_CRONET_TEST_FAILED_URL, listener, listener.getExecutor()); 396 listener, listener.getExecutor(), mActivity.mCronetEngine);
402 urlRequest.start(); 397 urlRequestBuilder.build().start();
403 listener.blockForDone(); 398 listener.blockForDone();
404 assertTrue(listener.mOnErrorCalled); 399 assertTrue(listener.mOnErrorCalled);
405 } 400 }
406 401
407 @SmallTest 402 @SmallTest
408 @Feature({"Cronet"}) 403 @Feature({"Cronet"})
409 public void testShutdownAfterCancel() throws Exception { 404 public void testShutdownAfterCancel() throws Exception {
410 mActivity = launchCronetTestApp(); 405 mActivity = launchCronetTestApp();
411 TestUrlRequestListener listener = new TestUrlRequestListener(); 406 TestUrlRequestListener listener = new TestUrlRequestListener();
412 // Block listener when response starts to verify that shutdown fails 407 // Block listener when response starts to verify that shutdown fails
413 // if there are active requests. 408 // if there are active requests.
414 listener.setAutoAdvance(false); 409 listener.setAutoAdvance(false);
415 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 410 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
416 TEST_URL, listener, listener.getExecutor()); 411 TEST_URL, listener, listener.getExecutor(), mActivity.mCronetEng ine);
412 UrlRequest urlRequest = urlRequestBuilder.build();
417 urlRequest.start(); 413 urlRequest.start();
418 try { 414 try {
419 mActivity.mUrlRequestContext.shutdown(); 415 mActivity.mCronetEngine.shutdown();
420 fail("Should throw an exception"); 416 fail("Should throw an exception");
421 } catch (Exception e) { 417 } catch (Exception e) {
422 assertEquals("Cannot shutdown with active requests.", 418 assertEquals("Cannot shutdown with active requests.",
423 e.getMessage()); 419 e.getMessage());
424 } 420 }
425 listener.waitForNextStep(); 421 listener.waitForNextStep();
426 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); 422 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep);
427 urlRequest.cancel(); 423 urlRequest.cancel();
428 mActivity.mUrlRequestContext.shutdown(); 424 mActivity.mCronetEngine.shutdown();
429 } 425 }
430 426
431 @SmallTest 427 @SmallTest
432 @Feature({"Cronet"}) 428 @Feature({"Cronet"})
433 public void testNetLog() throws Exception { 429 public void testNetLog() throws Exception {
434 Context context = getInstrumentation().getTargetContext(); 430 Context context = getInstrumentation().getTargetContext();
435 File directory = new File(PathUtils.getDataDirectory(context)); 431 File directory = new File(PathUtils.getDataDirectory(context));
436 File file = File.createTempFile("cronet", "json", directory); 432 File file = File.createTempFile("cronet", "json", directory);
437 CronetUrlRequestContext requestContext = new CronetUrlRequestContext( 433 CronetEngine cronetEngine = new CronetUrlRequestContext(
438 context, 434 new CronetEngine.Builder(context).setLibraryName("cronet_tests") );
439 new UrlRequestContextConfig().setLibraryName("cronet_tests"));
440 // Start NetLog immediately after the request context is created to make 435 // Start NetLog immediately after the request context is created to make
441 // sure that the call won't crash the app even when the native request 436 // sure that the call won't crash the app even when the native request
442 // context is not fully initialized. See crbug.com/470196. 437 // context is not fully initialized. See crbug.com/470196.
443 requestContext.startNetLogToFile(file.getPath(), false); 438 cronetEngine.startNetLogToFile(file.getPath(), false);
444 439
445 // Start a request. 440 // Start a request.
446 TestUrlRequestListener listener = new TestUrlRequestListener(); 441 TestUrlRequestListener listener = new TestUrlRequestListener();
447 UrlRequest request = requestContext.createRequest( 442 UrlRequest.Builder urlRequestBuilder =
448 TEST_URL, listener, listener.getExecutor()); 443 new UrlRequest.Builder(TEST_URL, listener, listener.getExecutor( ), cronetEngine);
449 request.start(); 444 urlRequestBuilder.build().start();
450 listener.blockForDone(); 445 listener.blockForDone();
451 requestContext.stopNetLog(); 446 cronetEngine.stopNetLog();
452 assertTrue(file.exists()); 447 assertTrue(file.exists());
453 assertTrue(file.length() != 0); 448 assertTrue(file.length() != 0);
454 assertFalse(hasBytesInNetLog(file)); 449 assertFalse(hasBytesInNetLog(file));
455 assertTrue(file.delete()); 450 assertTrue(file.delete());
456 assertTrue(!file.exists()); 451 assertTrue(!file.exists());
457 } 452 }
458 453
459 @SmallTest 454 @SmallTest
460 @Feature({"Cronet"}) 455 @Feature({"Cronet"})
461 public void testNetLogAfterShutdown() throws Exception { 456 public void testNetLogAfterShutdown() throws Exception {
462 mActivity = launchCronetTestApp(); 457 mActivity = launchCronetTestApp();
463 TestUrlRequestListener listener = new TestUrlRequestListener(); 458 TestUrlRequestListener listener = new TestUrlRequestListener();
464 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 459 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
465 TEST_URL, listener, listener.getExecutor()); 460 TEST_URL, listener, listener.getExecutor(), mActivity.mCronetEng ine);
466 urlRequest.start(); 461 urlRequestBuilder.build().start();
467 listener.blockForDone(); 462 listener.blockForDone();
468 mActivity.mUrlRequestContext.shutdown(); 463 mActivity.mCronetEngine.shutdown();
469 464
470 File directory = new File(PathUtils.getDataDirectory( 465 File directory = new File(PathUtils.getDataDirectory(
471 getInstrumentation().getTargetContext())); 466 getInstrumentation().getTargetContext()));
472 File file = File.createTempFile("cronet", "json", directory); 467 File file = File.createTempFile("cronet", "json", directory);
473 try { 468 try {
474 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), 469 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
475 false);
476 fail("Should throw an exception."); 470 fail("Should throw an exception.");
477 } catch (Exception e) { 471 } catch (Exception e) {
478 assertEquals("Context is shut down.", e.getMessage()); 472 assertEquals("Engine is shut down.", e.getMessage());
479 } 473 }
480 assertFalse(hasBytesInNetLog(file)); 474 assertFalse(hasBytesInNetLog(file));
481 assertTrue(file.delete()); 475 assertTrue(file.delete());
482 assertTrue(!file.exists()); 476 assertTrue(!file.exists());
483 } 477 }
484 478
485 @SmallTest 479 @SmallTest
486 @Feature({"Cronet"}) 480 @Feature({"Cronet"})
487 public void testNetLogStartMultipleTimes() throws Exception { 481 public void testNetLogStartMultipleTimes() throws Exception {
488 mActivity = launchCronetTestApp(); 482 mActivity = launchCronetTestApp();
489 File directory = new File(PathUtils.getDataDirectory( 483 File directory = new File(PathUtils.getDataDirectory(
490 getInstrumentation().getTargetContext())); 484 getInstrumentation().getTargetContext()));
491 File file = File.createTempFile("cronet", "json", directory); 485 File file = File.createTempFile("cronet", "json", directory);
492 // Start NetLog multiple times. 486 // Start NetLog multiple times.
493 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), false); 487 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
494 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), false); 488 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
495 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), false); 489 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
496 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), false); 490 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
497 // Start a request. 491 // Start a request.
498 TestUrlRequestListener listener = new TestUrlRequestListener(); 492 TestUrlRequestListener listener = new TestUrlRequestListener();
499 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 493 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
500 TEST_URL, listener, listener.getExecutor()); 494 TEST_URL, listener, listener.getExecutor(), mActivity.mCronetEng ine);
501 urlRequest.start(); 495 urlRequestBuilder.build().start();
502 listener.blockForDone(); 496 listener.blockForDone();
503 mActivity.mUrlRequestContext.stopNetLog(); 497 mActivity.mCronetEngine.stopNetLog();
504 assertTrue(file.exists()); 498 assertTrue(file.exists());
505 assertTrue(file.length() != 0); 499 assertTrue(file.length() != 0);
506 assertFalse(hasBytesInNetLog(file)); 500 assertFalse(hasBytesInNetLog(file));
507 assertTrue(file.delete()); 501 assertTrue(file.delete());
508 assertTrue(!file.exists()); 502 assertTrue(!file.exists());
509 } 503 }
510 504
511 @SmallTest 505 @SmallTest
512 @Feature({"Cronet"}) 506 @Feature({"Cronet"})
513 public void testNetLogStopMultipleTimes() throws Exception { 507 public void testNetLogStopMultipleTimes() throws Exception {
514 mActivity = launchCronetTestApp(); 508 mActivity = launchCronetTestApp();
515 File directory = new File(PathUtils.getDataDirectory( 509 File directory = new File(PathUtils.getDataDirectory(
516 getInstrumentation().getTargetContext())); 510 getInstrumentation().getTargetContext()));
517 File file = File.createTempFile("cronet", "json", directory); 511 File file = File.createTempFile("cronet", "json", directory);
518 mActivity.mUrlRequestContext.startNetLogToFile(file.getPath(), false); 512 mActivity.mCronetEngine.startNetLogToFile(file.getPath(), false);
519 // Start a request. 513 // Start a request.
520 TestUrlRequestListener listener = new TestUrlRequestListener(); 514 TestUrlRequestListener listener = new TestUrlRequestListener();
521 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 515 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
522 TEST_URL, listener, listener.getExecutor()); 516 TEST_URL, listener, listener.getExecutor(), mActivity.mCronetEng ine);
523 urlRequest.start(); 517 urlRequestBuilder.build().start();
524 listener.blockForDone(); 518 listener.blockForDone();
525 // Stop NetLog multiple times. 519 // Stop NetLog multiple times.
526 mActivity.mUrlRequestContext.stopNetLog(); 520 mActivity.mCronetEngine.stopNetLog();
527 mActivity.mUrlRequestContext.stopNetLog(); 521 mActivity.mCronetEngine.stopNetLog();
528 mActivity.mUrlRequestContext.stopNetLog(); 522 mActivity.mCronetEngine.stopNetLog();
529 mActivity.mUrlRequestContext.stopNetLog(); 523 mActivity.mCronetEngine.stopNetLog();
530 mActivity.mUrlRequestContext.stopNetLog(); 524 mActivity.mCronetEngine.stopNetLog();
531 assertTrue(file.exists()); 525 assertTrue(file.exists());
532 assertTrue(file.length() != 0); 526 assertTrue(file.length() != 0);
533 assertFalse(hasBytesInNetLog(file)); 527 assertFalse(hasBytesInNetLog(file));
534 assertTrue(file.delete()); 528 assertTrue(file.delete());
535 assertTrue(!file.exists()); 529 assertTrue(!file.exists());
536 } 530 }
537 531
538 @SmallTest 532 @SmallTest
539 @Feature({"Cronet"}) 533 @Feature({"Cronet"})
540 public void testNetLogWithBytes() throws Exception { 534 public void testNetLogWithBytes() throws Exception {
541 Context context = getInstrumentation().getTargetContext(); 535 Context context = getInstrumentation().getTargetContext();
542 File directory = new File(PathUtils.getDataDirectory(context)); 536 File directory = new File(PathUtils.getDataDirectory(context));
543 File file = File.createTempFile("cronet", "json", directory); 537 File file = File.createTempFile("cronet", "json", directory);
544 CronetUrlRequestContext requestContext = new CronetUrlRequestContext( 538 CronetEngine cronetEngine = new CronetUrlRequestContext(
545 context, 539 new CronetEngine.Builder(context).setLibraryName("cronet_tests") );
546 new UrlRequestContextConfig().setLibraryName("cronet_tests"));
547 // Start NetLog with logAll as true. 540 // Start NetLog with logAll as true.
548 requestContext.startNetLogToFile(file.getPath(), true); 541 cronetEngine.startNetLogToFile(file.getPath(), true);
549 // Start a request. 542 // Start a request.
550 TestUrlRequestListener listener = new TestUrlRequestListener(); 543 TestUrlRequestListener listener = new TestUrlRequestListener();
551 UrlRequest request = requestContext.createRequest( 544 UrlRequest.Builder urlRequestBuilder =
552 TEST_URL, listener, listener.getExecutor()); 545 new UrlRequest.Builder(TEST_URL, listener, listener.getExecutor( ), cronetEngine);
553 request.start(); 546 urlRequestBuilder.build().start();
554 listener.blockForDone(); 547 listener.blockForDone();
555 requestContext.stopNetLog(); 548 cronetEngine.stopNetLog();
556 assertTrue(file.exists()); 549 assertTrue(file.exists());
557 assertTrue(file.length() != 0); 550 assertTrue(file.length() != 0);
558 assertTrue(hasBytesInNetLog(file)); 551 assertTrue(hasBytesInNetLog(file));
559 assertTrue(file.delete()); 552 assertTrue(file.delete());
560 assertTrue(!file.exists()); 553 assertTrue(!file.exists());
561 } 554 }
562 555
563 private boolean hasBytesInNetLog(File logFile) throws Exception { 556 private boolean hasBytesInNetLog(File logFile) throws Exception {
564 BufferedReader logReader = new BufferedReader(new FileReader(logFile)); 557 BufferedReader logReader = new BufferedReader(new FileReader(logFile));
565 try { 558 try {
566 String logLine; 559 String logLine;
567 while ((logLine = logReader.readLine()) != null) { 560 while ((logLine = logReader.readLine()) != null) {
568 if (logLine.contains("\"hex_encoded_bytes\"")) { 561 if (logLine.contains("\"hex_encoded_bytes\"")) {
569 return true; 562 return true;
570 } 563 }
571 } 564 }
572 return false; 565 return false;
573 } finally { 566 } finally {
574 logReader.close(); 567 logReader.close();
575 } 568 }
576 } 569 }
577 570
578 private void enableCache(int cacheType) throws Exception { 571 private void enableCache(int cacheType) throws Exception {
579 String cacheTypeString = ""; 572 String cacheTypeString = "";
580 if (cacheType == UrlRequestContextConfig.HTTP_CACHE_DISK) { 573 if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK) {
581 cacheTypeString = CronetTestActivity.CACHE_DISK; 574 cacheTypeString = CronetTestActivity.CACHE_DISK;
582 } else if (cacheType == UrlRequestContextConfig.HTTP_CACHE_DISK_NO_HTTP) { 575 } else if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP) {
583 cacheTypeString = CronetTestActivity.CACHE_DISK_NO_HTTP; 576 cacheTypeString = CronetTestActivity.CACHE_DISK_NO_HTTP;
584 } else if (cacheType == UrlRequestContextConfig.HTTP_CACHE_IN_MEMORY) { 577 } else if (cacheType == CronetEngine.Builder.HTTP_CACHE_IN_MEMORY) {
585 cacheTypeString = CronetTestActivity.CACHE_IN_MEMORY; 578 cacheTypeString = CronetTestActivity.CACHE_IN_MEMORY;
586 } 579 }
587 String[] commandLineArgs = {CronetTestActivity.CACHE_KEY, cacheTypeStrin g}; 580 String[] commandLineArgs = {CronetTestActivity.CACHE_KEY, cacheTypeStrin g};
588 mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null, 581 mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null,
589 commandLineArgs); 582 commandLineArgs);
590 assertTrue(NativeTestServer.startNativeTestServer( 583 assertTrue(NativeTestServer.startNativeTestServer(
591 getInstrumentation().getTargetContext())); 584 getInstrumentation().getTargetContext()));
592 } 585 }
593 586
594 private void checkRequestCaching(String url, boolean expectCached) { 587 private void checkRequestCaching(String url, boolean expectCached) {
595 checkRequestCaching(url, expectCached, false); 588 checkRequestCaching(url, expectCached, false);
596 } 589 }
597 590
598 private void checkRequestCaching(String url, boolean expectCached, 591 private void checkRequestCaching(String url, boolean expectCached,
599 boolean disableCache) { 592 boolean disableCache) {
600 TestUrlRequestListener listener = new TestUrlRequestListener(); 593 TestUrlRequestListener listener = new TestUrlRequestListener();
601 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 594 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
602 url, listener, listener.getExecutor()); 595 url, listener, listener.getExecutor(), mActivity.mCronetEngine);
603 if (disableCache) { 596 if (disableCache) {
604 urlRequest.disableCache(); 597 urlRequestBuilder.disableCache();
605 } 598 }
606 urlRequest.start(); 599 urlRequestBuilder.build().start();
607 listener.blockForDone(); 600 listener.blockForDone();
608 assertEquals(expectCached, listener.mResponseInfo.wasCached()); 601 assertEquals(expectCached, listener.mResponseInfo.wasCached());
609 } 602 }
610 603
611 @SmallTest 604 @SmallTest
612 @Feature({"Cronet"}) 605 @Feature({"Cronet"})
613 public void testEnableHttpCacheDisabled() throws Exception { 606 public void testEnableHttpCacheDisabled() throws Exception {
614 enableCache(UrlRequestContextConfig.HTTP_CACHE_DISABLED); 607 enableCache(CronetEngine.Builder.HTTP_CACHE_DISABLED);
615 String url = NativeTestServer.getFileURL("/cacheable.txt"); 608 String url = NativeTestServer.getFileURL("/cacheable.txt");
616 checkRequestCaching(url, false); 609 checkRequestCaching(url, false);
617 checkRequestCaching(url, false); 610 checkRequestCaching(url, false);
618 checkRequestCaching(url, false); 611 checkRequestCaching(url, false);
619 } 612 }
620 613
621 @SmallTest 614 @SmallTest
622 @Feature({"Cronet"}) 615 @Feature({"Cronet"})
623 public void testEnableHttpCacheInMemory() throws Exception { 616 public void testEnableHttpCacheInMemory() throws Exception {
624 enableCache(UrlRequestContextConfig.HTTP_CACHE_IN_MEMORY); 617 enableCache(CronetEngine.Builder.HTTP_CACHE_IN_MEMORY);
625 String url = NativeTestServer.getFileURL("/cacheable.txt"); 618 String url = NativeTestServer.getFileURL("/cacheable.txt");
626 checkRequestCaching(url, false); 619 checkRequestCaching(url, false);
627 checkRequestCaching(url, true); 620 checkRequestCaching(url, true);
628 NativeTestServer.shutdownNativeTestServer(); 621 NativeTestServer.shutdownNativeTestServer();
629 checkRequestCaching(url, true); 622 checkRequestCaching(url, true);
630 } 623 }
631 624
632 @SmallTest 625 @SmallTest
633 @Feature({"Cronet"}) 626 @Feature({"Cronet"})
634 public void testEnableHttpCacheDisk() throws Exception { 627 public void testEnableHttpCacheDisk() throws Exception {
635 enableCache(UrlRequestContextConfig.HTTP_CACHE_DISK); 628 enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
636 String url = NativeTestServer.getFileURL("/cacheable.txt"); 629 String url = NativeTestServer.getFileURL("/cacheable.txt");
637 checkRequestCaching(url, false); 630 checkRequestCaching(url, false);
638 checkRequestCaching(url, true); 631 checkRequestCaching(url, true);
639 NativeTestServer.shutdownNativeTestServer(); 632 NativeTestServer.shutdownNativeTestServer();
640 checkRequestCaching(url, true); 633 checkRequestCaching(url, true);
641 } 634 }
642 635
643 @SmallTest 636 @SmallTest
644 @Feature({"Cronet"}) 637 @Feature({"Cronet"})
645 public void testEnableHttpCacheDiskNoHttp() throws Exception { 638 public void testEnableHttpCacheDiskNoHttp() throws Exception {
646 enableCache(UrlRequestContextConfig.HTTP_CACHE_DISABLED); 639 enableCache(CronetEngine.Builder.HTTP_CACHE_DISABLED);
647 String url = NativeTestServer.getFileURL("/cacheable.txt"); 640 String url = NativeTestServer.getFileURL("/cacheable.txt");
648 checkRequestCaching(url, false); 641 checkRequestCaching(url, false);
649 checkRequestCaching(url, false); 642 checkRequestCaching(url, false);
650 checkRequestCaching(url, false); 643 checkRequestCaching(url, false);
651 } 644 }
652 645
653 @SmallTest 646 @SmallTest
654 @Feature({"Cronet"}) 647 @Feature({"Cronet"})
655 public void testDisableCache() throws Exception { 648 public void testDisableCache() throws Exception {
656 enableCache(UrlRequestContextConfig.HTTP_CACHE_DISK); 649 enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
657 String url = NativeTestServer.getFileURL("/cacheable.txt"); 650 String url = NativeTestServer.getFileURL("/cacheable.txt");
658 651
659 // When cache is disabled, making a request does not write to the cache. 652 // When cache is disabled, making a request does not write to the cache.
660 checkRequestCaching(url, false, true /** disable cache */); 653 checkRequestCaching(url, false, true /** disable cache */);
661 checkRequestCaching(url, false); 654 checkRequestCaching(url, false);
662 655
663 // When cache is enabled, the second request is cached. 656 // When cache is enabled, the second request is cached.
664 checkRequestCaching(url, false, true /** disable cache */); 657 checkRequestCaching(url, false, true /** disable cache */);
665 checkRequestCaching(url, true); 658 checkRequestCaching(url, true);
666 659
667 // Shut down the server, next request should have a cached response. 660 // Shut down the server, next request should have a cached response.
668 NativeTestServer.shutdownNativeTestServer(); 661 NativeTestServer.shutdownNativeTestServer();
669 checkRequestCaching(url, true); 662 checkRequestCaching(url, true);
670 663
671 // Cache is disabled after server is shut down, request should fail. 664 // Cache is disabled after server is shut down, request should fail.
672 TestUrlRequestListener listener = new TestUrlRequestListener(); 665 TestUrlRequestListener listener = new TestUrlRequestListener();
673 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( 666 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
674 url, listener, listener.getExecutor()); 667 url, listener, listener.getExecutor(), mActivity.mCronetEngine);
675 urlRequest.disableCache(); 668 urlRequestBuilder.disableCache();
676 urlRequest.start(); 669 urlRequestBuilder.build().start();
677 listener.blockForDone(); 670 listener.blockForDone();
678 assertNotNull(listener.mError); 671 assertNotNull(listener.mError);
679 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED ", 672 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED ",
680 listener.mError.getMessage()); 673 listener.mError.getMessage());
681 } 674 }
682 675
683 @SmallTest 676 @SmallTest
684 @Feature({"Cronet"}) 677 @Feature({"Cronet"})
685 public void testEnableHttpCacheDiskNewContext() throws Exception { 678 public void testEnableHttpCacheDiskNewEngine() throws Exception {
686 enableCache(UrlRequestContextConfig.HTTP_CACHE_DISK); 679 enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
687 String url = NativeTestServer.getFileURL("/cacheable.txt"); 680 String url = NativeTestServer.getFileURL("/cacheable.txt");
688 checkRequestCaching(url, false); 681 checkRequestCaching(url, false);
689 checkRequestCaching(url, true); 682 checkRequestCaching(url, true);
690 NativeTestServer.shutdownNativeTestServer(); 683 NativeTestServer.shutdownNativeTestServer();
691 checkRequestCaching(url, true); 684 checkRequestCaching(url, true);
692 685
693 // Shutdown original context and create another that uses the same cache . 686 // Shutdown original context and create another that uses the same cache .
694 mActivity.mUrlRequestContext.shutdown(); 687 mActivity.mCronetEngine.shutdown();
695 mActivity.mUrlRequestContext = UrlRequestContext.createContext( 688 mActivity.mCronetEngine = mActivity.getCronetEngineBuilder().build();
696 getInstrumentation().getTargetContext(), mActivity.getContextCon fig());
697 checkRequestCaching(url, true); 689 checkRequestCaching(url, true);
698 } 690 }
699 691
700 @SmallTest 692 @SmallTest
701 @Feature({"Cronet"}) 693 @Feature({"Cronet"})
702 public void testInitContextAndStartRequest() { 694 public void testInitEngineAndStartRequest() {
703 CronetTestActivity activity = launchCronetTestAppAndSkipFactoryInit(); 695 CronetTestActivity activity = launchCronetTestAppAndSkipFactoryInit();
704 696
705 // Immediately make a request after initializing the context. 697 // Immediately make a request after initializing the engine.
706 UrlRequestContext requestContext = activity.initRequestContext(); 698 CronetEngine cronetEngine = activity.initCronetEngine();
707 TestUrlRequestListener listener = new TestUrlRequestListener(); 699 TestUrlRequestListener listener = new TestUrlRequestListener();
708 UrlRequest urlRequest = 700 UrlRequest.Builder urlRequestBuilder =
709 requestContext.createRequest(TEST_URL, listener, listener.getExe cutor()); 701 new UrlRequest.Builder(TEST_URL, listener, listener.getExecutor( ), cronetEngine);
710 urlRequest.start(); 702 urlRequestBuilder.build().start();
711 listener.blockForDone(); 703 listener.blockForDone();
712 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); 704 assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
713 } 705 }
714 706
715 @SmallTest 707 @SmallTest
716 @Feature({"Cronet"}) 708 @Feature({"Cronet"})
717 public void testInitContextStartTwoRequests() throws Exception { 709 public void testInitEngineStartTwoRequests() throws Exception {
718 CronetTestActivity activity = launchCronetTestAppAndSkipFactoryInit(); 710 CronetTestActivity activity = launchCronetTestAppAndSkipFactoryInit();
719 711
720 // Make two requests after initializing the context. 712 // Make two requests after initializing the context.
721 UrlRequestContext requestContext = activity.initRequestContext(); 713 CronetEngine cronetEngine = activity.initCronetEngine();
722 int[] statusCodes = {0, 0}; 714 int[] statusCodes = {0, 0};
723 String[] urls = {TEST_URL, URL_404}; 715 String[] urls = {TEST_URL, URL_404};
724 for (int i = 0; i < 2; i++) { 716 for (int i = 0; i < 2; i++) {
725 TestUrlRequestListener listener = new TestUrlRequestListener(); 717 TestUrlRequestListener listener = new TestUrlRequestListener();
726 UrlRequest urlRequest = 718 UrlRequest.Builder urlRequestBuilder =
727 requestContext.createRequest(urls[i], listener, listener.get Executor()); 719 new UrlRequest.Builder(urls[i], listener, listener.getExecut or(), cronetEngine);
728 urlRequest.start(); 720 urlRequestBuilder.build().start();
729 listener.blockForDone(); 721 listener.blockForDone();
730 statusCodes[i] = listener.mResponseInfo.getHttpStatusCode(); 722 statusCodes[i] = listener.mResponseInfo.getHttpStatusCode();
731 } 723 }
732 assertEquals(200, statusCodes[0]); 724 assertEquals(200, statusCodes[0]);
733 assertEquals(404, statusCodes[1]); 725 assertEquals(404, statusCodes[1]);
734 } 726 }
735 727
736 @SmallTest 728 @SmallTest
737 @Feature({"Cronet"}) 729 @Feature({"Cronet"})
738 public void testInitTwoContextsSimultaneously() throws Exception { 730 public void testInitTwoEnginesSimultaneously() throws Exception {
739 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t(); 731 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t();
740 732
741 // Threads will block on runBlocker to ensure simultaneous execution. 733 // Threads will block on runBlocker to ensure simultaneous execution.
742 ConditionVariable runBlocker = new ConditionVariable(false); 734 ConditionVariable runBlocker = new ConditionVariable(false);
743 RequestThread thread1 = new RequestThread(activity, TEST_URL, runBlocker ); 735 RequestThread thread1 = new RequestThread(activity, TEST_URL, runBlocker );
744 RequestThread thread2 = new RequestThread(activity, URL_404, runBlocker) ; 736 RequestThread thread2 = new RequestThread(activity, URL_404, runBlocker) ;
745 737
746 thread1.start(); 738 thread1.start();
747 thread2.start(); 739 thread2.start();
748 runBlocker.open(); 740 runBlocker.open();
749 thread1.join(); 741 thread1.join();
750 thread2.join(); 742 thread2.join();
751 assertEquals(200, thread1.mListener.mResponseInfo.getHttpStatusCode()); 743 assertEquals(200, thread1.mListener.mResponseInfo.getHttpStatusCode());
752 assertEquals(404, thread2.mListener.mResponseInfo.getHttpStatusCode()); 744 assertEquals(404, thread2.mListener.mResponseInfo.getHttpStatusCode());
753 } 745 }
754 746
755 @SmallTest 747 @SmallTest
756 @Feature({"Cronet"}) 748 @Feature({"Cronet"})
757 public void testInitTwoContextsInSequence() throws Exception { 749 public void testInitTwoEnginesInSequence() throws Exception {
758 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t(); 750 final CronetTestActivity activity = launchCronetTestAppAndSkipFactoryIni t();
759 751
760 ConditionVariable runBlocker = new ConditionVariable(true); 752 ConditionVariable runBlocker = new ConditionVariable(true);
761 RequestThread thread1 = new RequestThread(activity, TEST_URL, runBlocker ); 753 RequestThread thread1 = new RequestThread(activity, TEST_URL, runBlocker );
762 RequestThread thread2 = new RequestThread(activity, URL_404, runBlocker) ; 754 RequestThread thread2 = new RequestThread(activity, URL_404, runBlocker) ;
763 755
764 thread1.start(); 756 thread1.start();
765 thread1.join(); 757 thread1.join();
766 thread2.start(); 758 thread2.start();
767 thread2.join(); 759 thread2.join();
768 assertEquals(200, thread1.mListener.mResponseInfo.getHttpStatusCode()); 760 assertEquals(200, thread1.mListener.mResponseInfo.getHttpStatusCode());
769 assertEquals(404, thread2.mListener.mResponseInfo.getHttpStatusCode()); 761 assertEquals(404, thread2.mListener.mResponseInfo.getHttpStatusCode());
770 } 762 }
771 763
772 @SmallTest 764 @SmallTest
773 @Feature({"Cronet"}) 765 @Feature({"Cronet"})
774 public void testInitDifferentContexts() throws Exception { 766 public void testInitDifferentEngines() throws Exception {
775 // Test that concurrently instantiating Cronet context's upon various 767 // Test that concurrently instantiating Cronet context's upon various
776 // different versions of the same Android Context does not cause crashes 768 // different versions of the same Android Context does not cause crashes
777 // like crbug.com/453845 769 // like crbug.com/453845
778 mActivity = launchCronetTestApp(); 770 mActivity = launchCronetTestApp();
779 CronetUrlRequestContext firstContext = 771 CronetEngine firstEngine =
780 new CronetUrlRequestContext(mActivity, mActivity.getContextConfi g()); 772 new CronetUrlRequestContext(mActivity.createCronetEngineBuilder( mActivity));
781 CronetUrlRequestContext secondContext = new CronetUrlRequestContext( 773 CronetEngine secondEngine = new CronetUrlRequestContext(
782 mActivity.getApplicationContext(), mActivity.getContextConfig()) ; 774 mActivity.createCronetEngineBuilder(mActivity.getApplicationCont ext()));
783 CronetUrlRequestContext thirdContext = new CronetUrlRequestContext( 775 CronetEngine thirdEngine = new CronetUrlRequestContext(
784 new ContextWrapper(mActivity), mActivity.getContextConfig()); 776 mActivity.createCronetEngineBuilder(new ContextWrapper(mActivity )));
785 firstContext.shutdown(); 777 firstEngine.shutdown();
786 secondContext.shutdown(); 778 secondEngine.shutdown();
787 thirdContext.shutdown(); 779 thirdEngine.shutdown();
788 } 780 }
789 } 781 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698