Search in sources :

Example 6 with AWSResourceType

use of com.netflix.simianarmy.aws.AWSResourceType in project SimianArmy by Netflix.

the class TestRDSJanitorResourceTracker method testUpdateResource.

@SuppressWarnings("unchecked")
@Test
public void testUpdateResource() {
    String id = "i-12345678901234567";
    AWSResourceType resourceType = AWSResourceType.INSTANCE;
    Resource.CleanupState state = Resource.CleanupState.MARKED;
    String description = "This is a test resource.";
    String ownerEmail = "owner@test.com";
    String region = "us-east-1";
    String terminationReason = "This is a test termination reason.";
    DateTime now = DateTime.now();
    Date expectedTerminationTime = new Date(now.plusDays(10).getMillis());
    Date markTime = new Date(now.getMillis());
    String fieldName = "fieldName123";
    String fieldValue = "fieldValue456";
    Resource resource = new AWSResource().withId(id).withResourceType(resourceType).withDescription(description).withOwnerEmail(ownerEmail).withRegion(region).withState(state).withTerminationReason(terminationReason).withExpectedTerminationTime(expectedTerminationTime).withMarkTime(markTime).withOptOutOfJanitor(false).setAdditionalField(fieldName, fieldValue);
    // mock the select query that is issued to see if the record already exists
    ArrayList<Resource> resources = new ArrayList<>();
    resources.add(resource);
    TestRDSJanitorResourceTracker tracker = new TestRDSJanitorResourceTracker();
    when(tracker.getJdbcTemplate().query(Matchers.anyString(), Matchers.any(Object[].class), Matchers.any(RowMapper.class))).thenReturn(resources);
    // update the ownerEmail
    ownerEmail = "owner2@test.com";
    Resource newResource = new AWSResource().withId(id).withResourceType(resourceType).withDescription(description).withOwnerEmail(ownerEmail).withRegion(region).withState(state).withTerminationReason(terminationReason).withExpectedTerminationTime(expectedTerminationTime).withMarkTime(markTime).withOptOutOfJanitor(false).setAdditionalField(fieldName, fieldValue);
    ArgumentCaptor<Object> objCap = ArgumentCaptor.forClass(Object.class);
    ArgumentCaptor<String> sqlCap = ArgumentCaptor.forClass(String.class);
    when(tracker.getJdbcTemplate().update(sqlCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture(), objCap.capture())).thenReturn(1);
    tracker.addOrUpdate(newResource);
    List<Object> args = objCap.getAllValues();
    Assert.assertEquals(sqlCap.getValue(), "update janitortable set resourceType=?,region=?,ownerEmail=?,description=?,state=?,terminationReason=?,expectedTerminationTime=?,actualTerminationTime=?,notificationTime=?,launchTime=?,markTime=?,optOutOfJanitor=?,additionalFields=? where resourceId=? and region=?");
    Assert.assertEquals(args.size(), 15);
    Assert.assertEquals(args.get(0).toString(), AWSResourceType.INSTANCE.toString());
    Assert.assertEquals(args.get(1).toString(), region);
    Assert.assertEquals(args.get(2).toString(), ownerEmail);
    Assert.assertEquals(args.get(3).toString(), description);
    Assert.assertEquals(args.get(4).toString(), state.toString());
    Assert.assertEquals(args.get(5).toString(), terminationReason);
    Assert.assertEquals(args.get(6).toString(), expectedTerminationTime.getTime() + "");
    Assert.assertEquals(args.get(7).toString(), "0");
    Assert.assertEquals(args.get(8).toString(), "0");
    Assert.assertEquals(args.get(9).toString(), "0");
    Assert.assertEquals(args.get(10).toString(), markTime.getTime() + "");
    Assert.assertEquals(args.get(11).toString(), "false");
    Assert.assertEquals(args.get(12).toString(), "{\"fieldName123\":\"fieldValue456\"}");
    Assert.assertEquals(args.get(13).toString(), id);
    Assert.assertEquals(args.get(14).toString(), region);
}
Also used : Resource(com.netflix.simianarmy.Resource) AWSResource(com.netflix.simianarmy.aws.AWSResource) DateTime(org.joda.time.DateTime) AWSResourceType(com.netflix.simianarmy.aws.AWSResourceType) AWSResource(com.netflix.simianarmy.aws.AWSResource) RowMapper(org.springframework.jdbc.core.RowMapper) Test(org.testng.annotations.Test)

Example 7 with AWSResourceType

use of com.netflix.simianarmy.aws.AWSResourceType in project SimianArmy by Netflix.

the class TestSimpleDBJanitorResourceTracker method testGetResources.

