
    Vh                     j    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ej                        Zy	)
z7
Test cases for L{twisted.protocols.haproxy.V1Parser}.
    )address)unittest   )	_v1parser)InvalidNetworkProtocolInvalidProxyHeaderMissingAddressDatac                   `    e Zd 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dZy)V1ParserTestsz?
    Test L{twisted.protocols.haproxy.V1Parser} behaviour.
    Nc                 b    | j                  t        t        j                  j                  d       y)zT
        Test that an exception is raised when the PROXY header is missing.
        s	   NOTPROXY N)assertRaisesr   r   V1Parserparseselfs    \/home/dcms/DCMS/lib/python3.12/site-packages/twisted/protocols/haproxy/test/test_v1parser.pytest_missingPROXYHeaderValuez*V1ParserTests.test_missingPROXYHeaderValue   s'     	$$	
    c                 b    | j                  t        t        j                  j                  d       y)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   s    r   test_invalidNetworkProtocolz)V1ParserTests.test_invalidNetworkProtocol   s'     	"$$	
r   c                 b    | j                  t        t        j                  j                  d       y)zU
        Test that an exception is raised when the proto has no source data.
        s   PROXY TCP4 Nr   r	   r   r   r   r   s    r   test_missingSourceDataz$V1ParserTests.test_missingSourceData'   s'     	$$	
r   c                 b    | j                  t        t        j                  j                  d       y)zU
        Test that an exception is raised when the proto has no destination.
        s   PROXY TCP4 127.0.0.1 8080 8888Nr   r   s    r   test_missingDestDataz"V1ParserTests.test_missingDestData1   s'     	$$-	
r   c                 ^   t         j                  j                  d      }| j                  |j                  t
        j                         t        |j                  t
        j                        sJ t        |j                  t
        j                        sJ | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       y)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destinationassertEqualhostportr   infos     r   test_fullParsingSuccessz%V1ParserTests.test_fullParsingSuccess;   s     !!''7
 	dkk7+>+>?$++w':':;;;$**G,?,?@@@));7))40))..<))..5r   c                 ^   t         j                  j                  d      }| j                  |j                  t
        j                         t        |j                  t
        j                        sJ t        |j                  t
        j                        sJ | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       y)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(   s     r   test_fullParsingSuccess_IPv6z*V1ParserTests.test_fullParsingSuccess_IPv6J   s     !!''+
 	dkk7+>+>?$++w':':;;;$**G,?,?@@@))51))40))..6))..5r   c                     t         j                  j                  d      }| j                  |j                         | j                  |j
                         y)zM
        Test that parsing is successful for a UNKNOWN PROXY header.
        s$   PROXY UNKNOWN anything could go hereN)r   r   r   assertIsNoner!   r$   r(   s     r   test_fullParsingSuccess_UNKNOWNz-V1ParserTests.test_fullParsingSuccess_UNKNOWNY   sE     !!''3
 	$++&$**+r   c                 z   t        j                         }|j                  d      \  }}| j                  |       | j                  |       |j                  d      \  }}| j                  |       | j                  |       |j                  d      \  }}| j                  |       |J |J | j	                  |j
                  t        j                         t        |j
                  t        j                        sJ t        |j                  t        j                        sJ | j                  |j
                  j                  d       | j                  |j
                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       y)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   parserr)   	remainings       r   test_feedParsingzV1ParserTests.test_feedParsingc   sc    ##% ++&HIi# ++l3i# ++g.i#$$$dkk7+>+>?$++w':':;;;$**G,?,?@@@));7))40))..<))..5r   c                 F   t        j                         }|j                  d      \  }}| j                  |       | j                  |       |j                  d      \  }}| j                  |       | j                  |       | j	                  t
        |j                  d       y)zN
        Test that parsing fails if no newline is found in 108 bytes.
        r2   r3   sd                                                                                                       N)r   r   r4   r5   r   r   r6   s       r   test_feedParsingTooLongz%V1ParserTests.test_feedParsingTooLongz   s     ##% ++&HIi# ++l3i#KK	
r   c                     t        j                         }|j                  d      \  }}| j                  |       | j	                  |d       | j                  |j                         y)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   r4   
assertTruer%   r5   bufferr6   s       r   test_feedParsingOverflowz&V1ParserTests.test_feedParsingOverflow   sX     ##% ++M
i 	$9:'r   )returnN)__name__
__module____qualname____doc__r   r   r   r   r*   r-   r0   r9   r;   r?    r   r   r   r      s9    



66,6.
"
(r   r   N)rD   twisted.internetr   twisted.trialr    r   _exceptionsr   r   r	   TestCaser   rE   r   r   <module>rK      s/    % "  X XG(H%% G(r   