summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2010-07-28 23:37:09 -0700
committerBrian Carlstrom <bdc@google.com>2010-07-28 23:49:30 -0700
commit5e8a587d49f014fdd42403f51bbe877855e4a6b3 (patch)
treea8a1b468531dbd0ee796f86ae1a48c8d4e168fac /core
parentaae052324fb1d3add554158974c5a6ee609739b3 (diff)
downloadframeworks_base-5e8a587d49f014fdd42403f51bbe877855e4a6b3.zip
frameworks_base-5e8a587d49f014fdd42403f51bbe877855e4a6b3.tar.gz
frameworks_base-5e8a587d49f014fdd42403f51bbe877855e4a6b3.tar.bz2
Tracking merge of dalvik-dev to master
Change-Id: Id4c19401ad0aa238219aaf5d9a20d2889d0a4b18
Diffstat (limited to 'core')
-rw-r--r--core/java/android/net/SSLCertificateSocketFactory.java4
-rw-r--r--core/java/android/net/http/HttpsConnection.java4
-rw-r--r--core/tests/coretests/Android.mk4
-rw-r--r--core/tests/coretests/src/android/net/http/HttpsThroughHttpProxyTest.java142
4 files changed, 149 insertions, 5 deletions
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index 31acb5b..9166019 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -46,9 +46,9 @@ import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl;
import org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl;
import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
import org.apache.harmony.xnet.provider.jsse.SSLParameters;
/**
@@ -210,7 +210,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
private SSLSocketFactory makeSocketFactory(TrustManager[] trustManagers) {
try {
- SSLContextImpl sslContext = new SSLContextImpl();
+ OpenSSLContextImpl sslContext = new OpenSSLContextImpl();
sslContext.engineInit(null, trustManagers, null, mSessionCache, null);
return sslContext.engineGetSocketFactory();
} catch (KeyManagementException e) {
diff --git a/core/java/android/net/http/HttpsConnection.java b/core/java/android/net/http/HttpsConnection.java
index 9b842ae..cefa997 100644
--- a/core/java/android/net/http/HttpsConnection.java
+++ b/core/java/android/net/http/HttpsConnection.java
@@ -19,8 +19,8 @@ package android.net.http;
import android.content.Context;
import android.util.Log;
import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl;
import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
@@ -79,7 +79,7 @@ public class HttpsConnection extends Connection {
cache = FileClientSessionCache.usingDirectory(sessionDir);
}
- SSLContextImpl sslContext = new SSLContextImpl();
+ OpenSSLContextImpl sslContext = new OpenSSLContextImpl();
// here, trust managers is a single trust-all manager
TrustManager[] trustManagers = new TrustManager[] {
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index 245c67c..01faaad 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -13,7 +13,9 @@ LOCAL_SRC_FILES := \
LOCAL_STATIC_JAVA_LIBRARIES += android-common
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_DX_FLAGS := --core-library
+LOCAL_STATIC_JAVA_LIBRARIES := core-tests-supportlib
+LOCAL_JAVA_LIBRARIES := android.test.runner android-common
LOCAL_PACKAGE_NAME := FrameworksCoreTests
LOCAL_CERTIFICATE := platform
diff --git a/core/tests/coretests/src/android/net/http/HttpsThroughHttpProxyTest.java b/core/tests/coretests/src/android/net/http/HttpsThroughHttpProxyTest.java
new file mode 100644
index 0000000..f3b7c06
--- /dev/null
+++ b/core/tests/coretests/src/android/net/http/HttpsThroughHttpProxyTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.http;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.List;
+import javax.net.ssl.TestSSLContext;
+import junit.framework.TestCase;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.params.ConnRoutePNames;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.impl.client.DefaultHttpClient;
+import tests.http.MockResponse;
+import tests.http.MockWebServer;
+import tests.http.RecordedRequest;
+
+public class HttpsThroughHttpProxyTest extends TestCase {
+
+ public void testConnectViaHttps() throws IOException, InterruptedException {
+ TestSSLContext testSSLContext = TestSSLContext.create();
+
+ MockWebServer server = new MockWebServer();
+ server.useHttps(testSSLContext.serverContext.getSocketFactory(), false);
+ server.enqueue(new MockResponse()
+ .setResponseCode(200)
+ .setBody("this response comes via HTTPS"));
+ server.play();
+
+ HttpClient httpClient = new DefaultHttpClient();
+ SSLSocketFactory sslSocketFactory = new SSLSocketFactory(
+ testSSLContext.clientContext.getSocketFactory());
+ sslSocketFactory.setHostnameVerifier(new AllowAllHostnameVerifier());
+ httpClient.getConnectionManager().getSchemeRegistry()
+ .register(new Scheme("https", sslSocketFactory, server.getPort()));
+
+ HttpResponse response = httpClient.execute(
+ new HttpGet("https://localhost:" + server.getPort() + "/foo"));
+ assertEquals("this response comes via HTTPS", contentToString(response));
+
+ RecordedRequest request = server.takeRequest();
+ assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
+ }
+
+ /**
+ * http://code.google.com/p/android/issues/detail?id=2690
+ */
+ public void testConnectViaProxy() throws IOException, InterruptedException {
+ MockWebServer proxy = new MockWebServer();
+ MockResponse mockResponse = new MockResponse()
+ .setResponseCode(200)
+ .setBody("this response comes via a proxy");
+ proxy.enqueue(mockResponse);
+ proxy.play();
+
+ HttpClient httpProxyClient = new DefaultHttpClient();
+ httpProxyClient.getParams().setParameter(
+ ConnRoutePNames.DEFAULT_PROXY, new HttpHost("localhost", proxy.getPort()));
+
+ HttpResponse response = httpProxyClient.execute(new HttpGet("http://android.com/foo"));
+ assertEquals("this response comes via a proxy", contentToString(response));
+
+ RecordedRequest request = proxy.takeRequest();
+ assertEquals("GET http://android.com/foo HTTP/1.1", request.getRequestLine());
+ assertContains(request.getHeaders(), "Host: android.com");
+ }
+
+ public void testConnectViaHttpProxyToHttps() throws IOException, InterruptedException {
+ TestSSLContext testSSLContext = TestSSLContext.create();
+
+ MockWebServer proxy = new MockWebServer();
+ proxy.useHttps(testSSLContext.serverContext.getSocketFactory(), true);
+ MockResponse connectResponse = new MockResponse()
+ .setResponseCode(200);
+ connectResponse.getHeaders().clear();
+ proxy.enqueue(connectResponse);
+ proxy.enqueue(new MockResponse()
+ .setResponseCode(200)
+ .setBody("this response comes via a secure proxy"));
+ proxy.play();
+
+ HttpClient httpProxyClient = new DefaultHttpClient();
+ HttpHost proxyHost = new HttpHost("localhost", proxy.getPort());
+ httpProxyClient.getParams().setParameter(
+ ConnRoutePNames.DEFAULT_PROXY, proxyHost);
+ SSLSocketFactory sslSocketFactory = new SSLSocketFactory(
+ testSSLContext.clientContext.getSocketFactory());
+ sslSocketFactory.setHostnameVerifier(new AllowAllHostnameVerifier());
+ httpProxyClient.getConnectionManager().getSchemeRegistry()
+ .register(new Scheme("https", sslSocketFactory, 443));
+
+ HttpResponse response = httpProxyClient.execute(new HttpGet("https://android.com/foo"));
+ assertEquals("this response comes via a secure proxy", contentToString(response));
+
+ RecordedRequest connect = proxy.takeRequest();
+ assertEquals("Connect line failure on proxy " + proxyHost.toHostString(),
+ "CONNECT android.com:443 HTTP/1.1", connect.getRequestLine());
+ assertContains(connect.getHeaders(), "Host: android.com");
+
+ RecordedRequest get = proxy.takeRequest();
+ assertEquals("GET /foo HTTP/1.1", get.getRequestLine());
+ assertContains(get.getHeaders(), "Host: android.com");
+ }
+
+ private void assertContains(List<String> headers, String header) {
+ assertTrue(headers.toString(), headers.contains(header));
+ }
+
+ private String contentToString(HttpResponse response) throws IOException {
+ StringWriter writer = new StringWriter();
+ char[] buffer = new char[1024];
+ Reader reader = new InputStreamReader(response.getEntity().getContent());
+ int length;
+ while ((length = reader.read(buffer)) != -1) {
+ writer.write(buffer, 0, length);
+ }
+ reader.close();
+ return writer.toString();
+ }
+}