/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections4.map.HashedMap;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Test;
import de.rcenvironment.core.component.model.api.ComponentInterface;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinition;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDescriptionStubFactory;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationExtensionDefinition;
import de.rcenvironment.core.component.model.configuration.impl.ConfigurationDefinitionImpl;
import de.rcenvironment.core.component.model.configuration.impl.ConfigurationExtensionDefinitionImpl;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinition;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinitionProviderStubFactory;
import de.rcenvironment.core.component.model.endpoint.impl.EndpointDefinitionsProviderImpl;
import de.rcenvironment.core.component.model.impl.ComponentInstallationImpl;
import de.rcenvironment.core.component.model.impl.ComponentInterfaceImpl;
import de.rcenvironment.core.component.model.impl.ComponentRevisionImpl;
import de.rcenvironment.core.utils.common.JsonUtils;
/**
* Test cases for {@link ComponentInstallationImpl}.
*
* @author Doreen Seider
*/
public class ComponentInstallationImplTest {
/**
* Tests if the {@link ComponentInstallationImpl} is serialized correctly regarding configuration keys, endpoints etc.
*
* Note: This test doesn't cover backwards compatibility checks.
*
* @throws IOException on error
* @throws JsonGenerationException on error
* @throws JsonMappingException on error
* @throws JsonParseException on error
*/
@Test
public void testComponentInstallationSerialization() throws JsonParseException, JsonMappingException,
JsonGenerationException, IOException {
Integer maxInstances = Integer.valueOf(4);
String readOnlyConfigKey = "someReadOnlyConfigKey";
String readOnlyConfigValue = "someReadOnlyConfigValue";
ConfigurationDefinitionImpl configDefImpl = ConfigurationDescriptionStubFactory.createConfigurationDefinitionFromTestFile();
Set<ConfigurationExtensionDefinitionImpl> configExtDefsImpl = ConfigurationDescriptionStubFactory
.createConfigurationExtensionDefinitionsFromTestFiles();
EndpointDefinitionsProviderImpl inputsProviderImpl = EndpointDefinitionProviderStubFactory
.createInputDefinitionsProviderFromTestFile();
ComponentInterfaceImpl compInterf = new ComponentInterfaceImpl();
compInterf.setIdentifier("interface-id");
List<String> identifiers = new ArrayList<>();
identifiers.add("interface-id");
identifiers.add("interface-id.old");
compInterf.setIdentifiers(identifiers);
compInterf.setDisplayName("display name");
Map<String, String> readOnlyConfig = new HashedMap<>();
readOnlyConfig.put(readOnlyConfigKey, readOnlyConfigValue);
configDefImpl.setRawReadOnlyConfiguration(readOnlyConfig);
compInterf.setConfigurationDefinition(configDefImpl);
compInterf.setConfigurationExtensionDefinitions(configExtDefsImpl);
compInterf.setInputDefinitionsProvider(inputsProviderImpl);
ComponentRevisionImpl compRev = new ComponentRevisionImpl();
compRev.setComponentInterface(compInterf);
ComponentInstallationImpl compInst = new ComponentInstallationImpl();
compInst.setComponentRevision(compRev);
compInst.setInstallationId("install-id");
compInst.setMaximumCountOfParallelInstances(maxInstances);
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
ComponentInstallationImpl otherCompInst = mapper.readValue(mapper.writeValueAsString(compInst), ComponentInstallationImpl.class);
assertEquals(0, otherCompInst.compareTo(compInst));
ComponentInterface otherCompInterf = otherCompInst.getComponentRevision().getComponentInterface();
assertEquals(compInterf.getIdentifiers().size(), otherCompInterf.getIdentifiers().size());
assertEquals(compInst.getMaximumCountOfParallelInstances(), otherCompInst.getMaximumCountOfParallelInstances());
// check configuration
ConfigurationDefinition configDef = compInterf.getConfigurationDefinition();
ConfigurationDefinition otherConfigDef = otherCompInterf.getConfigurationDefinition();
assertEquals(configDef.getConfigurationKeys().size(), otherConfigDef.getConfigurationKeys().size());
assertEquals(configDef.getDefaultValue(ConfigurationDescriptionStubFactory.PORT),
otherConfigDef.getDefaultValue(ConfigurationDescriptionStubFactory.PORT));
assertEquals(configDef.getReadOnlyConfiguration().getConfigurationKeys().size(),
otherConfigDef.getReadOnlyConfiguration().getConfigurationKeys().size());
assertEquals(configDef.getReadOnlyConfiguration().getValue(readOnlyConfigKey),
otherConfigDef.getReadOnlyConfiguration().getValue(readOnlyConfigKey));
assertEquals(compInterf.getConfigurationExtensionDefinitions().size(),
otherCompInterf.getConfigurationExtensionDefinitions().size());
// check activation filter
for (ConfigurationExtensionDefinition configExtDef : compInterf.getConfigurationExtensionDefinitions()) {
if (configExtDef.getConfigurationKeys().contains(ConfigurationDescriptionStubFactory.WORK_DIR)) {
boolean matchFound = false;
for (ConfigurationExtensionDefinition otherConfigExtDef : otherCompInterf.getConfigurationExtensionDefinitions()) {
if (otherConfigExtDef.getConfigurationKeys().contains(ConfigurationDescriptionStubFactory.WORK_DIR)) {
assertEquals(((ConfigurationExtensionDefinitionImpl) configExtDef).getRawActivationFilter(),
((ConfigurationExtensionDefinitionImpl) otherConfigExtDef).getRawActivationFilter());
matchFound = true;
}
}
assertTrue(matchFound);
} else if (configExtDef.getConfigurationKeys().contains(ConfigurationDescriptionStubFactory.FORMAT)) {
boolean matchFound = false;
for (ConfigurationExtensionDefinition otherConfigExtDef : otherCompInterf.getConfigurationExtensionDefinitions()) {
if (otherConfigExtDef.getConfigurationKeys().contains(ConfigurationDescriptionStubFactory.FORMAT)) {
assertEquals(((ConfigurationExtensionDefinitionImpl) configExtDef)
.getActivationFilter(ConfigurationDescriptionStubFactory.FORMAT),
((ConfigurationExtensionDefinitionImpl) otherConfigExtDef)
.getActivationFilter(ConfigurationDescriptionStubFactory.FORMAT));
matchFound = true;
}
}
assertTrue(matchFound);
} else {
fail("Missing configuration key");
}
}
// check endpoints
EndpointDefinition dynInputDef = compInterf.getInputDefinitionsProvider()
.getDynamicEndpointDefinition(EndpointDefinitionProviderStubFactory.DYNAMICINPUTID1);
EndpointDefinition otherDynInputDef = otherCompInterf.getInputDefinitionsProvider()
.getDynamicEndpointDefinition(EndpointDefinitionProviderStubFactory.DYNAMICINPUTID1);
assertNotNull(otherDynInputDef);
assertEquals(dynInputDef.getMetaDataDefinition().getMetaDataKeys().size(),
otherDynInputDef.getMetaDataDefinition().getMetaDataKeys().size());
assertEquals(compInterf.getInputDefinitionsProvider().getStaticEndpointGroupDefinitions().size(),
otherCompInterf.getInputDefinitionsProvider().getStaticEndpointGroupDefinitions().size());
assertEquals(compInterf.getInputDefinitionsProvider().getDynamicEndpointGroupDefinitions().size(),
otherCompInterf.getInputDefinitionsProvider().getDynamicEndpointGroupDefinitions().size());
}
}