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rJ d|j |jrJ 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.*   	silliness2addProto 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   
'