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

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/urlconnection/CronetHttpUrlConnectionTest.java

Issue 725683002: [Cronet] Initial implementation of HttpURLConnection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/urlconnection/CronetHttpUrlConnectionTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/urlconnection/CronetHttpUrlConnectionTest.java b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/urlconnection/CronetHttpUrlConnectionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d5a8fe508980c44db1ad00e138c5ffbc670910d
--- /dev/null
+++ b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/urlconnection/CronetHttpUrlConnectionTest.java
@@ -0,0 +1,184 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.cronet_test_apk.urlconnection;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.test.util.Feature;
+import org.chromium.cronet_test_apk.CronetTestActivity;
+import org.chromium.cronet_test_apk.CronetTestBase;
+import org.chromium.cronet_test_apk.MockUrlRequestJobUtil;
+import org.chromium.cronet_test_apk.UploadTestServer;
+import org.chromium.net.urlconnection.CronetURLStreamHandlerFactory;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Example test that just starts the cronet sample.
+ */
+public class CronetHttpUrlConnectionTest extends CronetTestBase {
+ private CronetTestActivity mActivity;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mActivity = launchCronetTestApp();
+ waitForActiveShellToBeDoneLoading();
+ assertTrue(UploadTestServer.startUploadTestServer());
+ MockUrlRequestJobUtil.addUrlInterceptors();
+ assertNotNull(mActivity);
+ // Use Cronet's implementation of HttpURLConnection.
+ CronetURLStreamHandlerFactory factory =
+ new CronetURLStreamHandlerFactory(
+ mActivity.getApplicationContext());
+ URL.setURLStreamHandlerFactory(factory);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testBasicGet() {
+ try {
+ URL url = new URL(UploadTestServer.getEchoMethodURL());
+ HttpURLConnection urlConnection =
+ (HttpURLConnection) url.openConnection();
+ assertEquals(200, urlConnection.getResponseCode());
+ assertEquals("GET\n", getResponseAsString(urlConnection));
+ urlConnection.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testAddRequestProperty() {
+ try {
+ URL url = new URL(UploadTestServer.getEchoAllHeadersURL());
+ HttpURLConnection urlConnection =
+ (HttpURLConnection) url.openConnection();
+ urlConnection.addRequestProperty("header1", "foo");
+ urlConnection.addRequestProperty("header2", "bar");
+ assertEquals(200, urlConnection.getResponseCode());
+ String headers = getResponseAsString(urlConnection);
+ List<String> header1Values =
+ getRequestHeaderValues(headers, "header1");
+ List<String> header2Values =
+ getRequestHeaderValues(headers, "header2");
+ assertEquals(1, header1Values.size());
+ assertEquals("foo", header1Values.get(0));
+ assertEquals(1, header1Values.size());
+ assertEquals("bar", header2Values.get(0));
+ urlConnection.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testAddRequestPropertyWithSameKey() {
+ try {
+ URL url = new URL(UploadTestServer.getEchoAllHeadersURL());
+ HttpURLConnection urlConnection =
+ (HttpURLConnection) url.openConnection();
+ urlConnection.addRequestProperty("header-name", "value1");
+ urlConnection.addRequestProperty("header-name", "value2");
+ assertEquals(200, urlConnection.getResponseCode());
+ String headers = getResponseAsString(urlConnection);
+ List<String> actualValues =
+ getRequestHeaderValues(headers, "header-name");
+ // FIXME: we should send all headers.
+ assertEquals(1, actualValues.size());
+ assertEquals("value2", actualValues.get(0));
+ urlConnection.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testSetRequestProperty() {
+ try {
+ URL url = new URL(UploadTestServer.getEchoAllHeadersURL());
+ HttpURLConnection urlConnection =
+ (HttpURLConnection) url.openConnection();
+ urlConnection.setRequestProperty("header-name", "header-value");
+ assertEquals(200, urlConnection.getResponseCode());
+ String headers = getResponseAsString(urlConnection);
+ List<String> actualValues =
+ getRequestHeaderValues(headers, "header-name");
+ assertEquals(1, actualValues.size());
+ assertEquals("header-value", actualValues.get(0));
+ urlConnection.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testAddAndSetRequestProperty() {
+ try {
+ URL url = new URL(UploadTestServer.getEchoAllHeadersURL());
+ HttpURLConnection urlConnection =
+ (HttpURLConnection) url.openConnection();
+ urlConnection.addRequestProperty("header-name", "value1");
+ urlConnection.setRequestProperty("header-name", "value2");
+ assertEquals(200, urlConnection.getResponseCode());
+ String headers = getResponseAsString(urlConnection);
+ List<String> actualValues =
+ getRequestHeaderValues(headers, "header-name");
+ assertEquals(1, actualValues.size());
+ assertEquals("value2", actualValues.get(0));
+ urlConnection.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ /**
+ * Helper method to extract response body as a string for testing.
+ */
+ private String getResponseAsString(HttpURLConnection connection)
+ throws Exception {
+ InputStream in = connection.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+ StringBuilder out = new StringBuilder();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ out.append(line + "\n");
+ }
+ return out.toString();
+ }
+
+ /**
+ * Helper method to extract a list of header values with the give header
+ * name.
+ */
+ private List<String> getRequestHeaderValues(String allHeaders,
+ String headerName) {
+ Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\n");
+ Matcher matcher = pattern.matcher(allHeaders);
+ List<String> headerValues = new ArrayList<String>();
+ while (matcher.find()) {
+ headerValues.add(matcher.group(1));
+ }
+ return headerValues;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698