package tw.com.acceptance; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.DeleteKeyPairRequest; import com.amazonaws.services.ec2.model.DescribeKeyPairsRequest; import com.amazonaws.services.ec2.model.DescribeKeyPairsResult; import com.amazonaws.services.ec2.model.KeyPairInfo; import org.junit.BeforeClass; import org.junit.Test; import tw.com.CLIArgBuilder; import tw.com.EnvironmentSetupForTests; import tw.com.commandline.Main; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.LinkedList; import java.util.List; import java.util.Set; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertEquals; public class TestKeyPairCreationAndSave { private static AmazonEC2Client ec2Client; @BeforeClass public static void beforeAllTestsRun() { DefaultAWSCredentialsProviderChain credentialsProvider = new DefaultAWSCredentialsProviderChain(); ec2Client = EnvironmentSetupForTests.createEC2Client(credentialsProvider); } @Test public void shouldCreateKeyPairWithFilename() throws IOException { String keypairName = "CfnAssist_Test"; deleteKeyPair(keypairName); String filename = "testFilenameForPem.tmp"; Path path = Paths.get(filename); Files.deleteIfExists(path); String[] args = CLIArgBuilder.createKeyPair(filename); Main main = new Main(args); int commandResult = main.parse(); List<KeyPairInfo> keys = deleteKeyPair(keypairName); // now do the asserts assertEquals(0, commandResult); assertEquals(1, keys.size()); assertEquals(keypairName, keys.get(0).getKeyName()); assertTrue(Files.exists(path)); Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(Paths.get(filename), LinkOption.NOFOLLOW_LINKS); EnvironmentSetupForTests.checkKeyPairFilePermissions(permissions); Files.deleteIfExists(path); } private List<KeyPairInfo> deleteKeyPair(String keypairName) { List<KeyPairInfo> keys; try { DescribeKeyPairsRequest query = new DescribeKeyPairsRequest().withKeyNames(keypairName); DescribeKeyPairsResult keysFound = ec2Client.describeKeyPairs(query); keys = keysFound.getKeyPairs(); } catch (AmazonServiceException exception) { keys = new LinkedList<>(); } if (keys.size() > 0) { DeleteKeyPairRequest deleteRequest = new DeleteKeyPairRequest().withKeyName(keypairName); ec2Client.deleteKeyPair(deleteRequest); } return keys; } }