From d1c823e0d8ff8dbd7e1abd9bb5dcae189d0c5948 Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Thu, 30 Apr 2015 18:51:01 -0400 Subject: [PATCH] Fix for deleting Route53 record sets with set identifiers. Closes #342. --- moto/route53/models.py | 5 ++++- moto/route53/responses.py | 5 ++++- tests/test_route53/test_route53.py | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/moto/route53/models.py b/moto/route53/models.py index 3f7f439e4..00e23c38e 100644 --- a/moto/route53/models.py +++ b/moto/route53/models.py @@ -117,9 +117,12 @@ class FakeZone(object): self.rrsets.append(record_set) return record_set - def delete_rrset(self, name): + def delete_rrset_by_name(self, name): self.rrsets = [record_set for record_set in self.rrsets if record_set.name != name] + def delete_rrset_by_id(self, set_identifier): + self.rrsets = [record_set for record_set in self.rrsets if record_set.set_identifier != set_identifier] + def get_record_sets(self, type_filter, name_filter): record_sets = list(self.rrsets) # Copy the list if type_filter: diff --git a/moto/route53/responses.py b/moto/route53/responses.py index 2eba0778e..3cd848607 100644 --- a/moto/route53/responses.py +++ b/moto/route53/responses.py @@ -58,7 +58,10 @@ def rrset_response(request, full_url, headers): record_set['ResourceRecords'] = [x['Value'] for x in record_set['ResourceRecords'].values()] the_zone.add_rrset(record_set) elif action == "DELETE": - the_zone.delete_rrset(record_set["Name"]) + if 'SetIdentifier' in record_set: + the_zone.delete_rrset_by_id(record_set["SetIdentifier"]) + else: + the_zone.delete_rrset_by_name(record_set["Name"]) return 200, headers, CHANGE_RRSET_RESPONSE diff --git a/tests/test_route53/test_route53.py b/tests/test_route53/test_route53.py index 5fc7f6940..9af3a5f09 100644 --- a/tests/test_route53/test_route53.py +++ b/tests/test_route53/test_route53.py @@ -167,6 +167,7 @@ def test_use_health_check_in_resource_record_set(): record_sets = conn.get_all_rrsets(zone_id) record_sets[0].health_check.should.equal(check_id) + @mock_route53 def test_hosted_zone_comment_preserved(): conn = boto.connect_route53('the_key', 'the_secret') @@ -182,3 +183,23 @@ def test_hosted_zone_comment_preserved(): zone = conn.get_zone("testdns.aws.com.") zone.config["Comment"].should.equal("test comment") + + +@mock_route53 +def test_deleting_weighted_route(): + conn = boto.connect_route53() + + conn.create_hosted_zone("testdns.aws.com.") + zone = conn.get_zone("testdns.aws.com.") + + zone.add_cname("cname.testdns.aws.com", "example.com", identifier=('success-test-foo', '50')) + zone.add_cname("cname.testdns.aws.com", "example.com", identifier=('success-test-bar', '50')) + + cnames = zone.get_cname('cname.testdns.aws.com.', all=True) + cnames.should.have.length_of(2) + foo_cname = [cname for cname in cnames if cname.identifier == 'success-test-foo'][0] + + zone.delete_record(foo_cname) + cname = zone.get_cname('cname.testdns.aws.com.', all=True) + # When get_cname only had one result, it returns just that result instead of a list. + cname.identifier.should.equal('success-test-bar')