mirror of
				https://github.com/github/octodns.git
				synced 2024-05-11 05:55:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #
 | |
| #
 | |
| #
 | |
| 
 | |
| from __future__ import absolute_import, division, print_function, \
 | |
|     unicode_literals
 | |
| 
 | |
| import dns.zone
 | |
| from dns.exception import DNSException
 | |
| 
 | |
| from mock import patch
 | |
| from unittest import TestCase
 | |
| 
 | |
| from octodns.source.axfr import AxfrSource, AxfrSourceZoneTransferFailed, \
 | |
|     ZoneFileSource, ZoneFileSourceLoadFailure
 | |
| from octodns.zone import Zone
 | |
| 
 | |
| 
 | |
| class TestAxfrSource(TestCase):
 | |
|     source = AxfrSource('test', 'localhost')
 | |
| 
 | |
|     forward_zonefile = dns.zone.from_file('./tests/zones/unit.tests.',
 | |
|                                           'unit.tests', relativize=False)
 | |
| 
 | |
|     @patch('dns.zone.from_xfr')
 | |
|     def test_populate(self, from_xfr_mock):
 | |
|         got = Zone('unit.tests.', [])
 | |
| 
 | |
|         from_xfr_mock.side_effect = [
 | |
|             self.forward_zonefile,
 | |
|             DNSException
 | |
|         ]
 | |
| 
 | |
|         self.source.populate(got)
 | |
|         self.assertEquals(11, len(got.records))
 | |
| 
 | |
|         with self.assertRaises(AxfrSourceZoneTransferFailed) as ctx:
 | |
|             zone = Zone('unit.tests.', [])
 | |
|             self.source.populate(zone)
 | |
|         self.assertEquals('Unable to Perform Zone Transfer',
 | |
|                           ctx.exception.message)
 | |
| 
 | |
| 
 | |
| class TestZoneFileSource(TestCase):
 | |
|     source = ZoneFileSource('test', './tests/zones')
 | |
| 
 | |
|     def test_populate(self):
 | |
|         # Valid zone file in directory
 | |
|         valid = Zone('unit.tests.', [])
 | |
|         self.source.populate(valid)
 | |
|         self.assertEquals(11, len(valid.records))
 | |
| 
 | |
|         # 2nd populate does not read file again
 | |
|         again = Zone('unit.tests.', [])
 | |
|         self.source.populate(again)
 | |
|         self.assertEquals(11, len(again.records))
 | |
| 
 | |
|         # bust the cache
 | |
|         del self.source._zone_records[valid.name]
 | |
| 
 | |
|         # No zone file in directory
 | |
|         missing = Zone('missing.zone.', [])
 | |
|         self.source.populate(missing)
 | |
|         self.assertEquals(0, len(missing.records))
 | |
| 
 | |
|         # Zone file is not valid
 | |
|         with self.assertRaises(ZoneFileSourceLoadFailure) as ctx:
 | |
|             zone = Zone('invalid.zone.', [])
 | |
|             self.source.populate(zone)
 | |
|         self.assertEquals('The DNS zone has no NS RRset at its origin.',
 | |
|                           ctx.exception.message)
 |