U
    n5{iń6  ć                   @   s   d Z ddlmZ 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 dd	lmZ G d
d de	ZG dd dejZG dd dejZdS )z>
Test cases for L{twisted.protocols.haproxy.HAProxyProtocol}.
é    )ŚOptional)Śmock)Śaddress)ŚFactoryŚProtocol)Ś StringTransportWithDisconnection)Śunittesté   )ŚHAProxyWrappingFactoryc                   @   s.   e Zd ZdZddddZeddddZdS )	ŚStaticProtocolz6
    Protocol stand-in that maintains test state.
    N©Śreturnc                 C   s   d | _ d | _d| _d| _d S )Nó    F)ŚsourceŚdestinationŚdataZdisconnected)Śself© r   śO/tmp/pip-unpacked-wheel-mnhg7r0q/twisted/protocols/haproxy/test/test_wrapper.pyŚ__init__   s    zStaticProtocol.__init__)r   r   c                 C   s4   | j s
t| j  ” | _| j  ” | _|  j|7  _d S )N)Ś	transportŚAssertionErrorŚgetPeerr   ŚgetHostr   r   )r   r   r   r   r   ŚdataReceived   s    
zStaticProtocol.dataReceived)Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   Śbytesr   r   r   r   r   r      s   r   c                   @   s   e Zd 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S )ŚHAProxyWrappingFactoryV1Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
    headers.
    Nr   c                 C   sR   t t t”}| t ddd””}t }||_| 	|” | 
d” |  |j” dS )śJ
        Test if invalid headers result in connectionLost events.
        ŚTCPś	127.1.1.1é  s   NOTPROXY anything can go here
N©r
   r   ŚforProtocolr   ŚbuildProtocolr   ŚIPv4Addressr   ŚprotocolŚmakeConnectionr   ŚassertFalseŚ	connected©r   ŚfactoryŚprotor   r   r   r   Śtest_invalidHeaderDisconnects)   s    ’

z;HAProxyWrappingFactoryV1Tests.test_invalidHeaderDisconnectsc                 C   s\   t t t”}| t ddd””}t }||_| 	|” | 
d” | 
d” |  |j” dS )r!   r"   r#   r$   s   PROXY TCP4 1.1.1.1
s   2.2.2.2 8080
Nr%   r-   r   r   r   Ś$test_invalidPartialHeaderDisconnects7   s    ’


zBHAProxyWrappingFactoryV1Tests.test_invalidPartialHeaderDisconnectsc                 C   sl   t t t”}| t ddd””}ttj	j
tj	jd}| |” |  | ” tj	j
” |  | ” tj	j” dS )z
        Before any data is received the HAProxy protocol will return the same peer
        and host as the IP connection.
        r"   ś	127.0.0.1r$   )ZhostAddressZpeerAddressN)r
   r   r&   r   r'   r   r(   r   r   ŚsentinelZhost_addressZpeer_addressr*   ŚassertEqualr   r   r-   r   r   r   Ś test_preDataReceived_getPeerHostF   s    ’ž
z>HAProxyWrappingFactoryV1Tests.test_preDataReceived_getPeerHostc                 C   są   t t t”}| t ddd””}t }| |” | 	d” |  
| ” jd” |  
| ” jd” |  
|jj ” jd” |  
|jj ” jd” |  
| ” jd” |  
| ” jd” |  
|jj ” jd” |  
|jj ” jd” dS )	śP
        Test if IPv4 headers result in the correct host and peer data.
        r"   r2   r$   s&   PROXY TCP4 1.1.1.1 2.2.2.2 8080 8888
z1.1.1.1z2.2.2.2éø"  N)r
   r   r&   r   r'   r   r(   r   r*   r   r4   r   ŚhostŚportŚwrappedProtocolr   r   r-   r   r   r   Ś(test_validIPv4HeaderResolves_getPeerHostW   s6    ’

žžžžzFHAProxyWrappingFactoryV1Tests.test_validIPv4HeaderResolves_getPeerHostc                 C   są   t t t”}| t ddd””}t }| |” | 	d” |  
| ” jd” |  
| ” jd” |  
|jj ” jd” |  
|jj ” jd” |  
| ” jd” |  
| ” jd” |  
|jj ” jd” |  
|jj ” jd” dS )śP
        Test if IPv6 headers result in the correct host and peer data.
        r"   ś::1r$   s   PROXY TCP6 ::1 ::2 8080 8888
z::2r7   N)r
   r   r&   r   r'   r   ŚIPv6Addressr   r*   r   r4   r   r8   r9   r:   r   r   r-   r   r   r   Ś(test_validIPv6HeaderResolves_getPeerHostw   s6    ’

žžžžzFHAProxyWrappingFactoryV1Tests.test_validIPv6HeaderResolves_getPeerHostc                 C   sP   t t t”}| t ddd””}t }| |” | 	d” |  
|jjd” dS )śN
        Test if non-header bytes are passed to the wrapped protocol.
        r"   r=   r$   s,   PROXY TCP6 ::1 ::2 8080 8888
