fix: avoid including scope_id in IPv6Address object if its zero (#1367) · python-zeroconf/python-zeroconf@edc4a55

@@ -2,6 +2,12 @@

2233

"""Unit tests for zeroconf._utils.ipaddress."""

445+

import sys

6+7+

import pytest

8+9+

from zeroconf import const

10+

from zeroconf._dns import DNSAddress

511

from zeroconf._utils import ipaddress

612713

@@ -34,3 +40,34 @@ def test_cached_ip_addresses_wrapper():

3440

assert ipv6 is not None

3541

assert ipv6.is_link_local is False

3642

assert ipv6.is_unspecified is True

43+44+45+

@pytest.mark.skipif(sys.version_info < (3, 9, 0), reason='scope_id is not supported')

46+

def test_get_ip_address_object_from_record():

47+

"""Test the get_ip_address_object_from_record."""

48+

# not link local

49+

packed = b'&\x06(\x00\x02 \x00\x01\x02H\x18\x93%\xc8\x19F'

50+

record = DNSAddress(

51+

'domain.local', const._TYPE_AAAA, const._CLASS_IN | const._CLASS_UNIQUE, 1, packed, scope_id=3

52+

)

53+

assert record.scope_id == 3

54+

assert ipaddress.get_ip_address_object_from_record(record) == ipaddress.IPv6Address(

55+

'2606:2800:220:1:248:1893:25c8:1946'

56+

)

57+58+

# link local

59+

packed = b'\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'

60+

record = DNSAddress(

61+

'domain.local', const._TYPE_AAAA, const._CLASS_IN | const._CLASS_UNIQUE, 1, packed, scope_id=3

62+

)

63+

assert record.scope_id == 3

64+

assert ipaddress.get_ip_address_object_from_record(record) == ipaddress.IPv6Address('fe80::1%3')

65+

record = DNSAddress('domain.local', const._TYPE_AAAA, const._CLASS_IN | const._CLASS_UNIQUE, 1, packed)

66+

assert record.scope_id is None

67+

assert ipaddress.get_ip_address_object_from_record(record) == ipaddress.IPv6Address('fe80::1')

68+

record = DNSAddress(

69+

'domain.local', const._TYPE_A, const._CLASS_IN | const._CLASS_UNIQUE, 1, packed, scope_id=0

70+

)

71+

assert record.scope_id == 0

72+

# Ensure scope_id of 0 is not appended to the address

73+

assert ipaddress.get_ip_address_object_from_record(record) == ipaddress.IPv6Address('fe80::1')