| 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;
|
| + }
|
| +}
|
|
|