mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
implement & use NS1Client.reset_caches
This commit is contained in:
@@ -80,8 +80,10 @@ class Ns1Client(object):
|
||||
self._datasource = client.datasource()
|
||||
self._datafeed = client.datafeed()
|
||||
|
||||
self._datasource_id = None
|
||||
self.reset_caches()
|
||||
|
||||
def reset_caches(self):
|
||||
self._datasource_id = None
|
||||
self._feeds_for_monitors = None
|
||||
self._monitors_cache = None
|
||||
self._notifylists_cache = None
|
||||
|
||||
@@ -198,6 +198,7 @@ class TestNs1Provider(TestCase):
|
||||
provider = Ns1Provider('test', 'api-key')
|
||||
|
||||
# Bad auth
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.side_effect = AuthException('unauthorized')
|
||||
zone = Zone('unit.tests.', [])
|
||||
with self.assertRaises(AuthException) as ctx:
|
||||
@@ -205,6 +206,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertEquals(zone_retrieve_mock.side_effect, ctx.exception)
|
||||
|
||||
# General error
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = ResourceException('boom')
|
||||
zone = Zone('unit.tests.', [])
|
||||
@@ -214,6 +216,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertEquals(('unit.tests',), zone_retrieve_mock.call_args[0])
|
||||
|
||||
# Non-existent zone doesn't populate anything
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = \
|
||||
ResourceException('server error: zone not found')
|
||||
@@ -224,6 +227,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertFalse(exists)
|
||||
|
||||
# Existing zone w/o records
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
ns1_zone = {
|
||||
@@ -255,6 +259,7 @@ class TestNs1Provider(TestCase):
|
||||
'geo.unit.tests', 'A')])
|
||||
|
||||
# Existing zone w/records
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
ns1_zone = {
|
||||
@@ -286,6 +291,7 @@ class TestNs1Provider(TestCase):
|
||||
'geo.unit.tests', 'A')])
|
||||
|
||||
# Test skipping unsupported record type
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
ns1_zone = {
|
||||
@@ -341,6 +347,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertTrue(plan.exists)
|
||||
|
||||
# Fails, general error
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
zone_create_mock.reset_mock()
|
||||
@@ -350,6 +357,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertEquals(zone_retrieve_mock.side_effect, ctx.exception)
|
||||
|
||||
# Fails, bad auth
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
zone_create_mock.reset_mock()
|
||||
@@ -361,6 +369,7 @@ class TestNs1Provider(TestCase):
|
||||
self.assertEquals(zone_create_mock.side_effect, ctx.exception)
|
||||
|
||||
# non-existent zone, create
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
zone_create_mock.reset_mock()
|
||||
@@ -395,6 +404,7 @@ class TestNs1Provider(TestCase):
|
||||
])
|
||||
|
||||
# Update & delete
|
||||
provider._client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
record_retrieve_mock.reset_mock()
|
||||
zone_create_mock.reset_mock()
|
||||
@@ -1304,6 +1314,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
# provider._params_for_A() calls provider._monitors_for() and
|
||||
# provider._monitor_sync(). Mock their return values so that we don't
|
||||
# make NS1 API calls during tests
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
monitor_sync_mock.reset_mock()
|
||||
monitors_for_mock.side_effect = [{
|
||||
@@ -1944,6 +1955,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
monitors_for_mock.assert_not_called()
|
||||
|
||||
# Non-existent zone. No changes
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.side_effect = \
|
||||
ResourceException('server error: zone not found')
|
||||
@@ -1952,6 +1964,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
self.assertFalse(extra)
|
||||
|
||||
# Unexpected exception message
|
||||
provider._client.reset_caches()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
zones_retrieve_mock.side_effect = ResourceException('boom')
|
||||
with self.assertRaises(ResourceException) as ctx:
|
||||
@@ -1959,6 +1972,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
self.assertEquals(zones_retrieve_mock.side_effect, ctx.exception)
|
||||
|
||||
# Simple record, ignored, filter update lookups ignored
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2006,6 +2020,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
desired.add_record(dynamic)
|
||||
|
||||
# untouched, but everything in sync so no change needed
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2026,6 +2041,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
|
||||
# If we don't have a notify list we're broken and we'll expect to see
|
||||
# an Update
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2042,6 +2058,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
|
||||
# Add notify_list back and change the healthcheck protocol, we'll still
|
||||
# expect to see an update
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2059,6 +2076,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
monitors_for_mock.assert_has_calls([call(dynamic)])
|
||||
|
||||
# If it's in the changed list, it'll be ignored
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2069,6 +2087,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
# Test changes in filters
|
||||
|
||||
# No change in filters
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2088,6 +2107,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
self.assertFalse(extra)
|
||||
|
||||
# filters need an update
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2107,6 +2127,7 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
self.assertTrue(extra)
|
||||
|
||||
# Mixed disabled in filters. Raise Ns1Exception
|
||||
provider._client.reset_caches()
|
||||
monitors_for_mock.reset_mock()
|
||||
zones_retrieve_mock.reset_mock()
|
||||
records_retrieve_mock.reset_mock()
|
||||
@@ -2234,12 +2255,14 @@ class TestNs1Client(TestCase):
|
||||
client = Ns1Client('dummy-key')
|
||||
|
||||
# No retry required, just calls and is returned
|
||||
client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = ['foo']
|
||||
self.assertEquals('foo', client.zones_retrieve('unit.tests'))
|
||||
zone_retrieve_mock.assert_has_calls([call('unit.tests')])
|
||||
|
||||
# One retry required
|
||||
client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = [
|
||||
RateLimitException('boo', period=0),
|
||||
@@ -2249,6 +2272,7 @@ class TestNs1Client(TestCase):
|
||||
zone_retrieve_mock.assert_has_calls([call('unit.tests')])
|
||||
|
||||
# Two retries required
|
||||
client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = [
|
||||
RateLimitException('boo', period=0),
|
||||
@@ -2258,6 +2282,7 @@ class TestNs1Client(TestCase):
|
||||
zone_retrieve_mock.assert_has_calls([call('unit.tests')])
|
||||
|
||||
# Exhaust our retries
|
||||
client.reset_caches()
|
||||
zone_retrieve_mock.reset_mock()
|
||||
zone_retrieve_mock.side_effect = [
|
||||
RateLimitException('first', period=0),
|
||||
|
||||
Reference in New Issue
Block a user