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

"""
Test the DNS options implementations
"""
import unittest

from dhcpkit.ipv6.extensions.timezone import PosixTimezoneOption, TZDBTimezoneOption
from dhcpkit.tests.ipv6.options import test_option


[docs]class PosixTimezoneOptionTestCase(test_option.OptionTestCase):
[docs] def setUp(self): self.option_bytes = bytes.fromhex('00290023') + b'EST5EDT4,M3.2.0/02:00,M11.1.0/02:00' self.option_object = PosixTimezoneOption(timezone='EST5EDT4,M3.2.0/02:00,M11.1.0/02:00') self.parse_option()
[docs] def test_validate_timezone(self): self.option.timezone = None with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = b'EST5EDT4,M3.2.0/02:00,M11.1.0/02:00' with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = ['EST5EDT4,M3.2.0/02:00,M11.1.0/02:00'] with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = ':/etc/timezone/Europe/London' with self.assertRaisesRegex(ValueError, 'colon'): self.option.validate() self.option.timezone = 'x' * 65536 with self.assertRaisesRegex(ValueError, '65535 characters or less'): self.option.validate() self.option.timezone = 'Some random string' with self.assertRaisesRegex(ValueError, 'does not conform to POSIX.1'): self.option.validate() # noinspection SpellCheckingInspection valid_timezones = [ 'EST5EDT4,M3.2.0/02:00,M11.1.0/02:00', 'GRNLNDST3GRNLNDDT,M10.3.0/00:00:00,M2.4.0/00:00:00', 'CST6CDT,M3.2.0/2:00:00,M11.1.0/2:00:00', 'CET6CEST5:30,M4.5.0/02:00:00,M10.5.0/03:00:00', 'HAST10HADT,M4.2.0/03:0:0,M10.2.0/03:0:00', 'AST9ADT,M3.2.0,M11.1.0', 'AST9ADT,M3.2.0/03:0:0,M11.1.0/03:0:0', 'EST5EDT,M3.2.0/02:00:00,M11.1.0/02:00:00', 'GRNLNDST3GRNLNDDT,M10.3.0/00:00:00,M2.4.0/00:00:00', 'EST5EDT,M3.2.0/02:00:00,M11.1.0', 'EST5EDT,M3.2.0,M11.1.0/02:00:00', 'CST6CDT,M3.2.0/2:00:00,M11.1.0/2:00:00', 'MST7MDT,M3.2.0/2:00:00,M11.1.0/2:00:00', 'PST8PDT,M3.2.0/2:00:00,M11.1.0/2:00:00', 'EST+5EDT,M3.2.0/2,M11.1.0/2', 'IST-2IDT,M3.4.4/26,M10.5.0', 'WART4WARST,J1/0,J365/25', 'WGT3WGST,M3.5.0/-2,M10.5.0/-1', ] # A bunch of timezone definitions from different manuals to verify against for tz in valid_timezones: self.option.timezone = tz self.option.validate()
[docs] def test_bad_option_length(self): with self.assertRaisesRegex(ValueError, 'longer than the available buffer'): PosixTimezoneOption.parse(bytes.fromhex('00290024') + b'EST5EDT4,M3.2.0/02:00,M11.1.0/02:00')
[docs]class TZDBTimezoneOptionTestCase(test_option.OptionTestCase):
[docs] def setUp(self): self.option_bytes = bytes.fromhex('002a0010') + b'Europe/Amsterdam' self.option_object = TZDBTimezoneOption(timezone='Europe/Amsterdam') self.parse_option()
[docs] def test_validate_timezone(self): self.option.timezone = None with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = b'Europe/Amsterdam' with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = ['Europe/Amsterdam'] with self.assertRaisesRegex(ValueError, 'must be a string'): self.option.validate() self.option.timezone = 'x' * 65536 with self.assertRaisesRegex(ValueError, '65535 characters or less'): self.option.validate() self.option.timezone = 'Europe/Wörgl' with self.assertRaisesRegex(ValueError, 'only printable ASCII'): self.option.validate()
[docs] def test_bad_option_length(self): with self.assertRaisesRegex(ValueError, 'longer than the available buffer'): TZDBTimezoneOption.parse(bytes.fromhex('002a0011') + b'Europe/Amsterdam')
if __name__ == '__main__': # pragma: no cover unittest.main()