| @ -0,0 +1,120 @@ | |||
| from unittest import TestCase | |||
| from octodns.processor.clamp import TTLArgumentException, TtlClampProcessor | |||
| from octodns.record.base import Record | |||
| from octodns.zone import Zone | |||
| class TestClampProcessor(TestCase): | |||
| def test_processor_min(self): | |||
| "Test the processor for clamping to the minimum" | |||
| min_ttl = 42 | |||
| processor = TtlClampProcessor('test', min_ttl=min_ttl) | |||
| too_low_ttl = 23 | |||
| self.assertLess(too_low_ttl, min_ttl) | |||
| zone = Zone('unit.tests.', []) | |||
| zone.add_record( | |||
| Record.new( | |||
| zone, '', {'type': 'TXT', 'ttl': too_low_ttl, 'value': 'foo'} | |||
| ) | |||
| ) | |||
| processed_zone = processor.process_source_zone(zone.copy(), None) | |||
| self.assertNotEqual(zone, processed_zone) | |||
| self.assertEqual(len(processed_zone.records), len(zone.records)) | |||
| self.assertEqual(len(processed_zone.records), 1) | |||
| self.assertEqual(processed_zone.records.pop().ttl, min_ttl) | |||
| def test_processor_max(self): | |||
| "Test the processor for clamping to the maximum" | |||
| max_ttl = 4711 | |||
| processor = TtlClampProcessor('test', max_ttl=max_ttl) | |||
| too_high_ttl = max_ttl + 1 | |||
| self.assertLess(max_ttl, too_high_ttl) | |||
| zone = Zone('unit.tests.', []) | |||
| zone.add_record( | |||
| Record.new( | |||
| zone, '', {'type': 'TXT', 'ttl': too_high_ttl, 'value': 'foo'} | |||
| ) | |||
| ) | |||
| processed_zone = processor.process_source_zone(zone.copy(), None) | |||
| self.assertNotEqual(zone, processed_zone) | |||
| self.assertEqual(len(processed_zone.records), len(zone.records)) | |||
| self.assertEqual(len(processed_zone.records), 1) | |||
| self.assertEqual(processed_zone.records.pop().ttl, max_ttl) | |||
| def test_processor_maxmin(self): | |||
| "Test the processor for unlogical arguments" | |||
| min_ttl = 42 | |||
| max_ttl = 23 | |||
| self.assertRaises( | |||
| TTLArgumentException, | |||
| TtlClampProcessor, | |||
| 'test', | |||
| min_ttl=min_ttl, | |||
| max_ttl=max_ttl, | |||
| ) | |||
| def test_processor_minmax(self): | |||
| "Test the processor for clamping both min and max values" | |||
| min_ttl = 42 | |||
| max_ttl = 4711 | |||
| processor = TtlClampProcessor('test', min_ttl=min_ttl, max_ttl=max_ttl) | |||
| too_low_ttl = min_ttl - 1 | |||
| too_high_ttl = max_ttl + 1 | |||
| self.assertLess(too_low_ttl, min_ttl) | |||
| self.assertLess(too_low_ttl, min_ttl) | |||
| self.assertLess(max_ttl, too_high_ttl) | |||
| zone = Zone('unit.tests.', []) | |||
| zone.add_record( | |||
| Record.new( | |||
| zone, | |||
| 'high', | |||
| {'type': 'TXT', 'ttl': too_high_ttl, 'value': 'high'}, | |||
| ) | |||
| ) | |||
| zone.add_record( | |||
| Record.new( | |||
| zone, 'low', {'type': 'TXT', 'ttl': too_low_ttl, 'value': 'low'} | |||
| ) | |||
| ) | |||
| processed_zone = processor.process_source_zone(zone.copy(), None) | |||
| self.assertNotEqual(zone, processed_zone) | |||
| processed_records = sorted( | |||
| list(processed_zone.records), key=lambda r: r.ttl | |||
| ) | |||
| self.assertEqual(len(processed_records), 2) | |||
| self.assertEqual(processed_records[0].ttl, min_ttl) | |||
| self.assertEqual(processed_records[1].ttl, max_ttl) | |||
| def test_processor_noclamp(self): | |||
| "Test the processor for working with TTLs not requiring any clamping" | |||
| min_ttl = 23 | |||
| max_ttl = 4711 | |||
| processor = TtlClampProcessor('test', min_ttl=min_ttl, max_ttl=max_ttl) | |||
| ttl = 42 | |||
| self.assertLess(min_ttl, ttl) | |||
| self.assertLess(ttl, max_ttl) | |||
| zone = Zone('unit.tests.', []) | |||
| zone.add_record( | |||
| Record.new(zone, '', {'type': 'TXT', 'ttl': ttl, 'value': 'foo'}) | |||
| ) | |||
| processed_zone = processor.process_source_zone(zone.copy(), None) | |||
| self.assertEqual(processed_zone.records.pop().ttl, ttl) | |||