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 unittest import TestCase
|
|
|
|
from octodns.record import Record
|
|
from octodns.record.exception import ValidationError
|
|
from octodns.record.spf import SpfRecord
|
|
from octodns.zone import Zone
|
|
|
|
|
|
class TestRecordSpf(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_spf(self):
|
|
a_values = ['spf1 -all', 'spf1 -hrm']
|
|
b_value = 'spf1 -other'
|
|
self.assertMultipleValues(SpfRecord, 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': 'SPF',
|
|
'ttl': 600,
|
|
'values': [
|
|
'v=spf1 ip4:192.168.0.1/16-all',
|
|
'v=spf1 ip4:10.1.2.1/24-all',
|
|
'this has some\\; semi-colons\\; in it',
|
|
],
|
|
},
|
|
)
|
|
|
|
# missing value
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(self.zone, '', {'type': 'SPF', 'ttl': 600})
|
|
self.assertEqual(['missing value(s)'], ctx.exception.reasons)
|
|
|
|
# missing escapes
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone,
|
|
'',
|
|
{
|
|
'type': 'SPF',
|
|
'ttl': 600,
|
|
'value': 'this has some; semi-colons\\; in it',
|
|
},
|
|
)
|
|
self.assertEqual(
|
|
['unescaped ; in "this has some; semi-colons\\; in it"'],
|
|
ctx.exception.reasons,
|
|
)
|