blob: 900d95073628f6df778b7fba12f39817a89eddca [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 libcore.javax.net.ssl;
import java.security.KeyManagementException;
import java.security.Provider;
import libcore.java.security.StandardNames;
import javax.net.ServerSocketFactory;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSessionContext;
import javax.net.ssl.SSLSocketFactory;
import junit.framework.TestCase;
public class SSLContextTest extends TestCase {
public void test_SSLContext_getDefault() throws Exception {
SSLContext sslContext = SSLContext.getDefault();
assertNotNull(sslContext);
try {
sslContext.init(null, null, null);
} catch (KeyManagementException expected) {
}
}
public void test_SSLContext_setDefault() throws Exception {
try {
SSLContext.setDefault(null);
} catch (NullPointerException expected) {
}
SSLContext defaultContext = SSLContext.getDefault();
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext oldContext = SSLContext.getDefault();
assertNotNull(oldContext);
SSLContext newContext = SSLContext.getInstance(protocol);
assertNotNull(newContext);
assertNotSame(oldContext, newContext);
SSLContext.setDefault(newContext);
assertSame(newContext, SSLContext.getDefault());
}
SSLContext.setDefault(defaultContext);
}
public void test_SSLContext_getInstance() throws Exception {
try {
SSLContext.getInstance(null);
fail();
} catch (NullPointerException expected) {
}
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
assertNotNull(SSLContext.getInstance(protocol));
assertNotSame(SSLContext.getInstance(protocol),
SSLContext.getInstance(protocol));
}
try {
SSLContext.getInstance(null, (String) null);
fail();
} catch (IllegalArgumentException expected) {
}
try {
SSLContext.getInstance(null, "");
fail();
} catch (IllegalArgumentException expected) {
}
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
try {
SSLContext.getInstance(protocol, (String) null);
fail();
} catch (IllegalArgumentException expected) {
}
}
try {
SSLContext.getInstance(null, StandardNames.JSSE_PROVIDER_NAME);
fail();
} catch (NullPointerException expected) {
}
}
public void test_SSLContext_getProtocol() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
String protocolName = SSLContext.getInstance(protocol).getProtocol();
assertNotNull(protocolName);
assertTrue(protocol.startsWith(protocolName));
}
}
public void test_SSLContext_getProvider() throws Exception {
Provider provider = SSLContext.getDefault().getProvider();
assertNotNull(provider);
assertEquals(StandardNames.JSSE_PROVIDER_NAME, provider.getName());
}
public void test_SSLContext_init() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext sslContext = SSLContext.getInstance(protocol);
if (protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
try {
sslContext.init(null, null, null);
} catch (KeyManagementException expected) {
}
} else {
sslContext.init(null, null, null);
}
}
}
public void test_SSLContext_getSocketFactory() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
if (protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
SSLContext.getInstance(protocol).getSocketFactory();
} else {
try {
SSLContext.getInstance(protocol).getSocketFactory();
fail();
} catch (IllegalStateException expected) {
}
}
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
SocketFactory sf = sslContext.getSocketFactory();
assertNotNull(sf);
assertTrue(SSLSocketFactory.class.isAssignableFrom(sf.getClass()));
}
}
public void test_SSLContext_getServerSocketFactory() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
if (protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
SSLContext.getInstance(protocol).getServerSocketFactory();
} else {
try {
SSLContext.getInstance(protocol).getServerSocketFactory();
fail();
} catch (IllegalStateException expected) {
}
}
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
ServerSocketFactory ssf = sslContext.getServerSocketFactory();
assertNotNull(ssf);
assertTrue(SSLServerSocketFactory.class.isAssignableFrom(ssf.getClass()));
}
}
public void test_SSLContext_createSSLEngine() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
if (protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
SSLContext.getInstance(protocol).createSSLEngine();
} else {
try {
SSLContext.getInstance(protocol).createSSLEngine();
fail();
} catch (IllegalStateException expected) {
}
}
if (protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
SSLContext.getInstance(protocol).createSSLEngine(null, -1);
} else {
try {
SSLContext.getInstance(protocol).createSSLEngine(null, -1);
fail();
} catch (IllegalStateException expected) {
}
}
{
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
SSLEngine se = sslContext.createSSLEngine();
assertNotNull(se);
}
{
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
SSLEngine se = sslContext.createSSLEngine(null, -1);
assertNotNull(se);
}
}
}
public void test_SSLContext_getServerSessionContext() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext sslContext = SSLContext.getInstance(protocol);
SSLSessionContext sessionContext = sslContext.getServerSessionContext();
assertNotNull(sessionContext);
if (!StandardNames.IS_RI &&
protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
assertSame(SSLContext.getInstance(protocol).getServerSessionContext(),
sessionContext);
} else {
assertNotSame(SSLContext.getInstance(protocol).getServerSessionContext(),
sessionContext);
}
}
}
public void test_SSLContext_getClientSessionContext() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext sslContext = SSLContext.getInstance(protocol);
SSLSessionContext sessionContext = sslContext.getClientSessionContext();
assertNotNull(sessionContext);
if (!StandardNames.IS_RI &&
protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
assertSame(SSLContext.getInstance(protocol).getClientSessionContext(),
sessionContext);
} else {
assertNotSame(SSLContext.getInstance(protocol).getClientSessionContext(),
sessionContext);
}
}
}
public void test_SSLContext_getDefaultSSLParameters() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
SSLParameters p = sslContext.getDefaultSSLParameters();
assertNotNull(p);
String[] cipherSuites = p.getCipherSuites();
assertNotNull(cipherSuites);
StandardNames.assertValidCipherSuites(StandardNames.CIPHER_SUITES, cipherSuites);
String[] protocols = p.getProtocols();
assertNotNull(protocols);
StandardNames.assertValidCipherSuites(StandardNames.SSL_SOCKET_PROTOCOLS, protocols);
assertFalse(p.getWantClientAuth());
assertFalse(p.getNeedClientAuth());
}
}
public void test_SSLContext_getSupportedSSLParameters() throws Exception {
for (String protocol : StandardNames.SSL_CONTEXT_PROTOCOLS) {
SSLContext sslContext = SSLContext.getInstance(protocol);
if (!protocol.equals(StandardNames.SSL_CONTEXT_PROTOCOLS_DEFAULT)) {
sslContext.init(null, null, null);
}
SSLParameters p = sslContext.getSupportedSSLParameters();
assertNotNull(p);
String[] cipherSuites = p.getCipherSuites();
assertNotNull(cipherSuites);
StandardNames.assertSupportedCipherSuites(StandardNames.CIPHER_SUITES, cipherSuites);
String[] protocols = p.getProtocols();
assertNotNull(protocols);
StandardNames.assertSupportedProtocols(StandardNames.SSL_SOCKET_PROTOCOLS,
protocols);
assertFalse(p.getWantClientAuth());
assertFalse(p.getNeedClientAuth());
}
}
public void test_SSLContextTest_TestSSLContext_create() {
TestSSLContext testContext = TestSSLContext.create();
assertNotNull(testContext);
assertNotNull(testContext.clientKeyStore);
assertNull(testContext.clientStorePassword);
assertNotNull(testContext.serverKeyStore);
assertEquals(StandardNames.IS_RI, testContext.serverStorePassword != null);
assertNotNull(testContext.clientKeyManager);
assertNotNull(testContext.serverKeyManager);
assertNotNull(testContext.clientTrustManager);
assertNotNull(testContext.serverTrustManager);
assertNotNull(testContext.clientContext);
assertNotNull(testContext.serverContext);
assertNotNull(testContext.serverSocket);
assertNotNull(testContext.host);
assertTrue(testContext.port != 0);
testContext.close();
}
}