@Test public void createChaosSecurityGroup () { String vpcId = randomUUID().toString(); String securityGroupId = randomUUID().toString(); ArgumentCaptor<CreateSecurityGroupRequest> createSecurityGroupRequestArgumentCaptor = ArgumentCaptor.forClass(CreateSecurityGroupRequest.class); doReturn(new CreateSecurityGroupResult().withGroupId(securityGroupId)).when(amazonEC2) .createSecurityGroup(createSecurityGroupRequestArgumentCaptor .capture()); assertEquals(securityGroupId, awsEC2Platform.createChaosSecurityGroup(vpcId)); CreateSecurityGroupRequest request = createSecurityGroupRequestArgumentCaptor.getValue(); assertEquals(AwsEC2Constants.EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId, request.getGroupName()); assertEquals(vpcId, request.getVpcId()); assertEquals(AwsEC2Constants.EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION, request.getDescription()); ArgumentCaptor<RevokeSecurityGroupEgressRequest> revokeSecurityGroupEgressRequestArgumentCaptor = ArgumentCaptor .forClass(RevokeSecurityGroupEgressRequest.class); verify(amazonEC2, times(1)).revokeSecurityGroupEgress(revokeSecurityGroupEgressRequestArgumentCaptor.capture()); RevokeSecurityGroupEgressRequest revokeSecurityGroupEgressRequest = revokeSecurityGroupEgressRequestArgumentCaptor .getValue(); assertEquals(Collections.singletonList(AwsEC2Constants.DEFAULT_IP_PERMISSIONS), revokeSecurityGroupEgressRequest .getIpPermissions()); }
String createChaosSecurityGroup (String vpcId) { log.debug("Creating Chaos Security Group for VPC {}", v("VPC", vpcId)); String groupId = amazonEC2.createSecurityGroup(new CreateSecurityGroupRequest().withGroupName(EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId) .withVpcId(vpcId) .withDescription(EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION)) .getGroupId(); amazonEC2.revokeSecurityGroupEgress(new RevokeSecurityGroupEgressRequest().withIpPermissions(DEFAULT_IP_PERMISSIONS) .withGroupId(groupId)); log.info("Created Security Group {} in VPC {} for use in Chaos", v("Security Group", groupId), v("VPC", vpcId)); return groupId; }
AwsEC2Platform extends Platform implements SshBasedExperiment<AwsEC2Container> { String createChaosSecurityGroup (String vpcId) { log.debug("Creating Chaos Security Group for VPC {}", v("VPC", vpcId)); String groupId = amazonEC2.createSecurityGroup(new CreateSecurityGroupRequest().withGroupName(EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId) .withVpcId(vpcId) .withDescription(EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION)) .getGroupId(); amazonEC2.revokeSecurityGroupEgress(new RevokeSecurityGroupEgressRequest().withIpPermissions(DEFAULT_IP_PERMISSIONS) .withGroupId(groupId)); log.info("Created Security Group {} in VPC {} for use in Chaos", v("Security Group", groupId), v("VPC", vpcId)); return groupId; } }
AwsEC2Platform extends Platform implements SshBasedExperiment<AwsEC2Container> { String createChaosSecurityGroup (String vpcId) { log.debug("Creating Chaos Security Group for VPC {}", v("VPC", vpcId)); String groupId = amazonEC2.createSecurityGroup(new CreateSecurityGroupRequest().withGroupName(EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId) .withVpcId(vpcId) .withDescription(EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION)) .getGroupId(); amazonEC2.revokeSecurityGroupEgress(new RevokeSecurityGroupEgressRequest().withIpPermissions(DEFAULT_IP_PERMISSIONS) .withGroupId(groupId)); log.info("Created Security Group {} in VPC {} for use in Chaos", v("Security Group", groupId), v("VPC", vpcId)); return groupId; } @Autowired  AwsEC2Platform(AmazonEC2 amazonEC2, ContainerManager containerManager, AwsEC2SelfAwareness awsEC2SelfAwareness); private  AwsEC2Platform(); }
AwsEC2Platform extends Platform implements SshBasedExperiment<AwsEC2Container> { String createChaosSecurityGroup (String vpcId) { log.debug("Creating Chaos Security Group for VPC {}", v("VPC", vpcId)); String groupId = amazonEC2.createSecurityGroup(new CreateSecurityGroupRequest().withGroupName(EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId) .withVpcId(vpcId) .withDescription(EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION)) .getGroupId(); amazonEC2.revokeSecurityGroupEgress(new RevokeSecurityGroupEgressRequest().withIpPermissions(DEFAULT_IP_PERMISSIONS) .withGroupId(groupId)); log.info("Created Security Group {} in VPC {} for use in Chaos", v("Security Group", groupId), v("VPC", vpcId)); return groupId; } @Autowired  AwsEC2Platform(AmazonEC2 amazonEC2, ContainerManager containerManager, AwsEC2SelfAwareness awsEC2SelfAwareness); private  AwsEC2Platform(); void setFilter(@NotNull Map<String, List<String>> filter); void setGroupingTags(List<String> groupingTags); void setSSHPrivateKeys(@NotNull Map<String, String> sshPrivateKeys); Map<String, String> getImageIdToUsernameMap(); void setImageIdToUsernameMap(Map<String, String> imageIdToUsernameMap); @Override ApiStatus getApiStatus(); @JsonIgnore Collection<SubnetUtils.SubnetInfo> getRoutableCidrBlocks(); void setRoutableCidrBlocks(Collection<String> routableCidrBlocks); boolean isAddressRoutable(String privateIPAddress); @Override PlatformLevel getPlatformLevel(); @Override PlatformHealth getPlatformHealth(); @Override List<Container> generateRoster(); @Override boolean isContainerRecycled(Container container); ContainerHealth checkHealth(String instanceId); void stopInstance(String... instanceIds); void terminateInstance(String... instanceIds); void startInstance(String... instanceIds); void restartInstance(String... instanceIds); void setSecurityGroupIds(String networkInterfaceId, Collection<String> securityGroupIds); String getChaosSecurityGroupForInstance(String instanceId); boolean isContainerTerminated(String instanceId); boolean isAutoscalingGroupAtDesiredInstances(String autoScalingGroupName); boolean hasKey(String keyName); @Override void recycleContainer(AwsEC2Container container); void triggerAutoscalingUnhealthy(String instanceId); @Override String getEndpoint(AwsEC2Container container); @Override SSHCredentials getSshCredentials(AwsEC2Container container); boolean isStarted(AwsEC2Container awsEC2Container); Map<String, Set<String>> getNetworkInterfaceToSecurityGroupsMap(String instanceId); boolean verifySecurityGroupIdsOfNetworkInterfaceMap(String instanceId, Map<String, Set<String>> originalSecurityGroups); }
AwsEC2Platform extends Platform implements SshBasedExperiment<AwsEC2Container> { String createChaosSecurityGroup (String vpcId) { log.debug("Creating Chaos Security Group for VPC {}", v("VPC", vpcId)); String groupId = amazonEC2.createSecurityGroup(new CreateSecurityGroupRequest().withGroupName(EC2_DEFAULT_CHAOS_SECURITY_GROUP_NAME + "-" + vpcId) .withVpcId(vpcId) .withDescription(EC2_DEFAULT_CHAOS_SECURITY_GROUP_DESCRIPTION)) .getGroupId(); amazonEC2.revokeSecurityGroupEgress(new RevokeSecurityGroupEgressRequest().withIpPermissions(DEFAULT_IP_PERMISSIONS) .withGroupId(groupId)); log.info("Created Security Group {} in VPC {} for use in Chaos", v("Security Group", groupId), v("VPC", vpcId)); return groupId; } @Autowired  AwsEC2Platform(AmazonEC2 amazonEC2, ContainerManager containerManager, AwsEC2SelfAwareness awsEC2SelfAwareness); private  AwsEC2Platform(); void setFilter(@NotNull Map<String, List<String>> filter); void setGroupingTags(List<String> groupingTags); void setSSHPrivateKeys(@NotNull Map<String, String> sshPrivateKeys); Map<String, String> getImageIdToUsernameMap(); void setImageIdToUsernameMap(Map<String, String> imageIdToUsernameMap); @Override ApiStatus getApiStatus(); @JsonIgnore Collection<SubnetUtils.SubnetInfo> getRoutableCidrBlocks(); void setRoutableCidrBlocks(Collection<String> routableCidrBlocks); boolean isAddressRoutable(String privateIPAddress); @Override PlatformLevel getPlatformLevel(); @Override PlatformHealth getPlatformHealth(); @Override List<Container> generateRoster(); @Override boolean isContainerRecycled(Container container); ContainerHealth checkHealth(String instanceId); void stopInstance(String... instanceIds); void terminateInstance(String... instanceIds); void startInstance(String... instanceIds); void restartInstance(String... instanceIds); void setSecurityGroupIds(String networkInterfaceId, Collection<String> securityGroupIds); String getChaosSecurityGroupForInstance(String instanceId); boolean isContainerTerminated(String instanceId); boolean isAutoscalingGroupAtDesiredInstances(String autoScalingGroupName); boolean hasKey(String keyName); @Override void recycleContainer(AwsEC2Container container); void triggerAutoscalingUnhealthy(String instanceId); @Override String getEndpoint(AwsEC2Container container); @Override SSHCredentials getSshCredentials(AwsEC2Container container); boolean isStarted(AwsEC2Container awsEC2Container); Map<String, Set<String>> getNetworkInterfaceToSecurityGroupsMap(String instanceId); boolean verifySecurityGroupIdsOfNetworkInterfaceMap(String instanceId, Map<String, Set<String>> originalSecurityGroups);  }