@Test
public void testGetResources() {
    String id1 = "id-1";
    String id2 = "id-2";
    AWSResourceType resourceType = AWSResourceType.INSTANCE;
    Resource.CleanupState state = Resource.CleanupState.MARKED;
    String description = "This is a test resource.";
    String ownerEmail = "owner@test.com";
    String region = "us-east-1";
    String terminationReason = "This is a test termination reason.";
    DateTime now = DateTime.now();
    Date expectedTerminationTime = new Date(now.plusDays(10).getMillis());
    Date markTime = new Date(now.getMillis());
    String fieldName = "fieldName123";
    String fieldValue = "fieldValue456";
    SelectResult result1 = mkSelectResult(id1, resourceType, state, description, ownerEmail, region, terminationReason, expectedTerminationTime, markTime, false, fieldName, fieldValue);
    result1.setNextToken("nextToken");
    SelectResult result2 = mkSelectResult(id2, resourceType, state, description, ownerEmail, region, terminationReason, expectedTerminationTime, markTime, true, fieldName, fieldValue);
    ArgumentCaptor<SelectRequest> arg = ArgumentCaptor.forClass(SelectRequest.class);
    TestSimpleDBJanitorResourceTracker tracker = new TestSimpleDBJanitorResourceTracker();
    when(tracker.sdbMock.select(any(SelectRequest.class))).thenReturn(result1).thenReturn(result2);
    verifyResources(tracker.getResources(resourceType, state, region), id1, id2, resourceType, state, description, ownerEmail, region, terminationReason, expectedTerminationTime, markTime, fieldName, fieldValue);
    verify(tracker.sdbMock, times(2)).select(arg.capture());
}
Also used : SelectResult(com.amazonaws.services.simpledb.model.SelectResult) AWSResourceType(com.netflix.simianarmy.aws.AWSResourceType) AWSResource(com.netflix.simianarmy.aws.AWSResource) Resource(com.netflix.simianarmy.Resource) DateTime(org.joda.time.DateTime) Date(java.util.Date) SelectRequest(com.amazonaws.services.simpledb.model.SelectRequest) Test(org.testng.annotations.Test)

Example 8 with AWSResourceType

use of com.netflix.simianarmy.aws.AWSResourceType in project SimianArmy by Netflix.

the class TestSimpleDBJanitorResourceTracker method testAddResource.

@Test
public void testAddResource() {
    String id = "i-12345678901234567";
    AWSResourceType resourceType = AWSResourceType.INSTANCE;
    Resource.CleanupState state = Resource.CleanupState.MARKED;
    String description = "This is a test resource.";
    String ownerEmail = "owner@test.com";
    String region = "us-east-1";
    String terminationReason = "This is a test termination reason.";
    DateTime now = DateTime.now();
    Date expectedTerminationTime = new Date(now.plusDays(10).getMillis());
    Date markTime = new Date(now.getMillis());
    String fieldName = "fieldName123";
    String fieldValue = "fieldValue456";
    Resource resource = new AWSResource().withId(id).withResourceType(resourceType).withDescription(description).withOwnerEmail(ownerEmail).withRegion(region).withState(state).withTerminationReason(terminationReason).withExpectedTerminationTime(expectedTerminationTime).withMarkTime(markTime).withOptOutOfJanitor(false).setAdditionalField(fieldName, fieldValue);
    ArgumentCaptor<PutAttributesRequest> arg = ArgumentCaptor.forClass(PutAttributesRequest.class);
    TestSimpleDBJanitorResourceTracker tracker = new TestSimpleDBJanitorResourceTracker();
    tracker.addOrUpdate(resource);
    verify(tracker.sdbMock).putAttributes(arg.capture());
    PutAttributesRequest req = arg.getValue();
    Assert.assertEquals(req.getDomainName(), "DOMAIN");
    Assert.assertEquals(req.getItemName(), getSimpleDBItemName(resource));
    Map<String, String> map = new HashMap<String, String>();
    for (ReplaceableAttribute attr : req.getAttributes()) {
        map.put(attr.getName(), attr.getValue());
    }
    Assert.assertEquals(map.remove(AWSResource.FIELD_RESOURCE_ID), id);
    Assert.assertEquals(map.remove(AWSResource.FIELD_DESCRIPTION), description);
    Assert.assertEquals(map.remove(AWSResource.FIELD_EXPECTED_TERMINATION_TIME), AWSResource.DATE_FORMATTER.print(expectedTerminationTime.getTime()));
    Assert.assertEquals(map.remove(AWSResource.FIELD_MARK_TIME), AWSResource.DATE_FORMATTER.print(markTime.getTime()));
    Assert.assertEquals(map.remove(AWSResource.FIELD_REGION), region);
    Assert.assertEquals(map.remove(AWSResource.FIELD_OWNER_EMAIL), ownerEmail);
    Assert.assertEquals(map.remove(AWSResource.FIELD_RESOURCE_TYPE), resourceType.name());
    Assert.assertEquals(map.remove(AWSResource.FIELD_STATE), state.name());
    Assert.assertEquals(map.remove(AWSResource.FIELD_TERMINATION_REASON), terminationReason);
    Assert.assertEquals(map.remove(AWSResource.FIELD_OPT_OUT_OF_JANITOR), "false");
    Assert.assertEquals(map.remove(fieldName), fieldValue);
    Assert.assertEquals(map.size(), 0);
}
Also used : HashMap(java.util.HashMap) AWSResource(com.netflix.simianarmy.aws.AWSResource) Resource(com.netflix.simianarmy.Resource) DateTime(org.joda.time.DateTime) Date(java.util.Date) ReplaceableAttribute(com.amazonaws.services.simpledb.model.ReplaceableAttribute) AWSResourceType(com.netflix.simianarmy.aws.AWSResourceType) AWSResource(com.netflix.simianarmy.aws.AWSResource) PutAttributesRequest(com.amazonaws.services.simpledb.model.PutAttributesRequest) Test(org.testng.annotations.Test)

