1212import unittest .mock
1313from typing import cast
1414
15+ import pytest
16+
1517import zeroconf as r
1618from zeroconf import DNSHinfo , DNSIncoming , DNSText , const , current_time_millis
1719
@@ -65,7 +67,22 @@ def test_parse_own_packet_nsec(self):
6567 parsed = r .DNSIncoming (generated .packets ()[0 ])
6668 assert answer in parsed .answers ()
6769
68- # Types > 255 should be ignored
70+ # Now with the higher RD type first
71+ answer = r .DNSNsec (
72+ 'eufy HomeBase2-2464._hap._tcp.local.' ,
73+ const ._TYPE_NSEC ,
74+ const ._CLASS_IN | const ._CLASS_UNIQUE ,
75+ const ._DNS_OTHER_TTL ,
76+ 'eufy HomeBase2-2464._hap._tcp.local.' ,
77+ [const ._TYPE_SRV , const ._TYPE_TXT ],
78+ )
79+
80+ generated = r .DNSOutgoing (const ._FLAGS_QR_RESPONSE )
81+ generated .add_answer_at_time (answer , 0 )
82+ parsed = r .DNSIncoming (generated .packets ()[0 ])
83+ assert answer in parsed .answers ()
84+
85+ # Types > 255 should raise an exception
6986 answer_invalid_types = r .DNSNsec (
7087 'eufy HomeBase2-2464._hap._tcp.local.' ,
7188 const ._TYPE_NSEC ,
@@ -76,8 +93,22 @@ def test_parse_own_packet_nsec(self):
7693 )
7794 generated = r .DNSOutgoing (const ._FLAGS_QR_RESPONSE )
7895 generated .add_answer_at_time (answer_invalid_types , 0 )
79- parsed = r .DNSIncoming (generated .packets ()[0 ])
80- assert answer in parsed .answers ()
96+ with pytest .raises (ValueError , match = 'rdtype 1000 is too large for NSEC' ):
97+ generated .packets ()
98+
99+ # Empty rdtypes are not allowed
100+ answer_invalid_types = r .DNSNsec (
101+ 'eufy HomeBase2-2464._hap._tcp.local.' ,
102+ const ._TYPE_NSEC ,
103+ const ._CLASS_IN | const ._CLASS_UNIQUE ,
104+ const ._DNS_OTHER_TTL ,
105+ 'eufy HomeBase2-2464._hap._tcp.local.' ,
106+ [],
107+ )
108+ generated = r .DNSOutgoing (const ._FLAGS_QR_RESPONSE )
109+ generated .add_answer_at_time (answer_invalid_types , 0 )
110+ with pytest .raises (ValueError , match = 'NSEC must have at least one rdtype' ):
111+ generated .packets ()
81112
82113 def test_parse_own_packet_response (self ):
83114 generated = r .DNSOutgoing (const ._FLAGS_QR_RESPONSE )
0 commit comments