SSLSessionTest.java revision 4557728efb66c455a52b7669a8eefef7a9e54854
1/*
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
17package libcore.javax.net.ssl;
18
19import libcore.java.security.StandardNames;
20import libcore.java.security.TestKeyStore;
21import java.util.Arrays;
22import javax.net.ssl.SSLPeerUnverifiedException;
23import junit.framework.TestCase;
24
25public class SSLSessionTest extends TestCase {
26
27    public void test_SSLSocket_TestSSLSessions_create() {
28        TestSSLSessions s = TestSSLSessions.create();
29        assertNotNull(s.invalid);
30        assertFalse(s.invalid.isValid());
31        assertTrue(s.server.isValid());
32        assertTrue(s.client.isValid());
33    }
34
35    public void test_SSLSession_getApplicationBufferSize() {
36        TestSSLSessions s = TestSSLSessions.create();
37        assertTrue(s.invalid.getApplicationBufferSize() > 0);
38        assertTrue(s.server.getApplicationBufferSize() > 0);
39        assertTrue(s.client.getApplicationBufferSize() > 0);
40    }
41
42    public void test_SSLSession_getCipherSuite() {
43        TestSSLSessions s = TestSSLSessions.create();
44        assertNotNull(s.invalid.getCipherSuite());
45        assertEquals(StandardNames.CIPHER_SUITE_INVALID, s.invalid.getCipherSuite());
46        assertNotNull(s.server.getCipherSuite());
47        assertNotNull(s.client.getCipherSuite());
48        assertEquals(s.server.getCipherSuite(),
49                     s.client.getCipherSuite());
50        assertTrue(StandardNames.CIPHER_SUITES.contains(s.server.getCipherSuite()));
51    }
52
53    public void test_SSLSession_getCreationTime() {
54        TestSSLSessions s = TestSSLSessions.create();
55        assertTrue(s.invalid.getCreationTime() > 0);
56        assertTrue(s.server.getCreationTime() > 0);
57        assertTrue(s.client.getCreationTime() > 0);
58        assertTrue(Math.abs(s.server.getCreationTime() - s.client.getCreationTime()) < 1 * 1000);
59    }
60
61    public void test_SSLSession_getId() {
62        TestSSLSessions s = TestSSLSessions.create();
63        assertNotNull(s.invalid.getId());
64        assertNotNull(s.server.getId());
65        assertNotNull(s.client.getId());
66        assertEquals(0, s.invalid.getId().length);
67        if (TestSSLContext.sslServerSocketSupportsSessionTickets()) {
68            assertEquals(0, s.server.getId().length);
69        } else {
70            assertEquals(32, s.server.getId().length);
71            assertTrue(Arrays.equals(s.server.getId(), s.client.getId()));
72        }
73        assertEquals(32, s.client.getId().length);
74    }
75
76    public void test_SSLSession_getLastAccessedTime() {
77        TestSSLSessions s = TestSSLSessions.create();
78        assertTrue(s.invalid.getLastAccessedTime() > 0);
79        assertTrue(s.server.getLastAccessedTime() > 0);
80        assertTrue(s.client.getLastAccessedTime() > 0);
81        assertTrue(Math.abs(s.server.getLastAccessedTime()
82                            - s.client.getLastAccessedTime()) < 1 * 1000);
83        assertTrue(s.server.getLastAccessedTime() >=
84                   s.server.getCreationTime());
85        assertTrue(s.client.getLastAccessedTime() >=
86                   s.client.getCreationTime());
87    }
88
89    public void test_SSLSession_getLocalCertificates() throws Exception {
90        TestSSLSessions s = TestSSLSessions.create();
91        assertNull(s.invalid.getLocalCertificates());
92        assertNull(s.client.getLocalCertificates());
93        assertNotNull(s.server.getLocalCertificates());
94        TestKeyStore.assertChainLength(s.server.getLocalCertificates());
95        TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager,
96                                                    s.server.getLocalCertificates());
97        TestSSLContext.assertCertificateInKeyStore(s.server.getLocalCertificates()[0],
98                                                   s.s.c.serverKeyStore);
99    }
100
101    public void test_SSLSession_getLocalPrincipal() throws Exception {
102        TestSSLSessions s = TestSSLSessions.create();
103        assertNull(s.invalid.getLocalPrincipal());
104        assertNull(s.client.getLocalPrincipal());
105        assertNotNull(s.server.getLocalPrincipal());
106        assertNotNull(s.server.getLocalPrincipal().getName());
107        TestSSLContext.assertCertificateInKeyStore(s.server.getLocalPrincipal(),
108                                                   s.s.c.serverKeyStore);
109    }
110
111    public void test_SSLSession_getPacketBufferSize() {
112        TestSSLSessions s = TestSSLSessions.create();
113        assertTrue(s.invalid.getPacketBufferSize() > 0);
114        assertTrue(s.server.getPacketBufferSize() > 0);
115        assertTrue(s.client.getPacketBufferSize() > 0);
116    }
117
118    public void test_SSLSession_getPeerCertificateChain() throws Exception {
119        TestSSLSessions s = TestSSLSessions.create();
120        try {
121            s.invalid.getPeerCertificateChain();
122            fail();
123        } catch (SSLPeerUnverifiedException expected) {
124        }
125        assertNotNull(s.client.getPeerCertificates());
126        TestKeyStore.assertChainLength(s.client.getPeerCertificateChain());
127        try {
128            assertNull(s.server.getPeerCertificateChain());
129            fail();
130        } catch (SSLPeerUnverifiedException expected) {
131        }
132    }
133
134    public void test_SSLSession_getPeerCertificates() throws Exception {
135        TestSSLSessions s = TestSSLSessions.create();
136        try {
137            s.invalid.getPeerCertificates();
138            fail();
139        } catch (SSLPeerUnverifiedException expected) {
140        }
141        assertNotNull(s.client.getPeerCertificates());
142        TestKeyStore.assertChainLength(s.client.getPeerCertificates());
143        TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager,
144                                                    s.client.getPeerCertificates());
145        TestSSLContext.assertCertificateInKeyStore(s.client.getPeerCertificates()[0],
146                                                   s.s.c.serverKeyStore);
147        try {
148            s.server.getPeerCertificates();
149            fail();
150        } catch (SSLPeerUnverifiedException expected) {
151        }
152    }
153
154    public void test_SSLSession_getPeerHost() {
155        TestSSLSessions s = TestSSLSessions.create();
156        assertNull(s.invalid.getPeerHost());
157        assertNotNull(s.server.getPeerHost());
158        assertNotNull(s.client.getPeerHost());
159    }
160
161    public void test_SSLSession_getPeerPort() {
162        TestSSLSessions s = TestSSLSessions.create();
163        assertEquals(-1, s.invalid.getPeerPort());
164        assertTrue(s.server.getPeerPort() > 0);
165        assertEquals(s.s.c.port, s.client.getPeerPort());
166    }
167
168    public void test_SSLSession_getPeerPrincipal() throws Exception {
169        TestSSLSessions s = TestSSLSessions.create();
170        try {
171            s.invalid.getPeerPrincipal();
172            fail();
173        } catch (SSLPeerUnverifiedException expected) {
174        }
175        try {
176            s.server.getPeerPrincipal();
177            fail();
178        } catch (SSLPeerUnverifiedException expected) {
179        }
180        assertNotNull(s.client.getPeerPrincipal());
181        assertNotNull(s.client.getPeerPrincipal().getName());
182        TestSSLContext.assertCertificateInKeyStore(s.client.getPeerPrincipal(),
183                                                   s.s.c.serverKeyStore);
184    }
185
186    public void test_SSLSession_getProtocol() {
187        TestSSLSessions s = TestSSLSessions.create();
188        assertNotNull(s.invalid.getProtocol());
189        assertEquals("NONE", s.invalid.getProtocol());
190        assertNotNull(s.server.getProtocol());
191        assertNotNull(s.client.getProtocol());
192        assertEquals(s.server.getProtocol(),
193                     s.client.getProtocol());
194        assertTrue(StandardNames.SSL_SOCKET_PROTOCOLS.contains(s.server.getProtocol()));
195    }
196
197    public void test_SSLSession_getSessionContext() {
198        TestSSLSessions s = TestSSLSessions.create();
199        assertNull(s.invalid.getSessionContext());
200        assertNotNull(s.server.getSessionContext());
201        assertNotNull(s.client.getSessionContext());
202        assertEquals(s.s.c.serverContext.getServerSessionContext(),
203                     s.server.getSessionContext());
204        assertEquals(s.s.c.clientContext.getClientSessionContext(),
205                     s.client.getSessionContext());
206        assertNotSame(s.server.getSessionContext(),
207                      s.client.getSessionContext());
208    }
209
210    public void test_SSLSession_getValue() {
211        TestSSLSessions s = TestSSLSessions.create();
212        try {
213            s.invalid.getValue(null);
214        } catch (IllegalArgumentException expected) {
215        }
216        assertNull(s.invalid.getValue("BOGUS"));
217    }
218
219    public void test_SSLSession_getValueNames() {
220        TestSSLSessions s = TestSSLSessions.create();
221        assertNotNull(s.invalid.getValueNames());
222        assertEquals(0, s.invalid.getValueNames().length);
223    }
224
225    public void test_SSLSession_invalidate() {
226        TestSSLSessions s = TestSSLSessions.create();
227        assertFalse(s.invalid.isValid());
228        s.invalid.invalidate();
229        assertFalse(s.invalid.isValid());
230        assertNull(s.invalid.getSessionContext());
231
232        assertTrue(s.server.isValid());
233        s.server.invalidate();
234        assertFalse(s.server.isValid());
235        assertNull(s.server.getSessionContext());
236
237        assertTrue(s.client.isValid());
238        s.client.invalidate();
239        assertFalse(s.client.isValid());
240        assertNull(s.client.getSessionContext());
241    }
242
243    public void test_SSLSession_isValid() {
244        TestSSLSessions s = TestSSLSessions.create();
245        assertFalse(s.invalid.isValid());
246        assertTrue(s.server.isValid());
247        assertTrue(s.client.isValid());
248    }
249
250    public void test_SSLSession_putValue() {
251        TestSSLSessions s = TestSSLSessions.create();
252        String key = "KEY";
253        String value = "VALUE";
254        assertNull(s.invalid.getValue(key));
255        assertEquals(0, s.invalid.getValueNames().length);
256        s.invalid.putValue(key, value);
257        assertSame(value, s.invalid.getValue(key));
258        assertEquals(1, s.invalid.getValueNames().length);
259        assertEquals(key, s.invalid.getValueNames()[0]);
260    }
261
262    public void test_SSLSession_removeValue() {
263        TestSSLSessions s = TestSSLSessions.create();
264        String key = "KEY";
265        String value = "VALUE";
266        s.invalid.putValue(key, value);
267        assertEquals(1, s.invalid.getValueNames().length);
268        assertEquals(key, s.invalid.getValueNames()[0]);
269        s.invalid.removeValue(key);
270        assertNull(s.invalid.getValue(key));
271        assertEquals(0, s.invalid.getValueNames().length);
272    }
273}
274