o
    ¯b€;  ã                   @   sd   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 )
é    )Ú	interface)ÚipÚraw)Ú
components)Úunittestc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
MyProtocolc                 C   s   t |ƒ| _d S ©N)ÚlistÚ	expecting)Úselfr
   © r   ú;/usr/lib/python3/dist-packages/twisted/pair/test/test_ip.pyÚ__init__   s   zMyProtocol.__init__c              	   C   s”   | j sJ dƒ‚| j  d¡\}}| ¡ }tt|ƒƒ}tƒ }|D ]}|| || ks9J d|› d|| ›d|| ›�ƒ‚q||ksHJ d|›d|›�ƒ‚d S )Nz(Got a packet when not expecting anymore.r   z	Expected ú=z, got )r
   ÚpopÚkeysr	   ÚsortedÚ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Úkr   r   r   ÚdatagramReceived   s   ÿ zMyProtocol.datagramReceivedc                 C   s   d S r   r   )r   ÚnumÚprotor   r   r   ÚaddProto-   s   zMyProtocol.addProtoN)Ú__name__Ú
__module__Ú__qualname__r   r'   r*   r   r   r   r   r   
   s    r   c                   @   sT   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dS )ÚIPTestsc                 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   ÚtestPacketParsing3   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 )Nr0   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   ó   quuxú5.4.3.2ú6.7.8.9r=   r>   r?   ó   T Þ­¾ïÀFE	quuxr@   rA   rC   r   r   r   ÚtestMultiplePacketsc   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 r/   rA   ©r   r)   rD   Úp2r   r   r   ÚtestMultipleSameProtosµ   sl   óþÿÿóþÿÿñÿÿzIPTests.testMultipleSameProtosc                 C   s4   t  ¡ }tg ƒ}| d|¡ |jdddddd� d S )Nr:   r=   r   r>   r?   )r   rB   r   r*   r'   rC   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 )Nr0   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   rF   rG   rH   é
   s   T Þ­¾ïÀ
FE	quuxr>   r?   r=   rI   s   T Þ­¾ïÀ
FEfoobarr@   rA   rK   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.é*   Ú	sillinessú2addProto must raise an exception for bad protocolsN)r   rB   r*   r   Ú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 zeroNrS   ©r   rB   r*   r   Ú	TypeErrorÚargsrU   rV   r   r   r   ÚtestAddingBadProtos_TooSmallÄ  ó   ú
þ€þz$IPTests.testAddingBadProtos_TooSmallc              
   C   rY   )ú<Adding a protocol with a number >=2**32 raises an exception.l        ©z"Added protocol must fit in 32 bitsNrS   r[   rV   r   r   r   ÚtestAddingBadProtos_TooBigÑ  r_   z"IPTests.testAddingBadProtos_TooBigc              
   C   rY   )r`   l       ra   NrS   r[   rV   r   r   r   ÚtestAddingBadProtos_TooBig2Þ  r_   z#IPTests.testAddingBadProtos_TooBig2N)r+   r,   r-   rE   rJ   rM   rN   rP   rX   r^   rb   rc   r   r   r   r   r.   2   s    0RL #
r.   N)Úzoper   Útwisted.pairr   r   Útwisted.pythonr   Útwisted.trialr   ÚimplementerÚIRawDatagramProtocolr   ÚTestCaser.   r   r   r   r   Ú<module>   s   
'