U
    n5{i¡  ã                   @   sR   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
 G dd„ dejƒZd	S )
z7
Test cases for L{twisted.protocols.haproxy.V1Parser}.
é    )Úaddress)Úunittesté   )Ú	_v1parser)ÚInvalidNetworkProtocolÚInvalidProxyHeaderÚMissingAddressDatac                   @   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dœdd„Zddœdd„ZdS )ÚV1ParserTestsz?
    Test L{twisted.protocols.haproxy.V1Parser} behaviour.
    N)Úreturnc                 C   s   |   ttjjd¡ dS )zT
        Test that an exception is raised when the PROXY header is missing.
        s	   NOTPROXY N)ÚassertRaisesr   r   ÚV1ParserÚparse©Úself© r   úP/tmp/pip-unpacked-wheel-mnhg7r0q/twisted/protocols/haproxy/test/test_v1parser.pyÚtest_missingPROXYHeaderValue   s
    ýz*V1ParserTests.test_missingPROXYHeaderValuec                 C   s   |   ttjjd¡ dS )zX
        Test that an exception is raised when the proto is not TCP or UNKNOWN.
        s   PROXY WUTPROTO N)r   r   r   r   r   r   r   r   r   Útest_invalidNetworkProtocol   s
    ýz)V1ParserTests.test_invalidNetworkProtocolc                 C   s   |   ttjjd¡ dS )zU
        Test that an exception is raised when the proto has no source data.
        s   PROXY TCP4 N©r   r   r   r   r   r   r   r   r   Útest_missingSourceData'   s
    ýz$V1ParserTests.test_missingSourceDatac                 C   s   |   ttjjd¡ dS )zU
        Test that an exception is raised when the proto has no destination.
        s   PROXY TCP4 127.0.0.1 8080 8888Nr   r   r   r   r   Útest_missingDestData1   s
    ýz"V1ParserTests.test_missingDestDatac                 C   s„   t j d¡}|  |jtj¡ t|jtjƒs.t‚t|j	tjƒs@t‚|  
|jjd¡ |  
|jjd¡ |  
|j	jd¡ |  
|j	jd¡ dS )zE
        Test that parsing is successful for a PROXY header.
        s(   PROXY TCP4 127.0.0.1 127.0.0.1 8080 8888ú	127.0.0.1é�  é¸"  N)r   r   r   ÚassertIsInstanceÚsourcer   ÚIPv4AddressÚ
isinstanceÚAssertionErrorÚdestinationÚassertEqualÚhostÚport©r   Úinfor   r   r   Útest_fullParsingSuccess;   s    ÿz%V1ParserTests.test_fullParsingSuccessc                 C   s„   t j d¡}|  |jtj¡ t|jtjƒs.t‚t|j	tjƒs@t‚|  
|jjd¡ |  
|jjd¡ |  
|j	jd¡ |  
|j	jd¡ dS )zK
        Test that parsing is successful for an IPv6 PROXY header.
        s   PROXY TCP6 ::1 ::1 8080 8888z::1r   r   N)r   r   r   r   r   r   ÚIPv6Addressr   r   r   r    r!   r"   r#   r   r   r   Útest_fullParsingSuccess_IPv6J   s    ÿz*V1ParserTests.test_fullParsingSuccess_IPv6c                 C   s(   t j d¡}|  |j¡ |  |j¡ dS )zM
        Test that parsing is successful for a UNKNOWN PROXY header.
        s$   PROXY UNKNOWN anything could go hereN)r   r   r   ZassertIsNoner   r   r#   r   r   r   Útest_fullParsingSuccess_UNKNOWNY   s
    ÿz-V1ParserTests.test_fullParsingSuccess_UNKNOWNc                 C   sô   t  ¡ }| d¡\}}|  |¡ |  |¡ | d¡\}}|  |¡ |  |¡ | d¡\}}|  |¡ |dk	spt‚|dk	s|t‚|  |jtj¡ t	|jtjƒsžt‚t	|j
tjƒs°t‚|  |jjd¡ |  |jjd¡ |  |j
jd¡ |  |j
jd¡ dS )zE
        Test that parsing happens when fed a complete line.
        ó   PROXY TCP4 127.0.0.1 127.0.0.1 ó	   8080 8888s   
Nr   r   r   )r   r   ÚfeedÚassertFalser   r   r   r   r   r   r   r    r!   r"   ©r   Úparserr$   Ú	remainingr   r   r   Útest_feedParsingc   s$    




zV1ParserTests.test_feedParsingc                 C   s`   t  ¡ }| d¡\}}|  |¡ |  |¡ | d¡\}}|  |¡ |  |¡ |  t|jd¡ dS )zN
        Test that parsing fails if no newline is found in 108 bytes.
        r)   r*   sd                                                                                                       N)r   r   r+   r,   r   r   r-   r   r   r   Útest_feedParsingTooLongz   s    



ýz%V1ParserTests.test_feedParsingTooLongc                 C   s<   t  ¡ }| d¡\}}|  |¡ |  |d¡ |  |j¡ dS )zH
        Test that parsing leaves overflow bytes in the buffer.
        s:   PROXY TCP4 127.0.0.1 127.0.0.1 8080 8888
HTTP/1.1 GET /
s   HTTP/1.1 GET /
N)r   r   r+   Ú
assertTruer    r,   Úbufferr-   r   r   r   Útest_feedParsingOverflow‹   s    ÿ
z&V1ParserTests.test_feedParsingOverflow)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r%   r'   r(   r0   r1   r4   r   r   r   r   r	      s   




r	   N)r8   Ztwisted.internetr   Ztwisted.trialr   Ú r   Ú_exceptionsr   r   r   ZTestCaser	   r   r   r   r   Ú<module>   s
   