SSLSessionTest.java revision d4b7449574ca69c713a3f2230cb77c68ee642700
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 s.close(); 34 } 35 36 public void test_SSLSession_getApplicationBufferSize() { 37 TestSSLSessions s = TestSSLSessions.create(); 38 assertTrue(s.invalid.getApplicationBufferSize() > 0); 39 assertTrue(s.server.getApplicationBufferSize() > 0); 40 assertTrue(s.client.getApplicationBufferSize() > 0); 41 s.close(); 42 } 43 44 public void test_SSLSession_getCipherSuite() { 45 TestSSLSessions s = TestSSLSessions.create(); 46 assertNotNull(s.invalid.getCipherSuite()); 47 assertEquals(StandardNames.CIPHER_SUITE_INVALID, s.invalid.getCipherSuite()); 48 assertNotNull(s.server.getCipherSuite()); 49 assertNotNull(s.client.getCipherSuite()); 50 assertEquals(s.server.getCipherSuite(), 51 s.client.getCipherSuite()); 52 StandardNames.assertValidCipherSuites(new String[] {s.server.getCipherSuite()}); 53 s.close(); 54 } 55 56 public void test_SSLSession_getCreationTime() { 57 // 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; 62 TestSSLSessions s = TestSSLSessions.create(); 63 long t1 = System.currentTimeMillis() / 1000; 64 65 assertTrue(s.invalid.getCreationTime() > 0); 66 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 75 s.close(); 76 } 77 78 public void test_SSLSession_getId() { 79 TestSSLSessions s = TestSSLSessions.create(); 80 assertNotNull(s.invalid.getId()); 81 assertNotNull(s.server.getId()); 82 assertNotNull(s.client.getId()); 83 assertEquals(0, s.invalid.getId().length); 84 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 } 90 assertEquals(32, s.client.getId().length); 91 s.close(); 92 } 93 94 public void test_SSLSession_getLastAccessedTime() { 95 TestSSLSessions s = TestSSLSessions.create(); 96 assertTrue(s.invalid.getLastAccessedTime() > 0); 97 assertTrue(s.server.getLastAccessedTime() > 0); 98 assertTrue(s.client.getLastAccessedTime() > 0); 99 assertTrue("s.server.getLastAccessedTime()=" + s.server.getLastAccessedTime() + " " + 100 "s.client.getLastAccessedTime()=" + s.client.getLastAccessedTime(), 101 Math.abs(s.server.getLastAccessedTime() 102 - s.client.getLastAccessedTime()) <= 1 * 1000); 103 assertTrue(s.server.getLastAccessedTime() >= 104 s.server.getCreationTime()); 105 assertTrue(s.client.getLastAccessedTime() >= 106 s.client.getCreationTime()); 107 s.close(); 108 } 109 110 public void test_SSLSession_getLocalCertificates() throws Exception { 111 TestSSLSessions s = TestSSLSessions.create(); 112 assertNull(s.invalid.getLocalCertificates()); 113 assertNull(s.client.getLocalCertificates()); 114 assertNotNull(s.server.getLocalCertificates()); 115 TestKeyStore.assertChainLength(s.server.getLocalCertificates()); 116 TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager, 117 s.server.getLocalCertificates()); 118 TestSSLContext.assertCertificateInKeyStore(s.server.getLocalCertificates()[0], 119 s.s.c.serverKeyStore); 120 s.close(); 121 } 122 123 public void test_SSLSession_getLocalPrincipal() throws Exception { 124 TestSSLSessions s = TestSSLSessions.create(); 125 assertNull(s.invalid.getLocalPrincipal()); 126 assertNull(s.client.getLocalPrincipal()); 127 assertNotNull(s.server.getLocalPrincipal()); 128 assertNotNull(s.server.getLocalPrincipal().getName()); 129 TestSSLContext.assertCertificateInKeyStore(s.server.getLocalPrincipal(), 130 s.s.c.serverKeyStore); 131 s.close(); 132 } 133 134 public void test_SSLSession_getPacketBufferSize() { 135 TestSSLSessions s = TestSSLSessions.create(); 136 assertTrue(s.invalid.getPacketBufferSize() > 0); 137 assertTrue(s.server.getPacketBufferSize() > 0); 138 assertTrue(s.client.getPacketBufferSize() > 0); 139 s.close(); 140 } 141 142 public void test_SSLSession_getPeerCertificateChain() throws Exception { 143 TestSSLSessions s = TestSSLSessions.create(); 144 try { 145 s.invalid.getPeerCertificateChain(); 146 fail(); 147 } catch (SSLPeerUnverifiedException expected) { 148 } 149 assertNotNull(s.client.getPeerCertificates()); 150 TestKeyStore.assertChainLength(s.client.getPeerCertificateChain()); 151 try { 152 assertNull(s.server.getPeerCertificateChain()); 153 fail(); 154 } catch (SSLPeerUnverifiedException expected) { 155 } 156 s.close(); 157 } 158 159 public void test_SSLSession_getPeerCertificates() throws Exception { 160 TestSSLSessions s = TestSSLSessions.create(); 161 try { 162 s.invalid.getPeerCertificates(); 163 fail(); 164 } catch (SSLPeerUnverifiedException expected) { 165 } 166 assertNotNull(s.client.getPeerCertificates()); 167 TestKeyStore.assertChainLength(s.client.getPeerCertificates()); 168 TestSSLContext.assertServerCertificateChain(s.s.c.serverTrustManager, 169 s.client.getPeerCertificates()); 170 TestSSLContext.assertCertificateInKeyStore(s.client.getPeerCertificates()[0], 171 s.s.c.serverKeyStore); 172 try { 173 s.server.getPeerCertificates(); 174 fail(); 175 } catch (SSLPeerUnverifiedException expected) { 176 } 177 s.close(); 178 } 179 180 public void test_SSLSession_getPeerHost() { 181 TestSSLSessions s = TestSSLSessions.create(); 182 assertNull(s.invalid.getPeerHost()); 183 assertNotNull(s.server.getPeerHost()); 184 assertNotNull(s.client.getPeerHost()); 185 s.close(); 186 } 187 188 public void test_SSLSession_getPeerPort() { 189 TestSSLSessions s = TestSSLSessions.create(); 190 assertEquals(-1, s.invalid.getPeerPort()); 191 assertTrue(s.server.getPeerPort() > 0); 192 assertEquals(s.s.c.port, s.client.getPeerPort()); 193 s.close(); 194 } 195 196 public void test_SSLSession_getPeerPrincipal() throws Exception { 197 TestSSLSessions s = TestSSLSessions.create(); 198 try { 199 s.invalid.getPeerPrincipal(); 200 fail(); 201 } catch (SSLPeerUnverifiedException expected) { 202 } 203 try { 204 s.server.getPeerPrincipal(); 205 fail(); 206 } catch (SSLPeerUnverifiedException expected) { 207 } 208 assertNotNull(s.client.getPeerPrincipal()); 209 assertNotNull(s.client.getPeerPrincipal().getName()); 210 TestSSLContext.assertCertificateInKeyStore(s.client.getPeerPrincipal(), 211 s.s.c.serverKeyStore); 212 s.close(); 213 } 214 215 public void test_SSLSession_getProtocol() { 216 TestSSLSessions s = TestSSLSessions.create(); 217 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()); 223 assertTrue(StandardNames.SSL_SOCKET_PROTOCOLS.contains(s.server.getProtocol())); 224 s.close(); 225 } 226 227 public void test_SSLSession_getSessionContext() { 228 TestSSLSessions s = TestSSLSessions.create(); 229 assertNull(s.invalid.getSessionContext()); 230 assertNotNull(s.server.getSessionContext()); 231 assertNotNull(s.client.getSessionContext()); 232 assertEquals(s.s.c.serverContext.getServerSessionContext(), 233 s.server.getSessionContext()); 234 assertEquals(s.s.c.clientContext.getClientSessionContext(), 235 s.client.getSessionContext()); 236 assertNotSame(s.server.getSessionContext(), 237 s.client.getSessionContext()); 238 s.close(); 239 } 240 241 public void test_SSLSession_getValue() { 242 TestSSLSessions s = TestSSLSessions.create(); 243 try { 244 s.invalid.getValue(null); 245 fail(); 246 } catch (IllegalArgumentException expected) { 247 } 248 assertNull(s.invalid.getValue("BOGUS")); 249 s.close(); 250 } 251 252 public void test_SSLSession_getValueNames() { 253 TestSSLSessions s = TestSSLSessions.create(); 254 assertNotNull(s.invalid.getValueNames()); 255 assertEquals(0, s.invalid.getValueNames().length); 256 s.close(); 257 } 258 259 public void test_SSLSession_invalidate() { 260 TestSSLSessions s = TestSSLSessions.create(); 261 262 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()); 276 277 s.close(); 278 } 279 280 public void test_SSLSession_isValid() { 281 TestSSLSessions s = TestSSLSessions.create(); 282 assertFalse(s.invalid.isValid()); 283 assertTrue(s.server.isValid()); 284 assertTrue(s.client.isValid()); 285 s.close(); 286 } 287 288 public void test_SSLSession_putValue() { 289 TestSSLSessions s = TestSSLSessions.create(); 290 String key = "KEY"; 291 String value = "VALUE"; 292 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]); 298 s.close(); 299 } 300 301 public void test_SSLSession_removeValue() { 302 TestSSLSessions s = TestSSLSessions.create(); 303 String key = "KEY"; 304 String value = "VALUE"; 305 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); 311 s.close(); 312 } 313} 314