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

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

Issue 1417973002: [Cronet] Switch from InstrumentationTest to junit (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address Helen'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
(Empty)
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
3 // found in the LICENSE file.
4
5 package org.chromium.net;
6
7 import android.app.Activity;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.os.Environment;
12
13 import static junit.framework.Assert.assertEquals;
14 import static junit.framework.Assert.assertTrue;
15
16 import org.chromium.base.Log;
17 import org.chromium.base.PathUtils;
18 import org.chromium.base.annotations.SuppressFBWarnings;
19 import org.chromium.net.urlconnection.CronetURLStreamHandlerFactory;
20
21 import java.io.ByteArrayInputStream;
22 import java.io.File;
23 import java.io.InputStream;
24
25 import java.nio.channels.Channels;
26 import java.nio.channels.ReadableByteChannel;
27 import java.util.HashMap;
28
29 /**
30 * Activity for managing the Cronet Test.
31 */
32 @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
33 public class CronetTestActivity extends Activity {
34 private static final String TAG = "CronetTestActivity";
35
36 public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs";
37 public static final String POST_DATA_KEY = "postData";
38 public static final String CONFIG_KEY = "config";
39 public static final String CACHE_KEY = "cache";
40 public static final String SDCH_KEY = "sdch";
41
42 public static final String LIBRARY_INIT_KEY = "libraryInit";
43 /**
44 * Skips library initialization.
45 */
46 public static final String LIBRARY_INIT_SKIP = "skip";
47
48 // Uses disk cache.
49 public static final String CACHE_DISK = "disk";
50
51 // Uses disk cache but does not store http data.
52 public static final String CACHE_DISK_NO_HTTP = "diskNoHttp";
53
54 // Uses in-memory cache.
55 public static final String CACHE_IN_MEMORY = "memory";
56
57 // Enables Sdch.
58 public static final String SDCH_ENABLE = "enable";
59
60 /**
61 * Initializes Cronet Async API only.
62 */
63 public static final String LIBRARY_INIT_CRONET_ONLY = "cronetOnly";
64
65 /**
66 * Initializes Cronet HttpURLConnection Wrapper API.
67 */
68 public static final String LIBRARY_INIT_WRAPPER = "wrapperOnly";
69
70 public CronetURLStreamHandlerFactory mStreamHandlerFactory;
71 public CronetEngine mCronetEngine;
72 HttpUrlRequestFactory mRequestFactory;
73 @SuppressFBWarnings("URF_UNREAD_FIELD")
74 HistogramManager mHistogramManager;
75
76 String mUrl;
77
78 boolean mLoading = false;
79
80 int mHttpStatusCode = 0;
81
82 // CronetEngine.Builder used for this activity.
83 private CronetEngine.Builder mCronetEngineBuilder;
84
85 class TestHttpUrlRequestListener implements HttpUrlRequestListener {
86 public TestHttpUrlRequestListener() {
87 }
88
89 @Override
90 public void onResponseStarted(HttpUrlRequest request) {
91 mHttpStatusCode = request.getHttpStatusCode();
92 }
93
94 @Override
95 public void onRequestComplete(HttpUrlRequest request) {
96 mLoading = false;
97 }
98 }
99
100 @Override
101 protected void onCreate(final Bundle savedInstanceState) {
102 super.onCreate(savedInstanceState);
103 prepareTestStorage();
104
105 // Print out extra arguments passed in starting this activity.
106 Intent intent = getIntent();
107 Bundle extras = intent.getExtras();
108 Log.i(TAG, "Cronet extras: " + extras);
109 if (extras != null) {
110 String[] commandLine = extras.getStringArray(COMMAND_LINE_ARGS_KEY);
111 if (commandLine != null) {
112 assertEquals(0, commandLine.length % 2);
113 for (int i = 0; i < commandLine.length / 2; i++) {
114 Log.i(TAG, "Cronet commandLine %s = %s", commandLine[i * 2],
115 commandLine[i * 2 + 1]);
116 }
117 }
118 }
119
120 // Initializes CronetEngine.Builder from commandLine args.
121 mCronetEngineBuilder = initializeCronetEngineBuilder();
122 Log.i(TAG, "Using Config: " + mCronetEngineBuilder.toString());
123
124 String initString = getCommandLineArg(LIBRARY_INIT_KEY);
125 if (LIBRARY_INIT_SKIP.equals(initString)) {
126 return;
127 }
128
129 mCronetEngine = initCronetEngine();
130
131 if (LIBRARY_INIT_WRAPPER.equals(initString)) {
132 mStreamHandlerFactory = new CronetURLStreamHandlerFactory(mCronetEng ine);
133 }
134
135 mHistogramManager = HistogramManager.createHistogramManager();
136
137 if (LIBRARY_INIT_CRONET_ONLY.equals(initString)) {
138 return;
139 }
140
141 mRequestFactory = initRequestFactory();
142 String appUrl = getUrlFromIntent(getIntent());
143 if (appUrl != null) {
144 startWithURL(appUrl);
145 }
146 }
147
148 /**
149 * Prepares the path for the test storage (http cache, QUIC server info).
150 */
151 private void prepareTestStorage() {
152 File storage = new File(getTestStorage());
153 if (storage.exists()) {
154 assertTrue(recursiveDelete(storage));
155 }
156 assertTrue(storage.mkdir());
157 }
158
159 String getTestStorage() {
160 return PathUtils.getDataDirectory(getApplicationContext()) + "/test_stor age";
161 }
162
163 @SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
164 private boolean recursiveDelete(File path) {
165 if (path.isDirectory()) {
166 for (File c : path.listFiles()) {
167 if (!recursiveDelete(c)) {
168 return false;
169 }
170 }
171 }
172 return path.delete();
173 }
174
175 CronetEngine.Builder getCronetEngineBuilder() {
176 return mCronetEngineBuilder;
177 }
178
179 private CronetEngine.Builder initializeCronetEngineBuilder() {
180 return createCronetEngineBuilder(this);
181 }
182
183 CronetEngine.Builder createCronetEngineBuilder(Context context) {
184 CronetEngine.Builder cronetEngineBuilder = new CronetEngine.Builder(cont ext);
185 cronetEngineBuilder.enableHTTP2(true).enableQUIC(true);
186
187 // Override config if it is passed from the launcher.
188 String configString = getCommandLineArg(CONFIG_KEY);
189 if (configString != null) {
190 try {
191 cronetEngineBuilder = new CronetEngine.Builder(this, configStrin g);
192 } catch (org.json.JSONException e) {
193 Log.e(TAG, "Invalid Config.", e);
194 finish();
195 return null;
196 }
197 }
198
199 String cacheString = getCommandLineArg(CACHE_KEY);
200 if (CACHE_DISK.equals(cacheString)) {
201 cronetEngineBuilder.setStoragePath(getTestStorage());
202 cronetEngineBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_ DISK, 1000 * 1024);
203 } else if (CACHE_DISK_NO_HTTP.equals(cacheString)) {
204 cronetEngineBuilder.setStoragePath(getTestStorage());
205 cronetEngineBuilder.enableHttpCache(
206 CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1000 * 1024);
207 } else if (CACHE_IN_MEMORY.equals(cacheString)) {
208 cronetEngineBuilder.enableHttpCache(
209 CronetEngine.Builder.HTTP_CACHE_IN_MEMORY, 100 * 1024);
210 }
211
212 String sdchString = getCommandLineArg(SDCH_KEY);
213 if (SDCH_ENABLE.equals(sdchString)) {
214 cronetEngineBuilder.enableSDCH(true);
215 }
216
217 // Setting this here so it isn't overridden on the command line
218 cronetEngineBuilder.setLibraryName("cronet_tests");
219 return cronetEngineBuilder;
220 }
221
222 // Helper function to initialize Cronet engine. Also used in testing.
223 public CronetEngine initCronetEngine() {
224 return mCronetEngineBuilder.build();
225 }
226
227 // Helper function to initialize request factory. Also used in testing.
228 public HttpUrlRequestFactory initRequestFactory() {
229 return HttpUrlRequestFactory.createFactory(this, mCronetEngineBuilder);
230 }
231
232 private static String getUrlFromIntent(Intent intent) {
233 return intent != null ? intent.getDataString() : null;
234 }
235
236 private String getCommandLineArg(String key) {
237 Intent intent = getIntent();
238 Bundle extras = intent.getExtras();
239 if (extras != null) {
240 String[] commandLine = extras.getStringArray(COMMAND_LINE_ARGS_KEY);
241 if (commandLine != null) {
242 for (int i = 0; i < commandLine.length; ++i) {
243 if (commandLine[i].equals(key)) {
244 return commandLine[++i];
245 }
246 }
247 }
248 }
249 return null;
250 }
251
252 private void applyCommandLineToHttpUrlRequest(HttpUrlRequest request) {
253 String postData = getCommandLineArg(POST_DATA_KEY);
254 if (postData != null) {
255 InputStream dataStream = new ByteArrayInputStream(
256 postData.getBytes());
257 ReadableByteChannel dataChannel = Channels.newChannel(dataStream);
258 request.setUploadChannel("text/plain", dataChannel,
259 postData.length());
260 request.setHttpMethod("POST");
261 }
262 }
263
264 public void startWithURL(String url) {
265 Log.i(TAG, "Cronet started: " + url);
266 mUrl = url;
267 mLoading = true;
268
269 HashMap<String, String> headers = new HashMap<String, String>();
270 HttpUrlRequestListener listener = new TestHttpUrlRequestListener();
271 HttpUrlRequest request = mRequestFactory.createRequest(
272 url, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listener);
273 applyCommandLineToHttpUrlRequest(request);
274 request.start();
275 }
276
277 public String getUrl() {
278 return mUrl;
279 }
280
281 public boolean isLoading() {
282 return mLoading;
283 }
284
285 public int getHttpStatusCode() {
286 return mHttpStatusCode;
287 }
288
289 public void startNetLog() {
290 if (mRequestFactory != null) {
291 mRequestFactory.startNetLogToFile(Environment.getExternalStorageDire ctory().getPath()
292 + "/cronet_sample_netlog_old_api.json",
293 false);
294 }
295 if (mCronetEngine != null) {
296 mCronetEngine.startNetLogToFile(Environment.getExternalStorageDirect ory().getPath()
297 + "/cronet_sample_netlog_new_api.json",
298 false);
299 }
300 }
301
302 public void stopNetLog() {
303 if (mRequestFactory != null) {
304 mRequestFactory.stopNetLog();
305 }
306 if (mCronetEngine != null) {
307 mCronetEngine.stopNetLog();
308 }
309 }
310 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698