|
2 | 2 |
|
3 | 3 | """Unit tests for zeroconf._utils.ipaddress.""" |
4 | 4 |
|
| 5 | +import sys |
| 6 | + |
| 7 | +import pytest |
| 8 | + |
| 9 | +from zeroconf import const |
| 10 | +from zeroconf._dns import DNSAddress |
5 | 11 | from zeroconf._utils import ipaddress |
6 | 12 |
|
7 | 13 |
|
@@ -34,3 +40,34 @@ def test_cached_ip_addresses_wrapper(): |
34 | 40 | assert ipv6 is not None |
35 | 41 | assert ipv6.is_link_local is False |
36 | 42 | 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') |
0 commit comments