HTTP/1.1 / GETó   HTTP/1.1 / GETN©r
   r   r&   r   r'   r   r>   r   r*   r   r4   r:   r   r-   r   r   r   Ś'test_overflowBytesSentToWrappedProtocol   s    ’

zEHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolc                 C   sZ   t t t”}| t ddd””}t }| |” | 	d” | 	d” |  
|jjd” dS )śK
        Test if header streaming passes extra data appropriately.
        r"   r=   r$   ó   PROXY TCP6 ::1 ::2 ó   8080 8888
HTTP/1.1 / GETrA   NrB   r-   r   r   r   Ś-test_overflowBytesSentToWrappedProtocolChunks¤   s    ’


zKHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolChunksc                 C   sd   t t t”}| t ddd””}t }| |” | 	d” | 	d” | 	d” |  
|jjd” dS )	zT
        Test if wrapper writes all data to wrapped protocol after parsing.
        r"   r=   r$   rE   rF   s   

s   HTTP/1.1 / GET

NrB   r-   r   r   r   Ś,test_overflowBytesSentToWrappedProtocolAfter²   s    ’



zJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfter)r   r   r   r   r0   r1   r5   r;   r?   rC   rG   rH   r   r   r   r   r    #   s     r    c                   @   s|   e Zd ZdZdZdZdZde e 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 )ŚHAProxyWrappingFactoryV2Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v2 PROXY
    headers.
    s   

 
QUIT
!     "øs4   

 
QUIT
!! $                              "øsl   /home/tests/mysockets/sock                                                                                  s   

 
QUIT
!1 ŲNr   c                 C   s`   t t t”}| t ddd””}t }||_| 	|” | 
d| jdd  ” |  |j” dS )r!   r"   r=   r$   ó    é   N)r
   r   r&   r   r'   r   r>   r   r)   r*   r   Ś
IPV4HEADERr+   r,   r-   r   r   r   r0   ś   s    ’
z;HAProxyWrappingFactoryV2Tests.test_invalidHeaderDisconnectsc                 C   sā   t t t”}| t ddd””}t }| |” | 	| j
” |  | ” jd” |  | ” jd” |  |jj ” jd” |  |jj ” jd” |  | ” jd” |  | ” jd” |  |jj ” jd” |  |jj ” jd” dS )r6   r"   r2   r$   r7   N)r
   r   r&   r   r'   r   r(   r   r*   r   rL   r4   r   r8   r9   r:   r   r   r-   r   r   r   r;     s6    ’
žžžžzFHAProxyWrappingFactoryV2Tests.test_validIPv4HeaderResolves_getPeerHostc                 C   sā   t t t”}| t ddd””}t }| |” | 	| j
” |  | ” jd” |  | ” jd” |  |jj ” jd” |  |jj ” jd” |  | ” jd” |  | ” jd” |  |jj ” jd” |  |jj ” jd” dS )r<   r"   r=   r$   z0:0:0:0:0:0:0:1r7   N)r
   r   r&   r   r'   r   r(   r   r*   r   Ś
IPV6HEADERr4   r   r8   r9   r:   r   r   r-   r   r   r   r?   (  s6    ’
žžžžzFHAProxyWrappingFactoryV2Tests.test_validIPv6HeaderResolves_getPeerHostc                 C   s   t t t”}| t d””}t }| |” | 	| j
” |  | ” jd” |  |jj ” jd” |  | ” jd” |  |jj ” jd” dS )zP
        Test if UNIX headers result in the correct host and peer data.
        s   /home/test/sockets/server.socks   /home/tests/mysockets/sockN)r
   r   r&   r   r'   r   ZUNIXAddressr   r*   r   Ś
UNIXHEADERr4   r   Śnamer:   r   r   r-   r   r   r   Ś(test_validUNIXHeaderResolves_getPeerHostH  s"    ’
žžzFHAProxyWrappingFactoryV2Tests.test_validUNIXHeaderResolves_getPeerHostc                 C   sV   t t t”}| t ddd””}t }| |” | 	| j
d ” |  |jjd” dS )r@   r"   r=   r$   rA   N©r
   r   r&   r   r'   r   r>   r   r*   r   rM   r4   r:   r   r-   r   r   r   rC   ^  s    ’
zEHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolc                 C   sr   t t t”}| t ddd””}t }| |” | 	| j
dd ” | 	| j
dd d ” |  |jjd” dS )rD   r"   r=   r$   Né   rA   rQ   r-   r   r   r   rG   k  s    ’
zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunks)r   r   r   r   rL   rM   Z
_SOCK_PATHrN   r0   r;   r?   rP   rC   rG   r   r   r   r   rI   Ā   s&   žž’	õō’  rI   N)r   Śtypingr   r   r   Ztwisted.internetr   Ztwisted.internet.protocolr   r   Ztwisted.internet.testingr   Ztwisted.trialŚ_wrapperr
   r   ZTestCaser    rI   r   r   r   r   Ś<module>   s     