Skip to content

Commit 87eb392

Browse files
committed
Added test covering the deletion of existing EBS volume snapshots.
1 parent 3ab4458 commit 87eb392

File tree

3 files changed

+78
-23
lines changed

3 files changed

+78
-23
lines changed

.travis.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ language: python
22
python:
33
- "2.6"
44
- "2.7"
5-
- "3.2"
6-
- "3.3"
7-
- "3.4"
8-
- "3.5"
9-
- "3.5-dev" # 3.5 development branch
10-
- "3.6"
11-
- "3.6-dev" # 3.6 development branch
12-
- "3.7-dev" # 3.7 development branch
13-
- "nightly" # currently points to 3.7-dev
5+
# - "3.2"
6+
# - "3.3"
7+
# - "3.4"
8+
# - "3.5"
9+
# - "3.5-dev" # 3.5 development branch
10+
# - "3.6"
11+
# - "3.6-dev" # 3.6 development branch
12+
# - "3.7-dev" # 3.7 development branch
13+
# - "nightly" # currently points to 3.7-dev
1414
# command to install dependencies
1515
install:
1616
- "pip install -r requirements.txt"
1717
- "pip install -r development.txt"
1818
env:
1919
- PYTHONPATH=lambda
2020
# command to run tests
21-
script: nosetests
21+
script: nosetests --with-xunit --with-coverage --cover-package=lambda --cover-erase

lambda/backuplambda.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ def process_backup(self):
140140
self.message += "\nTotal snapshots errors: " + str(count_errors)
141141
self.message += "\nTotal snapshots deleted: " + str(total_deletes) + "\n"
142142

143+
return {
144+
"total_resources": count_total,
145+
"total_creates": total_creates,
146+
"total_errors": count_errors,
147+
"total_deletes": total_deletes,
148+
}
149+
143150
def delete_snapshot(self, snapshot):
144151
pass
145152

@@ -418,8 +425,9 @@ def lambda_handler(event, context={}):
418425
date_suffix=date_suffix,
419426
keep_count=keep_count)
420427

421-
backup_mgr.process_backup()
428+
metrics = backup_mgr.process_backup()
422429

430+
result["metrics"] = metrics
423431
result["ec2_backup_result"] = backup_mgr.message
424432
print('\n' + backup_mgr.message + '\n')
425433

@@ -437,8 +445,9 @@ def lambda_handler(event, context={}):
437445
date_suffix=date_suffix,
438446
keep_count=keep_count)
439447

440-
backup_mgr.process_backup()
448+
metrics = backup_mgr.process_backup()
441449

450+
result["metrics"] = metrics
442451
result["rds_backup_result"] = backup_mgr.message
443452
print('\n' + backup_mgr.message + '\n')
444453

tests/tests.py

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
import unittest
2-
import boto
32
import boto3
3+
import json
44

55
from moto import mock_ec2, mock_sns
66
from backuplambda import *
77

88

9-
def add_servers(ami_id, count):
10-
conn = boto.connect_ec2('the_key', 'the_secret')
11-
for index in range(count):
12-
instance = conn.run_instances(ami_id)
13-
instance.instances[0].add_tag('Snapshot', 'True')
14-
15-
169
def add_volume(tag_name, tag_value, region_name):
1710

1811
ec2_boto = boto3.client('ec2', region_name=region_name)
@@ -25,11 +18,21 @@ def add_volume(tag_name, tag_value, region_name):
2518
ec2_boto.create_tags(Resources=[resource_id],
2619
Tags=[{"Key": tag_name, "Value": tag_value}])
2720

21+
return resource_id
22+
23+
24+
def add_volume_snapshot(resource_id, description, region_name):
25+
26+
ec2_boto = boto3.client('ec2', region_name=region_name)
27+
current_snap = ec2_boto.create_snapshot(VolumeId=resource_id,
28+
Description=description)
29+
2830

2931
class EC2BackupManagerTest(unittest.TestCase):
3032

3133
@mock_ec2
32-
def test_init(self):
34+
def test_resolve_resource_bytag(self):
35+
3336
add_volume("Snapshot", "True", "ap-southeast-1")
3437
add_volume("Name", "Anotherone", "ap-southeast-1")
3538

@@ -73,9 +76,52 @@ def test_ec2_one_volume(self):
7376

7477
"arn": arn,
7578

76-
"keep_count": 12
79+
"keep_count": 2
80+
}
81+
82+
result = lambda_handler(event)
83+
dajson = json.loads(result)
84+
85+
self.assertEqual(dajson["metrics"]["total_resources"], 1)
86+
self.assertEqual(dajson["metrics"]["total_creates"], 1)
87+
self.assertEqual(dajson["metrics"]["total_deletes"], 0)
88+
self.assertEqual(dajson["metrics"]["total_errors"], 0)
89+
90+
@mock_ec2
91+
@mock_sns
92+
def test_ec2_image_rotation(self):
93+
region_name = "ap-southeast-2"
94+
95+
volume = add_volume("MakeSnapshot", "True", region_name)
96+
add_volume("Name", "Anotherone", region_name)
97+
98+
add_volume_snapshot(volume, description="day_snapshot-1", region_name=region_name)
99+
add_volume_snapshot(volume, description="day_snapshot-2", region_name=region_name)
100+
101+
sns_boto = boto3.client('sns', region_name=region_name)
102+
103+
response = sns_boto.create_topic(Name="datopic")
104+
arn = response["TopicArn"]
105+
106+
event = {
107+
"period_label": "day",
108+
"period_format": "%a%H",
109+
110+
"ec2_region_name": region_name,
111+
# "rds_region_name": region_name,
112+
113+
"tag_name": "MakeSnapshot",
114+
"tag_value": "True",
115+
116+
"arn": arn,
117+
118+
"keep_count": 1
77119
}
78120

79121
result = lambda_handler(event)
122+
dajson = json.loads(result)
80123

81-
print result
124+
self.assertEqual(dajson["metrics"]["total_resources"], 1)
125+
self.assertEqual(dajson["metrics"]["total_creates"], 1)
126+
self.assertEqual(dajson["metrics"]["total_deletes"], 2)
127+
self.assertEqual(dajson["metrics"]["total_errors"], 0)

0 commit comments

Comments
 (0)