From 0f298e51bef5b93f0722d335f8f9515964eb51db Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Fri, 13 Dec 2019 13:22:54 -0800 Subject: [PATCH] Tests for ns1 _monitors_gc --- octodns/provider/ns1.py | 12 ++--- tests/test_octodns_provider_ns1.py | 83 ++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 6 deletions(-) diff --git a/octodns/provider/ns1.py b/octodns/provider/ns1.py index 5cb7c2e..e8b8d17 100644 --- a/octodns/provider/ns1.py +++ b/octodns/provider/ns1.py @@ -726,8 +726,8 @@ class Ns1Provider(BaseProvider): return monitor_id, feed_id - def _gc_monitors(self, record, active_monitor_ids=None): - self.log.debug('_gc_monitors: record=%s, active_monitor_ids=%s', + def _monitors_gc(self, record, active_monitor_ids=None): + self.log.debug('_monitors_gc: record=%s, active_monitor_ids=%s', record.fqdn, active_monitor_ids) if active_monitor_ids is None: @@ -738,7 +738,7 @@ class Ns1Provider(BaseProvider): if monitor_id in active_monitor_ids: continue - self.log.debug('_gc_monitors: deleting %s', monitor_id) + self.log.debug('_monitors_gc: deleting %s', monitor_id) feed_id = self._client.feeds_for_monitors.get(monitor_id) if feed_id: @@ -957,7 +957,7 @@ class Ns1Provider(BaseProvider): params, active_monitor_ids = \ getattr(self, '_params_for_{}'.format(_type))(new) self._client.records_create(zone, domain, _type, **params) - self._gc_monitors(new, active_monitor_ids) + self._monitors_gc(new, active_monitor_ids) def _apply_Update(self, ns1_zone, change): new = change.new @@ -967,7 +967,7 @@ class Ns1Provider(BaseProvider): params, active_monitor_ids = \ getattr(self, '_params_for_{}'.format(_type))(new) self._client.records_update(zone, domain, _type, **params) - self._gc_monitors(new, active_monitor_ids) + self._monitors_gc(new, active_monitor_ids) def _apply_Delete(self, ns1_zone, change): existing = change.existing @@ -975,7 +975,7 @@ class Ns1Provider(BaseProvider): domain = existing.fqdn[:-1] _type = existing._type self._client.records_delete(zone, domain, _type) - self._gc_monitors(existing) + self._monitors_gc(existing) def _apply(self, plan): desired = plan.desired diff --git a/tests/test_octodns_provider_ns1.py b/tests/test_octodns_provider_ns1.py index 994b84a..68e87c9 100644 --- a/tests/test_octodns_provider_ns1.py +++ b/tests/test_octodns_provider_ns1.py @@ -829,6 +829,89 @@ class TestNs1ProviderDynamic(TestCase): monitors_update_mock.assert_has_calls([call('mon-id', other='thing')]) feed_create_mock.assert_not_called() + @patch('octodns.provider.ns1.Ns1Client.notifylists_delete') + @patch('octodns.provider.ns1.Ns1Client.monitors_delete') + @patch('octodns.provider.ns1.Ns1Client.datafeed_delete') + @patch('octodns.provider.ns1.Ns1Provider._monitors_for') + def test_monitors_gc(self, monitors_for_mock, datafeed_delete_mock, + monitors_delete_mock, notifylists_delete_mock): + provider = Ns1Provider('test', 'api-key') + + # pre-fill caches to avoid extranious calls (things we're testing + # elsewhere) + provider._client._datasource_id = 'foo' + provider._client._feeds_for_monitors = { + 'mon-id': 'feed-id', + } + + # No active monitors and no existing, nothing will happen + monitors_for_mock.reset_mock() + datafeed_delete_mock.reset_mock() + monitors_delete_mock.reset_mock() + notifylists_delete_mock.reset_mock() + monitors_for_mock.side_effect = [{}] + provider._monitors_gc(self.record) + monitors_for_mock.assert_has_calls([call(self.record)]) + datafeed_delete_mock.assert_not_called() + monitors_delete_mock.assert_not_called() + notifylists_delete_mock.assert_not_called() + + # No active monitors and one existing, delete all the things + monitors_for_mock.reset_mock() + datafeed_delete_mock.reset_mock() + monitors_delete_mock.reset_mock() + notifylists_delete_mock.reset_mock() + monitors_for_mock.side_effect = [{ + 'x': { + 'id': 'mon-id', + 'notify_list': 'nl-id', + } + }] + provider._monitors_gc(self.record) + monitors_for_mock.assert_has_calls([call(self.record)]) + datafeed_delete_mock.assert_has_calls([call('foo', 'feed-id')]) + monitors_delete_mock.assert_has_calls([call('mon-id')]) + notifylists_delete_mock.assert_has_calls([call('nl-id')]) + + # Same existing, this time in active list, should be noop + monitors_for_mock.reset_mock() + datafeed_delete_mock.reset_mock() + monitors_delete_mock.reset_mock() + notifylists_delete_mock.reset_mock() + monitors_for_mock.side_effect = [{ + 'x': { + 'id': 'mon-id', + 'notify_list': 'nl-id', + } + }] + provider._monitors_gc(self.record, {'mon-id'}) + monitors_for_mock.assert_has_calls([call(self.record)]) + datafeed_delete_mock.assert_not_called() + monitors_delete_mock.assert_not_called() + notifylists_delete_mock.assert_not_called() + + # Non-active monitor w/o a feed, and another monitor that's left alone + # b/c it's active + monitors_for_mock.reset_mock() + datafeed_delete_mock.reset_mock() + monitors_delete_mock.reset_mock() + notifylists_delete_mock.reset_mock() + monitors_for_mock.side_effect = [{ + 'x': { + 'id': 'mon-id', + 'notify_list': 'nl-id', + }, + 'y': { + 'id': 'mon-id2', + 'notify_list': 'nl-id2', + }, + }] + provider._monitors_gc(self.record, {'mon-id'}) + monitors_for_mock.assert_has_calls([call(self.record)]) + datafeed_delete_mock.assert_not_called() + monitors_delete_mock.assert_has_calls([call('mon-id2')]) + notifylists_delete_mock.assert_has_calls([call('nl-id2')]) + class TestNs1Client(TestCase):