U
    Kė]jń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ŚdataŚdisconnected)Śself© r   śtc:\users\psant\downloads\hotstarbackend\school\venv\Lib\site-packages\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#   r3   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   r5   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::2r8   N)r
   r   r'   r   r(   r   ŚIPv6Addressr   r+   r   r5   r   r9   r:   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   r5   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 / GETrB   NrC   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%   rF   rG   s   

s   HTTP/1.1 / GET

NrC   r.   r   r   r   Ś,test_overflowBytesSentToWrappedProtocolAfter²   s    ’



zJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfter)r   r   r   r   r1   r2   r6   r<   r@   rD   rH   rI   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   r1   ś   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 )r7   r#   r3   r%   r8   N)r
   r   r'   r   r(   r   r)   r   r+   r   rM   r5   r   r9   r:   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:1r8   N)r
   r   r'   r   r(   r   r)   r   r+   r   Ś
IPV6HEADERr5   r   r9   r:   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   Ś
UNIXHEADERr5   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 )rA   r#   r>   r%   rB   N©r
   r   r'   r   r(   r   r?   r   r+   r   rN   r5   r;   r   r.   r   r   r   rD   ^  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 )rE   r#   r>   r%   Né   rB   rR   r.   r   r   r   rH   k  s    ’
zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunks)r   r   r   r   rM   rN   Z
_SOCK_PATHrO   r1   r<   r@   rQ   rD   rH   r   r   r   r   rJ   Ā   s&   žž’	õō’  rJ   N)r   Śtypingr   r   r   Ztwisted.internetr   Ztwisted.internet.protocolr   r   Ztwisted.internet.testingr   Ztwisted.trialŚ_wrapperr
   r   ZTestCaser!   rJ   r   r   r   r   Ś<module>   s     