/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.communication.core.ssl;
import java.io.File;
import java.io.IOException;
import javax.net.ssl.HostnameVerifier;
import org.osgi.framework.Bundle;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
import org.eclipse.riena.core.util.ReflectionUtils;
import org.eclipse.riena.core.wire.Wire;
import org.eclipse.riena.internal.communication.core.ssl.ISSLPropertiesExtension;
import org.eclipse.riena.internal.communication.core.ssl.SSLConfiguration;
import org.eclipse.riena.internal.tests.Activator;
import org.eclipse.riena.tests.nanohttp.TestServer;
/**
*
*/
@NonUITestCase
public class SSLConfigurationTest extends RienaTestCase {
public void testZeroConfiguration() {
printTestName();
final SSLConfiguration config = new SSLConfiguration();
assertNull(ReflectionUtils.getHidden(config, "protocol")); //$NON-NLS-1$
assertNull(ReflectionUtils.getHidden(config, "keystore")); //$NON-NLS-1$
assertNull(ReflectionUtils.getHidden(config, "password")); //$NON-NLS-1$
assertNull(ReflectionUtils.getHidden(config, "hostnameVerifier")); //$NON-NLS-1$
}
public void testOneConfiguration() {
printTestName();
addPluginXml(SSLConfigurationTest.class, "plugin.xml"); //$NON-NLS-1$
try {
final SSLConfiguration config = new SSLConfiguration();
Wire.instance(config).andStart(getContext());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull(ReflectionUtils.getHidden(config, "hostnameVerifier")); //$NON-NLS-1$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier").getClass(), //$NON-NLS-1$
SSLConfiguration.StrictHostnameVerifier.class);
} finally {
removeExtension("org.eclipse.riena.communication.core.ssl.test"); //$NON-NLS-1$
}
}
public void testOneConfigurationWithEncryptedPassword() {
printTestName();
addPluginXml(SSLConfigurationTest.class, "pluginWithEncryptedPassword.xml"); //$NON-NLS-1$
try {
final SSLConfiguration config = new SSLConfiguration();
Wire.instance(config).andStart(getContext());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "cae3c55508eaa369d5c8870398c90a64"); // not encrypted yet!! //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull(ReflectionUtils.getHidden(config, "hostnameVerifier")); //$NON-NLS-1$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier").getClass(), //$NON-NLS-1$
SSLConfiguration.StrictHostnameVerifier.class);
} finally {
removeExtension("org.eclipse.riena.communication.core.ssl.test"); //$NON-NLS-1$
}
}
public void testOneConfigurationWithHostnameVerifier() {
printTestName();
addPluginXml(SSLConfigurationTest.class, "pluginWithHostnameVerifier.xml"); //$NON-NLS-1$
try {
final SSLConfiguration config = new SSLConfiguration();
Wire.instance(config).andStart(getContext());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier").getClass(), TestHostnameVerifier.class); //$NON-NLS-1$
} finally {
removeExtension("org.eclipse.riena.communication.core.ssl.test"); //$NON-NLS-1$
}
}
public void testLocateKeystoreJreCacerts() {
printTestName();
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", "#jre-cacerts#", "changeit"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull(ReflectionUtils.getHidden(config, "hostnameVerifier")); //$NON-NLS-1$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier").getClass(), //$NON-NLS-1$
SSLConfiguration.StrictHostnameVerifier.class);
}
public void testLocateKeystoreJreCacertsEncryptedPassword() {
printTestName();
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", "#jre-cacerts#", //$NON-NLS-1$ //$NON-NLS-2$
"cae3c55508eaa369d5c8870398c90a64", "true"); //$NON-NLS-1$ //$NON-NLS-2$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "cae3c55508eaa369d5c8870398c90a64"); // not encrypted yet!! //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull(ReflectionUtils.getHidden(config, "hostnameVerifier")); //$NON-NLS-1$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier").getClass(), //$NON-NLS-1$
SSLConfiguration.StrictHostnameVerifier.class);
}
public void testGetPasswordCharsNotEncrypted() {
final SSLConfiguration config = new SSLConfiguration();
final char[] password = ReflectionUtils.invokeHidden(config, "getPasswordChars", "changeit", "false"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals("changeit", new String(password)); //$NON-NLS-1$
}
public void testGetPasswordCharsEncrypted() {
final SSLConfiguration config = new SSLConfiguration();
final char[] password = ReflectionUtils.invokeHidden(config, "getPasswordChars", //$NON-NLS-1$
"cae3c55508eaa369d5c8870398c90a64", "true"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("changeit", new String(password)); //$NON-NLS-1$
}
public void testLocateKeystoreJreCacertsAndCustomHostnameVerifier() {
printTestName();
final HostnameVerifier hostnameVerifier = new TestHostnameVerifier();
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", "#jre-cacerts#", "changeit", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
hostnameVerifier);
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
assertEquals(ReflectionUtils.getHidden(config, "protocol"), "TLSv1"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "keystore"), "#jre-cacerts#"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "password"), "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(ReflectionUtils.getHidden(config, "hostnameVerifier"), hostnameVerifier); //$NON-NLS-1$
}
public void testLocateKeystoreFile() {
printTestName();
final String jreDir = System.getProperty("java.home"); //$NON-NLS-1$
final File cacertFile = new File(new File(new File(new File(jreDir), "lib"), "security"), "cacerts"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", cacertFile.toString(), "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
}
public void testLocateKeystoreResource() {
printTestName();
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", //$NON-NLS-1$
"/org/eclipse/riena/communication/core/ssl/cacerts", "changeit"); //$NON-NLS-1$ //$NON-NLS-2$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
}
public void testLocateKeystoreEntry() {
printTestName();
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", "/keystore/cacerts", "changeit"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
}
public void testLocateKeystoreUrl() throws IOException {
printTestName();
final String jreDir = System.getProperty("java.home"); //$NON-NLS-1$
final File cacertDir = new File(new File(new File(jreDir), "lib"), "security"); //$NON-NLS-1$ //$NON-NLS-2$
final TestServer nano = new TestServer(8888, cacertDir);
final ISSLPropertiesExtension properties = new SSLProperties("TLSv1", "http://localhost:8888/cacerts", //$NON-NLS-1$ //$NON-NLS-2$
"changeit"); //$NON-NLS-1$
final SSLConfiguration config = new SSLConfiguration();
config.configure(properties);
assertTrue(config.isConfigured());
nano.stop();
}
private static class SSLProperties implements ISSLPropertiesExtension {
private final String protocol;
private final String keystore;
private final String password;
private final String encrypt;
private final HostnameVerifier hostnameVerifier;
public SSLProperties(final String protocol, final String keystore, final String password) {
this(protocol, keystore, password, null, null);
}
public SSLProperties(final String protocol, final String keystore, final String password,
final HostnameVerifier hostnameVerifier) {
this(protocol, keystore, password, null, hostnameVerifier);
}
public SSLProperties(final String protocol, final String keystore, final String password, final String encrypt) {
this(protocol, keystore, password, encrypt, null);
}
public SSLProperties(final String protocol, final String keystore, final String password, final String encrypt,
final HostnameVerifier hostnameVerifier) {
this.protocol = protocol;
this.keystore = keystore;
this.password = password;
this.encrypt = encrypt;
this.hostnameVerifier = hostnameVerifier;
}
public String getKeystore() {
return keystore;
}
public String getPassword() {
return password;
}
public String getProtocol() {
return protocol;
}
public HostnameVerifier createHostnameVerifier() {
return hostnameVerifier;
}
public Bundle getContributingBundle() {
return Activator.getDefault().getBundle();
}
public String getEncrypt() {
return encrypt;
}
}
}