package tw.com.unit; import com.amazonaws.services.cloudformation.model.Parameter; import com.amazonaws.services.cloudformation.model.TemplateParameter; import com.amazonaws.services.ec2.model.AvailabilityZone; import org.easymock.EasyMock; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import tw.com.EnvironmentSetupForTests; import tw.com.FilesForTesting; import tw.com.exceptions.CannotFindVpcException; import tw.com.exceptions.InvalidStackParameterException; import tw.com.parameters.AutoDiscoverParams; import tw.com.parameters.ProvidesZones; import tw.com.repository.CloudFormRepository; import tw.com.repository.VpcRepository; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import static junit.framework.TestCase.assertEquals; public class TestAutoDiscoverParams extends EasyMockSupport implements ProvidesZones { private VpcRepository vpcRepository; private AutoDiscoverParams autoDiscover; private LinkedList<Parameter> results; private LinkedList<TemplateParameter> declaredParameters; @Before public void beforeEachTestRuns() { vpcRepository = createMock(VpcRepository.class); CloudFormRepository cfnRepository = createMock(CloudFormRepository.class); File templateFile = new File(FilesForTesting.SIMPLE_STACK_WITH_AZ); autoDiscover = new AutoDiscoverParams(templateFile, vpcRepository, cfnRepository); results = new LinkedList<>(); declaredParameters = new LinkedList<>(); } @Test public void shouldAddCorrectValueForTaggedParameter() throws IOException, CannotFindVpcException, InvalidStackParameterException { declaredParameters.add(new TemplateParameter().withDescription(AutoDiscoverParams.CFN_TAG_ON_OUTPUT).withParameterKey("paramKey")); EasyMock.expect(vpcRepository.getVpcTag("paramKey", EnvironmentSetupForTests.getMainProjectAndEnv())).andReturn("tagValue"); replayAll(); autoDiscover.addParameters(results, declaredParameters, EnvironmentSetupForTests.getMainProjectAndEnv(), this); verifyAll(); assertEquals(1, results.size()); Parameter result = results.getFirst(); assertEquals("paramKey", result.getParameterKey()); assertEquals("tagValue", result.getParameterValue()); } @Test public void shouldAddCorrectValueForZone() throws IOException, CannotFindVpcException, InvalidStackParameterException { declaredParameters.add(new TemplateParameter().withDescription(AutoDiscoverParams.CFN_TAG_ZONE+"A").withParameterKey("paramKey")); replayAll(); autoDiscover.addParameters(results, declaredParameters, EnvironmentSetupForTests.getMainProjectAndEnv(), this); verifyAll(); assertEquals(1, results.size()); Parameter result = results.getFirst(); assertEquals("paramKey", result.getParameterKey()); assertEquals("aviailabilityZoneA", result.getParameterValue()); } @Override public Map<String, AvailabilityZone> getZones() { Map<String, AvailabilityZone> zones = new HashMap<>(); zones.put("a", new AvailabilityZone().withZoneName("aviailabilityZoneA")); return zones; } }