Source code for dhcpkit.tests.ipv6.extensions.test_client_fqdn

"""
Test the Client FQDN option implementations
"""
import unittest

from dhcpkit.ipv6.extensions.client_fqdn import ClientFQDNOption
from dhcpkit.tests.ipv6.options import test_option


[docs]class ClientFQDNOptionTestCase(test_option.OptionTestCase):
[docs] def setUp(self): self.option_bytes = bytes.fromhex('0027000e01') + b'\x08steffann\x02nl\x00' self.option_object = ClientFQDNOption(flags=1, domain_name='steffann.nl.') self.parse_option()
[docs] def test_s_flag(self): self.option.flags = 0 self.assertFalse(self.option.server_aaaa_update) self.assertFalse(self.option.server_aaaa_override) self.assertFalse(self.option.no_server_dns_update) self.option.flags = 1 self.assertTrue(self.option.server_aaaa_update) self.assertFalse(self.option.server_aaaa_override) self.assertFalse(self.option.no_server_dns_update) self.option.server_aaaa_update = False self.assertEqual(self.option.flags, 0) self.option.server_aaaa_update = True self.assertEqual(self.option.flags, 1)
[docs] def test_o_flag(self): self.option.flags = 0 self.assertFalse(self.option.server_aaaa_update) self.assertFalse(self.option.server_aaaa_override) self.assertFalse(self.option.no_server_dns_update) self.option.flags = 2 self.assertFalse(self.option.server_aaaa_update) self.assertTrue(self.option.server_aaaa_override) self.assertFalse(self.option.no_server_dns_update) self.option.server_aaaa_override = False self.assertEqual(self.option.flags, 0) self.option.server_aaaa_override = True self.assertEqual(self.option.flags, 2)
[docs] def test_n_flag(self): self.option.flags = 0 self.assertFalse(self.option.server_aaaa_update) self.assertFalse(self.option.server_aaaa_override) self.assertFalse(self.option.no_server_dns_update) self.option.flags = 4 self.assertFalse(self.option.server_aaaa_update) self.assertFalse(self.option.server_aaaa_override) self.assertTrue(self.option.no_server_dns_update) self.option.no_server_dns_update = False self.assertEqual(self.option.flags, 0) self.option.no_server_dns_update = True self.assertEqual(self.option.flags, 4)
[docs] def test_validate_domain_name(self): self.option.domain_name = b'steffann.nl' with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.domain_name = 'x' + '.x' * 126 self.option.validate() self.option.domain_name = 'xxx' + '.x' * 126 with self.assertRaisesRegex(ValueError, 'Domain too long'): self.option.validate() self.option.domain_name = 'www.123456789012345678901234567890123456789012345678901234567890123.nl.' self.option.validate() self.option.domain_name = 'www.1234567890123456789012345678901234567890123456789012345678901234.nl.' with self.assertRaisesRegex(ValueError, 'Label too long'): self.option.validate()
[docs] def test_bad_option_length(self): with self.assertRaisesRegex(ValueError, 'Invalid encoded domain name'): ClientFQDNOption.parse(bytes.fromhex('0027000c01') + b'\x08steffann\x02nl\x00') with self.assertRaisesRegex(ValueError, 'length does not match'): ClientFQDNOption.parse(bytes.fromhex('0027000f01') + b'\x08steffann\x02nl\x00\x01') with self.assertRaisesRegex(ValueError, 'longer than the available buffer'): ClientFQDNOption.parse(bytes.fromhex('0027000f01') + b'\x08steffann\x02nl\x00')
if __name__ == '__main__': # pragma: no cover unittest.main()