U
    
W[,;                     @   sd   d dl mZ d dlmZ d dlmZmZ d dlmZ e	ej
G dd dZG dd dejZd	S )
    )unittest)
components)ipraw)	interfacec                   @   s   e Z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                 K   s   | j std| j d\}}| }tt|}| }tt|}||ks^td||f |D ].}|| || ksbtd||| || f qb||kstd||f ||kstd||f d S )Nz(Got a packet when not expecting anymore.r   zExpected %r, got %rzExpected %s=%r, got %r)r	   AssertionErrorpopkeysr   sorted)r
   datakwZ
expectDataZexpectKwZexpectKwKeysZkwKeyskr   r   r   datagramReceived   s    ,zMyProtocol.datagramReceivedN)__name__
__module____qualname__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rftd|j d S N   foobarr   1.2.3.45.6.7.8                         partialdestsourceprotocolversionZihlZtosZtot_lenZfragment_idZfragment_offsetZdont_fragmentZmore_fragmentsZttl   T ޭFEfoobardummyr(   r)   r*   r+   5Should not expect any more packets, but still want %rr   
IPProtocolr   addProtor   r	   r   r
   protop1r   r   r   testPacketParsing   s8    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rtd|j d S )Nr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'      quux5.4.3.26.7.8.9r-   r.   r/      T ޭFE	quuxr0   r1   r4   r   r   r   testMultiplePacketsJ   sb    #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rtd|j |jrtd|j d S r   r1   r
   r5   r6   Zp2r   r   r   testMultipleSameProtos   sb    zIPTests.testMultipleSameProtosc                 C   s4   t  }tg }|d| |jdddddd d S )Nr%   r-   r   r.   r/   )r   r2   r   r3   r   r4   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 )Nr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r8   r9   r:   
   s   T ޭ
FE	quuxr.   r/   r-   r;   s   T ޭ
FEfoobarr0   r1   r=   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	silliness2addProto must raise an exception for bad protocolsN)r   r2   r3   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 zeroNrC   r   r2   r3   r   	TypeErrorargsr   rD   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 bitsNrC   rH   rD   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 )rL   l       rM   NrC   rH   rD   r   r   r   testAddingBadProtos_TooBig2  s    
z#IPTests.testAddingBadProtos_TooBig2N)r   r   r   r7   r<   r>   r?   rA   rF   rK   rN   rO   r   r   r   r   r      s   +KC r   N)Ztwisted.trialr   Ztwisted.pythonr   Ztwisted.pairr   r   zoper   ZimplementerZIRawDatagramProtocolr   ZTestCaser   r   r   r   r   <module>   s   
