blob: 5691dfb3a9acd2021aecfe162a9df0a7f6d38007 [file] [log] [blame]
Brian Carlstromebabb912010-04-02 14:13:53 -07001/*
2 * Copyright (C) 2010 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
Jesse Wilson45577282010-08-10 15:07:34 -070017package libcore.javax.net.ssl;
Brian Carlstromebabb912010-04-02 14:13:53 -070018
Jesse Wilson45577282010-08-10 15:07:34 -070019import libcore.java.security.StandardNames;
20import libcore.java.security.TestKeyStore;
Brian Carlstromebabb912010-04-02 14:13:53 -070021import java.util.Arrays;
Jesse Wilson45577282010-08-10 15:07:34 -070022import javax.net.ssl.SSLPeerUnverifiedException;
Brian Carlstromebabb912010-04-02 14:13:53 -070023import junit.framework.TestCase;
24
25public class SSLSessionTest extends TestCase {
26
Brian Carlstrombcfb3252010-05-02 11:27:52 -070027 public void test_SSLSocket_TestSSLSessions_create() {
28 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -070029 assertNotNull(s.invalid);
30 assertFalse(s.invalid.isValid());
31 assertTrue(s.server.isValid());
32 assertTrue(s.client.isValid());
Brian Carlstromf7aab022010-09-29 17:29:11 -070033 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -070034 }
35
36 public void test_SSLSession_getApplicationBufferSize() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -070037 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -070038 assertTrue(s.invalid.getApplicationBufferSize() > 0);
39 assertTrue(s.server.getApplicationBufferSize() > 0);
40 assertTrue(s.client.getApplicationBufferSize() > 0);
Brian Carlstromf7aab022010-09-29 17:29:11 -070041 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -070042 }
43
Brian Carlstromebabb912010-04-02 14:13:53 -070044 public void test_SSLSession_getCipherSuite() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -070045 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -070046 assertNotNull(s.invalid.getCipherSuite());
Brian Carlstromfd487fb2010-05-17 16:10:53 -070047 assertEquals(StandardNames.CIPHER_SUITE_INVALID, s.invalid.getCipherSuite());
Brian Carlstromebabb912010-04-02 14:13:53 -070048 assertNotNull(s.server.getCipherSuite());
49 assertNotNull(s.client.getCipherSuite());
50 assertEquals(s.server.getCipherSuite(),
51 s.client.getCipherSuite());
Alex Klyubin2cd541f2013-10-30 15:36:03 -070052 StandardNames.assertValidCipherSuites(new String[] {s.server.getCipherSuite()});
Brian Carlstromf7aab022010-09-29 17:29:11 -070053 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -070054 }
55
56 public void test_SSLSession_getCreationTime() {
Elliott Hughes8399ee32012-07-16 18:20:20 -070057 // We use OpenSSL, which only returns times accurate to the nearest second.
58 // NativeCrypto just multiplies by 1000, which looks like truncation, which
59 // would make it appear as if the OpenSSL side of things was created before
60 // we called it.
61 long t0 = System.currentTimeMillis() / 1000;
Brian Carlstrombcfb3252010-05-02 11:27:52 -070062 TestSSLSessions s = TestSSLSessions.create();
Elliott Hughes8399ee32012-07-16 18:20:20 -070063 long t1 = System.currentTimeMillis() / 1000;
64
Brian Carlstromebabb912010-04-02 14:13:53 -070065 assertTrue(s.invalid.getCreationTime() > 0);
Elliott Hughes8399ee32012-07-16 18:20:20 -070066
67 long sTime = s.server.getCreationTime() / 1000;
68 assertTrue(sTime + " >= " + t0, sTime >= t0);
69 assertTrue(sTime + " <= " + t1, sTime <= t1);
70
71 long cTime = s.client.getCreationTime() / 1000;
72 assertTrue(cTime + " >= " + t0, cTime >= t0);
73 assertTrue(cTime + " <= " + t1, cTime <= t1);
74
Brian Carlstromf7aab022010-09-29 17:29:11 -070075 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -070076 }
77
78 public void test_SSLSession_getId() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -070079 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -070080 assertNotNull(s.invalid.getId());
81 assertNotNull(s.server.getId());
82 assertNotNull(s.client.getId());
83 assertEquals(0, s.invalid.getId().length);
Brian Carlstrombcfb3252010-05-02 11:27:52 -070084 if (TestSSLContext.sslServerSocketSupportsSessionTickets()) {
85 assertEquals(0, s.server.getId().length);
86 } else {
87 assertEquals(32, s.server.getId().length);
88 assertTrue(Arrays.equals(s.server.getId(), s.client.getId()));
89 }
Brian Carlstromebabb912010-04-02 14:13:53 -070090 assertEquals(32, s.client.getId().length);
Brian Carlstromf7aab022010-09-29 17:29:11 -070091 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -070092 }
93
94 public void test_SSLSession_getLastAccessedTime() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -070095 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -070096 assertTrue(s.invalid.getLastAccessedTime() > 0);
97 assertTrue(s.server.getLastAccessedTime() > 0);
98 assertTrue(s.client.getLastAccessedTime() > 0);
Brian Carlstrom32bf67c2013-08-31 11:38:07 -070099 assertTrue("s.server.getLastAccessedTime()=" + s.server.getLastAccessedTime() + " " +
100 "s.client.getLastAccessedTime()=" + s.client.getLastAccessedTime(),
101 Math.abs(s.server.getLastAccessedTime()
zhulin09103f498822015-09-24 14:21:45 +0800102 - s.client.getLastAccessedTime()) <= 1 * 1000);
Brian Carlstromebabb912010-04-02 14:13:53 -0700103 assertTrue(s.server.getLastAccessedTime() >=
104 s.server.getCreationTime());
105 assertTrue(s.client.getLastAccessedTime() >=
106 s.client.getCreationTime());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700107 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700108 }
109
110 public void test_SSLSession_getLocalCertificates() throws Exception {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700111 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700112 assertNull(s.invalid.getLocalCertificates());
113 assertNull(s.client.getLocalCertificates());
114 assertNotNull(s.server.getLocalCertificates());
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700115 TestKeyStore.assertChainLength(s.server.getLocalCertificates());
116 TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager,
117 s.server.getLocalCertificates());
Brian Carlstrom204cab32010-05-17 15:23:45 -0700118 TestSSLContext.assertCertificateInKeyStore(s.server.getLocalCertificates()[0],
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700119 s.s.c.serverKeyStore);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700120 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700121 }
122
123 public void test_SSLSession_getLocalPrincipal() throws Exception {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700124 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700125 assertNull(s.invalid.getLocalPrincipal());
126 assertNull(s.client.getLocalPrincipal());
127 assertNotNull(s.server.getLocalPrincipal());
128 assertNotNull(s.server.getLocalPrincipal().getName());
Brian Carlstrom204cab32010-05-17 15:23:45 -0700129 TestSSLContext.assertCertificateInKeyStore(s.server.getLocalPrincipal(),
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700130 s.s.c.serverKeyStore);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700131 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700132 }
133
134 public void test_SSLSession_getPacketBufferSize() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700135 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700136 assertTrue(s.invalid.getPacketBufferSize() > 0);
137 assertTrue(s.server.getPacketBufferSize() > 0);
138 assertTrue(s.client.getPacketBufferSize() > 0);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700139 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700140 }
141
142 public void test_SSLSession_getPeerCertificateChain() throws Exception {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700143 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700144 try {
145 s.invalid.getPeerCertificateChain();
146 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700147 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700148 }
149 assertNotNull(s.client.getPeerCertificates());
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700150 TestKeyStore.assertChainLength(s.client.getPeerCertificateChain());
Brian Carlstromebabb912010-04-02 14:13:53 -0700151 try {
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700152 assertNull(s.server.getPeerCertificateChain());
Brian Carlstromebabb912010-04-02 14:13:53 -0700153 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700154 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700155 }
Brian Carlstromf7aab022010-09-29 17:29:11 -0700156 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700157 }
158
159 public void test_SSLSession_getPeerCertificates() throws Exception {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700160 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700161 try {
162 s.invalid.getPeerCertificates();
163 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700164 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700165 }
166 assertNotNull(s.client.getPeerCertificates());
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700167 TestKeyStore.assertChainLength(s.client.getPeerCertificates());
168 TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager,
169 s.client.getPeerCertificates());
Brian Carlstrom204cab32010-05-17 15:23:45 -0700170 TestSSLContext.assertCertificateInKeyStore(s.client.getPeerCertificates()[0],
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700171 s.s.c.serverKeyStore);
Brian Carlstromebabb912010-04-02 14:13:53 -0700172 try {
173 s.server.getPeerCertificates();
174 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700175 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700176 }
Brian Carlstromf7aab022010-09-29 17:29:11 -0700177 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700178 }
179
180 public void test_SSLSession_getPeerHost() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700181 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700182 assertNull(s.invalid.getPeerHost());
183 assertNotNull(s.server.getPeerHost());
184 assertNotNull(s.client.getPeerHost());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700185 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700186 }
187
188 public void test_SSLSession_getPeerPort() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700189 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700190 assertEquals(-1, s.invalid.getPeerPort());
191 assertTrue(s.server.getPeerPort() > 0);
192 assertEquals(s.s.c.port, s.client.getPeerPort());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700193 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700194 }
195
196 public void test_SSLSession_getPeerPrincipal() throws Exception {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700197 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700198 try {
199 s.invalid.getPeerPrincipal();
200 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700201 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700202 }
203 try {
204 s.server.getPeerPrincipal();
205 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700206 } catch (SSLPeerUnverifiedException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700207 }
208 assertNotNull(s.client.getPeerPrincipal());
209 assertNotNull(s.client.getPeerPrincipal().getName());
Brian Carlstrom204cab32010-05-17 15:23:45 -0700210 TestSSLContext.assertCertificateInKeyStore(s.client.getPeerPrincipal(),
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700211 s.s.c.serverKeyStore);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700212 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700213 }
214
215 public void test_SSLSession_getProtocol() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700216 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700217 assertNotNull(s.invalid.getProtocol());
218 assertEquals("NONE", s.invalid.getProtocol());
219 assertNotNull(s.server.getProtocol());
220 assertNotNull(s.client.getProtocol());
221 assertEquals(s.server.getProtocol(),
222 s.client.getProtocol());
Brian Carlstrom9acacc32010-05-14 11:14:18 -0700223 assertTrue(StandardNames.SSL_SOCKET_PROTOCOLS.contains(s.server.getProtocol()));
Brian Carlstromf7aab022010-09-29 17:29:11 -0700224 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700225 }
226
227 public void test_SSLSession_getSessionContext() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700228 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700229 assertNull(s.invalid.getSessionContext());
230 assertNotNull(s.server.getSessionContext());
231 assertNotNull(s.client.getSessionContext());
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700232 assertEquals(s.s.c.serverContext.getServerSessionContext(),
Brian Carlstromebabb912010-04-02 14:13:53 -0700233 s.server.getSessionContext());
Brian Carlstrom059dbc02010-07-08 14:44:44 -0700234 assertEquals(s.s.c.clientContext.getClientSessionContext(),
Brian Carlstromebabb912010-04-02 14:13:53 -0700235 s.client.getSessionContext());
236 assertNotSame(s.server.getSessionContext(),
237 s.client.getSessionContext());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700238 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700239 }
240
241 public void test_SSLSession_getValue() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700242 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700243 try {
244 s.invalid.getValue(null);
Tobias Thiererd4b74492016-09-06 13:58:49 +0100245 fail();
Brian Carlstrome9505132010-05-19 11:34:29 -0700246 } catch (IllegalArgumentException expected) {
Brian Carlstromebabb912010-04-02 14:13:53 -0700247 }
248 assertNull(s.invalid.getValue("BOGUS"));
Brian Carlstromf7aab022010-09-29 17:29:11 -0700249 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700250 }
251
252 public void test_SSLSession_getValueNames() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700253 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700254 assertNotNull(s.invalid.getValueNames());
255 assertEquals(0, s.invalid.getValueNames().length);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700256 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700257 }
258
259 public void test_SSLSession_invalidate() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700260 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromf7aab022010-09-29 17:29:11 -0700261
Brian Carlstromebabb912010-04-02 14:13:53 -0700262 assertFalse(s.invalid.isValid());
263 s.invalid.invalidate();
264 assertFalse(s.invalid.isValid());
265 assertNull(s.invalid.getSessionContext());
266
267 assertTrue(s.server.isValid());
268 s.server.invalidate();
269 assertFalse(s.server.isValid());
270 assertNull(s.server.getSessionContext());
271
272 assertTrue(s.client.isValid());
273 s.client.invalidate();
274 assertFalse(s.client.isValid());
275 assertNull(s.client.getSessionContext());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700276
277 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700278 }
279
280 public void test_SSLSession_isValid() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700281 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstromebabb912010-04-02 14:13:53 -0700282 assertFalse(s.invalid.isValid());
283 assertTrue(s.server.isValid());
284 assertTrue(s.client.isValid());
Brian Carlstromf7aab022010-09-29 17:29:11 -0700285 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700286 }
287
288 public void test_SSLSession_putValue() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700289 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstrom8ee2e662010-04-05 11:50:10 -0700290 String key = "KEY";
291 String value = "VALUE";
Brian Carlstromebabb912010-04-02 14:13:53 -0700292 assertNull(s.invalid.getValue(key));
293 assertEquals(0, s.invalid.getValueNames().length);
294 s.invalid.putValue(key, value);
295 assertSame(value, s.invalid.getValue(key));
296 assertEquals(1, s.invalid.getValueNames().length);
297 assertEquals(key, s.invalid.getValueNames()[0]);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700298 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700299 }
300
301 public void test_SSLSession_removeValue() {
Brian Carlstrombcfb3252010-05-02 11:27:52 -0700302 TestSSLSessions s = TestSSLSessions.create();
Brian Carlstrom8ee2e662010-04-05 11:50:10 -0700303 String key = "KEY";
304 String value = "VALUE";
Brian Carlstromebabb912010-04-02 14:13:53 -0700305 s.invalid.putValue(key, value);
306 assertEquals(1, s.invalid.getValueNames().length);
307 assertEquals(key, s.invalid.getValueNames()[0]);
308 s.invalid.removeValue(key);
309 assertNull(s.invalid.getValue(key));
310 assertEquals(0, s.invalid.getValueNames().length);
Brian Carlstromf7aab022010-09-29 17:29:11 -0700311 s.close();
Brian Carlstromebabb912010-04-02 14:13:53 -0700312 }
313}