/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.configuration.api;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.codec.binary.Base64;
import org.junit.Before;
import org.junit.Test;
import de.rcenvironment.core.component.model.configuration.impl.ConfigurationDefinitionImpl;
/**
* Test case for {@link ConfigurationDescription}.
*
* @author Doreen Seider
*/
public class ConfigurationDescriptionTest {
private ConfigurationDescription description;
/**
* Set up.
*
* @throws IOException on error
*/
@Before
public void setUp() throws IOException {
description = ConfigurationDescriptionStubFactory.createConfigurationDescriptionFromTestFiles();
}
/** Test. */
@Test
public void testConfigurationDescription() {
ConfigurationDefinition configDef = description.getActiveConfigurationDefinition();
Set<String> keys = configDef.getConfigurationKeys();
// 4 (normal) because no activation filter matches
assertEquals(4, keys.size());
// 3 (normal) + 1 (ext1) + 1 (ext2) - config def keys with default value are represented
// here
assertEquals(5, description.getConfiguration().size());
configDef = description.getActiveConfigurationDefinition();
keys = configDef.getConfigurationKeys();
assertEquals(4, keys.size());
description.setConfigurationValue(ConfigurationDescriptionStubFactory.HOST, "localhost");
assertEquals(6, description.getConfiguration().size());
configDef = description.getActiveConfigurationDefinition();
keys = configDef.getConfigurationKeys();
assertEquals(5, keys.size());
description.setConfigurationValue(ConfigurationDescriptionStubFactory.PORT, String.valueOf(8));
configDef = description.getActiveConfigurationDefinition();
keys = configDef.getConfigurationKeys();
assertEquals(6, keys.size());
description.setPlaceholderValue(ConfigurationDescriptionStubFactory.USER, ConfigurationDescriptionStubFactory.NAME);
assertEquals("${user}", description.getActualConfigurationValue(ConfigurationDescriptionStubFactory.AUTH_USER));
assertEquals(ConfigurationDescriptionStubFactory.NAME, description.getConfigurationValue(
ConfigurationDescriptionStubFactory.AUTH_USER));
try {
description.setPlaceholderValue(ConfigurationDescriptionStubFactory.PHRASE, new String(
new Base64().encode("password".getBytes("UTF-8"))));
} catch (UnsupportedEncodingException e) {
fail();
}
assertEquals("${*.phrase}", description.getActualConfigurationValue(ConfigurationDescriptionStubFactory.AUTH_PHRASE));
assertEquals("password", description.getConfigurationValue(ConfigurationDescriptionStubFactory.AUTH_PHRASE));
assertEquals(2, description.getPlaceholders().size());
assertEquals(6, description.getConfiguration().size());
assertTrue(description.isPlaceholderSet(ConfigurationDescriptionStubFactory.AUTH_USER));
assertFalse(description.isPlaceholderSet(ConfigurationDescriptionStubFactory.HOST));
Map<String, String> placeholders = new HashMap<String, String>();
placeholders.put(ConfigurationDescriptionStubFactory.DIR, "/home");
description.setPlaceholders(placeholders);
assertEquals("/home", description.getConfigurationValue(ConfigurationDescriptionStubFactory.WORK_DIR));
Map<String, String> configuration = new HashMap<String, String>();
configuration.put(ConfigurationDescriptionStubFactory.AUTH_USER, ConfigurationDescriptionStubFactory.NAME);
description.setConfiguration(configuration);
assertEquals(1, description.getConfiguration().size());
configDef = description.getActiveConfigurationDefinition();
assertEquals(4, configDef.getConfigurationKeys().size());
assertFalse(description.isPlaceholderSet(ConfigurationDescriptionStubFactory.AUTH_USER));
}
/** Test. */
@Test
public void testConfigurationDefinition() {
ConfigurationDefinition declDescription = description.getComponentConfigurationDefinition();
// 4 (normal) + 1 (ext1) + 1 (ext2)
Set<String> keys = declDescription.getConfigurationKeys();
assertEquals(6, keys.size());
assertTrue(keys.contains(ConfigurationDescriptionStubFactory.HOST));
assertTrue(keys.contains(ConfigurationDescriptionStubFactory.PORT));
assertTrue(keys.contains(ConfigurationDescriptionStubFactory.AUTH_USER));
assertTrue(keys.contains(ConfigurationDescriptionStubFactory.AUTH_PHRASE));
assertTrue(keys.contains(ConfigurationDescriptionStubFactory.WORK_DIR));
assertTrue(keys.contains("format"));
assertEquals(String.valueOf(7), declDescription.getDefaultValue(ConfigurationDescriptionStubFactory.PORT));
}
/** Test. */
@Test
public void testPlaceholderMetaDataDefinition() {
ConfigurationDefinition configDef = description.getComponentConfigurationDefinition();
PlaceholdersMetaDataDefinition placeholderDef = configDef.getPlaceholderMetaDataDefinition();
assertEquals("SSH username", placeholderDef.getGuiName(ConfigurationDescriptionStubFactory.USER));
assertEquals(1, placeholderDef.getGuiPosition(ConfigurationDescriptionStubFactory.DIR));
assertNull(placeholderDef.getDataType(ConfigurationDescriptionStubFactory.PHRASE));
assertEquals(PlaceholdersMetaDataConstants.TYPE_DIR, placeholderDef.getDataType(ConfigurationDescriptionStubFactory.DIR));
assertTrue(placeholderDef.decode(ConfigurationDescriptionStubFactory.PHRASE));
assertFalse(placeholderDef.decode(ConfigurationDescriptionStubFactory.DIR));
assertEquals(null, placeholderDef.getGuiName(ConfigurationDescriptionStubFactory.UNKNOWN));
assertNull(placeholderDef.getDataType(ConfigurationDescriptionStubFactory.UNKNOWN));
assertFalse(placeholderDef.decode(ConfigurationDescriptionStubFactory.UNKNOWN));
}
/** Test. */
@Test
public void testReadOnlyConfiguration() {
String key1 = "key1";
String value1 = "value1";
Map<String, String> readOnlyConfig = new HashMap<String, String>();
readOnlyConfig.put(key1, value1);
ConfigurationDefinition configDef = description.getComponentConfigurationDefinition();
((ConfigurationDefinitionImpl) configDef).setRawReadOnlyConfiguration(readOnlyConfig);
assertEquals(value1, configDef.getReadOnlyConfiguration().getValue(key1));
ConfigurationDescription configDesc = new ConfigurationDescription(configDef, new HashSet<ConfigurationExtensionDefinition>());
assertFalse(value1.equals(configDesc.getConfigurationValue(key1)));
assertFalse(value1.equals(configDesc.getConfiguration().get(key1)));
ReadOnlyConfiguration readOnlyConfiguration = configDef.getReadOnlyConfiguration();
assertTrue(value1.equals(readOnlyConfiguration.getValue(key1)));
assertTrue(value1.equals(readOnlyConfiguration.getConfiguration().get(key1)));
}
}