o
    Æbó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ZdeddfddZdS )
ŚStaticProtocolz6
    Protocol stand-in that maintains test state.
    ŚreturnNc                 C   s   d | _ d | _d| _d| _d S )Nó    F)ŚsourceŚdestinationŚdataŚdisconnected)Śself© r   śM/usr/lib/python3/dist-packages/twisted/protocols/haproxy/test/test_wrapper.pyŚ__init__   s   
zStaticProtocol.__init__r   c                 C   s4   | j sJ | j  ” | _| j  ” | _|  j|7  _d S )N)Ś	transportŚgetPeerr   ŚgetHostr   r   )r   r   r   r   r   ŚdataReceived   s   
zStaticProtocol.dataReceived©r   N)Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   Śbytesr   r   r   r   r   r      s    
r   c                   @   s`   e Zd ZdZdddZdddZddd	Zdd
dZdddZdddZ	dddZ
dddZdS )ŚHAProxyWrappingFactoryV1Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
    headers.
    r   Nc                 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$   )ŚhostAddressŚpeerAddressN)r
   r   r&   r   r'   r   r(   r   r   ŚsentinelŚhost_addressŚ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   r8   r   ŚhostŚportŚwrappedProtocolr   r   r-   r   r   r   Ś(test_validIPv4HeaderResolves_getPeerHostW   ó6   ’

žžžž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::2r;   N)r
   r   r&   r   r'   r   ŚIPv6Addressr   r*   r   r8   r   r<   r=   r>   r   r   r-   r   r   r   Ś(test_validIPv6HeaderResolves_getPeerHostw   r@   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"   rB   r$   s,   PROXY TCP6 ::1 ::2 8080 8888
HTTP/1.1 / GETó   HTTP/1.1 / GETN©r
   r   r&   r   r'   r   rC   r   r*   r   r8   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"   rB   r$   ó   PROXY TCP6 ::1 ::2 ó   8080 8888
HTTP/1.1 / GETrF   NrG   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"   rB   r$   rJ   rK   s   

s   HTTP/1.1 / GET

NrG   r-   r   r   r   Ś,test_overflowBytesSentToWrappedProtocolAfter²   s   ’



zJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfterr   )r   r   r   r   r0   r1   r9   r?   rD   rH   rL   rM   r   r   r   r   r    #   s    




 
 
r    c                   @   sd   e Zd ZdZdZdZdZde e Zddd	Zdd
dZ	dddZ
dddZdddZ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 Ųr   Nc                 C   s`   t t t”}| t ddd””}t }||_| 	|” | 
d| jdd  ” |  |j” dS )r!   r"   rB   r$   ó    é   N)r
   r   r&   r   r'   r   rC   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 )r:   r"   r2   r$   r;   N)r
   r   r&   r   r'   r   r(   r   r*   r   rQ   r8   r   r<   r=   r>   r   r   r-   r   r   r   r?     ó6   ’
žžžž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 )rA   r"   rB   r$   z0:0:0:0:0:0:0:1r;   N)r
   r   r&   r   r'   r   r(   r   r*   r   Ś
IPV6HEADERr8   r   r<   r=   r>   r   r   r-   r   r   r   rD   (  rR   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   ŚUNIXAddressr   r*   r   Ś
UNIXHEADERr8   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 )rE   r"   rB   r$   rF   N©r
   r   r&   r   r'   r   rC   r   r*   r   rS   r8   r>   r   r-   r   r   r   rH   ^  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 )rI   r"   rB   r$   Né   rF   rX   r-   r   r   r   rL   k  s   ’
zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunksr   )r   r   r   r   rQ   rS   Ś
_SOCK_PATHrU   r0   r?   rD   rW   rH   rL   r   r   r   r   rN   Ā   s(    žž’	õō’


 
 
rN   N)r   Śtypingr   r   r   Śtwisted.internetr   Śtwisted.internet.protocolr   r   Śtwisted.test.proto_helpersr   Śtwisted.trialŚ_wrapperr
   r   ŚTestCaser    rN   r   r   r   r   Ś<module>   s     