Update record when NS1 filter chain is not as expected

This commit is contained in:
Viranch Mehta
2021-10-20 16:03:49 -07:00
parent 66f59e5501
commit e201ed6747
2 changed files with 106 additions and 141 deletions
+23 -34
View File
@@ -1278,8 +1278,7 @@ class TestNs1ProviderDynamic(TestCase):
ret, monitor_ids = provider._params_for_A(record)
self.assertEquals(10, len(ret['answers']))
self.assertEquals(ret['filters'],
Ns1Provider._FILTER_CHAIN_WITH_REGION(provider,
True))
provider._FILTER_CHAIN_WITH_REGION)
self.assertEquals({
'iad__catchall': {
'meta': {
@@ -1335,8 +1334,7 @@ class TestNs1ProviderDynamic(TestCase):
rule1['geos'] = ['NA-US-CA', 'NA-CA-NL']
ret, _ = provider._params_for_A(record)
self.assertEquals(10, len(ret['answers']))
exp = Ns1Provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY(provider,
True)
exp = provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY
self.assertEquals(ret['filters'], exp)
self.assertEquals({
'iad__catchall': {
@@ -1439,8 +1437,7 @@ class TestNs1ProviderDynamic(TestCase):
notes['from:lhr__country'])
# We have both country and region filter chain entries
exp = Ns1Provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY(provider,
True)
exp = provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY
self.assertEquals(ret['filters'], exp)
# and our region details match the expected behaviors/targeting
@@ -1518,8 +1515,7 @@ class TestNs1ProviderDynamic(TestCase):
# When rules has 'OC', it is converted to list of countries in the
# params. Look if the returned filters is the filter chain with country
self.assertEquals(ret['filters'],
Ns1Provider._FILTER_CHAIN_WITH_COUNTRY(provider,
True))
provider._FILTER_CHAIN_WITH_COUNTRY)
@patch('octodns.provider.ns1.Ns1Provider._monitor_sync')
@patch('octodns.provider.ns1.Ns1Provider._monitors_for')
@@ -1555,8 +1551,7 @@ class TestNs1ProviderDynamic(TestCase):
# Given that record has both country and region in the rules,
# the returned filter chain should be one with region and country
self.assertEquals(ret['filters'],
Ns1Provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY(
provider, True))
provider._FILTER_CHAIN_WITH_REGION_AND_COUNTRY)
monitors_for_mock.assert_has_calls([call(record)])
monitors_sync_mock.assert_has_calls([
@@ -1610,20 +1605,11 @@ class TestNs1ProviderDynamic(TestCase):
def test_data_for_dynamic(self):
provider = Ns1Provider('test', 'api-key')
# Unexpected filters throws an error
ns1_record = {
'domain': 'unit.tests',
'filters': [],
}
with self.assertRaises(Ns1Exception) as ctx:
provider._data_for_dynamic('A', ns1_record)
self.assertEquals('Unrecognized advanced record', str(ctx.exception))
# empty record turns into empty data
ns1_record = {
'answers': [],
'domain': 'unit.tests',
'filters': Ns1Provider._BASIC_FILTER_CHAIN(provider, True),
'filters': provider._BASIC_FILTER_CHAIN,
'regions': {},
'ttl': 42,
}
@@ -2038,13 +2024,6 @@ class TestNs1ProviderDynamic(TestCase):
extra = provider._extra_changes(desired, [])
self.assertFalse(extra)
# Unexpected exception message
reset()
zones_retrieve_mock.side_effect = ResourceException('boom')
with self.assertRaises(ResourceException) as ctx:
extra = provider._extra_changes(desired, [])
self.assertEquals(zones_retrieve_mock.side_effect, ctx.exception)
# Simple record, ignored, filter update lookups ignored
reset()
zones_retrieve_mock.side_effect = \
@@ -2093,6 +2072,9 @@ class TestNs1ProviderDynamic(TestCase):
# untouched, but everything in sync so no change needed
reset()
# Generate what we expect to have
provider.record_filters[dynamic.fqdn[:-1]] = {
dynamic._type: provider._get_updated_filter_chain(False, False)
}
gend = provider._monitor_gen(dynamic, '1.2.3.4')
gend.update({
'id': 'mid', # need to add an id
@@ -2153,7 +2135,7 @@ class TestNs1ProviderDynamic(TestCase):
"zone": "unit.tests",
"type": "A",
"tier": 3,
"filters": Ns1Provider._BASIC_FILTER_CHAIN(provider, True)
"filters": provider._BASIC_FILTER_CHAIN
}],
}
monitors_for_mock.side_effect = [{}]
@@ -2170,16 +2152,20 @@ class TestNs1ProviderDynamic(TestCase):
"zone": "unit.tests",
"type": "A",
"tier": 3,
"filters": Ns1Provider._BASIC_FILTER_CHAIN(provider, False)
"filters": provider._BASIC_FILTER_CHAIN[:-1]
}],
}
monitors_for_mock.side_effect = [{}]
zones_retrieve_mock.side_effect = [ns1_zone]
records_retrieve_mock.side_effect = ns1_zone['records']
ns1_record = ns1_zone['records'][0]
provider.record_filters[ns1_record['domain']] = {
ns1_record['type']: ns1_record['filters']
}
extra = provider._extra_changes(desired, [])
self.assertTrue(extra)
# Mixed disabled in filters. Raise Ns1Exception
# Mixed disabled in filters doesn't trigger an update
reset()
ns1_zone = {
'records': [{
@@ -2187,16 +2173,19 @@ class TestNs1ProviderDynamic(TestCase):
"zone": "unit.tests",
"type": "A",
"tier": 3,
"filters": Ns1Provider._BASIC_FILTER_CHAIN(provider, True)
"filters": provider._BASIC_FILTER_CHAIN
}],
}
del ns1_zone['records'][0]['filters'][0]['disabled']
monitors_for_mock.side_effect = [{}]
zones_retrieve_mock.side_effect = [ns1_zone]
records_retrieve_mock.side_effect = ns1_zone['records']
with self.assertRaises(Ns1Exception) as ctx:
extra = provider._extra_changes(desired, [])
self.assertTrue('Mixed disabled flag in filters' in str(ctx.exception))
ns1_record = ns1_zone['records'][0]
provider.record_filters[ns1_record['domain']] = {
ns1_record['type']: ns1_record['filters']
}
extra = provider._extra_changes(desired, [])
self.assertFalse(extra)
DESIRED = Zone('unit.tests.', [])