o
    Óó·i^<  ã                   @  sp   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 ej¡G dd„ dƒƒZG dd	„ d	e
jƒZd
S )é    )Úannotations)Ú	interface)ÚipÚraw)Ú
components)Úunittestc                   @  s*   e Zd Zd dd„Zd!dd„Zd"dd„ZdS )#Ú
MyProtocolÚ	expectingú(list[tuple[bytes, dict[str, str | int]]]ÚreturnÚNonec                 C  s   t |ƒ| _d S ©N)Úlistr	   )Úselfr	   © r   ú_C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/pair/test/test_ip.pyÚ__init__   s   zMyProtocol.__init__ÚdataÚbytesÚpartialÚintÚsourceÚstrÚdestÚprotocolÚversionÚihlÚtosÚtot_lenÚfragment_idÚfragment_offsetÚdont_fragmentÚmore_fragmentsÚttlc              	   C  s�   | j sJ dƒ‚| j  d¡\}}tt| ¡ ƒƒ}tƒ }|D ]}|| || ks7J d|› d|| ›d|| ›�ƒ‚q||ksFJ d|›d|›�ƒ‚d S )Nz(Got a packet when not expecting anymore.r   z	Expected ú=z, got )r	   Úpopr   ÚsortedÚkeysÚlocals)r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Z
expectDataZexpectKwZexpectKwKeysZlocalVariablesÚkr   r   r   ÚdatagramReceived   s   ÿþ zMyProtocol.datagramReceivedÚnumÚobjectÚprotoc                 C  s   d S r   r   )r   r+   r-   r   r   r   ÚaddProto.   s   zMyProtocol.addProtoN)r	   r
   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r   r   )r+   r,   r-   r,   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r*   r.   r   r   r   r   r      s    

r   c                   @  sf   e Zd Zddd„Zddd„Zddd„Zdd	d
„Zddd„Zddd„Zddd„Z	ddd„Z
ddd„ZdS )ÚIPTestsr   r   c                 C  sj   t  ¡ }tddddddddd	d
dddddœfgƒ}| d|¡ |jdddddd� |jr3J d|j ƒ‚d S ©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   r.   r*   r	   ©r   r-   Úp1r   r   r   ÚtestPacketParsing4   s>   óþÿÿñÿzIPTests.testPacketParsingc                 C  s    t  ¡ }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ƒ}| d|¡ |jdddddd� |jdddddd� |jrNJ d|j ƒ‚d S )Nr4   r   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   ó   quuxú5.4.3.2ú6.7.8.9rA   rB   rC   ó   T Þ­¾ïÀFE	quuxrD   rE   rG   r   r   r   ÚtestMultiplePacketsd   sl   óþóþíÿ(ññÿzIPTests.testMultiplePacketsc                 C  s´   t  ¡ }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ƒ}| d|¡ | d|¡ |jdddddd� |jrNJ d|j ƒ‚|jrXJ d|j ƒ‚d S r3   rE   ©r   r-   rH   Úp2r   r   r   ÚtestMultipleSameProtos¶   sl   óþÿÿóþÿÿñÿÿzIPTests.testMultipleSameProtosc                 C  s4   t  ¡ }tg ƒ}| d|¡ |jdddddd� d S )Nr>   rA   r   rB   rC   )r   rF   r   r.   r*   rG   r   r   r   ÚtestWrongProtoNotSeen  s   
ñzIPTests.testWrongProtoNotSeenc                 C  s4  t  ¡ }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ƒ}| 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ƒ}| d|¡ |jdddddd� |jdddddd� |jdddddd� |jdddddd� |jrŽJ d|j ƒ‚|jr˜J d|j ƒ‚d S )Nr4   r   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rJ   rK   rL   é
   s   T Þ­¾ïÀ
FE	quuxrB   rC   rA   rM   s   T Þ­¾ïÀ
FEfoobarrD   rE   rO   r   r   r   ÚtestDemuxing  sÖ   óþóþíÿ(óþóþíÿ(ññññÿÿzIPTests.testDemuxingc                 C  s6   t  ¡ }z| dd¡ W tdƒ‚ tjy   Y dS w )z2Adding a wrong level protocol raises an exception.é*   Z	sillinessú2addProto must raise an exception for bad protocolsN)r   rF   r.   r   ZCannotAdaptÚAssertionError©r   Úer   r   r   ÚtestAddingBadProtos_WrongLevel»  s   ýÿz&IPTests.testAddingBadProtos_WrongLevelc              
   C  óX   t  ¡ }z| dtg ƒ¡ W tdƒ‚ ty+ } z|jdkrn‚ W Y d}~dS d}~ww )z=Adding a protocol with a negative number raises an exception.éÿÿÿÿ)z'Added protocol must be positive or zeroNrV   ©r   rF   r.   r   Ú	TypeErrorÚargsrW   rX   r   r   r   ÚtestAddingBadProtos_TooSmallÅ  ó   ú
þ€þz$IPTests.testAddingBadProtos_TooSmallc              
   C  r[   )ú<Adding a protocol with a number >=2**32 raises an exception.l        ©z"Added protocol must fit in 32 bitsNrV   r]   rX   r   r   r   ÚtestAddingBadProtos_TooBigÒ  ra   z"IPTests.testAddingBadProtos_TooBigc              
   C  r[   )rb   l       rc   NrV   r]   rX   r   r   r   ÚtestAddingBadProtos_TooBig2ß  ra   z#IPTests.testAddingBadProtos_TooBig2N)r   r   )r/   r0   r1   rI   rN   rQ   rR   rT   rZ   r`   rd   re   r   r   r   r   r2   3   s    

0
R
L
 
#


r2   N)Ú
__future__r   Zzoper   Ztwisted.pairr   r   Ztwisted.pythonr   Ztwisted.trialr   ZimplementerZIRawDatagramProtocolr   ZTestCaser2   r   r   r   r   Ú<module>   s   
&