package com.github.sbugat.ec2tools.service.configuration; import java.util.ArrayList; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.HierarchicalINIConfiguration; import org.apache.commons.configuration.SubnodeConfiguration; import org.assertj.core.api.Assertions; import org.assertj.core.data.MapEntry; import org.assertj.core.util.Lists; import org.assertj.core.util.Sets; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import com.github.sbugat.GenericMockitoTest; import com.github.sbugat.ec2tools.model.instance.InstanceOrder; import com.github.sbugat.ec2tools.model.instance.OrderType; /** * Configuration service test. * * @author Sylvain Bugat */ @RunWith(MockitoJUnitRunner.class) public class ConfigurationServiceTest extends GenericMockitoTest { private static final String SECTION = "section"; private static final String INSTANCE_ID = "instance id"; @Mock private HierarchicalINIConfiguration hierarchicalINIConfiguration; @InjectMocks private ConfigurationService configurationService; @Test public void testLoadConfigurationEmpty() throws ConfigurationException { configurationService.loadConfiguration(); final InOrder inOrder = Mockito.inOrder(hierarchicalINIConfiguration); inOrder.verify(hierarchicalINIConfiguration).clear(); inOrder.verify(hierarchicalINIConfiguration).load(ConfigurationService.CONFIGURATION_FILE_NAME); inOrder.verify(hierarchicalINIConfiguration).getSections(); Assertions.assertThat(configurationService.getConfiguredSections()).isEmpty(); Assertions.assertThat(configurationService.toString()).isEmpty(); } @Test public void testLoadConfigurationException() throws ConfigurationException { Mockito.doThrow(new ConfigurationException()).when(hierarchicalINIConfiguration).load(ConfigurationService.CONFIGURATION_FILE_NAME); try { configurationService.loadConfiguration(); Assert.fail(); } catch (final ConfigurationException e) { // Expected exeption final InOrder inOrder = Mockito.inOrder(hierarchicalINIConfiguration); inOrder.verify(hierarchicalINIConfiguration).clear(); inOrder.verify(hierarchicalINIConfiguration).load(ConfigurationService.CONFIGURATION_FILE_NAME); Assertions.assertThat(configurationService.getConfiguredSections()).isEmpty(); Assertions.assertThat(configurationService.toString()).isEmpty(); } } @Test public void testLoadConfiguration() throws ConfigurationException { Mockito.doReturn(Sets.newLinkedHashSet(SECTION)).when(hierarchicalINIConfiguration).getSections(); final SubnodeConfiguration subnodeConfiguration = new SubnodeConfiguration(new HierarchicalConfiguration(), new HierarchicalConfiguration.Node()); subnodeConfiguration.setProperty(INSTANCE_ID, OrderType.START.toString()); Mockito.doReturn(subnodeConfiguration).when(hierarchicalINIConfiguration).getSection(SECTION); configurationService.loadConfiguration(); final InOrder inOrder = Mockito.inOrder(hierarchicalINIConfiguration); inOrder.verify(hierarchicalINIConfiguration).clear(); inOrder.verify(hierarchicalINIConfiguration).load(ConfigurationService.CONFIGURATION_FILE_NAME); inOrder.verify(hierarchicalINIConfiguration).getSections(); inOrder.verify(hierarchicalINIConfiguration).getSection(SECTION); Assertions.assertThat(configurationService.getConfiguredSections()).containsOnly(MapEntry.entry(SECTION, Lists.newArrayList(new InstanceOrder(INSTANCE_ID, OrderType.START.toString())))); Assertions.assertThat(configurationService.getConfiguredSections(SECTION)).containsOnly(new InstanceOrder(INSTANCE_ID, OrderType.START.toString())); final String expectedConfiguration = "Section section" + System.lineSeparator() + " instance id:START" + System.lineSeparator(); Assertions.assertThat(configurationService.toString()).isEqualTo(expectedConfiguration); Assertions.assertThat(configurationService.toString(Lists.newArrayList(SECTION))).isEqualTo(expectedConfiguration); Assertions.assertThat(configurationService.toString(Lists.newArrayList(""))).isEmpty(); } @Test public void testLoadEmptyConfiguration() throws ConfigurationException { Mockito.doReturn(Sets.newLinkedHashSet(SECTION)).when(hierarchicalINIConfiguration).getSections(); final SubnodeConfiguration subnodeConfiguration = new SubnodeConfiguration(new HierarchicalConfiguration(), new HierarchicalConfiguration.Node()); Mockito.doReturn(subnodeConfiguration).when(hierarchicalINIConfiguration).getSection(SECTION); configurationService.loadConfiguration(); final InOrder inOrder = Mockito.inOrder(hierarchicalINIConfiguration); inOrder.verify(hierarchicalINIConfiguration).clear(); inOrder.verify(hierarchicalINIConfiguration).load(ConfigurationService.CONFIGURATION_FILE_NAME); inOrder.verify(hierarchicalINIConfiguration).getSections(); inOrder.verify(hierarchicalINIConfiguration).getSection(SECTION); Assertions.assertThat(configurationService.getConfiguredSections()).containsOnly(MapEntry.entry(SECTION, new ArrayList<InstanceOrder>())); Assertions.assertThat(configurationService.getConfiguredSections(SECTION)).isEmpty(); final String expectedConfiguration = "Section section" + System.lineSeparator() + " EMPTY" + System.lineSeparator(); Assertions.assertThat(configurationService.toString()).isEqualTo(expectedConfiguration); Assertions.assertThat(configurationService.toString(Lists.newArrayList(SECTION))).isEqualTo(expectedConfiguration); Assertions.assertThat(configurationService.toString(Lists.newArrayList(""))).isEmpty(); } }