Example 9 with AWSResourceType

use of com.netflix.simianarmy.aws.AWSResourceType in project SimianArmy by Netflix.

the class TestLaunchConfigJanitorCrawler method testInstancesWithResourceType.

@Test
public void testInstancesWithResourceType() {
    int n = 2;
    List<LaunchConfiguration> lcList = createLaunchConfigList(n);
    LaunchConfigJanitorCrawler crawler = new LaunchConfigJanitorCrawler(createMockAWSClient(createASGList(n), lcList));
    for (AWSResourceType resourceType : AWSResourceType.values()) {
        List<Resource> resources = crawler.resources(resourceType);
        if (resourceType == AWSResourceType.LAUNCH_CONFIG) {
            verifyLaunchConfigList(resources, lcList);
        } else {
            Assert.assertTrue(resources.isEmpty());
        }
    }
}
Also used : LaunchConfiguration(com.amazonaws.services.autoscaling.model.LaunchConfiguration) AWSResourceType(com.netflix.simianarmy.aws.AWSResourceType) Resource(com.netflix.simianarmy.Resource) Test(org.testng.annotations.Test)

Example 10 with AWSResourceType

use of com.netflix.simianarmy.aws.AWSResourceType in project SimianArmy by Netflix.

the class TestEBSSnapshotJanitorCrawler method testSnapshotsWithResourceType.

@Test
public void testSnapshotsWithResourceType() {
    Date startTime = new Date();
    List<Snapshot> snapshotList = createSnapshotList(startTime);
    EBSSnapshotJanitorCrawler crawler = new EBSSnapshotJanitorCrawler(createMockAWSClient(snapshotList));
    for (AWSResourceType resourceType : AWSResourceType.values()) {
        List<Resource> resources = crawler.resources(resourceType);
        if (resourceType == AWSResourceType.EBS_SNAPSHOT) {
            verifySnapshotList(resources, snapshotList, startTime);
        } else {
            Assert.assertTrue(resources.isEmpty());
        }
    }
}
Also used : Snapshot(com.amazonaws.services.ec2.model.Snapshot) AWSResourceType(com.netflix.simianarmy.aws.AWSResourceType) Resource(com.netflix.simianarmy.Resource) AWSResource(com.netflix.simianarmy.aws.AWSResource) Date(java.util.Date) Test(org.testng.annotations.Test)

Aggregations

Resource (com.netflix.simianarmy.Resource)11 AWSResourceType (com.netflix.simianarmy.aws.AWSResourceType)11 Test (org.testng.annotations.Test)11 AWSResource (com.netflix.simianarmy.aws.AWSResource)9 DateTime (org.joda.time.DateTime)6 Date (java.util.Date)4 RowMapper (org.springframework.jdbc.core.RowMapper)4 AWSClient (com.netflix.simianarmy.client.aws.AWSClient)2 AutoScalingGroup (com.amazonaws.services.autoscaling.model.AutoScalingGroup)1 AutoScalingInstanceDetails (com.amazonaws.services.autoscaling.model.AutoScalingInstanceDetails)1 LaunchConfiguration (com.amazonaws.services.autoscaling.model.LaunchConfiguration)1 Instance (com.amazonaws.services.ec2.model.Instance)1 Snapshot (com.amazonaws.services.ec2.model.Snapshot)1 Volume (com.amazonaws.services.ec2.model.Volume)1 PutAttributesRequest (com.amazonaws.services.simpledb.model.PutAttributesRequest)1 ReplaceableAttribute (com.amazonaws.services.simpledb.model.ReplaceableAttribute)1 SelectRequest (com.amazonaws.services.simpledb.model.SelectRequest)1 SelectResult (com.amazonaws.services.simpledb.model.SelectResult)1 HashMap (java.util.HashMap)1