U
    2ÜŸj^<  ã                   @  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                   @  sX   e Zd Zdddœdd„Zdddddddddddddddd	œd
d„Zddddœdd„ZdS )Ú
MyProtocolz(list[tuple[bytes, dict[str, str | int]]]ÚNone)Ú	expectingÚreturnc                 C  s   t |ƒ| _d S ©N)Úlistr
   )Úselfr
   © r   ú=/tmp/pip-unpacked-wheel-4b529toj/twisted/pair/test/test_ip.pyÚ__init__   s    zMyProtocol.__init__ÚbytesÚintÚstr)ÚdataÚpartialÚsourceÚdestÚprotocolÚversionÚihlÚtosÚtot_lenÚfragment_idÚfragment_offsetÚdont_fragmentÚmore_fragmentsÚttlr   c              	   C  s�   | j stdƒ‚| j  d¡\}}tt| ¡ ƒƒ}tƒ }|D ]6}|| || ks8td|› d|| ›d|| ›�ƒ‚q8||ksŒtd|›d|›�ƒ‚d S )Nz(Got a packet when not expecting anymore.r   z	Expected ú=z, got )r
   ÚAssertionErrorÚ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Úobject)ÚnumÚprotor   c                 C  s   d S r   r   )r   r,   r-   r   r   r   ÚaddProto.   s    zMyProtocol.addProtoN)Ú__name__Ú
__module__Ú__qualname__r   r*   r.   r   r   r   r   r      s   *r   c                   @  sŠ   e Zd Zddœdd„Zddœdd„Zddœdd„Zddœd	d
„Zddœdd„Zddœdd„Zddœdd„Z	ddœdd„Z
d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rft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   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rœt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rœtd|j ƒ‚|jr°t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  s8  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td|j ƒ‚|j�r4t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  s<   t  ¡ }z| dd¡ W n tjk
r.   Y n
X tdƒ‚dS )z2Adding a wrong level protocol raises an exception.é*   Z	sillinessú2addProto must raise an exception for bad protocolsN)r   rF   r.   r   ZCannotAdaptr$   ©r   Úer   r   r   ÚtestAddingBadProtos_WrongLevel»  s    z&IPTests.testAddingBadProtos_WrongLevelc              
   C  sZ   t  ¡ }z| dtg ƒ¡ W n0 tk
rL } z|jdkr:n‚ W 5 d}~X Y n
X tdƒ‚dS )z=Adding a protocol with a negative number raises an exception.éÿÿÿÿ)z'Added protocol must be positive or zeroNrV   ©r   rF   r.   r   Ú	TypeErrorÚargsr$   rW   r   r   r   ÚtestAddingBadProtos_TooSmallÅ  s    
z$IPTests.testAddingBadProtos_TooSmallc              
   C  sZ   t  ¡ }z| dtg ƒ¡ W n0 tk
rL } z|jdkr:n‚ W 5 d}~X Y n
X tdƒ‚dS )ú<Adding a protocol with a number >=2**32 raises an exception.l        ©z"Added protocol must fit in 32 bitsNrV   r[   rW   r   r   r   ÚtestAddingBadProtos_TooBigÒ  s    
z"IPTests.testAddingBadProtos_TooBigc              
   C  sZ   t  ¡ }z| dtg ƒ¡ W n0 tk
rL } z|jdkr:n‚ W 5 d}~X Y n
X tdƒ‚dS )r_   l       r`   NrV   r[   rW   r   r   r   ÚtestAddingBadProtos_TooBig2ß  s    
z#IPTests.testAddingBadProtos_TooBig2N)r/   r0   r1   rI   rN   rQ   rR   rT   rY   r^   ra   rb   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   
&