diff --git a/tests/test_octodns_provider_cloudflare.py b/tests/test_octodns_provider_cloudflare.py index 544d0fb..f186309 100644 --- a/tests/test_octodns_provider_cloudflare.py +++ b/tests/test_octodns_provider_cloudflare.py @@ -769,18 +769,19 @@ class TestCloudflareProvider(TestCase): plan = provider.plan(wanted) self.assertEquals(False, hasattr(plan, 'changes')) - def test_proxied_ignore_ttl(self): + def test_unproxiabletype_recordfor_returnsrecordwithnocloudflare(self): provider = CloudflareProvider('test', 'email', 'token') - - provider.zone_records = Mock(return_value=[ + name = "unit.tests" + _type = "NS" + zone_records = [ { - "id": "fc12ab34cd5611334422ab3322997642", - "type": "A", - "name": "unit.tests.a", - "content": "1.2.3.4", + "id": "fc12ab34cd5611334422ab3322997654", + "type": _type, + "name": name, + "content": "ns2.foo.bar", "proxiable": True, - "proxied": True, - "ttl": 1, + "proxied": False, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -789,15 +790,29 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ] + provider.zone_records = Mock(return_value=zone_records) + zone = Zone('unit.tests.', []) + provider.populate(zone) + + record = provider._record_for(zone, name, _type, zone_records, False) + + self.assertFalse('cloudflare' in record._octodns) + + def test_proxiabletype_recordfor_retrecordwithcloudflareunproxied(self): + provider = CloudflareProvider('test', 'email', 'token') + name = "multi.unit.tests" + _type = "AAAA" + zone_records = [ { - "id": "fc12ab34cd5611334422ab3322997643", - "type": "AAAA", - "name": "unit.tests.aaaa", + "id": "fc12ab34cd5611334422ab3322997642", + "type": _type, + "name": name, "content": "::1", "proxiable": True, - "proxied": True, - "ttl": 1, + "proxied": False, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -806,15 +821,29 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ] + provider.zone_records = Mock(return_value=zone_records) + zone = Zone('unit.tests.', []) + provider.populate(zone) + + record = provider._record_for(zone, name, _type, zone_records, False) + + self.assertFalse(record._octodns['cloudflare']['proxied']) + + def test_proxiabletype_recordfor_returnsrecordwithcloudflareproxied(self): + provider = CloudflareProvider('test', 'email', 'token') + name = "multi.unit.tests" + _type = "AAAA" + zone_records = [ { - "id": "fc12ab34cd5611334422ab3322997644", - "type": "CNAME", - "name": "unit.tests.cname", - "content": "www.unit.tests", + "id": "fc12ab34cd5611334422ab3322997642", + "type": _type, + "name": name, + "content": "::1", "proxiable": True, "proxied": True, - "ttl": 1, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -823,89 +852,93 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, - ]) - + } + ] + provider.zone_records = Mock(return_value=zone_records) zone = Zone('unit.tests.', []) provider.populate(zone) - wanted = Zone('unit.tests.', []) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.a', { - 'ttl': 120, - 'type': 'A', - 'value': '1.2.3.4' - }), True - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.aaaa', { - 'ttl': 250, - 'type': 'AAAA', - 'value': '::1' - }), True - ) + record = provider._record_for(zone, name, _type, zone_records, False) + + self.assertTrue(record._octodns['cloudflare']['proxied']) + + def test_proxiedrecordandnewttl_includechange_returnsfalse(self): + provider = CloudflareProvider('test', 'email', 'token') + zone = Zone('unit.tests.', []) + existing = set_record_proxied_flag( + Record.new(zone, 'a', { + 'ttl': 1, + 'type': 'A', + 'values': ['1.1.1.1', '2.2.2.2'] + }), True ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.cname', { - 'ttl': 300, - 'type': 'CNAME', - 'value': 'www.unit.tests.' - }), True - ) + new = Record.new(zone, 'a', { + 'ttl': 300, + 'type': 'A', + 'values': ['1.1.1.1', '2.2.2.2'] + }) + change = Update(existing, new) + + include_change = provider._include_change(change) + + self.assertFalse(include_change) + + def test_unproxiabletype_gendata_returnsnoproxied(self): + provider = CloudflareProvider('test', 'email', 'token') + zone = Zone('unit.tests.', []) + record = Record.new(zone, 'a', { + 'ttl': 3600, + 'type': 'NS', + 'value': 'ns1.unit.tests.' + }) + + data = provider._gen_data(record).next() + + self.assertFalse('proxied' in data) + + def test_proxiabletype_gendata_returnsunproxied(self): + provider = CloudflareProvider('test', 'email', 'token') + zone = Zone('unit.tests.', []) + record = set_record_proxied_flag( + Record.new(zone, 'a', { + 'ttl': 300, + 'type': 'A', + 'value': '1.2.3.4' + }), False ) - plan = provider.plan(wanted) - self.assertEquals(False, hasattr(plan, 'changes')) + data = provider._gen_data(record).next() - def test_enable_proxied(self): + self.assertFalse(data['proxied']) + + def test_proxiabletype_gendata_returnsproxied(self): provider = CloudflareProvider('test', 'email', 'token') + zone = Zone('unit.tests.', []) + record = set_record_proxied_flag( + Record.new(zone, 'a', { + 'ttl': 300, + 'type': 'A', + 'value': '1.2.3.4' + }), True + ) + + data = provider._gen_data(record).next() + self.assertTrue(data['proxied']) + + def test_createrecord_extrachanges_returnsemptylist(self): + provider = CloudflareProvider('test', 'email', 'token') + provider.zone_records = Mock(return_value=[]) + existing = Zone('unit.tests.', []) + provider.populate(existing) provider.zone_records = Mock(return_value=[ { "id": "fc12ab34cd5611334422ab3322997642", - "type": "A", - "name": "unit.tests.a", - "content": "1.2.3.4", - "proxiable": True, - "proxied": False, - "ttl": 120, - "locked": False, - "zone_id": "ff12ab34cd5611334422ab3322997650", - "zone_name": "unit.tests", - "modified_on": "2017-03-11T18:01:43.420689Z", - "created_on": "2017-03-11T18:01:43.420689Z", - "meta": { - "auto_added": False - } - }, - { - "id": "fc12ab34cd5611334422ab3322997643", - "type": "AAAA", - "name": "unit.tests.aaaa", - "content": "::1", - "proxiable": True, - "proxied": False, - "ttl": 250, - "locked": False, - "zone_id": "ff12ab34cd5611334422ab3322997650", - "zone_name": "unit.tests", - "modified_on": "2017-03-11T18:01:43.420689Z", - "created_on": "2017-03-11T18:01:43.420689Z", - "meta": { - "auto_added": False - } - }, - { - "id": "fc12ab34cd5611334422ab3322997644", "type": "CNAME", - "name": "unit.tests.cname", + "name": "a.unit.tests", "content": "www.unit.tests", "proxiable": True, - "proxied": False, + "proxied": True, "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", @@ -915,53 +948,24 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } ]) + desired = Zone('unit.tests.', []) + provider.populate(desired) + changes = existing.changes(desired, provider) - zone = Zone('unit.tests.', []) - provider.populate(zone) + extra_changes = provider._extra_changes(existing, desired, changes) - wanted = Zone('unit.tests.', []) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.a', { - 'ttl': 120, - 'type': 'A', - 'value': '1.2.3.4' - }), True - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.aaaa', { - 'ttl': 250, - 'type': 'AAAA', - 'value': '::1' - }), True - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.cname', { - 'ttl': 300, - 'type': 'CNAME', - 'value': 'www.unit.tests.' - }), True - ) - ) - - plan = provider.plan(wanted) - self.assertEquals(True, hasattr(plan, 'changes')) + self.assertFalse(extra_changes) - def test_disable_proxied(self): + def test_updaterecord_extrachanges_returnsemptylist(self): provider = CloudflareProvider('test', 'email', 'token') - provider.zone_records = Mock(return_value=[ { "id": "fc12ab34cd5611334422ab3322997642", - "type": "A", - "name": "unit.tests.a", - "content": "1.2.3.4", + "type": "CNAME", + "name": "a.unit.tests", + "content": "www.unit.tests", "proxiable": True, "proxied": True, "ttl": 120, @@ -973,15 +977,19 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ]) + existing = Zone('unit.tests.', []) + provider.populate(existing) + provider.zone_records = Mock(return_value=[ { - "id": "fc12ab34cd5611334422ab3322997643", - "type": "AAAA", - "name": "unit.tests.aaaa", - "content": "::1", + "id": "fc12ab34cd5611334422ab3322997642", + "type": "CNAME", + "name": "a.unit.tests", + "content": "www.unit.tests", "proxiable": True, "proxied": True, - "ttl": 250, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -990,11 +998,23 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ]) + desired = Zone('unit.tests.', []) + provider.populate(desired) + changes = existing.changes(desired, provider) + + extra_changes = provider._extra_changes(existing, desired, changes) + + self.assertFalse(extra_changes) + + def test_deleterecord_extrachanges_returnsemptylist(self): + provider = CloudflareProvider('test', 'email', 'token') + provider.zone_records = Mock(return_value=[ { - "id": "fc12ab34cd5611334422ab3322997644", + "id": "fc12ab34cd5611334422ab3322997642", "type": "CNAME", - "name": "unit.tests.cname", + "name": "a.unit.tests", "content": "www.unit.tests", "proxiable": True, "proxied": True, @@ -1007,73 +1027,30 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } ]) + existing = Zone('unit.tests.', []) + provider.populate(existing) + provider.zone_records = Mock(return_value=[]) + desired = Zone('unit.tests.', []) + provider.populate(desired) + changes = existing.changes(desired, provider) - zone = Zone('unit.tests.', []) - provider.populate(zone) - - wanted = Zone('unit.tests.', []) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.a', { - 'ttl': 120, - 'type': 'A', - 'value': '1.2.3.4' - }), False - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.aaaa', { - 'ttl': 250, - 'type': 'AAAA', - 'value': '::1' - }), False - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.cname', { - 'ttl': 300, - 'type': 'CNAME', - 'value': 'www.unit.tests.' - }), False - ) - ) + extra_changes = provider._extra_changes(existing, desired, changes) - plan = provider.plan(wanted) - self.assertEquals(True, hasattr(plan, 'changes')) + self.assertFalse(extra_changes) - def test_leave_proxied_disabled(self): + def test_proxify_extrachanges_returnsupdatelist(self): provider = CloudflareProvider('test', 'email', 'token') - provider.zone_records = Mock(return_value=[ { "id": "fc12ab34cd5611334422ab3322997642", - "type": "A", - "name": "unit.tests.a", - "content": "1.2.3.4", - "proxiable": True, - "proxied": False, - "ttl": 120, - "locked": False, - "zone_id": "ff12ab34cd5611334422ab3322997650", - "zone_name": "unit.tests", - "modified_on": "2017-03-11T18:01:43.420689Z", - "created_on": "2017-03-11T18:01:43.420689Z", - "meta": { - "auto_added": False - } - }, - { - "id": "fc12ab34cd5611334422ab3322997643", - "type": "AAAA", - "name": "unit.tests.aaaa", - "content": "::1", + "type": "CNAME", + "name": "a.unit.tests", + "content": "www.unit.tests", "proxiable": True, "proxied": False, - "ttl": 250, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -1082,14 +1059,18 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ]) + existing = Zone('unit.tests.', []) + provider.populate(existing) + provider.zone_records = Mock(return_value=[ { - "id": "fc12ab34cd5611334422ab3322997644", + "id": "fc12ab34cd5611334422ab3322997642", "type": "CNAME", - "name": "unit.tests.cname", + "name": "a.unit.tests", "content": "www.unit.tests", "proxiable": True, - "proxied": False, + "proxied": True, "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", @@ -1099,73 +1080,33 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } ]) + desired = Zone('unit.tests.', []) + provider.populate(desired) + changes = existing.changes(desired, provider) - zone = Zone('unit.tests.', []) - provider.populate(zone) + extra_changes = provider._extra_changes(existing, desired, changes) - wanted = Zone('unit.tests.', []) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.a', { - 'ttl': 120, - 'type': 'A', - 'value': '1.2.3.4' - }), False - ) + self.assertEquals(1, len(extra_changes)) + self.assertFalse( + extra_changes[0].existing._octodns['cloudflare']['proxied'] ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.aaaa', { - 'ttl': 250, - 'type': 'AAAA', - 'value': '::1' - }), False - ) + self.assertTrue( + extra_changes[0].new._octodns['cloudflare']['proxied'] ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.cname', { - 'ttl': 300, - 'type': 'CNAME', - 'value': 'www.unit.tests.' - }), False - ) - ) - - plan = provider.plan(wanted) - self.assertEquals(False, hasattr(plan, 'changes')) - def test_leave_proxied_enabled(self): + def test_unproxify_extrachanges_returnsupdatelist(self): provider = CloudflareProvider('test', 'email', 'token') - provider.zone_records = Mock(return_value=[ { "id": "fc12ab34cd5611334422ab3322997642", - "type": "A", - "name": "unit.tests.a", - "content": "1.2.3.4", - "proxiable": True, - "proxied": True, - "ttl": 120, - "locked": False, - "zone_id": "ff12ab34cd5611334422ab3322997650", - "zone_name": "unit.tests", - "modified_on": "2017-03-11T18:01:43.420689Z", - "created_on": "2017-03-11T18:01:43.420689Z", - "meta": { - "auto_added": False - } - }, - { - "id": "fc12ab34cd5611334422ab3322997643", - "type": "AAAA", - "name": "unit.tests.aaaa", - "content": "::1", + "type": "CNAME", + "name": "a.unit.tests", + "content": "www.unit.tests", "proxiable": True, "proxied": True, - "ttl": 250, + "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", "zone_name": "unit.tests", @@ -1174,14 +1115,18 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } + ]) + existing = Zone('unit.tests.', []) + provider.populate(existing) + provider.zone_records = Mock(return_value=[ { - "id": "fc12ab34cd5611334422ab3322997644", + "id": "fc12ab34cd5611334422ab3322997642", "type": "CNAME", - "name": "unit.tests.cname", + "name": "a.unit.tests", "content": "www.unit.tests", "proxiable": True, - "proxied": True, + "proxied": False, "ttl": 300, "locked": False, "zone_id": "ff12ab34cd5611334422ab3322997650", @@ -1191,40 +1136,18 @@ class TestCloudflareProvider(TestCase): "meta": { "auto_added": False } - }, + } ]) + desired = Zone('unit.tests.', []) + provider.populate(desired) + changes = existing.changes(desired, provider) - zone = Zone('unit.tests.', []) - provider.populate(zone) + extra_changes = provider._extra_changes(existing, desired, changes) - wanted = Zone('unit.tests.', []) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.a', { - 'ttl': 120, - 'type': 'A', - 'value': '1.2.3.4' - }), True - ) - ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.aaaa', { - 'ttl': 250, - 'type': 'AAAA', - 'value': '::1' - }), True - ) + self.assertEquals(1, len(extra_changes)) + self.assertTrue( + extra_changes[0].existing._octodns['cloudflare']['proxied'] ) - wanted.add_record( - set_record_proxied_flag( - Record.new(wanted, 'unit.tests.cname', { - 'ttl': 300, - 'type': 'CNAME', - 'value': 'www.unit.tests.' - }), True - ) + self.assertFalse( + extra_changes[0].new._octodns['cloudflare']['proxied'] ) - - plan = provider.plan(wanted) - self.assertEquals(False, hasattr(plan, 'changes'))