package com.github.sbugat.ec2tools.service;
import java.util.ArrayList;
import org.apache.commons.configuration.ConfigurationException;
import org.assertj.core.util.Lists;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import com.amazonaws.AmazonClientException;
import com.github.sbugat.GenericMockitoTest;
import com.github.sbugat.ec2tools.service.aws.AmazonEC2Service;
import com.github.sbugat.ec2tools.service.configuration.ConfigurationService;
import com.github.sbugat.ec2tools.service.options.ProgramOptions;
import com.github.sbugat.ec2tools.service.options.ProgramOptionsService;
/**
* Main service test.
*
* @author Sylvain Bugat
*/
@RunWith(MockitoJUnitRunner.class)
public class MainServiceTest extends GenericMockitoTest {
private static final String SECTION_1 = "Section 1";
@Mock
private AmazonEC2Service amazonEC2Service;
@Mock
private ConfigurationService configurationService;
@Mock
private ProgramOptionsService programOptionsService;
@Mock
private StartStopService startStopService;
@InjectMocks
private MainService mainService;
@Test(expected = IllegalArgumentException.class)
public void testMainProcessProgramArgsIllegalArgumentException() throws Exception {
Mockito.doThrow(new IllegalArgumentException()).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
final String[] arguments = {};
try {
mainService.main(arguments);
}
catch (final Exception e) {
Mockito.verify(programOptionsService).processProgramArgs(arguments);
throw e;
}
}
@Test(expected = ConfigurationException.class)
public void testMainLoadConfigurationConfigurationException() throws Exception {
Mockito.doThrow(new ConfigurationException()).when(configurationService).loadConfiguration();
final String[] arguments = {};
try {
mainService.main(arguments);
}
catch (final Exception e) {
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
throw e;
}
}
@Test
public void testMainPrintAllSections() throws Exception {
Mockito.doReturn(new ProgramOptions(false, true, false, false, new ArrayList<String>())).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
final String[] arguments = {};
mainService.main(arguments);
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
}
@Test
public void testMainPrintOneSections() throws Exception {
Mockito.doReturn(new ProgramOptions(false, true, false, false, Lists.newArrayList(SECTION_1))).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
final String[] arguments = {};
mainService.main(arguments);
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
Mockito.verify(configurationService).toString(Lists.newArrayList(SECTION_1));
}
@Test(expected = AmazonClientException.class)
public void testMainInitializeAmazonClientException() throws Exception {
Mockito.doReturn(new ProgramOptions(true, false, false, false, Lists.newArrayList(SECTION_1))).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
Mockito.doThrow(new AmazonClientException(SECTION_1)).when(amazonEC2Service).initialize();
final String[] arguments = {};
try {
mainService.main(arguments);
}
catch (final Exception e) {
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
Mockito.verify(amazonEC2Service).initialize();
throw e;
}
}
@Test
public void testMain() throws Exception {
final ProgramOptions programOptions = new ProgramOptions(true, false, false, false, Lists.newArrayList(SECTION_1));
Mockito.doReturn(programOptions).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
Mockito.doReturn(false).when(startStopService).processAllSections(programOptions);
final String[] arguments = {};
mainService.main(arguments);
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
Mockito.verify(amazonEC2Service).initialize();
Mockito.verify(startStopService).processAllSections(programOptions);
}
@Test(expected = RuntimeException.class)
public void testMainProcessError() throws Exception {
final ProgramOptions programOptions = new ProgramOptions(true, false, false, false, Lists.newArrayList(SECTION_1));
Mockito.doReturn(programOptions).when(programOptionsService).processProgramArgs(Mockito.any(String[].class));
Mockito.doReturn(true).when(startStopService).processAllSections(programOptions);
final String[] arguments = {};
try {
mainService.main(arguments);
}
catch (final Exception e) {
Mockito.verify(programOptionsService).processProgramArgs(arguments);
Mockito.verify(configurationService).loadConfiguration();
Mockito.verify(amazonEC2Service).initialize();
Mockito.verify(startStopService).processAllSections(programOptions);
throw e;
}
}
}