
    Vh^<                        d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
  ej                  ej                         G d d             Z G d d	e
j                        Zy
)    )annotations)	interface)ipraw)
components)unittestc                  `    e Zd ZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy)
MyProtocolc                $    t        |      | _        y N)list	expecting)selfr   s     I/home/dcms/DCMS/lib/python3.12/site-packages/twisted/pair/test/test_ip.py__init__zMyProtocol.__init__   s    i    c           	     2   | j                   sJ d       | j                   j                  d      \  }}t        t        |j	                                     }t               }|D ]#  }||   ||   k(  rJ d| d||   d||           ||k(  sJ d|d|       y )Nz(Got a packet when not expecting anymore.r   z	Expected =z, got )r   popr   sortedkeyslocals)r   datapartialsourcedestprotocolversionihltostot_lenfragment_idfragment_offsetdont_fragmentmore_fragmentsttl
expectDataexpectKwexpectKwKeyslocalVariablesks                       r   datagramReceivedzMyProtocol.datagramReceived   s    " ~~III~#~~11!4
HF8==?34 	JA~a00J1#Qx{oVN14E3HIJ0	J T!KYznF4(#KK!r   c                     y r    )r   numprotos      r   addProtozMyProtocol.addProto.   s    r   N)r   z(list[tuple[bytes, dict[str, str | int]]]returnNone)r   bytesr   intr   strr   r6   r   r5   r   r5   r   r5   r    r5   r!   r5   r"   r5   r#   r5   r$   r5   r%   r5   r&   r5   r2   r3   )r/   objectr0   r7   r2   r3   )__name__
__module____qualname__r   r,   r1   r.   r   r   r
   r
      s    )LL L 	L
 L L L L L L L L L L L  
!L:r   r
   c                  T    e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zy
)IPTestsc                    t        j                         }t        ddddddddd	d
dddddfg      }|j                  d|       |j	                  ddddd       |j
                  rJ d|j
                  z         y N   foobarr   1.2.3.45.6.7.8                         r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&      T ޭFEfoobardummyr   r   r   r   5Should not expect any more packets, but still want %rr   
IPProtocolr
   r1   r,   r   r   r0   p1s      r   testPacketParsingzIPTests.testPacketParsing4   s     #$ )"+$(#$! #)'-+1)**+#
, 	tR 
  	 	
$ << 	
CbllR	
<r   c                B   t        j                         }t        ddddddddd	d
dddddfddddddddd	d
dddddfg      }|j                  d|       |j	                  ddddd       |j	                  ddddd       |j
                  rJ d|j
                  z         y )Nr?   r   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK      quux5.4.3.26.7.8.9rL   rM   rN      T ޭFE	quuxrO   rP   rR   s      r   testMultiplePacketszIPTests.testMultiplePacketsd   s    #$ )"+$(#$! #)'-+1)**+#& #$ )"+$(#$! #)'-+1)**+#'%'
P 	tR 
  	 	
" 	
  	 	
$ << 	
CbllR	
<r   c                   t        j                         }t        ddddddddd	d
dddddfg      }t        ddddddddd	d
dddddfg      }|j                  d|       |j                  d|       |j	                  ddddd       |j
                  rJ d|j
                  z         |j
                  rJ d|j
                  z         y r>   rP   r   r0   rS   p2s       r   testMultipleSameProtoszIPTests.testMultipleSameProtos   s#    #$ )"+$(#$! #)'-+1)**+#
.  #$ )"+$(#$! #)'-+1)**+#
. 	tR tR 
  	 	
$ << 	
CbllR	
 << 	
CbllR	
<r   c                    t        j                         }t        g       }|j                  d|       |j	                  ddddd       y )NrI   rL   r   rM   rN   )r   rQ   r
   r1   r,   rR   s      r   testWrongProtoNotSeenzIPTests.testWrongProtoNotSeen  sJ    ^q"
  	 	
r   c                X   t        j                         }t        ddddddddd	d
dddddfddddddddd	d
dddddfg      }|j                  d|       t        ddddddddd	d
dddddfddddddddd	d
dddddfg      }|j                  d|       |j	                  ddddd       |j	                  ddddd       |j	                  ddddd       |j	                  ddddd       |j
                  rJ d|j
                  z         |j
                  rJ d|j
                  z         y )Nr?   r   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rV   rW   rX   
   s   T ޭ
FE	quuxrM   rN   rL   rY   s   T ޭ
FEfoobarrO   rP   r\   s       r   testDemuxingzIPTests.testDemuxing  s	    #$ )"+$(#$! #)'-+1)**+#& #$ )"+$(#$! #)'-+1)**+#'%'
P 	tR  #$ )"+$(#$! #)'-+1)**+#& #$ )"+$(#$! #)'-+1)**+#'%'
P 	tR 
  	 	
" 	
  	 	
" 	
  	 	
" 	
  	 	
$ << 	
CbllR	
 << 	
CbllR	
<r   c                    t        j                         }	 |j                  dd       t        d      # t        j
                  $ r Y yw xY w)z2Adding a wrong level protocol raises an exception.*   	silliness2addProto must raise an exception for bad protocolsN)r   rQ   r1   AssertionErrorr   CannotAdaptr   es     r   testAddingBadProtos_WrongLevelz&IPTests.testAddingBadProtos_WrongLevel  sI    MMO	WJJr;' !!UVV %% 		s   3 A	A	c                    t        j                         }	 |j                  dt        g              t	        d      # t
        $ r}|j                  dk(  rn Y d}~yd}~ww xY w)z=Adding a protocol with a negative number raises an exception.rg   )z'Added protocol must be positive or zeroNr   rQ   r1   r
   rh   	TypeErrorargsrj   s     r   testAddingBadProtos_TooSmallz$IPTests.testAddingBadProtos_TooSmall  s]    MMO	WJJr:b>* !!UVV  	vvEE 	   < 	A AA c                    t        j                         }	 |j                  dt        g              t	        d      # t
        $ r}|j                  dk(  rn Y d}~yd}~ww xY w)<Adding a protocol with a number >=2**32 raises an exception.l        rg   z"Added protocol must fit in 32 bitsNro   rj   s     r   testAddingBadProtos_TooBigz"IPTests.testAddingBadProtos_TooBig  s]    MMO	WJJujn- !!UVV  	vv@@ 	rs   c                    t        j                         }	 |j                  dt        g              t	        d      # t
        $ r}|j                  dk(  rn Y d}~yd}~ww xY w)ru   l       rg   rv   Nro   rj   s     r   testAddingBadProtos_TooBig2z#IPTests.testAddingBadProtos_TooBig2  s]    MMO	WJJy*R.1 !!UVV  	vv@@ 	rs   N)r2   r3   )r8   r9   r:   rT   rZ   r^   r`   rc   rl   rr   rw   ry   r.   r   r   r<   r<   3   s:    .
`P
dJ
X
.`
DWWWWr   r<   N)
__future__r   zoper   twisted.pairr   r   twisted.pythonr   twisted.trialr   implementerIRawDatagramProtocolr
   TestCaser<   r.   r   r   <module>r      sY    #    % " s//0# # 1#LwWh wWr   