Chromium Code Reviews| 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..80a47bfa1ecbe96e30c02b490cb06a3b20737ae2 |
| --- /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. |
|
xunjieli
2014/11/14 16:11:17
This is no longer a FIXME, but a TODO. I will add
|
| + 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; |
| + } |
| +} |