package tw.com.unit; import com.amazonaws.services.cloudformation.model.Parameter; import com.amazonaws.services.cloudformation.model.Stack; import com.amazonaws.services.cloudformation.model.StackStatus; import com.amazonaws.services.ec2.model.KeyPair; import com.amazonaws.services.elasticloadbalancing.model.Instance; import org.apache.commons.cli.MissingArgumentException; import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import tw.com.*; import tw.com.commandline.CommandExecutor; import tw.com.commandline.Main; import tw.com.entity.*; import tw.com.exceptions.CfnAssistException; import tw.com.pictures.DiagramCreator; import tw.com.pictures.dot.FileRecorder; import tw.com.pictures.dot.Recorder; import tw.com.providers.ArtifactUploader; import tw.com.providers.ProvidesCurrentIp; import tw.com.providers.SavesFile; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.charset.Charset; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; import static java.lang.String.format; import static org.junit.Assert.assertEquals; @RunWith(EasyMockRunner.class) public class TestCommandLineActionsLegacy extends EasyMockSupport { private AwsFacade facade; private FacadeFactory factory; private ProjectAndEnv projectAndEnv; Collection<Parameter> params; String comment = "theComment"; @Before public void beforeEachTestRuns() { factory = createMock(FacadeFactory.class); facade = createMock(AwsFacade.class); params = new LinkedList<>(); projectAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv(); projectAndEnv.setComment(comment); } @Test public void shouldRollbackStacksFromDir() throws MissingArgumentException, CfnAssistException, InterruptedException, IOException { setFactoryExpectations(); ArrayList<String> stacks = new ArrayList<>(); EasyMock.expect(facade.rollbackTemplatesInFolder(FilesForTesting.ORDERED_SCRIPTS_FOLDER, projectAndEnv)).andReturn(stacks); validate(CLIArgBuilder.rollbackFromDir(FilesForTesting.ORDERED_SCRIPTS_FOLDER, "")); } @Test public void testShouldStepBackOneChange() throws MissingArgumentException, CfnAssistException, InterruptedException { setFactoryExpectations(); List<String> deleted = new LinkedList<>(); EasyMock.expect(facade.stepbackLastChangeFromFolder(FilesForTesting.ORDERED_SCRIPTS_FOLDER, projectAndEnv)).andReturn(deleted); validate(CLIArgBuilder.stepback(FilesForTesting.ORDERED_SCRIPTS_FOLDER, "")); } @Test public void shouldRollbackStacksFromDirWithSNS() throws MissingArgumentException, CfnAssistException, InterruptedException, IOException { setFactoryExpectations(); factory.setSNSMonitoring(); ArrayList<String> stacks = new ArrayList<>(); projectAndEnv.setUseSNS(); EasyMock.expect(facade.rollbackTemplatesInFolder(FilesForTesting.ORDERED_SCRIPTS_FOLDER, projectAndEnv)).andReturn(stacks); validate(CLIArgBuilder.rollbackFromDir(FilesForTesting.ORDERED_SCRIPTS_FOLDER, "-sns")); } private String validate(String[] args) { replayAll(); Main main = new Main(args); PrintStream original = System.out; ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); PrintStream printStream = new PrintStream(arrayOutputStream); System.setOut(printStream); int result = main.parse(factory, true); printStream.close(); System.setOut(original); String output = new String(arrayOutputStream.toByteArray(), Charset.defaultCharset()); verifyAll(); assertEquals(output, 0,result); return output; } private void setFactoryExpectations() throws MissingArgumentException, CfnAssistException, InterruptedException { factory.setRegion(EnvironmentSetupForTests.getRegion()); factory.setProject(EnvironmentSetupForTests.PROJECT); EasyMock.expect(factory.createFacade()).andReturn(facade); } }