mirror of
				https://github.com/github/octodns.git
				synced 2024-05-11 05:55:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #
 | |
| #
 | |
| #
 | |
| 
 | |
| from unittest import TestCase
 | |
| 
 | |
| from octodns.record import Record
 | |
| from octodns.record.exception import ValidationError
 | |
| from octodns.record.txt import TxtRecord
 | |
| from octodns.zone import Zone
 | |
| 
 | |
| 
 | |
| class TestRecordTxt(TestCase):
 | |
|     zone = Zone('unit.tests.', [])
 | |
| 
 | |
|     def assertMultipleValues(self, _type, a_values, b_value):
 | |
|         a_data = {'ttl': 30, 'values': a_values}
 | |
|         a = _type(self.zone, 'a', a_data)
 | |
|         self.assertEqual('a', a.name)
 | |
|         self.assertEqual('a.unit.tests.', a.fqdn)
 | |
|         self.assertEqual(30, a.ttl)
 | |
|         self.assertEqual(a_values, a.values)
 | |
|         self.assertEqual(a_data, a.data)
 | |
| 
 | |
|         b_data = {'ttl': 30, 'value': b_value}
 | |
|         b = _type(self.zone, 'b', b_data)
 | |
|         self.assertEqual([b_value], b.values)
 | |
|         self.assertEqual(b_data, b.data)
 | |
| 
 | |
|     def test_txt(self):
 | |
|         a_values = ['a one', 'a two']
 | |
|         b_value = 'b other'
 | |
|         self.assertMultipleValues(TxtRecord, a_values, b_value)
 | |
| 
 | |
|     def test_validation(self):
 | |
|         # doesn't blow up (name & zone here don't make any sense, but not
 | |
|         # important)
 | |
|         Record.new(
 | |
|             self.zone,
 | |
|             '',
 | |
|             {
 | |
|                 'type': 'TXT',
 | |
|                 'ttl': 600,
 | |
|                 'values': [
 | |
|                     'hello world',
 | |
|                     'this has some\\; semi-colons\\; in it',
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
| 
 | |
|         # missing value
 | |
|         with self.assertRaises(ValidationError) as ctx:
 | |
|             Record.new(self.zone, '', {'type': 'TXT', 'ttl': 600})
 | |
|         self.assertEqual(['missing value(s)'], ctx.exception.reasons)
 | |
| 
 | |
|         # missing escapes
 | |
|         with self.assertRaises(ValidationError) as ctx:
 | |
|             Record.new(
 | |
|                 self.zone,
 | |
|                 '',
 | |
|                 {
 | |
|                     'type': 'TXT',
 | |
|                     'ttl': 600,
 | |
|                     'value': 'this has some; semi-colons\\; in it',
 | |
|                 },
 | |
|             )
 | |
|         self.assertEqual(
 | |
|             ['unescaped ; in "this has some; semi-colons\\; in it"'],
 | |
|             ctx.exception.reasons,
 | |
|         )
 | |
| 
 | |
|     def test_long_value_chunking(self):
 | |
|         expected = (
 | |
|             '"Lorem ipsum dolor sit amet, consectetur adipiscing '
 | |
|             'elit, sed do eiusmod tempor incididunt ut labore et dolore '
 | |
|             'magna aliqua. Ut enim ad minim veniam, quis nostrud '
 | |
|             'exercitation ullamco laboris nisi ut aliquip ex ea commodo '
 | |
|             'consequat. Duis aute irure dolor i" "n reprehenderit in '
 | |
|             'voluptate velit esse cillum dolore eu fugiat nulla pariatur. '
 | |
|             'Excepteur sint occaecat cupidatat non proident, sunt in culpa '
 | |
|             'qui officia deserunt mollit anim id est laborum."'
 | |
|         )
 | |
| 
 | |
|         long_value = (
 | |
|             'Lorem ipsum dolor sit amet, consectetur adipiscing '
 | |
|             'elit, sed do eiusmod tempor incididunt ut labore et dolore '
 | |
|             'magna aliqua. Ut enim ad minim veniam, quis nostrud '
 | |
|             'exercitation ullamco laboris nisi ut aliquip ex ea commodo '
 | |
|             'consequat. Duis aute irure dolor in reprehenderit in '
 | |
|             'voluptate velit esse cillum dolore eu fugiat nulla '
 | |
|             'pariatur. Excepteur sint occaecat cupidatat non proident, '
 | |
|             'sunt in culpa qui officia deserunt mollit anim id est '
 | |
|             'laborum.'
 | |
|         )
 | |
|         # Single string
 | |
|         single = Record.new(
 | |
|             self.zone,
 | |
|             '',
 | |
|             {
 | |
|                 'type': 'TXT',
 | |
|                 'ttl': 600,
 | |
|                 'values': [
 | |
|                     'hello world',
 | |
|                     long_value,
 | |
|                     'this has some\\; semi-colons\\; in it',
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
|         self.assertEqual(3, len(single.values))
 | |
|         self.assertEqual(3, len(single.chunked_values))
 | |
|         # Note we are checking that this normalizes the chunking, not that we
 | |
|         # get out what we put in.
 | |
|         self.assertEqual(expected, single.chunked_values[0])
 | |
| 
 | |
|         long_split_value = (
 | |
|             '"Lorem ipsum dolor sit amet, consectetur '
 | |
|             'adipiscing elit, sed do eiusmod tempor incididunt ut '
 | |
|             'labore et dolore magna aliqua. Ut enim ad minim veniam, '
 | |
|             'quis nostrud exercitation ullamco laboris nisi ut aliquip '
 | |
|             'ex" " ea commodo consequat. Duis aute irure dolor in '
 | |
|             'reprehenderit in voluptate velit esse cillum dolore eu '
 | |
|             'fugiat nulla pariatur. Excepteur sint occaecat cupidatat '
 | |
|             'non proident, sunt in culpa qui officia deserunt mollit '
 | |
|             'anim id est laborum."'
 | |
|         )
 | |
|         # Chunked
 | |
|         chunked = Record.new(
 | |
|             self.zone,
 | |
|             '',
 | |
|             {
 | |
|                 'type': 'TXT',
 | |
|                 'ttl': 600,
 | |
|                 'values': [
 | |
|                     '"hello world"',
 | |
|                     long_split_value,
 | |
|                     '"this has some\\; semi-colons\\; in it"',
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
|         self.assertEqual(expected, chunked.chunked_values[0])
 | |
|         # should be single values, no quoting
 | |
|         self.assertEqual(single.values, chunked.values)
 | |
|         # should be chunked values, with quoting
 | |
|         self.assertEqual(single.chunked_values, chunked.chunked_values)
 |