blob: 020cd4158d63b760201fb898227c85005dae7893 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.net.ssl;
import dalvik.annotation.KnownFailure;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import junit.framework.TestCase;
public class SSLSessionTest extends TestCase {
public static final class Helper {
/**
* An invalid session that is not connected
*/
public final SSLSession invalid;
/**
* The server side of a connected session
*/
public final SSLSession server;
/**
* The client side of a connected session
*/
public final SSLSession client;
/**
* The associated SSLSocketTest.Helper that is the source of
* the client and server SSLSessions.
*/
public final SSLSocketTest.Helper s;
private Helper(SSLSession invalid,
SSLSession server,
SSLSession client,
SSLSocketTest.Helper s) {
this.invalid = invalid;
this.server = server;
this.client = client;
this.s = s;
}
public static final Helper create() {
try {
SSLSocketFactory sf = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket ssl = (SSLSocket) sf.createSocket();
SSLSession invalid = ssl.getSession();
SSLSocketTest.Helper s = SSLSocketTest.Helper.create_workaround();
return new Helper(invalid, s.server.getSession(), s.client.getSession(), s);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public void test_SSLSocket_Helper_create() {
Helper s = Helper.create();
assertNotNull(s.invalid);
assertFalse(s.invalid.isValid());
assertTrue(s.server.isValid());
assertTrue(s.client.isValid());
}
public void test_SSLSession_getApplicationBufferSize() {
Helper s = Helper.create();
assertTrue(s.invalid.getApplicationBufferSize() > 0);
assertTrue(s.server.getApplicationBufferSize() > 0);
assertTrue(s.client.getApplicationBufferSize() > 0);
}
@KnownFailure("Expected SSL_NULL_WITH_NULL_NULL but received TLS_NULL_WITH_NULL_NULL")
public void test_SSLSession_getCipherSuite() {
Helper s = Helper.create();
assertNotNull(s.invalid.getCipherSuite());
assertEquals("SSL_NULL_WITH_NULL_NULL", s.invalid.getCipherSuite());
assertNotNull(s.server.getCipherSuite());
assertNotNull(s.client.getCipherSuite());
assertEquals(s.server.getCipherSuite(),
s.client.getCipherSuite());
}
public void test_SSLSession_getCreationTime() {
Helper s = Helper.create();
assertTrue(s.invalid.getCreationTime() > 0);
assertTrue(s.server.getCreationTime() > 0);
assertTrue(s.client.getCreationTime() > 0);
assertTrue(Math.abs(s.server.getCreationTime() - s.client.getCreationTime()) < 1 * 1000);
}
public void test_SSLSession_getId() {
Helper s = Helper.create();
assertNotNull(s.invalid.getId());
assertNotNull(s.server.getId());
assertNotNull(s.client.getId());
assertEquals(0, s.invalid.getId().length);
assertEquals(32, s.server.getId().length);
assertEquals(32, s.client.getId().length);
assertTrue(Arrays.equals(s.server.getId(), s.client.getId()));
}
public void test_SSLSession_getLastAccessedTime() {
Helper s = Helper.create();
assertTrue(s.invalid.getLastAccessedTime() > 0);
assertTrue(s.server.getLastAccessedTime() > 0);
assertTrue(s.client.getLastAccessedTime() > 0);
assertTrue(Math.abs(s.server.getLastAccessedTime() -
s.client.getLastAccessedTime()) < 1 * 1000);
assertTrue(s.server.getLastAccessedTime() >=
s.server.getCreationTime());
assertTrue(s.client.getLastAccessedTime() >=
s.client.getCreationTime());
}
public void test_SSLSession_getLocalCertificates() throws Exception {
Helper s = Helper.create();
assertNull(s.invalid.getLocalCertificates());
assertNull(s.client.getLocalCertificates());
assertNotNull(s.server.getLocalCertificates());
assertEquals(1, s.server.getLocalCertificates().length);
assertEquals(s.s.c.keyStore.getCertificate(s.s.c.publicAlias),
s.server.getLocalCertificates()[0]);
}
public void test_SSLSession_getLocalPrincipal() throws Exception {
Helper s = Helper.create();
assertNull(s.invalid.getLocalPrincipal());
assertNull(s.client.getLocalPrincipal());
assertNotNull(s.server.getLocalPrincipal());
assertNotNull(s.server.getLocalPrincipal().getName());
X509Certificate x509certificate = (X509Certificate)
s.s.c.keyStore.getCertificate(s.s.c.publicAlias);
assertEquals(x509certificate.getSubjectDN().getName(),
s.server.getLocalPrincipal().getName());
}
public void test_SSLSession_getPacketBufferSize() {
Helper s = Helper.create();
assertTrue(s.invalid.getPacketBufferSize() > 0);
assertTrue(s.server.getPacketBufferSize() > 0);
assertTrue(s.client.getPacketBufferSize() > 0);
}
public void test_SSLSession_getPeerCertificateChain() throws Exception {
Helper s = Helper.create();
try {
s.invalid.getPeerCertificateChain();
fail();
} catch (SSLPeerUnverifiedException e) {
}
assertNotNull(s.client.getPeerCertificates());
assertEquals(1, s.client.getPeerCertificates().length);
assertEquals(s.s.c.keyStore.getCertificate(s.s.c.publicAlias),
s.client.getPeerCertificates()[0]);
try {
assertNull(s.server.getPeerCertificates());
fail();
} catch (SSLPeerUnverifiedException e) {
}
}
public void test_SSLSession_getPeerCertificates() throws Exception {
Helper s = Helper.create();
try {
s.invalid.getPeerCertificates();
fail();
} catch (SSLPeerUnverifiedException e) {
}
assertNotNull(s.client.getPeerCertificates());
assertEquals(1, s.client.getPeerCertificates().length);
assertEquals(s.s.c.keyStore.getCertificate(s.s.c.publicAlias),
s.client.getPeerCertificates()[0]);
try {
s.server.getPeerCertificates();
fail();
} catch (SSLPeerUnverifiedException e) {
}
}
public void test_SSLSession_getPeerHost() {
Helper s = Helper.create();
assertNull(s.invalid.getPeerHost());
assertNotNull(s.server.getPeerHost());
assertNotNull(s.client.getPeerHost());
}
public void test_SSLSession_getPeerPort() {
Helper s = Helper.create();
assertEquals(-1, s.invalid.getPeerPort());
assertTrue(s.server.getPeerPort() > 0);
assertEquals(s.s.c.port, s.client.getPeerPort());
}
public void test_SSLSession_getPeerPrincipal() throws Exception {
Helper s = Helper.create();
try {
s.invalid.getPeerPrincipal();
fail();
} catch (SSLPeerUnverifiedException e) {
}
try {
s.server.getPeerPrincipal();
fail();
} catch (SSLPeerUnverifiedException e) {
}
assertNotNull(s.client.getPeerPrincipal());
assertNotNull(s.client.getPeerPrincipal().getName());
X509Certificate x509certificate = (X509Certificate)
s.s.c.keyStore.getCertificate(s.s.c.publicAlias);
assertEquals(x509certificate.getSubjectDN().getName(),
s.client.getPeerPrincipal().getName());
}
public void test_SSLSession_getProtocol() {
Helper s = Helper.create();
assertNotNull(s.invalid.getProtocol());
assertEquals("NONE", s.invalid.getProtocol());
assertNotNull(s.server.getProtocol());
assertNotNull(s.client.getProtocol());
assertEquals(s.server.getProtocol(),
s.client.getProtocol());
}
public void test_SSLSession_getSessionContext() {
Helper s = Helper.create();
assertNull(s.invalid.getSessionContext());
assertNotNull(s.server.getSessionContext());
assertNotNull(s.client.getSessionContext());
assertEquals(s.s.c.sslContext.getServerSessionContext(),
s.server.getSessionContext());
assertEquals(s.s.c.sslContext.getClientSessionContext(),
s.client.getSessionContext());
assertNotSame(s.server.getSessionContext(),
s.client.getSessionContext());
}
public void test_SSLSession_getValue() {
Helper s = Helper.create();
try {
s.invalid.getValue(null);
} catch (IllegalArgumentException e) {
}
assertNull(s.invalid.getValue("BOGUS"));
}
public void test_SSLSession_getValueNames() {
Helper s = Helper.create();
assertNotNull(s.invalid.getValueNames());
assertEquals(0, s.invalid.getValueNames().length);
}
public void test_SSLSession_invalidate() {
Helper s = Helper.create();
assertFalse(s.invalid.isValid());
s.invalid.invalidate();
assertFalse(s.invalid.isValid());
assertNull(s.invalid.getSessionContext());
assertTrue(s.server.isValid());
s.server.invalidate();
assertFalse(s.server.isValid());
assertNull(s.server.getSessionContext());
assertTrue(s.client.isValid());
s.client.invalidate();
assertFalse(s.client.isValid());
assertNull(s.client.getSessionContext());
}
public void test_SSLSession_isValid() {
Helper s = Helper.create();
assertFalse(s.invalid.isValid());
assertTrue(s.server.isValid());
assertTrue(s.client.isValid());
}
public void test_SSLSession_putValue() {
Helper s = Helper.create();
String key = "KEY";
String value = "VALUE";
assertNull(s.invalid.getValue(key));
assertEquals(0, s.invalid.getValueNames().length);
s.invalid.putValue(key, value);
assertSame(value, s.invalid.getValue(key));
assertEquals(1, s.invalid.getValueNames().length);
assertEquals(key, s.invalid.getValueNames()[0]);
}
public void test_SSLSession_removeValue() {
Helper s = Helper.create();
String key = "KEY";
String value = "VALUE";
s.invalid.putValue(key, value);
assertEquals(1, s.invalid.getValueNames().length);
assertEquals(key, s.invalid.getValueNames()[0]);
s.invalid.removeValue(key);
assertNull(s.invalid.getValue(key));
assertEquals(0, s.invalid.getValueNames().length);
}
}