SSLServerSocketTest.java revision f33eae7e84eb6d3b0f4e86b59605bb3de73009f3
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.javax.net.ssl;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestLevel;
20eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport dalvik.annotation.TestTargetClass;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetNew;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargets;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport org.apache.harmony.luni.util.Base64;
27eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_PortManager;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.ByteArrayInputStream;
31eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.IOException;
32eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.InputStream;
33eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.net.InetAddress;
34eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.security.KeyStore;
35d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughesimport java.security.SecureRandom;
36e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstromimport java.util.Arrays;
37eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
38eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManager;
39eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManagerFactory;
40eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLContext;
41eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLServerSocket;
42eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
43f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes@TestTargetClass(SSLServerSocket.class)
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLServerSocketTest extends TestCase {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    // set to true if on Android, false if on RI
47eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    boolean useBKS = true;
48eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Additional class for SSLServerSocket constructor verification
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class mySSLServerSocket extends SSLServerSocket {
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public mySSLServerSocket() throws IOException{
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
57eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public mySSLServerSocket(int port) throws IOException{
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(port);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
61eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public mySSLServerSocket(int port, int backlog) throws IOException{
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(port, backlog);
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
65eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public mySSLServerSocket(int port, int backlog, InetAddress address) throws IOException{
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(port, backlog, address);
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
69eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String[] getSupportedCipherSuites() {
71eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return null;
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
73eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEnabledCipherSuites(String[] suites) {
75eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
77eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String[] getEnabledCipherSuites() {
79eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return null;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
81eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String[] getSupportedProtocols() {
83eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return null;
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
85eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String[] getEnabledProtocols() {
87eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return null;
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
89eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEnabledProtocols(String[] protocols) {
91eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
93f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEnableSessionCreation(boolean flag) {
95eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
97eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean getEnableSessionCreation() {
99eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return false;
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setNeedClientAuth(boolean need) {
103eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
105eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean getNeedClientAuth() {
107eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return false;
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
109f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean getUseClientMode() {
111eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return false;
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
113eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setUseClientMode(boolean mode) {
115eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean getWantClientAuth() {
119eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            return false;
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setWantClientAuth(boolean mode) {
122eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket()
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.SUFFICIENT,
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "IOException wasn't implemented",
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "SSLServerSocket",
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testConstructor_01() {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
137eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            SSLServerSocket ssl = new mySSLServerSocket();
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown " + ex);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port)
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "SSLServerSocket",
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class}
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testConstructor_02() {
153eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket ssl;
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE};
156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber);
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(portNumber, ssl.getLocalPort());
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown " + ex);
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
163f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < port_invalid.length; i++) {
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ssl = new mySSLServerSocket(port_invalid[i]);
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException should be thrown");
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException iae) {
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(e + " was thrown instead of IllegalArgumentException");
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
174f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new mySSLServerSocket(portNumber);
178eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            fail("IOException Expected when opening an already opened port");
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ioe) {
180eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            // expected
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown " + ex);
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog)
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.SUFFICIENT,
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Invalid values for backlog weren't checked",
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "SSLServerSocket",
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, int.class}
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testConstructor_03() {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mySSLServerSocket ssl;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] port_invalid = {-1, Integer.MIN_VALUE, Integer.MAX_VALUE};
199f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber, 1);
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(portNumber, ssl.getLocalPort());
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown");
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < port_invalid.length; i++) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ssl = new mySSLServerSocket(port_invalid[i], 1);
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException should be thrown");
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException iae) {
212eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob                // expected
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(e + " was thrown instead of IllegalArgumentException");
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        portNumber = Support_PortManager.getNextPort();
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber, 1);
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new mySSLServerSocket(portNumber, 1);
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException should be thrown");
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ioe) {
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
226f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
228f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog, InetAddress address)
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.SUFFICIENT,
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Invalid values for backlog weren\'t checked",
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "SSLServerSocket",
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, int.class, InetAddress.class}
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testConstructor_04() {
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mySSLServerSocket ssl;
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InetAddress ia = null;
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE};
241f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber, 0, ia);
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(portNumber, ssl.getLocalPort());
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown");
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
248f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        portNumber = Support_PortManager.getNextPort();
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(portNumber, ssl.getLocalPort());
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown");
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < port_invalid.length; i++) {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ssl = new mySSLServerSocket(port_invalid[i], 1, InetAddress.getLocalHost());
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException should be thrown");
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException iae) {
262eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob                // expected
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(e + " was thrown instead of IllegalArgumentException");
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        portNumber = Support_PortManager.getNextPort();
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project           ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project           new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project           fail("IOException should be thrown for");
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ioe) {
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
275f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    }
276f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
278f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws Exception
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getSupportedCipherSuites()
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSupportedCipherSuites",
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
287eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_getSupportedCipherSuites() throws Exception {
288eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
289eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] res = sss.getSupportedCipherSuites();
290eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertNotNull("NULL result", res);
291eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue("no supported cipher suites available.", res.length > 0);
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
293eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
295f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getEnabledCipherSuites()
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#setEnabledCipherSuites(String[] suites)
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getEnabledCipherSuites",
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setEnabledCipherSuites",
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {String[].class}
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
312f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    })
313eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_EnabledCipherSuites() throws Exception {
314eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
316eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            sss.setEnabledCipherSuites(null);
317eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        } catch (IllegalArgumentException iae) {
318eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            //expected
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
320eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] unsupportedCipherSuites = {"unsupported"};
321eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        try {
322eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            sss.setEnabledCipherSuites(unsupportedCipherSuites);
323eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        } catch (IllegalArgumentException iae) {
324eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            //expected
325eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        }
326eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        int count = sss.getSupportedCipherSuites().length;
327eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue("No supported cipher suites", count > 0);
328eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setEnabledCipherSuites(sss.getSupportedCipherSuites());
329eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] res = sss.getEnabledCipherSuites();
330eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertNotNull("NULL result", res);
331e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom        assertEquals("not all supported cipher suites were enabled",
332e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom                     Arrays.asList(sss.getSupportedCipherSuites()),
333e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom                     Arrays.asList(res));
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
335f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getSupportedProtocols()
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSupportedProtocols",
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
346eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_getSupportedProtocols() throws Exception {
347eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
348eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] res = sss.getSupportedCipherSuites();
349eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertNotNull("NULL result", res);
350eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue("no supported protocols available.", res.length > 0);
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
352f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
354f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getEnabledProtocols()
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#setEnabledProtocols(String[] protocols)
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setEnabledProtocols",
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {String[].class}
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getEnabledProtocols",
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
371eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    })
372eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_EnabledProtocols() throws Exception {
373eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
375eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            sss.setEnabledProtocols(null);
376eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        } catch (IllegalArgumentException iae) {
377eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            //expected
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
379eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] unsupportedProtocols = {"unsupported"};
380eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        try {
381eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            sss.setEnabledProtocols(unsupportedProtocols);
382eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        } catch (IllegalArgumentException iae) {
383eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob            //expected
384eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        }
385eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        int count = sss.getSupportedProtocols().length;
386eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue("No supported protocols", count > 0);
387eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setEnabledProtocols(sss.getSupportedProtocols());
388eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String[] res = sss.getEnabledProtocols();
389eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertNotNull("NULL result", res);
390eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue("no enabled protocols.", res.length == count);
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
392f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
395f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#setEnableSessionCreation(boolean flag)
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getEnableSessionCreation()
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getEnableSessionCreation",
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setEnableSessionCreation",
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {boolean.class}
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    })
412eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_EnableSessionCreation() throws Exception {
413eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
414eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue(sss.getEnableSessionCreation());
415eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setEnableSessionCreation(false);
416eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertFalse(sss.getEnableSessionCreation());
417eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setEnableSessionCreation(true);
418eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue(sss.getEnableSessionCreation());
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
420f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
422f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
423f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#setNeedClientAuth(boolean need)
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getNeedClientAuthCreation()
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setNeedClientAuth",
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {boolean.class}
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getNeedClientAuth",
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    })
440eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_NeedClientAuth() throws Exception {
441eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
442eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setNeedClientAuth(true);
443eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue(sss.getNeedClientAuth());
444eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setNeedClientAuth(false);
445eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertFalse(sss.getNeedClientAuth());
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
447f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getUseClientMode()
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#setUseClientMode(boolean mode)
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getUseClientMode",
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setUseClientMode",
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {boolean.class}
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    })
467eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_UseClientMode() throws Exception {
468eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
469eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setUseClientMode(false);
470eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertFalse(sss.getUseClientMode());
471eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setUseClientMode(true);
472eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue(sss.getUseClientMode());
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
474f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
476f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
477f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @tests javax.net.ssl.SSLServerSocket#setWantClientAuth(boolean want)
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests javax.net.ssl.SSLServerSocket#getWantClientAuthCreation()
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getWantClientAuth",
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "setWantClientAuth",
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {boolean.class}
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    })
494eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    public void test_WantClientAuth() throws Exception {
495eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = getSSLServerSocket();
496eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setWantClientAuth(true);
497eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertTrue(sss.getWantClientAuth());
498eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        sss.setWantClientAuth(false);
499eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        assertFalse(sss.getWantClientAuth());
500eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    }
501eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
502eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
503f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    /**
504eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * Defines the keystore contents for the server, BKS version. Holds just a
505eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * single self-generated key. The subject name is "Test Server".
506eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     */
507f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private static final String SERVER_KEYS_BKS =
508eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "AAAAAQAAABQDkebzoP1XwqyWKRCJEpn/t8dqIQAABDkEAAVteWtleQAAARpYl20nAAAAAQAFWC41" +
509eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MDkAAAJNMIICSTCCAbKgAwIBAgIESEfU1jANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJVUzET" +
510eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8wDQYDVQQKEwZHb29nbGUxEDAOBgNV" +
511eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "BAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMB4XDTA4MDYwNTExNTgxNFoXDTA4MDkw" +
512eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MzExNTgxNFowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDDAKBgNVBAcTA01U" +
513eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "VjEPMA0GA1UEChMGR29vZ2xlMRAwDgYDVQQLEwdBbmRyb2lkMRQwEgYDVQQDEwtUZXN0IFNlcnZl" +
514eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LIdKaIr9/vsTq8BZlA3R+NFWRaH4lGsTAQy" +
515eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "DPMF9ZqEDOaL6DJuu0colSBBBQ85hQTPa9m9nyJoN3pEi1hgamqOvQIWcXBk+SOpUGRZZFXwniJV" +
516eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "zDKU5nE9MYgn2B9AoiH3CSuMz6HRqgVaqtppIe1jhukMc/kHVJvlKRNy9XMCAwEAATANBgkqhkiG" +
517eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "9w0BAQUFAAOBgQC7yBmJ9O/eWDGtSH9BH0R3dh2NdST3W9hNZ8hIa8U8klhNHbUCSSktZmZkvbPU" +
518eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "hse5LI3dh6RyNDuqDrbYwcqzKbFJaq/jX9kCoeb3vgbQElMRX8D2ID1vRjxwlALFISrtaN4VpWzV" +
519eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "yeoHPW4xldeZmoVtjn8zXNzQhLuBqX2MmAAAAqwAAAAUvkUScfw9yCSmALruURNmtBai7kQAAAZx" +
520eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "4Jmijxs/l8EBaleaUru6EOPioWkUAEVWCxjM/TxbGHOi2VMsQWqRr/DZ3wsDmtQgw3QTrUK666sR" +
521eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MBnbqdnyCyvM1J2V1xxLXPUeRBmR2CXorYGF9Dye7NkgVdfA+9g9L/0Au6Ugn+2Cj5leoIgkgApN" +
522eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "vuEcZegFlNOUPVEs3SlBgUF1BY6OBM0UBHTPwGGxFBBcetcuMRbUnu65vyDG0pslT59qpaR0TMVs" +
523eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "P+tcheEzhyjbfM32/vwhnL9dBEgM8qMt0sqF6itNOQU/F4WGkK2Cm2v4CYEyKYw325fEhzTXosck" +
524eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MhbqmcyLab8EPceWF3dweoUT76+jEZx8lV2dapR+CmczQI43tV9btsd1xiBbBHAKvymm9Ep9bPzM" +
525eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "J0MQi+OtURL9Lxke/70/MRueqbPeUlOaGvANTmXQD2OnW7PISwJ9lpeLfTG0LcqkoqkbtLKQLYHI" +
526eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "rQfV5j0j+wmvmpMxzjN3uvNajLa4zQ8l0Eok9SFaRr2RL0gN8Q2JegfOL4pUiHPsh64WWya2NB7f" +
527eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "V+1s65eA5ospXYsShRjo046QhGTmymwXXzdzuxu8IlnTEont6P4+J+GsWk6cldGbl20hctuUKzyx" +
528eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "OptjEPOKejV60iDCYGmHbCWAzQ8h5MILV82IclzNViZmzAapeeCnexhpXhWTs+xDEYSKEiG/camt" +
529eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "bhmZc3BcyVJrW23PktSfpBQ6D8ZxoMfF0L7V2GQMaUg+3r7ucrx82kpqotjv0xHghNIm95aBr1Qw" +
530eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "1gaEjsC/0wGmmBDg1dTDH+F1p9TInzr3EFuYD0YiQ7YlAHq3cPuyGoLXJ5dXYuSBfhDXJSeddUkl" +
531eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "k1ufZyOOcskeInQge7jzaRfmKg3U94r+spMEvb0AzDQVOKvjjo1ivxMSgFRZaDb/4qw=";
532eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
533f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    /**
534eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * Defines the keystore contents for the server, JKS version. Holds just a
535eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * single self-generated key. The subject name is "Test Server".
536eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     */
537f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private static final String SERVER_KEYS_JKS =
538eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "/u3+7QAAAAIAAAABAAAAAQAFbXlrZXkAAAEaWFfBeAAAArowggK2MA4GCisGAQQBKgIRAQEFAASC" +
539eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "AqI2kp5XjnF8YZkhcF92YsJNQkvsmH7zqMM87j23zSoV4DwyE3XeC/gZWq1ToScIhoqZkzlbWcu4" +
540eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "T/Zfc/DrfGk/rKbBL1uWKGZ8fMtlZk8KoAhxZk1JSyJvdkyKxqmzUbxk1OFMlN2VJNu97FPVH+du" +
541eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "dvjTvmpdoM81INWBW/1fZJeQeDvn4mMbbe0IxgpiLnI9WSevlaDP/sm1X3iO9yEyzHLL+M5Erspo" +
542eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "Cwa558fOu5DdsICMXhvDQxjWFKFhPHnKtGe+VvwkG9/bAaDgx3kfhk0w5zvdnkKb+8Ed9ylNRzdk" +
543eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "ocAa/mxlMTOsTvDKXjjsBupNPIIj7OP4GNnZaxkJjSs98pEO67op1GX2qhy6FSOPNuq8k/65HzUc" +
544eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "PYn6voEeh6vm02U/sjEnzRevQ2+2wXoAdp0EwtQ/DlMe+NvcwPGWKuMgX4A4L93DZGb04N2VmAU3" +
545eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "YLOtZwTO0LbuWrcCM/q99G/7LcczkxIVrO2I/rh8RXVczlf9QzcrFObFv4ATuspWJ8xG7DhsMbnk" +
546eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "rT94Pq6TogYeoz8o8ZMykesAqN6mt/9+ToIemmXv+e+KU1hI5oLwWMnUG6dXM6hIvrULY6o+QCPH" +
547eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "172YQJMa+68HAeS+itBTAF4Clm/bLn6reHCGGU6vNdwU0lYldpiOj9cB3t+u2UuLo6tiFWjLf5Zs" +
548eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "EQJETd4g/EK9nHxJn0GAKrWnTw7pEHQJ08elzUuy04C/jEEG+4QXU1InzS4o/kR0Sqz2WTGDoSoq" +
549eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "ewuPRU5bzQs/b9daq3mXrnPtRBL6HfSDAdpTK76iHqLCGdqx3avHjVSBm4zFvEuYBCev+3iKOBmg" +
550eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "yh7eQRTjz4UOWfy85omMBr7lK8PtfVBDzOXpasxS0uBgdUyBDX4tO6k9jZ8a1kmQRQAAAAEABVgu" +
551eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "NTA5AAACSDCCAkQwggGtAgRIR8SKMA0GCSqGSIb3DQEBBAUAMGkxCzAJBgNVBAYTAlVTMRMwEQYD" +
552eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "VQQIEwpDYWxpZm9ybmlhMQwwCgYDVQQHEwNNVFYxDzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMH" +
553eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "QW5kcm9pZDEUMBIGA1UEAxMLVGVzdCBTZXJ2ZXIwHhcNMDgwNjA1MTA0ODQyWhcNMDgwOTAzMTA0" +
554eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "ODQyWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8w" +
555eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMIGf" +
556eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwoC6chqCI84rj1PrXuJgbiit4EV909zR6N0jNlYfg" +
557eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "itwB39bP39wH03rFm8T59b3mbSptnGmCIpLZn25KPPFsYD3JJ+wFlmiUdEP9H05flfwtFQJnw9uT" +
558eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "3rRIdYVMPcQ3RoZzwAMliGr882I2thIDbA6xjGU/1nRIdvk0LtxH3QIDAQABMA0GCSqGSIb3DQEB" +
559eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "BAUAA4GBAJn+6YgUlY18Ie+0+Vt8oEi81DNi/bfPrAUAh63fhhBikx/3R9dl3wh09Z6p7cIdNxjW" +
560eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "n2ll+cRW9eqF7z75F0Omm0C7/KAEPjukVbszmzeU5VqzkpSt0j84YWi+TfcHRrfvhLbrlmGITVpY" +
561eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        "ol5pHLDyqGmDs53pgwipWqsn/nEXEBgj3EoqPeqHbDf7YaP8h/5BSt0=";
562eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
563eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    private String PASSWORD = "android";
564eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
565eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    /**
566eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * Loads a keystore from a base64-encoded String. Returns the KeyManager[]
567eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     * for the result.
568eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob     */
569eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    private KeyManager[] getKeyManagers() throws Exception {
570eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String keys = (useBKS ? SERVER_KEYS_BKS : SERVER_KEYS_JKS);
571f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        byte[] bytes = new Base64().decode(keys.getBytes());
572eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        InputStream inputStream = new ByteArrayInputStream(bytes);
573f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
574eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
575eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        keyStore.load(inputStream, PASSWORD.toCharArray());
576eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        inputStream.close();
577f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
578eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        String algorithm = KeyManagerFactory.getDefaultAlgorithm();
579eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(algorithm);
580eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        keyManagerFactory.init(keyStore, PASSWORD.toCharArray());
581f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
582eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        return keyManagerFactory.getKeyManagers();
583eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    }
584eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob
585eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob    private SSLServerSocket getSSLServerSocket() throws Exception {
586eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLContext context = SSLContext.getInstance("TLS");
587eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        context.init(getKeyManagers(), null, null);
588eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        SSLServerSocket sss = (SSLServerSocket) context.getServerSocketFactory()
589eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob                .createServerSocket();
590eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob        return sss;
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
592f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
593d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes    @TestTargetNew(
594d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        level = TestLevel.COMPLETE,
595d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        notes = "Guard against native resource leakage.",
596d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        method = "SSLSocket",
597d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        args = {}
598d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes    )
599d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes    public void test_creationStressTest() throws Exception {
600d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        KeyManager[] keyManagers = getKeyManagers();
601d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        // Test the default codepath, which uses /dev/urandom.
602d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        SSLContext sslContext = SSLContext.getInstance("TLS");
603d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        sslContext.init(keyManagers, null, null);
604d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        for (int i = 0; i < 2048; ++i) {
605d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes            sslContext.getServerSocketFactory().createServerSocket();
606d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        }
607f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
608d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        // Test the other codepath, which copies a seed from a byte[].
609d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        sslContext.init(keyManagers, null, new SecureRandom());
610d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        for (int i = 0; i < 2048; ++i) {
611d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes            sslContext.getServerSocketFactory().createServerSocket();
612d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes        }
613d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes    }
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
615