Source code for dhcpkit.tests.ipv6.options.test_ia_address_option

"""
Test the IAAddressOption implementation
"""
import unittest
from ipaddress import IPv6Address

from dhcpkit.ipv6.options import IAAddressOption, STATUS_NOT_ON_LINK, StatusCodeOption
from dhcpkit.tests.ipv6.options import test_option


[docs]class IAAddressOptionTestCase(test_option.OptionTestCase):
[docs] def setUp(self): self.option_bytes = bytes.fromhex('0005003520010db800010023045678900bc0cafe0001518000093a80' '000d0019000457686572652064696420796f752067657420746861743f') self.option_object = IAAddressOption( address=IPv6Address('2001:db8:1:23:456:7890:bc0:cafe'), preferred_lifetime=86400, valid_lifetime=7 * 86400, options=[ StatusCodeOption(STATUS_NOT_ON_LINK, 'Where did you get that?') ] ) self.parse_option()
[docs] def test_validate_address(self): self.option.address = '2001:db8::1' with self.assertRaisesRegex(ValueError, 'routable IPv6 address'): self.option.validate() self.option.address = IPv6Address('::1') with self.assertRaisesRegex(ValueError, 'routable IPv6 address'): self.option.validate() self.option.address = IPv6Address('fe80::1') with self.assertRaisesRegex(ValueError, 'routable IPv6 address'): self.option.validate() self.option.address = IPv6Address('ff02::1') with self.assertRaisesRegex(ValueError, 'routable IPv6 address'): self.option.validate()
[docs] def test_validate_preferred_lifetime(self): self.check_unsigned_integer_property('preferred_lifetime', size=32)
[docs] def test_validate_valid_lifetime(self): self.check_unsigned_integer_property('valid_lifetime', size=32)
[docs] def test_bad_option_length(self): with self.assertRaisesRegex(ValueError, 'shorter than the minimum length'): IAAddressOption.parse(bytes.fromhex('0005001720010db800010023045678900bc0cafe0001518000093a80')) with self.assertRaisesRegex(ValueError, 'length does not match'): IAAddressOption.parse(bytes.fromhex('0005001920010db800010023045678900bc0cafe0001518000093a8000140000'))
if __name__ == '__main__': # pragma: no cover unittest.main()