1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.net.cts; 18 19 import java.io.IOException; 20 import java.net.InetAddress; 21 import java.net.Socket; 22 23 import javax.net.SocketFactory; 24 import javax.net.ssl.SSLPeerUnverifiedException; 25 26 import android.net.SSLCertificateSocketFactory; 27 import android.test.AndroidTestCase; 28 29 import libcore.javax.net.ssl.SSLConfigurationAsserts; 30 31 public class SSLCertificateSocketFactoryTest extends AndroidTestCase { 32 private SSLCertificateSocketFactory mFactory; 33 private int mTimeout; 34 35 @Override setUp()36 protected void setUp() throws Exception { 37 super.setUp(); 38 mTimeout = 1000; 39 mFactory = (SSLCertificateSocketFactory) SSLCertificateSocketFactory.getDefault(mTimeout); 40 } 41 testDefaultConfiguration()42 public void testDefaultConfiguration() throws Exception { 43 SSLConfigurationAsserts.assertSSLSocketFactoryDefaultConfiguration(mFactory); 44 } 45 testAccessProperties()46 public void testAccessProperties() throws Exception { 47 mFactory.getSupportedCipherSuites(); 48 mFactory.getDefaultCipherSuites(); 49 SocketFactory sf = SSLCertificateSocketFactory.getDefault(mTimeout); 50 assertNotNull(sf); 51 } 52 testCreateSocket()53 public void testCreateSocket() throws Exception { 54 new SSLCertificateSocketFactory(100); 55 int port = 443; 56 String host = "www.google.com"; 57 InetAddress inetAddress = null; 58 inetAddress = InetAddress.getLocalHost(); 59 try { 60 mFactory.createSocket(inetAddress, port); 61 fail("should throw exception!"); 62 } catch (IOException e) { 63 // expected 64 } 65 66 try { 67 InetAddress inetAddress1 = InetAddress.getLocalHost(); 68 InetAddress inetAddress2 = InetAddress.getLocalHost(); 69 mFactory.createSocket(inetAddress1, port, inetAddress2, port); 70 fail("should throw exception!"); 71 } catch (IOException e) { 72 // expected 73 } 74 75 try { 76 Socket socket = new Socket(); 77 mFactory.createSocket(socket, host, port, true); 78 fail("should throw exception!"); 79 } catch (IOException e) { 80 // expected 81 } 82 Socket socket = null; 83 socket = mFactory.createSocket(host, port); 84 assertNotNull(socket); 85 assertNotNull(socket.getOutputStream()); 86 assertNotNull(socket.getInputStream()); 87 88 // it throw exception when calling createSocket(String, int, InetAddress, int) 89 // The socket level is invalid. 90 } 91 92 // a host and port that are expected to be available but have 93 // a cert with a different CN, in this case CN=mail.google.com 94 private static String TEST_CREATE_SOCKET_HOST = "googlemail.com"; 95 private static int TEST_CREATE_SOCKET_PORT = 443; 96 97 /** 98 * b/2807618 Make sure that hostname verifcation in cases were it 99 * is documented to be included by various 100 * SSLCertificateSocketFactory.createSocket messages. 101 * 102 * NOTE: Test will fail if external server is not available. 103 */ test_createSocket_simple()104 public void test_createSocket_simple() throws Exception { 105 try { 106 mFactory.createSocket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT); 107 fail(); 108 } catch (SSLPeerUnverifiedException expected) { 109 // expected 110 } 111 } 112 113 /** 114 * b/2807618 Make sure that hostname verifcation in cases were it 115 * is documented to be included by various 116 * SSLCertificateSocketFactory.createSocket messages. 117 * 118 * NOTE: Test will fail if external server is not available. 119 */ test_createSocket_wrapping()120 public void test_createSocket_wrapping() throws Exception { 121 try { 122 Socket underlying = new Socket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT); 123 mFactory.createSocket( 124 underlying, TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT, true); 125 fail(); 126 } catch (SSLPeerUnverifiedException expected) { 127 // expected 128 } 129 } 130 131 /** 132 * b/2807618 Make sure that hostname verifcation in cases were it 133 * is documented to be included by various 134 * SSLCertificateSocketFactory.createSocket messages. 135 * 136 * NOTE: Test will fail if external server is not available. 137 */ test_createSocket_bind()138 public void test_createSocket_bind() throws Exception { 139 try { 140 mFactory.createSocket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT, null, 0); 141 fail(); 142 } catch (SSLPeerUnverifiedException expected) { 143 // expected 144 } 145 } 146 } 147