U
    
W[3                     @   sL   d dl mZ d dlmZ d dlmZ G dd dejZG dd dejZ	dS )	    )unittest)protocol)rawudpc                   @   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_rawudp.py__init__   s    zMyProtocol.__init__c                 C   sx   |\}}| j std| j d\}}}||ks@td||f ||ksXtd||f ||ksttd||||f d S )Nz(Got a packet when not expecting anymore.r   zExpected data %r, got %rzExpected host %r, got %rz&Expected port %d=0x%04x, got %d=0x%04x)r   AssertionErrorpop)r   dataZpeerZhostZportZ
expectDataZ
expectHostZ
expectPortr	   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 )RawUDPTestsc                 C   s\   t  }tdg}|d| |jddddddddddddddd |jrXtd|j d S 	N   foobar   testHostiC       C ޭfoobarr      dummyr   partialdestsourcer   versionZihlZtosZtot_lenZfragment_idZfragment_offsetZdont_fragmentZmore_fragmentsZttl5Should not expect any more packets, but still want %rr   RawUDPProtocolr   addProtor   r   r   r   protop1r	   r	   r
   testPacketParsing   s.    zRawUDPTests.testPacketParsingc                 C   s   t  }tddg}|d| |jddddddddddddddd |jd	ddd
ddddddddddd |jrtd|j d S )Nr      quux	   otherHosti3  r   r   r   r   r   r      3 ޭquuxr*   r    r!   r$   r	   r	   r
   testMultiplePackets8   sN    zRawUDPTests.testMultiplePacketsc                 C   s   t  }tdg}tdg}|d| |d| |jddddddddddddddd |jrntd|j |jrtd|j d S r   r!   r   r%   r&   Zp2r	   r	   r
   testMultipleSameProtosl   s<    z"RawUDPTests.testMultipleSameProtosc                 C   sF   t  }tg }|d| |jddddddddddddddd d S )N   r   r   r   r   r   )r   r"   r   r#   r   r$   r	   r	   r
   testWrongProtoNotSeen   s$    z!RawUDPTests.testWrongProtoNotSeenc                 C   s   t  }tddg}|d| tddg}|d| |jddd	d
d	d	d	d	d	d	d	d	d	d	d |jddd	dd	d	d	d	d	d	d	d	d	d	d |jddd	d
d	d	d	d	d	d	d	d	d	d	d |jddd	dd	d	d	d	d	d	d	d	d	d	d |jrtd|j |jrtd|j d S )Nr   r(   r   )r)   r*   i  )r   r   i  iP  s   P ޭquuxr   r   r*   r   r   r   r+   s   P ޭfoobarr    r!   r-   r	   r	   r
   testDemuxing   s    zRawUDPTests.testDemuxingc              
   C   sV   t  }z|dd W n0 tk
rH } z|jdkr6n W 5 d}~X Y n
X tddS )z2Adding a wrong level protocol raises an exception.*   Z	silliness)z6Added protocol must be an instance of DatagramProtocolN2addProto must raise an exception for bad protocols)r   r"   r#   	TypeErrorargsr   r   er	   r	   r
   testAddingBadProtos_WrongLevel  s    
z*RawUDPTests.testAddingBadProtos_WrongLevelc              
   C   sZ   t  }z|dt  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 zeroNr3   r   r"   r#   r   DatagramProtocolr4   r5   r   r6   r	   r	   r
   testAddingBadProtos_TooSmall!  s    
z(RawUDPTests.testAddingBadProtos_TooSmallc              
   C   sZ   t  }z|dt  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**16 raises an exception.i   z"Added protocol must fit in 16 bitsNr3   r:   r6   r	   r	   r
   testAddingBadProtos_TooBig/  s    
z&RawUDPTests.testAddingBadProtos_TooBigc              
   C   sZ   t  }z|dt  W n0 tk
rL } z|jdkr:n W 5 d}~X Y n
X tddS )r=   i  r>   Nr3   r:   r6   r	   r	   r
   testAddingBadProtos_TooBig2<  s    
z'RawUDPTests.testAddingBadProtos_TooBig2N)r   r   r   r'   r,   r.   r0   r1   r8   r<   r?   r@   r	   r	   r	   r
   r      s    4*dr   N)
Ztwisted.trialr   Ztwisted.internetr   Ztwisted.pairr   r;   r   ZTestCaser   r	   r	   r	   r
   <module>   s   