package tw.com.integration; import static org.junit.Assert.*; import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest; import com.amazonaws.services.ec2.model.CreateSecurityGroupResult; import com.amazonaws.services.ec2.model.DeleteSecurityGroupRequest; import com.amazonaws.services.ec2.model.DescribeSecurityGroupsRequest; import com.amazonaws.services.ec2.model.DescribeSecurityGroupsResult; import com.amazonaws.services.ec2.model.IpPermission; import com.amazonaws.services.ec2.model.SecurityGroup; import tw.com.EnvironmentSetupForTests; import tw.com.providers.CloudClient; public class TestManageSecGroups { private static final String GROUP_NAME = "TestManageSecGroups"; private CloudClient client; private static String groupId = ""; private static AmazonEC2Client ec2Client; @BeforeClass public static void onceBeforeAllTestsRuns() { AWSCredentialsProvider credentialsProvider = new DefaultAWSCredentialsProviderChain(); ec2Client = EnvironmentSetupForTests.createEC2Client(credentialsProvider); } @Before public void beforeEachTestRuns() { client = new CloudClient(ec2Client); deleteGroupIfPresent(); CreateSecurityGroupRequest createRequest = new CreateSecurityGroupRequest(). withDescription("test group"). withGroupName(GROUP_NAME); CreateSecurityGroupResult result = ec2Client.createSecurityGroup(createRequest); groupId = result.getGroupId(); } private static void deleteGroupIfPresent() { try { DescribeSecurityGroupsRequest describeSecurityGroupsRequest = new DescribeSecurityGroupsRequest().withGroupNames(GROUP_NAME); DescribeSecurityGroupsResult existing = ec2Client.describeSecurityGroups(describeSecurityGroupsRequest); if (existing.getSecurityGroups().size()>0) { DeleteSecurityGroupRequest deleteGroup = new DeleteSecurityGroupRequest().withGroupName(GROUP_NAME); ec2Client.deleteSecurityGroup(deleteGroup); } } catch (AmazonServiceException exception) { // no op } } @AfterClass public static void afterAllTestsRun() { deleteGroupIfPresent(); } @Test public void testShouldAddAndDeleteAnIpToASecurityGroup() throws UnknownHostException { Integer port = 8080; InetAddress adddress = Inet4Address.getByName("192.168.0.1"); String cidr = "192.168.0.1/32"; //add client.addIpToSecGroup(groupId, port , adddress); DescribeSecurityGroupsRequest request = new DescribeSecurityGroupsRequest().withGroupIds(groupId); DescribeSecurityGroupsResult result = ec2Client.describeSecurityGroups(request); List<SecurityGroup> securityGroups = result.getSecurityGroups(); assertEquals(1, securityGroups.size()); SecurityGroup group = securityGroups.get(0); List<IpPermission> perms = group.getIpPermissions(); assertEquals(1, perms.size()); IpPermission ipPermission = perms.get(0); assertEquals(port, ipPermission.getToPort()); assertEquals(port, ipPermission.getFromPort()); assertEquals(1, ipPermission.getIpv4Ranges().size()); assertEquals(cidr, ipPermission.getIpv4Ranges().get(0).getCidrIp()); //remove client.deleteIpFromSecGroup(groupId, port, adddress); result = ec2Client.describeSecurityGroups(request); securityGroups = result.getSecurityGroups(); assertEquals(1, securityGroups.size()); group = securityGroups.get(0); perms = group.getIpPermissions(); assertEquals(0, perms.size()); } }