package tw.com.unit; import com.amazonaws.services.ec2.model.*; import org.easymock.EasyMockRunner; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import tw.com.VpcTestBuilder; import tw.com.exceptions.CfnAssistException; import tw.com.pictures.*; @RunWith(EasyMockRunner.class) public class TestSubnetDiagramBuilder extends EasyMockSupport { private NetworkChildDiagram networkDiagram; private tw.com.pictures.SecurityChildDiagram securityDiagram; private SubnetDiagramBuilder subnetDiagramBuilder; @Before public void beforeEachTestRuns() { networkDiagram = createStrictMock(NetworkChildDiagram.class); securityDiagram = createStrictMock(tw.com.pictures.SecurityChildDiagram.class); createStrictMock(VPCDiagramBuilder.class); Subnet subnet = new Subnet().withSubnetId("subnetId").withCidrBlock("cidrBlock"); subnetDiagramBuilder = new SubnetDiagramBuilder(networkDiagram, securityDiagram, subnet); } @Test public void shouldAddInstanceToDiagram() throws CfnAssistException { Instance instance = new Instance(). withInstanceId("instacneId"). withPrivateIpAddress("privateIp"). withTags(new Tag().withKey("Name").withValue("instanceName")); networkDiagram.addInstance("instacneId", "instanceName\n[instacneId]\n(privateIp)"); securityDiagram.addInstance("instacneId", "instanceName\n[instacneId]\n(privateIp)"); replayAll(); subnetDiagramBuilder.add(instance); verifyAll(); } @Test public void shouldAddRouteTable() throws CfnAssistException { RouteTable routeTable = new RouteTable(). withRouteTableId("routeTableId"). withTags(new Tag().withKey("Name").withValue("routeTableName")); networkDiagram.addRouteTable("subnetId_routeTableId", "routeTableName [routeTableId]"); replayAll(); subnetDiagramBuilder.addRouteTable(routeTable); verifyAll(); } @Test public void shouldAddSecurityGroupToDiagram() throws CfnAssistException { SecurityGroup group = setupSecurityGroup(); securityDiagram.addSecurityGroup("groupId","name [groupId]"); replayAll(); subnetDiagramBuilder.addSecurityGroup(group); verifyAll(); } @Test public void shouldAddSecurityGroupInboundPermsDiagram() throws CfnAssistException { SecurityGroup group = setupSecurityGroup(); IpPermission ipPerms = setupIpPerms(); group.withIpPermissions(ipPerms); securityDiagram.addPortRange("groupId_tcp_80-100_in", "80-100"); securityDiagram.connectWithLabel("groupId_tcp_80-100_in", "groupId", "(ipRanges)\n[tcp]"); replayAll(); subnetDiagramBuilder.addSecGroupInboundPerms("groupId", ipPerms); verifyAll(); } @Test public void shouldAddSecurityGroupInboundPermsDiagramDedup() throws CfnAssistException { SecurityGroup group = setupSecurityGroup(); IpPermission ipPerms = setupIpPerms(); group.withIpPermissions(ipPerms); securityDiagram.addPortRange("groupId_tcp_80-100_in", "80-100"); securityDiagram.connectWithLabel("groupId_tcp_80-100_in", "groupId", "(ipRanges)\n[tcp]"); replayAll(); subnetDiagramBuilder.addSecGroupInboundPerms("groupId", ipPerms); subnetDiagramBuilder.addSecGroupInboundPerms("groupId", ipPerms); verifyAll(); } @Test public void shouldAddOutboundIpPermissions() throws CfnAssistException { SecurityGroup group = setupSecurityGroup(); IpPermission ipPerms = setupIpPerms(); group.withIpPermissionsEgress(ipPerms); securityDiagram.addPortRange("groupId_tcp_80-100_out", "80-100"); securityDiagram.connectWithLabel("groupId", "groupId_tcp_80-100_out", "(ipRanges)\n[tcp]"); replayAll(); subnetDiagramBuilder.addSecGroupOutboundPerms("groupId", ipPerms); verifyAll(); } @Test public void shouldAddOutboundIpPermissionsDedupConnections() throws CfnAssistException { SecurityGroup group = setupSecurityGroup(); IpPermission ipPerms = setupIpPerms(); group.withIpPermissionsEgress(ipPerms); securityDiagram.addPortRange("groupId_tcp_80-100_out", "80-100"); securityDiagram.connectWithLabel("groupId", "groupId_tcp_80-100_out", "(ipRanges)\n[tcp]"); replayAll(); subnetDiagramBuilder.addSecGroupOutboundPerms("groupId", ipPerms); subnetDiagramBuilder.addSecGroupOutboundPerms("groupId", ipPerms); verifyAll(); } public static SecurityGroup setupSecurityGroup() { return new SecurityGroup(). withGroupId("groupId"). withGroupName("fullGroupName"). withTags(VpcTestBuilder.CreateNameTag("name")); } public static IpPermission setupIpPerms() { return new IpPermission(). withFromPort(80). withToPort(100). withIpProtocol("tcp"). withIpv4Ranges(new IpRange().withCidrIp("ipRanges")); } }