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

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

Issue 1133883002: [Cronet] Enable persistence mode for Sdch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quic_server_remove_loop
Patch Set: Addressed comments Created 5 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.os.ConditionVariable;
7 import android.test.suitebuilder.annotation.SmallTest; 8 import android.test.suitebuilder.annotation.SmallTest;
8 9
10 import org.chromium.base.Log;
9 import org.chromium.base.test.util.Feature; 11 import org.chromium.base.test.util.Feature;
12 import org.chromium.net.SdchTestUtil.SdchObserver;
10 13
14 import java.io.BufferedReader;
15 import java.io.FileReader;
16 import java.io.IOException;
17 import java.util.ArrayList;
11 import java.util.Arrays; 18 import java.util.Arrays;
12 import java.util.HashMap; 19 import java.util.HashMap;
20 import java.util.List;
13 import java.util.Map; 21 import java.util.Map;
14 22
15 /** 23 /**
16 * Tests Sdch support. 24 * Tests Sdch support.
17 */ 25 */
18 public class SdchTest extends CronetTestBase { 26 public class SdchTest extends CronetTestBase {
27 private static final String TAG = Log.makeTag("SdchTest");
19 private CronetTestActivity mActivity; 28 private CronetTestActivity mActivity;
20 29
21 private void setUp(boolean enableSdch) { 30 private enum SDCH {
22 UrlRequestContextConfig config = new UrlRequestContextConfig(); 31 ENABLED,
23 config.enableSDCH(enableSdch); 32 DISABLED,
24 config.setLibraryName("cronet_tests"); 33 }
25 config.enableHttpCache(UrlRequestContextConfig.HttpCache.IN_MEMORY, 100 * 1024);
26 String[] commandLineArgs = {CronetTestActivity.CONFIG_KEY, config.toStri ng()};
27 mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLi neArgs);
28 mActivity.startNetLog();
29 34
30 // Registers custom DNS mapping for legacy ChromiumUrlRequestFactory. 35 private enum API {
31 ChromiumUrlRequestFactory factory = (ChromiumUrlRequestFactory) mActivit y.mRequestFactory; 36 LEGACY,
32 long legacyAdapter = factory.getRequestContext().getUrlRequestContextAda pterForTesting(); 37 ASYNC,
33 assertTrue(legacyAdapter != 0); 38 }
34 NativeTestServer.registerHostResolverProc(legacyAdapter, true);
35 39
36 // Registers custom DNS mapping for CronetUrlRequestContext. 40 private void setUp(SDCH setting, API api) {
37 CronetUrlRequestContext requestContext = 41 List<String> commandLineArgs = new ArrayList<String>();
38 (CronetUrlRequestContext) mActivity.mUrlRequestContext; 42 commandLineArgs.add(CronetTestActivity.CACHE_KEY);
39 long adapter = requestContext.getUrlRequestContextAdapter(); 43 commandLineArgs.add(CronetTestActivity.CACHE_DISK);
40 assertTrue(adapter != 0); 44 if (setting == SDCH.ENABLED) {
41 NativeTestServer.registerHostResolverProc(adapter, false); 45 commandLineArgs.add(CronetTestActivity.SDCH_KEY);
46 commandLineArgs.add("enable");
47 }
42 48
43 // Starts NativeTestServer. 49 String[] args = new String[commandLineArgs.size()];
50 mActivity =
51 launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineAr gs.toArray(args));
52 long urlRequestContextAdapter = (api == API.LEGACY)
53 ? getRequestAdapter((ChromiumUrlRequestFactory) mActivity.mReque stFactory)
54 : getRequestAdapter((CronetUrlRequestContext) mActivity.mUrlRequ estContext);
55 NativeTestServer.registerHostResolverProc(urlRequestContextAdapter, api == API.LEGACY);
56 // Start NativeTestServer.
44 assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().g etTargetContext())); 57 assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().g etTargetContext()));
45 } 58 }
46 59
47 @Override 60 @Override
48 protected void tearDown() throws Exception { 61 protected void tearDown() throws Exception {
49 NativeTestServer.shutdownNativeTestServer(); 62 NativeTestServer.shutdownNativeTestServer();
50 mActivity.stopNetLog();
51 super.tearDown(); 63 super.tearDown();
52 } 64 }
53 65
54 @SmallTest 66 @SmallTest
55 @Feature({"Cronet"}) 67 @Feature({"Cronet"})
56 public void testSdchEnabled_LegacyAPI() throws Exception { 68 public void testSdchEnabled_LegacyAPI() throws Exception {
57 setUp(true); 69 setUp(SDCH.ENABLED, API.LEGACY);
70 long requestAdapter =
71 getRequestAdapter((ChromiumUrlRequestFactory) mActivity.mRequest Factory);
72 Observer observer = addObserver(requestAdapter, API.LEGACY);
58 // Make a request to /sdch/index which advertises the dictionary. 73 // Make a request to /sdch/index which advertises the dictionary.
59 TestHttpUrlRequestListener listener1 = startAndWaitForComplete_LegacyAPI ( 74 TestHttpUrlRequestListener listener1 =
60 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); 75 startAndWaitForComplete_LegacyAPI(mActivity.mRequestFactory,
76 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O" );
61 assertEquals(200, listener1.mHttpStatusCode); 77 assertEquals(200, listener1.mHttpStatusCode);
62 assertEquals("This is an index page.\n", listener1.mResponseAsString); 78 assertEquals("This is an index page.\n", listener1.mResponseAsString);
63 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), 79 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"),
64 listener1.mResponseHeaders.get("Get-Dictionary")); 80 listener1.mResponseHeaders.get("Get-Dictionary"));
65 81
66 waitForDictionaryAdded("LeQxM80O", true); 82 observer.waitForDictionaryAdded("LeQxM80O");
67 83
68 // Make a request to fetch encoded response at /sdch/test. 84 // Make a request to fetch encoded response at /sdch/test.
69 TestHttpUrlRequestListener listener2 = 85 TestHttpUrlRequestListener listener2 = startAndWaitForComplete_LegacyAPI (
70 startAndWaitForComplete_LegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test"); 86 mActivity.mRequestFactory, NativeTestServer.getSdchURL() + "/sdc h/test");
71 assertEquals(200, listener2.mHttpStatusCode); 87 assertEquals(200, listener2.mHttpStatusCode);
72 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2 .mResponseAsString); 88 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2 .mResponseAsString);
89 removeObserver(requestAdapter, observer, API.LEGACY);
90
91 String dictUrl = NativeTestServer.getSdchURL() + "/sdch/dict/LeQxM80O";
92 // Poll until pref file contains the latest write.
93 while (true) {
94 Thread.sleep(10000);
95 if (fileContainsString("local_prefs_legacy.json", dictUrl)) {
96 break;
97 }
98 Log.e(TAG, "Waiting for pref file to be updated...");
99 }
100
101 // Test persistence.
102 HttpUrlRequestFactory factory = HttpUrlRequestFactory.createFactory(
mef 2015/05/19 21:39:44 This seems a bit dangerous. Is previous instance s
xunjieli 2015/05/20 15:50:41 Yes they can, if the old instance is still doing s
103 getInstrumentation().getTargetContext(), mActivity.getContextCon fig());
104
105 long newRequestAdapter = getRequestAdapter((ChromiumUrlRequestFactory) f actory);
106 NativeTestServer.registerHostResolverProc(newRequestAdapter, true);
107 Observer newObserver = addObserver(newRequestAdapter, API.LEGACY);
108
109 newObserver.waitForDictionaryAdded("LeQxM80O");
mef 2015/05/19 21:39:43 Could there be a race, like dictionary being added
xunjieli 2015/05/20 15:50:41 If a ConditionVariable's open() is called before b
110
111 // Make a request to fetch encoded response at /sdch/test.
112 TestHttpUrlRequestListener listener3 = startAndWaitForComplete_LegacyAPI (
113 factory, NativeTestServer.getSdchURL() + "/sdch/test");
114 assertEquals(200, listener3.mHttpStatusCode);
115 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener3 .mResponseAsString);
116 removeObserver(newRequestAdapter, newObserver, API.LEGACY);
73 } 117 }
74 118
75 @SmallTest 119 @SmallTest
76 @Feature({"Cronet"}) 120 @Feature({"Cronet"})
77 public void testSdchDisabled_LegacyAPI() throws Exception { 121 public void testSdchDisabled_LegacyAPI() throws Exception {
78 setUp(false); 122 setUp(SDCH.DISABLED, API.LEGACY);
79 // Make a request to /sdch/index. 123 // Make a request to /sdch/index.
80 // Since Sdch is not enabled, no dictionary should be advertised. 124 // Since Sdch is not enabled, no dictionary should be advertised.
81 TestHttpUrlRequestListener listener = startAndWaitForComplete_LegacyAPI( 125 TestHttpUrlRequestListener listener =
82 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); 126 startAndWaitForComplete_LegacyAPI(mActivity.mRequestFactory,
127 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O" );
83 assertEquals(200, listener.mHttpStatusCode); 128 assertEquals(200, listener.mHttpStatusCode);
84 assertEquals("This is an index page.\n", listener.mResponseAsString); 129 assertEquals("This is an index page.\n", listener.mResponseAsString);
85 assertEquals(null, listener.mResponseHeaders.get("Get-Dictionary")); 130 assertEquals(null, listener.mResponseHeaders.get("Get-Dictionary"));
86 } 131 }
87 132
88 @SmallTest 133 @SmallTest
89 @Feature({"Cronet"}) 134 @Feature({"Cronet"})
90 public void testDictionaryNotFound_LegacyAPI() throws Exception { 135 public void testDictionaryNotFound_LegacyAPI() throws Exception {
91 setUp(true); 136 setUp(SDCH.ENABLED, API.LEGACY);
92 // Make a request to /sdch/index which advertises a bad dictionary that 137 // Make a request to /sdch/index which advertises a bad dictionary that
93 // does not exist. 138 // does not exist.
94 TestHttpUrlRequestListener listener1 = startAndWaitForComplete_LegacyAPI ( 139 TestHttpUrlRequestListener listener1 =
95 NativeTestServer.getSdchURL() + "/sdch/index?q=NotFound"); 140 startAndWaitForComplete_LegacyAPI(mActivity.mRequestFactory,
141 NativeTestServer.getSdchURL() + "/sdch/index?q=NotFound" );
96 assertEquals(200, listener1.mHttpStatusCode); 142 assertEquals(200, listener1.mHttpStatusCode);
97 assertEquals("This is an index page.\n", listener1.mResponseAsString); 143 assertEquals("This is an index page.\n", listener1.mResponseAsString);
98 assertEquals(Arrays.asList("/sdch/dict/NotFound"), 144 assertEquals(Arrays.asList("/sdch/dict/NotFound"),
99 listener1.mResponseHeaders.get("Get-Dictionary")); 145 listener1.mResponseHeaders.get("Get-Dictionary"));
100 146
101 waitForDictionaryAdded("NotFound", true); 147 // Make a request to fetch /sdch/test, and make sure request succeeds.
102 148 TestHttpUrlRequestListener listener2 = startAndWaitForComplete_LegacyAPI (
103 // Make a request to fetch /sdch/test, and make sure Sdch encoding is no t used. 149 mActivity.mRequestFactory, NativeTestServer.getSdchURL() + "/sdc h/test");
104 TestHttpUrlRequestListener listener2 =
105 startAndWaitForComplete_LegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test");
106 assertEquals(200, listener2.mHttpStatusCode); 150 assertEquals(200, listener2.mHttpStatusCode);
107 assertEquals("Sdch is not used.\n", listener2.mResponseAsString); 151 assertEquals("Sdch is not used.\n", listener2.mResponseAsString);
108 } 152 }
109 153
110 @SmallTest 154 @SmallTest
111 @Feature({"Cronet"}) 155 @Feature({"Cronet"})
112 public void testSdchEnabled() throws Exception { 156 public void testSdchEnabled() throws Exception {
113 setUp(true); 157 setUp(SDCH.ENABLED, API.ASYNC);
158 long requestAdapter =
159 getRequestAdapter((CronetUrlRequestContext) mActivity.mUrlReques tContext);
160 Observer observer = addObserver(requestAdapter, API.ASYNC);
114 // Make a request to /sdch which advertises the dictionary. 161 // Make a request to /sdch which advertises the dictionary.
115 TestUrlRequestListener listener1 = 162 TestUrlRequestListener listener1 = startAndWaitForComplete(mActivity.mUr lRequestContext,
116 startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/i ndex?q=LeQxM80O"); 163 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O");
117 assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); 164 assertEquals(200, listener1.mResponseInfo.getHttpStatusCode());
118 assertEquals("This is an index page.\n", listener1.mResponseAsString); 165 assertEquals("This is an index page.\n", listener1.mResponseAsString);
119 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), 166 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"),
120 listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); 167 listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary"));
121 168
122 waitForDictionaryAdded("LeQxM80O", false); 169 observer.waitForDictionaryAdded("LeQxM80O");
123 170
124 // Make a request to fetch encoded response at /sdch/test. 171 // Make a request to fetch encoded response at /sdch/test.
125 TestUrlRequestListener listener2 = 172 TestUrlRequestListener listener2 = startAndWaitForComplete(
126 startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/t est"); 173 mActivity.mUrlRequestContext, NativeTestServer.getSdchURL() + "/ sdch/test");
127 assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); 174 assertEquals(200, listener2.mResponseInfo.getHttpStatusCode());
128 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2 .mResponseAsString); 175 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2 .mResponseAsString);
176 removeObserver(requestAdapter, observer, API.ASYNC);
177
178 // Wait for a bit until SimpleCache finished closing entries before
179 // calling shutdown on the UrlRequestContext.
180 // TODO(xunjieli): Remove once crbug.com/486120 is fixed.
181 Thread.sleep(5000);
182 mActivity.mUrlRequestContext.shutdown();
183
184 // Shutting down the context will make JsonPrefStore to flush pending
185 // writes to disk.
186 String dictUrl = NativeTestServer.getSdchURL() + "/sdch/dict/LeQxM80O";
187 assertTrue(fileContainsString("local_prefs.json", dictUrl));
188
189 // Test persistence.
190 CronetUrlRequestContext newContext = new CronetUrlRequestContext(
191 getInstrumentation().getTargetContext(), mActivity.getContextCon fig());
192
193 long newRequestAdapter = getRequestAdapter(newContext);
194 NativeTestServer.registerHostResolverProc(newRequestAdapter, false);
195 Observer newObserver = addObserver(newRequestAdapter, API.ASYNC);
196
197 newObserver.waitForDictionaryAdded("LeQxM80O");
198
199 // Make a request to fetch encoded response at /sdch/test.
200 TestUrlRequestListener listener3 =
201 startAndWaitForComplete(newContext, NativeTestServer.getSdchURL( ) + "/sdch/test");
202 assertEquals(200, listener3.mResponseInfo.getHttpStatusCode());
203 assertEquals("The quick brown fox jumps over the lazy dog.\n", listener3 .mResponseAsString);
204 removeObserver(newRequestAdapter, newObserver, API.ASYNC);
129 } 205 }
130 206
131 @SmallTest 207 @SmallTest
132 @Feature({"Cronet"}) 208 @Feature({"Cronet"})
133 public void testSdchDisabled() throws Exception { 209 public void testSdchDisabled() throws Exception {
134 setUp(false); 210 setUp(SDCH.DISABLED, API.ASYNC);
135 // Make a request to /sdch. 211 // Make a request to /sdch.
136 // Since Sdch is not enabled, no dictionary should be advertised. 212 // Since Sdch is not enabled, no dictionary should be advertised.
137 TestUrlRequestListener listener = 213 TestUrlRequestListener listener = startAndWaitForComplete(mActivity.mUrl RequestContext,
138 startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/i ndex?q=LeQxM80O"); 214 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O");
139 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); 215 assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
140 assertEquals("This is an index page.\n", listener.mResponseAsString); 216 assertEquals("This is an index page.\n", listener.mResponseAsString);
141 assertEquals(null, listener.mResponseInfo.getAllHeaders().get("Get-Dicti onary")); 217 assertEquals(null, listener.mResponseInfo.getAllHeaders().get("Get-Dicti onary"));
142 } 218 }
143 219
144 @SmallTest 220 @SmallTest
145 @Feature({"Cronet"}) 221 @Feature({"Cronet"})
146 public void testDictionaryNotFound() throws Exception { 222 public void testDictionaryNotFound() throws Exception {
147 setUp(true); 223 setUp(SDCH.ENABLED, API.ASYNC);
148 // Make a request to /sdch/index which advertises a bad dictionary that 224 // Make a request to /sdch/index which advertises a bad dictionary that
149 // does not exist. 225 // does not exist.
150 TestUrlRequestListener listener1 = 226 TestUrlRequestListener listener1 = startAndWaitForComplete(mActivity.mUr lRequestContext,
151 startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/i ndex?q=NotFound"); 227 NativeTestServer.getSdchURL() + "/sdch/index?q=NotFound");
152 assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); 228 assertEquals(200, listener1.mResponseInfo.getHttpStatusCode());
153 assertEquals("This is an index page.\n", listener1.mResponseAsString); 229 assertEquals("This is an index page.\n", listener1.mResponseAsString);
154 assertEquals(Arrays.asList("/sdch/dict/NotFound"), 230 assertEquals(Arrays.asList("/sdch/dict/NotFound"),
155 listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); 231 listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary"));
156 232
157 waitForDictionaryAdded("NotFound", false);
158
159 // Make a request to fetch /sdch/test, and make sure Sdch encoding is no t used. 233 // Make a request to fetch /sdch/test, and make sure Sdch encoding is no t used.
160 TestUrlRequestListener listener2 = 234 TestUrlRequestListener listener2 = startAndWaitForComplete(
161 startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/t est"); 235 mActivity.mUrlRequestContext, NativeTestServer.getSdchURL() + "/ sdch/test");
162 assertEquals(200, listener2.mResponseInfo.getHttpStatusCode()); 236 assertEquals(200, listener2.mResponseInfo.getHttpStatusCode());
163 assertEquals("Sdch is not used.\n", listener2.mResponseAsString); 237 assertEquals("Sdch is not used.\n", listener2.mResponseAsString);
164 } 238 }
165 239
166 /** 240 private static class Observer implements SdchObserver {
167 * Helper method to wait for dictionary to be fetched and added to the list of available 241 ConditionVariable mBlock = new ConditionVariable();
168 * dictionaries. 242 private String mLastAddedDict;
169 */ 243
170 private void waitForDictionaryAdded(String dict, boolean isLegacyAPI) throws Exception { 244 @Override
171 // Since Http cache is enabled, making a request to the dictionary expli citly will 245 public void onDictionaryAdded(String url) {
172 // be served from the cache. 246 Log.i(TAG, "Dictionary %s is added ", url);
173 String url = NativeTestServer.getSdchURL() + "/sdch/dict/" + dict; 247 mLastAddedDict = url;
174 if (isLegacyAPI) { 248 mBlock.open();
175 TestHttpUrlRequestListener listener = startAndWaitForComplete_Legacy API(url);
176 if (dict.equals("NotFound")) {
177 assertEquals(404, listener.mHttpStatusCode);
178 } else {
179 assertEquals(200, listener.mHttpStatusCode);
180 assertTrue(listener.mWasCached);
181 }
182 } else {
183 TestUrlRequestListener listener = startAndWaitForComplete(url);
184 if (dict.equals("NotFound")) {
185 assertEquals(404, listener.mResponseInfo.getHttpStatusCode());
186 } else {
187 assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
188 assertTrue(listener.mResponseInfo.wasCached());
189 }
190 } 249 }
191 // Now wait for dictionary to be added to the manager, which occurs 250
192 // asynchronously. 251 public void waitForDictionaryAdded(String dictName) {
193 // TODO(xunjieli): Rather than setting an arbitrary delay, consider 252 mBlock.block();
194 // implementing a SdchObserver to watch for dictionary add events once 253 mBlock.close();
195 // add event is implemented in SdchObserver. 254 assertTrue(mLastAddedDict.contains(dictName));
196 Thread.sleep(1000); 255 }
197 } 256 }
198 257
199 private TestHttpUrlRequestListener startAndWaitForComplete_LegacyAPI(String url) 258 // Registers Observer.
200 throws Exception { 259 private Observer addObserver(long contextAdapter, API api) {
260 Observer observer = new Observer();
261 SdchTestUtil.addSdchObserver(contextAdapter, observer, api == API.LEGACY );
262 return observer;
263 }
264
265 // Unregisters Observer.
266 private void removeObserver(long contextAdapter, Observer observer, API api) {
267 SdchTestUtil.removeSdchObserver(contextAdapter, observer, api == API.LEG ACY);
268 }
269
270 private long getRequestAdapter(ChromiumUrlRequestFactory factory) {
271 return factory.getRequestContext().getUrlRequestContextAdapter();
272 }
273
274 private long getRequestAdapter(CronetUrlRequestContext requestContext) {
275 return requestContext.getUrlRequestContextAdapter();
276 }
277
278 private TestHttpUrlRequestListener startAndWaitForComplete_LegacyAPI(
279 HttpUrlRequestFactory factory, String url) throws Exception {
201 Map<String, String> headers = new HashMap<String, String>(); 280 Map<String, String> headers = new HashMap<String, String>();
202 TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); 281 TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener();
203 HttpUrlRequest request = mActivity.mRequestFactory.createRequest( 282 HttpUrlRequest request = factory.createRequest(
204 url, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listener); 283 url, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listener);
205 request.start(); 284 request.start();
206 listener.blockForComplete(); 285 listener.blockForComplete();
207 return listener; 286 return listener;
208 } 287 }
209 288
210 private TestUrlRequestListener startAndWaitForComplete(String url) throws Ex ception { 289 private TestUrlRequestListener startAndWaitForComplete(
290 UrlRequestContext requestContext, String url) throws Exception {
211 TestUrlRequestListener listener = new TestUrlRequestListener(); 291 TestUrlRequestListener listener = new TestUrlRequestListener();
212 UrlRequest request = 292 UrlRequest request = requestContext.createRequest(url, listener, listene r.getExecutor());
213 mActivity.mUrlRequestContext.createRequest(url, listener, listen er.getExecutor());
214 request.start(); 293 request.start();
215 listener.blockForDone(); 294 listener.blockForDone();
216 return listener; 295 return listener;
217 } 296 }
297
298 // Returns whether a file contains a particular string.
299 private boolean fileContainsString(String filename, String content) throws I OException {
300 BufferedReader reader =
301 new BufferedReader(new FileReader(mActivity.getTestStorage() + " /" + filename));
302 StringBuilder builder = new StringBuilder();
303 String line;
304 while ((line = reader.readLine()) != null) {
305 builder.append(line);
mef 2015/05/19 21:39:43 If we only need to look for content that doesn't s
xunjieli 2015/05/20 15:50:41 Done. You are right! that's more efficient.
306 }
307 reader.close();
308 String fileContent = builder.toString();
309 final boolean contains = fileContent.contains(content);
310 if (!contains) {
311 Log.i(TAG, "Did not find \"%s\" in file which contains \"%s\"", cont ent, fileContent);
312 }
313 return contains;
314 }
218 } 315 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698