| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.os.ConditionVariable; | |
| 9 import android.os.Environment; | 8 import android.os.Environment; |
| 10 | 9 |
| 11 import static junit.framework.Assert.assertEquals; | 10 import static junit.framework.Assert.assertEquals; |
| 12 import static junit.framework.Assert.assertTrue; | 11 import static junit.framework.Assert.assertTrue; |
| 13 | 12 |
| 14 import org.chromium.base.Log; | 13 import org.chromium.base.Log; |
| 15 import org.chromium.base.PathUtils; | 14 import org.chromium.base.PathUtils; |
| 16 import org.chromium.base.annotations.SuppressFBWarnings; | 15 import org.chromium.base.annotations.SuppressFBWarnings; |
| 17 | 16 |
| 18 import java.io.ByteArrayInputStream; | |
| 19 import java.io.File; | 17 import java.io.File; |
| 20 import java.io.InputStream; | |
| 21 import java.net.URLStreamHandlerFactory; | 18 import java.net.URLStreamHandlerFactory; |
| 22 import java.nio.channels.Channels; | |
| 23 import java.nio.channels.ReadableByteChannel; | |
| 24 import java.util.HashMap; | |
| 25 | 19 |
| 26 /** | 20 /** |
| 27 * Framework for testing Cronet. | 21 * Framework for testing Cronet. |
| 28 */ | 22 */ |
| 29 @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") | 23 @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") |
| 30 public class CronetTestFramework { | 24 public class CronetTestFramework { |
| 31 private static final String TAG = "CronetTestFramework"; | 25 private static final String TAG = "CronetTestFramework"; |
| 32 | 26 |
| 33 public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs"; | 27 public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs"; |
| 34 public static final String POST_DATA_KEY = "postData"; | 28 public static final String POST_DATA_KEY = "postData"; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 48 // Enables Sdch. | 42 // Enables Sdch. |
| 49 public static final String SDCH_ENABLE = "enable"; | 43 public static final String SDCH_ENABLE = "enable"; |
| 50 | 44 |
| 51 /** | 45 /** |
| 52 * Library init type strings to use along with {@link LIBRARY_INIT_KEY}. | 46 * Library init type strings to use along with {@link LIBRARY_INIT_KEY}. |
| 53 * If unspecified, {@link LibraryInitType.CRONET} will be used. | 47 * If unspecified, {@link LibraryInitType.CRONET} will be used. |
| 54 */ | 48 */ |
| 55 public static final class LibraryInitType { | 49 public static final class LibraryInitType { |
| 56 // Initializes Cronet Async API. | 50 // Initializes Cronet Async API. |
| 57 public static final String CRONET = "cronet"; | 51 public static final String CRONET = "cronet"; |
| 58 // Initializes Cronet legacy API. | |
| 59 public static final String LEGACY = "legacy"; | |
| 60 // Initializes Cronet HttpURLConnection API. | 52 // Initializes Cronet HttpURLConnection API. |
| 61 public static final String HTTP_URL_CONNECTION = "http_url_connection"; | 53 public static final String HTTP_URL_CONNECTION = "http_url_connection"; |
| 62 // Do not initialize. | 54 // Do not initialize. |
| 63 public static final String NONE = "none"; | 55 public static final String NONE = "none"; |
| 64 | 56 |
| 65 private LibraryInitType() {} | 57 private LibraryInitType() {} |
| 66 } | 58 } |
| 67 | 59 |
| 68 public URLStreamHandlerFactory mStreamHandlerFactory; | 60 public URLStreamHandlerFactory mStreamHandlerFactory; |
| 69 public CronetEngine mCronetEngine; | 61 public CronetEngine mCronetEngine; |
| 70 @SuppressWarnings("deprecation") | |
| 71 HttpUrlRequestFactory mRequestFactory; | |
| 72 | 62 |
| 73 private final String[] mCommandLine; | 63 private final String[] mCommandLine; |
| 74 private final Context mContext; | 64 private final Context mContext; |
| 75 | 65 |
| 76 private String mUrl; | |
| 77 private int mHttpStatusCode = 0; | |
| 78 | |
| 79 // CronetEngine.Builder used for this activity. | 66 // CronetEngine.Builder used for this activity. |
| 80 private CronetEngine.Builder mCronetEngineBuilder; | 67 private CronetEngine.Builder mCronetEngineBuilder; |
| 81 | 68 |
| 82 @SuppressWarnings("deprecation") | |
| 83 private class TestHttpUrlRequestListener implements HttpUrlRequestListener { | |
| 84 private final ConditionVariable mComplete = new ConditionVariable(); | |
| 85 | |
| 86 public TestHttpUrlRequestListener() {} | |
| 87 | |
| 88 @Override | |
| 89 public void onResponseStarted(HttpUrlRequest request) { | |
| 90 mHttpStatusCode = request.getHttpStatusCode(); | |
| 91 } | |
| 92 | |
| 93 @Override | |
| 94 public void onRequestComplete(HttpUrlRequest request) { | |
| 95 mComplete.open(); | |
| 96 } | |
| 97 | |
| 98 public void blockForComplete() { | |
| 99 mComplete.block(); | |
| 100 } | |
| 101 } | |
| 102 | |
| 103 // TODO(crbug.com/547160): Fix this findbugs error and remove the suppressio
n. | 69 // TODO(crbug.com/547160): Fix this findbugs error and remove the suppressio
n. |
| 104 @SuppressFBWarnings("EI_EXPOSE_REP2") | 70 @SuppressFBWarnings("EI_EXPOSE_REP2") |
| 105 public CronetTestFramework( | 71 public CronetTestFramework( |
| 106 String appUrl, String[] commandLine, Context context, CronetEngine.B
uilder builder) { | 72 String appUrl, String[] commandLine, Context context, CronetEngine.B
uilder builder) { |
| 107 mCommandLine = commandLine; | 73 mCommandLine = commandLine; |
| 108 mContext = context; | 74 mContext = context; |
| 109 | 75 |
| 110 // Print out extra arguments passed in starting this activity. | 76 // Print out extra arguments passed in starting this activity. |
| 111 if (commandLine != null) { | 77 if (commandLine != null) { |
| 112 assertEquals(0, commandLine.length % 2); | 78 assertEquals(0, commandLine.length % 2); |
| 113 for (int i = 0; i < commandLine.length / 2; i++) { | 79 for (int i = 0; i < commandLine.length / 2; i++) { |
| 114 Log.i(TAG, "Cronet commandLine %s = %s", commandLine[i * 2], | 80 Log.i(TAG, "Cronet commandLine %s = %s", commandLine[i * 2], |
| 115 commandLine[i * 2 + 1]); | 81 commandLine[i * 2 + 1]); |
| 116 } | 82 } |
| 117 } | 83 } |
| 118 | 84 |
| 119 // Initializes CronetEngine.Builder from commandLine args. | 85 // Initializes CronetEngine.Builder from commandLine args. |
| 120 mCronetEngineBuilder = initializeCronetEngineBuilderWithPresuppliedBuild
er(builder); | 86 mCronetEngineBuilder = initializeCronetEngineBuilderWithPresuppliedBuild
er(builder); |
| 121 | 87 |
| 122 String initString = getCommandLineArg(LIBRARY_INIT_KEY); | 88 String initString = getCommandLineArg(LIBRARY_INIT_KEY); |
| 123 | 89 |
| 124 if (initString == null) { | 90 if (initString == null) { |
| 125 initString = LibraryInitType.CRONET; | 91 initString = LibraryInitType.CRONET; |
| 126 } | 92 } |
| 127 | 93 |
| 128 switch (initString) { | 94 switch (initString) { |
| 129 case LibraryInitType.NONE: | 95 case LibraryInitType.NONE: |
| 130 break; | 96 break; |
| 131 case LibraryInitType.LEGACY: | |
| 132 mRequestFactory = initRequestFactory(); | |
| 133 if (appUrl != null) { | |
| 134 startWithURL(appUrl); | |
| 135 } | |
| 136 break; | |
| 137 case LibraryInitType.HTTP_URL_CONNECTION: | 97 case LibraryInitType.HTTP_URL_CONNECTION: |
| 138 mCronetEngine = initCronetEngine(); | 98 mCronetEngine = initCronetEngine(); |
| 139 mStreamHandlerFactory = mCronetEngine.createURLStreamHandlerFact
ory(); | 99 mStreamHandlerFactory = mCronetEngine.createURLStreamHandlerFact
ory(); |
| 140 break; | 100 break; |
| 141 default: | 101 default: |
| 142 mCronetEngine = initCronetEngine(); | 102 mCronetEngine = initCronetEngine(); |
| 143 // Start collecting metrics. | 103 // Start collecting metrics. |
| 144 mCronetEngine.getGlobalMetricsDeltas(); | 104 mCronetEngine.getGlobalMetricsDeltas(); |
| 145 break; | 105 break; |
| 146 } | 106 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 // Setting this here so it isn't overridden on the command line | 197 // Setting this here so it isn't overridden on the command line |
| 238 cronetEngineBuilder.setLibraryName("cronet_tests"); | 198 cronetEngineBuilder.setLibraryName("cronet_tests"); |
| 239 return cronetEngineBuilder; | 199 return cronetEngineBuilder; |
| 240 } | 200 } |
| 241 | 201 |
| 242 // Helper function to initialize Cronet engine. Also used in testing. | 202 // Helper function to initialize Cronet engine. Also used in testing. |
| 243 public CronetEngine initCronetEngine() { | 203 public CronetEngine initCronetEngine() { |
| 244 return mCronetEngineBuilder.build(); | 204 return mCronetEngineBuilder.build(); |
| 245 } | 205 } |
| 246 | 206 |
| 247 // Helper function to initialize request factory. Also used in testing. | |
| 248 @SuppressWarnings("deprecation") | |
| 249 public HttpUrlRequestFactory initRequestFactory() { | |
| 250 return HttpUrlRequestFactory.createFactory(mContext, mCronetEngineBuilde
r); | |
| 251 } | |
| 252 | |
| 253 private String getCommandLineArg(String key) { | 207 private String getCommandLineArg(String key) { |
| 254 if (mCommandLine != null) { | 208 if (mCommandLine != null) { |
| 255 for (int i = 0; i < mCommandLine.length; ++i) { | 209 for (int i = 0; i < mCommandLine.length; ++i) { |
| 256 if (mCommandLine[i].equals(key)) { | 210 if (mCommandLine[i].equals(key)) { |
| 257 return mCommandLine[++i]; | 211 return mCommandLine[++i]; |
| 258 } | 212 } |
| 259 } | 213 } |
| 260 } | 214 } |
| 261 return null; | 215 return null; |
| 262 } | 216 } |
| 263 | 217 |
| 264 @SuppressWarnings("deprecation") | |
| 265 private void applyCommandLineToHttpUrlRequest(HttpUrlRequest request) { | |
| 266 String postData = getCommandLineArg(POST_DATA_KEY); | |
| 267 if (postData != null) { | |
| 268 InputStream dataStream = new ByteArrayInputStream(postData.getBytes(
)); | |
| 269 ReadableByteChannel dataChannel = Channels.newChannel(dataStream); | |
| 270 request.setUploadChannel("text/plain", dataChannel, postData.length(
)); | |
| 271 request.setHttpMethod("POST"); | |
| 272 } | |
| 273 } | |
| 274 | |
| 275 @SuppressWarnings("deprecation") | |
| 276 public void startWithURL(String url) { | |
| 277 Log.i(TAG, "Cronet started: %s", url); | |
| 278 mUrl = url; | |
| 279 | |
| 280 HashMap<String, String> headers = new HashMap<String, String>(); | |
| 281 TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); | |
| 282 HttpUrlRequest request = mRequestFactory.createRequest( | |
| 283 url, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listener); | |
| 284 applyCommandLineToHttpUrlRequest(request); | |
| 285 request.start(); | |
| 286 listener.blockForComplete(); | |
| 287 } | |
| 288 | |
| 289 public String getUrl() { | |
| 290 return mUrl; | |
| 291 } | |
| 292 | |
| 293 public int getHttpStatusCode() { | |
| 294 return mHttpStatusCode; | |
| 295 } | |
| 296 | |
| 297 public void startNetLog() { | 218 public void startNetLog() { |
| 298 if (mRequestFactory != null) { | |
| 299 mRequestFactory.startNetLogToFile(Environment.getExternalStorageDire
ctory().getPath() | |
| 300 + "/cronet_sample_netlog_old_api.json", | |
| 301 false); | |
| 302 } | |
| 303 if (mCronetEngine != null) { | 219 if (mCronetEngine != null) { |
| 304 mCronetEngine.startNetLogToFile(Environment.getExternalStorageDirect
ory().getPath() | 220 mCronetEngine.startNetLogToFile(Environment.getExternalStorageDirect
ory().getPath() |
| 305 + "/cronet_sample_netlog_new_api.json", | 221 + "/cronet_sample_netlog_new_api.json", |
| 306 false); | 222 false); |
| 307 } | 223 } |
| 308 } | 224 } |
| 309 | 225 |
| 310 public void stopNetLog() { | 226 public void stopNetLog() { |
| 311 if (mRequestFactory != null) { | |
| 312 mRequestFactory.stopNetLog(); | |
| 313 } | |
| 314 if (mCronetEngine != null) { | 227 if (mCronetEngine != null) { |
| 315 mCronetEngine.stopNetLog(); | 228 mCronetEngine.stopNetLog(); |
| 316 } | 229 } |
| 317 } | 230 } |
| 318 } | 231 } |
| OLD | NEW |