/******************************************************************************* * Copyright (c) 2012 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package com.openshift.internal.client; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Writer; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; import com.openshift.client.OpenShiftException; import com.openshift.client.configuration.AbstractOpenshiftConfiguration.ConfigurationOptions; import com.openshift.client.configuration.DefaultConfiguration; import com.openshift.client.configuration.IOpenShiftConfiguration; import com.openshift.client.configuration.SystemConfiguration; import com.openshift.client.fakes.EmptySystemPropertiesFake; import com.openshift.client.fakes.SystemConfigurationFake; import com.openshift.client.fakes.UserConfigurationFake; import com.openshift.internal.client.utils.StreamUtils; import com.openshift.internal.client.utils.UrlUtils; /** * @author André Dietisheim */ public class ConfigurationTest extends TestTimer { private static final String USERNAME_REGEX = "[^=]+=(.+)"; private static final String USERNAME = "dummyUser"; private static final String USERNAME2 = "André"; private static final String USERNAME3 = "Dietisheim"; private static final String ANOTHER_USERNAME = "anotherUser"; protected static final String LIBRA_SERVER = "openshift.redhat.com"; protected static final String SIGLEQUOTED_LIBRA_SERVER = "'openshift.redhat.com'"; protected static final String DOUBLEQUOTED_LIBRA_SERVER = "\"openshift.redhat.com\""; @Test public void versionTest() throws OpenShiftException, IOException { // operation String version = new RestServiceProperties().getVersion(); // verification assertNotNull(version); assertFalse(version.contains("pom")); } @Test public void canReadUsername() throws OpenShiftException, IOException { UserConfigurationFake userConfiguration = new UserConfigurationFake() { protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME).append('\n'); } }; assertEquals(USERNAME, userConfiguration.getRhlogin()); } @Test public void canStoreUsername() throws OpenShiftException, IOException { // pre-condition UserConfigurationFake userConfiguration = new UserConfigurationFake() { protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME).append('\n'); } }; // operation userConfiguration.setRhlogin(ANOTHER_USERNAME); userConfiguration.save(); // verification File userConfigurationFile = userConfiguration.getFile(); assertNotNull(userConfigurationFile); String fileContent = StreamUtils.readToString(new FileReader(userConfigurationFile)); Pattern pattern = Pattern.compile(USERNAME_REGEX); Matcher matcher = pattern.matcher(fileContent); assertTrue(matcher.find()); assertEquals(1, matcher.groupCount()); assertEquals(ANOTHER_USERNAME, matcher.group(1)); } @Test public void canStoreAndReadUsername() throws OpenShiftException, IOException { // pre-condition UserConfigurationFake userConfiguration = new UserConfigurationFake() { protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME).append('\n'); } }; assertEquals(USERNAME, userConfiguration.getRhlogin()); // operation userConfiguration.setRhlogin(ANOTHER_USERNAME); userConfiguration.save(); final File userConfigurationFile = userConfiguration.getFile(); assertNotNull(userConfigurationFile); UserConfigurationFake userConfiguration2 = new UserConfigurationFake() { protected File createFile() { return userConfigurationFile; } protected void initFile(File file) { } }; // verification assertEquals(ANOTHER_USERNAME, userConfiguration2.getRhlogin()); } @Test public void canReadUsernameIfItsInSystemConfigurationOnly() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { protected void init(Properties properties) { properties.put(KEY_RHLOGIN, USERNAME); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration); assertEquals(USERNAME, userConfiguration.getRhlogin()); } @Test public void usernameInUserconfigOverridesUsernameInSystemconfig() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { protected void init(Properties properties) { properties.put(KEY_RHLOGIN, USERNAME); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration) { protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME2).append('\n'); } }; assertEquals(USERNAME2, userConfiguration.getRhlogin()); } @Test public void quotedLibraServerIsReturnedWithoutQuotes() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { protected void init(Properties properties) { properties.put(KEY_LIBRA_SERVER, SIGLEQUOTED_LIBRA_SERVER); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration); assertEquals(UrlUtils.SCHEME_HTTPS + LIBRA_SERVER, userConfiguration.getLibraServer()); } @Test public void doubleQuotedLibraServerIsReturnedWithoutQuotes() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { protected void init(Properties properties) { properties.put(KEY_LIBRA_SERVER, DOUBLEQUOTED_LIBRA_SERVER); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration); assertEquals(UrlUtils.SCHEME_HTTPS + LIBRA_SERVER, userConfiguration.getLibraServer()); } @Test public void nonQuotedLibraServerIsReturnedAsIs() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { protected void init(Properties properties) { properties.put(KEY_LIBRA_SERVER, LIBRA_SERVER); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration); assertEquals(UrlUtils.SCHEME_HTTPS + LIBRA_SERVER, userConfiguration.getLibraServer()); } @Test public void nullLibraServerIsReturnedAsNull() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(); assertNull(systemConfiguration.getLibraServer()); } @Test public void systemPropsOverrideSystemconfig() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { @Override protected void init(Properties properties) { properties.put(KEY_RHLOGIN, USERNAME); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration) { @Override protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME2).append('\n'); } }; IOpenShiftConfiguration configuration = new EmptySystemPropertiesFake(userConfiguration); configuration.setRhlogin(USERNAME3); assertEquals(USERNAME3, configuration.getRhlogin()); } @Test public void emptySystemPropertiesDefaultToUserConfig() throws OpenShiftException, IOException { SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { @Override protected void init(Properties properties) { properties.put(KEY_RHLOGIN, USERNAME); } }; UserConfigurationFake userConfiguration = new UserConfigurationFake(systemConfiguration) { @Override protected void initFile(Writer writer) throws IOException { writer.append(KEY_RHLOGIN).append('=').append(USERNAME2).append('\n'); } }; IOpenShiftConfiguration configuration = new EmptySystemPropertiesFake(userConfiguration); assertEquals(USERNAME2, configuration.getRhlogin()); } @Test public void fallsBackToDefaultUrl() throws OpenShiftException, IOException { IOpenShiftConfiguration configuration = new EmptySystemPropertiesFake( new UserConfigurationFake(new SystemConfigurationFake(new DefaultConfiguration()))); assertNotNull(configuration.getLibraServer()); assertTrue(configuration.getLibraServer().contains(DefaultConfiguration.LIBRA_SERVER)); assertNull(configuration.getRhlogin()); } @Test public void canReadPassword() throws OpenShiftException, IOException { UserConfigurationFake userConfiguration = new UserConfigurationFake() { protected void initFile(Writer writer) throws IOException { writer.append(KEY_PASSWORD).append('=').append("somePassword").append('\n'); } }; assertEquals("somePassword", userConfiguration.getPassword()); } @Test public void canStripQuotesOfPassword() throws OpenShiftException, IOException { UserConfigurationFake userConfiguration = new UserConfigurationFake() { protected void initFile(Writer writer) throws IOException { writer.append(KEY_PASSWORD).append('=').append("'somePassword'").append('\n'); } }; assertEquals("somePassword", userConfiguration.getPassword()); } @Test public void disableBadSSLCiphersShouldDefaultToNo() throws OpenShiftException, IOException { // pre-condition SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { @Override protected void init(Properties properties) { properties.put(KEY_DISABLE_BAD_SSL_CIPHERS, "bingobongo"); } }; // operation ConfigurationOptions option = systemConfiguration.getDisableBadSSLCiphers(); // verification assertThat(option).isEqualTo(ConfigurationOptions.NO); } @Test public void disableBadSSLCiphersShouldbeYes() throws OpenShiftException, IOException { // pre-condition SystemConfiguration systemConfiguration = new SystemConfigurationFake(new DefaultConfiguration()) { @Override protected void init(Properties properties) { properties.put(KEY_DISABLE_BAD_SSL_CIPHERS, "\"yes\""); } }; // operation ConfigurationOptions option = systemConfiguration.getDisableBadSSLCiphers(); // verification assertThat(option).isEqualTo(ConfigurationOptions.YES); } }