/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.configuration;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import de.rcenvironment.core.configuration.ConfigurationException;
import de.rcenvironment.core.configuration.ConfigurationSegment;
import de.rcenvironment.core.configuration.testutils.ConfigurationSegmentUtils;
import de.rcenvironment.core.utils.common.TempFileServiceAccess;
/**
* Unit tests for {@link CommunicationConfiguration}.
*
* @author Robert Mischke
*/
public class CommunicationConfigurationTest {
private static final int TEN_THOUSAND = 10000; // yay for Checkstyle
/**
* Test setup.
*/
@Before
public void setUp() {
TempFileServiceAccess.setupUnitTestEnvironment();
}
/**
* Tests behaviour on non-existing configuration.
*
* @throws IOException on uncaught errors
*/
@Test
public void testEmptyConfiguration() throws IOException {
ConfigurationSegment emptySegment = ConfigurationSegmentUtils.createEmptySegment();
CommunicationConfiguration testInstance = new CommunicationConfiguration(emptySegment);
assertEquals(CommunicationConfiguration.DEFAULT_REQUEST_TIMEOUT_MSEC, testInstance.getRequestTimeoutMsec());
assertEquals(CommunicationConfiguration.DEFAULT_FORWARDING_TIMEOUT_MSEC, testInstance.getForwardingTimeoutMsec());
assertEquals(0, testInstance.getRemoteContactPoints().size());
assertEquals(0, testInstance.getProvidedContactPoints().size());
}
/**
* Reads "/config-tests/example1.json" and verifies the effective settings.
*
* @throws IOException on uncaught errors
*/
@Test
public void readTestConfigFile() throws IOException {
ConfigurationSegment config = readExampleConfigurationSegment("example1.json");
CommunicationConfiguration testInstance = new CommunicationConfiguration(config);
assertEquals(8 * TEN_THOUSAND, testInstance.getRequestTimeoutMsec());
assertEquals(9 * TEN_THOUSAND, testInstance.getForwardingTimeoutMsec());
assertEquals(1, testInstance.getRemoteContactPoints().size());
assertEquals(1, testInstance.getProvidedContactPoints().size());
String connection1 = testInstance.getRemoteContactPoints().get(0);
assertEquals("activemq-tcp:127.0.0.2:20002"
+ "(autoRetryInitialDelay=4,autoRetryMaximumDelay=600,autoRetryDelayMultiplier=2.5,connectOnStartup=true)", connection1);
String serverPort1 = testInstance.getProvidedContactPoints().get(0);
assertEquals("activemq-tcp:1.2.3.4:20009", serverPort1);
}
/**
* Verifies that invalid data fields do not cause uncaught exceptions.
*
* @throws IOException on uncaught errors
* @throws ConfigurationException on uncaught errors
*/
@Test
public void testCorruptedConfiguration() throws IOException, ConfigurationException {
final String baselineConfigurationFile = "example1.json";
final String testConnectionEntryPath = "connections/1";
ConfigurationSegment configData;
configData = readExampleConfigurationSegment(baselineConfigurationFile);
configData.getOrCreateWritableSubSegment(testConnectionEntryPath).deleteElement("host"); // missing
assertConnectionGetsDiscardedWithoutException(configData);
configData = readExampleConfigurationSegment(baselineConfigurationFile);
configData.getOrCreateWritableSubSegment(testConnectionEntryPath).deleteElement("port"); // missing
assertConnectionGetsDiscardedWithoutException(configData);
configData = readExampleConfigurationSegment(baselineConfigurationFile);
configData.getOrCreateWritableSubSegment(testConnectionEntryPath).setString("port", "x"); // non-integer value
assertConnectionGetsDiscardedWithoutException(configData);
}
private void assertConnectionGetsDiscardedWithoutException(ConfigurationSegment configData) {
// attempt to parse the result; it should neither throw an exception nor add the connection entry
final CommunicationConfiguration parsedConfig = new CommunicationConfiguration(configData);
assertEquals(0, parsedConfig.getRemoteContactPoints().size());
}
private ConfigurationSegment readExampleConfigurationSegment(String testFileName) throws IOException {
ConfigurationSegment config =
ConfigurationSegmentUtils.readTestConfigurationFromStream(getClass().getResourceAsStream("/config-tests/"
+ testFileName));
return config;
}
}