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

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

Powered by Google App Engine
This is Rietveld 408576698