package tw.com.unit; import com.amazonaws.services.cloudformation.model.Parameter; import com.amazonaws.services.cloudformation.model.TemplateParameter; import org.easymock.EasyMockRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import tw.com.*; import tw.com.entity.StackNameAndId; import tw.com.exceptions.CfnAssistException; import tw.com.providers.IdentityProvider; import tw.com.providers.NotificationSender; import tw.com.repository.CloudFormRepository; import tw.com.repository.CloudRepository; import tw.com.repository.ELBRepository; import tw.com.repository.VpcRepository; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.LinkedList; import java.util.List; import static org.junit.Assert.assertEquals; @RunWith(EasyMockRunner.class) public class TestAwsFacadeUpdateStacks extends UpdateStackExpectations { private AwsFacade aws; @Before public void beforeEachTestRuns() { monitor = createMock(MonitorStackEvents.class); cfnRepository = createMock(CloudFormRepository.class); vpcRepository = createMock(VpcRepository.class); ELBRepository elbRepository = createMock(ELBRepository.class); cloudRepository = createStrictMock(CloudRepository.class); NotificationSender notificationSender = createStrictMock(NotificationSender.class); IdentityProvider identityProvider = createStrictMock(IdentityProvider.class); String regionName = EnvironmentSetupForTests.getRegion().getName(); aws = new AwsFacade(monitor, cfnRepository, vpcRepository, elbRepository, cloudRepository, notificationSender, identityProvider, regionName); } @Test public void voidShouldUpdateAnExistingStackNoParams() throws IOException, CfnAssistException, InterruptedException { String filename = FilesForTesting.SUBNET_STACK_DELTA; String stackName = "CfnAssistTestsubnet"; List<TemplateParameter> templateParameters = new LinkedList<>(); templateParameters.add(new TemplateParameter().withParameterKey("stackname").withDefaultValue("subnet")); Collection<Parameter> parameters = new LinkedList<>(); StackNameAndId stackNameAndId = setUpdateExpectations(stackName, filename, templateParameters, parameters); replayAll(); StackNameAndId result = aws.applyTemplate(filename, projectAndEnv); assertEquals(stackNameAndId, result); verifyAll(); } @Test public void voidShouldUpdateAnExistingStackWithBuiltInParams() throws IOException, CfnAssistException, InterruptedException { String filename = FilesForTesting.SUBNET_STACK_DELTA; String stackName = "CfnAssistTestsubnet"; List<TemplateParameter> templateParameters = new LinkedList<>(); templateParameters.add(new TemplateParameter().withParameterKey("stackname").withDefaultValue("subnet")); templateParameters.add(new TemplateParameter().withParameterKey("env").withDefaultValue(projectAndEnv.getEnv())); templateParameters.add(new TemplateParameter().withParameterKey("vpc").withDefaultValue(VPC_ID)); Collection<Parameter> creationParameters = new LinkedList<>(); TestAwsFacadeCreatesStacks.addParam(creationParameters, "env", projectAndEnv.getEnv()); TestAwsFacadeCreatesStacks.addParam(creationParameters, "vpc", VPC_ID); StackNameAndId stackNameAndId = setUpdateExpectations(stackName, filename, templateParameters, creationParameters); replayAll(); StackNameAndId result = aws.applyTemplate(filename, projectAndEnv); assertEquals(stackNameAndId, result); verifyAll(); } @Test public void voidShouldUpdateAnExistingStackUserParams() throws IOException, CfnAssistException, InterruptedException { String filename = FilesForTesting.SUBNET_STACK_DELTA; String stackName = "CfnAssistTestsubnet"; List<TemplateParameter> templateParameters = new LinkedList<>(); templateParameters.add(new TemplateParameter().withParameterKey("stackname").withDefaultValue("subnet")); Collection<Parameter> userParameters = new LinkedList<>(); Collection<Parameter> creationParameters = new LinkedList<>(); TestAwsFacadeCreatesStacks.addParam(userParameters, "userKey", "value"); TestAwsFacadeCreatesStacks.addParam(creationParameters, "userKey", "value"); StackNameAndId stackNameAndId = setUpdateExpectations(stackName, filename, templateParameters, creationParameters); replayAll(); StackNameAndId result = aws.applyTemplate(new File(filename), projectAndEnv, userParameters); assertEquals(stackNameAndId, result); verifyAll(); } // TODO test that we throw on no stackname to update }