
    tf6                         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e	          Z G d dej                  Z G d dej                  ZdS )z>
Test cases for L{twisted.protocols.haproxy.HAProxyProtocol}.
    )Optional)mock)address)FactoryProtocol) StringTransportWithDisconnection)unittest   )HAProxyWrappingFactoryc                   *    e Zd ZdZddZdeddfdZdS )StaticProtocolz6
    Protocol stand-in that maintains test state.
    returnNc                 >    d | _         d | _        d| _        d| _        d S )N    F)sourcedestinationdatadisconnected)selfs    j/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/haproxy/test/test_wrapper.py__init__zStaticProtocol.__init__   s&    267;	!r   r   c                     | j         sJ | j                                         | _        | j                                         | _        | xj        |z  c_        d S )N)	transportgetPeerr   getHostr   r   )r   r   s     r   dataReceivedzStaticProtocol.dataReceived   sO    ~n,,..>1133		T				r   r   N)__name__
__module____qualname____doc__r   bytesr    r   r   r   r      sT         " " " " 4      r   r   c                   R    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S )HAProxyWrappingFactoryV1Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
    headers.
    r   Nc                 V   t          t          j        t                              }|                    t          j        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   s       r   test_invalidHeaderDisconnectsz;HAProxyWrappingFactoryV1Tests.test_invalidHeaderDisconnects)   s     ))<^)L)LMM%%{D99
 
 566	"	Y'''?@@@,-----r   c                    t          t          j        t                              }|                    t          j        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+   r3   s       r   $test_invalidPartialHeaderDisconnectszBHAProxyWrappingFactoryV1Tests.test_invalidPartialHeaderDisconnects7   s     ))<^)L)LMM%%{D99
 
 566	"	Y'''4555.///,-----r   c                    t          t          j        t                              }|                    t          j        ddd                    }t          t          j	        j
        t          j	        j                  }|                    |           |                     |                                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_addressr0   assertEqualr   r   r3   s       r    test_preDataReceived_getPeerHostz>HAProxyWrappingFactoryV1Tests.test_preDataReceived_getPeerHostF   s    
 ))<^)L)LMM%%{D99
 
 522
 
 
	 	Y'''$-*DEEE$-*DEEEEEr   c                 4   t          t          j        t                              }|                    t          j        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(   r:   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   r0   r   r@   r   hostportwrappedProtocolr   r   r3   s       r   (test_validIPv4HeaderResolves_getPeerHostzFHAProxyWrappingFactoryV1Tests.test_validIPv4HeaderResolves_getPeerHostW   s    ))<^)L)LMM%%{D99
 
 566	Y'''FGGG-y999-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	-y999-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	
 	
r   c                 4   t          t          j        t                              }|                    t          j        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::2rD   N)r   r   r,   r   r-   r   IPv6Addressr   r0   r   r@   r   rE   rF   rG   r   r   r3   s       r   (test_validIPv6HeaderResolves_getPeerHostzFHAProxyWrappingFactoryV1Tests.test_validIPv6HeaderResolves_getPeerHostw   s    ))<^)L)LMM%%ud33
 
 566	Y'''>???-u555-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	-u555-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	
 	
r   c                 T   t          t          j        t                              }|                    t          j        ddd                    }t                      }|                    |           |	                    d           | 
                    |j        j        d           dS )N
        Test if non-header bytes are passed to the wrapped protocol.
        r(   rK   r*   s,   PROXY TCP6 ::1 ::2 8080 8888
HTTP/1.1 / GET   HTTP/1.1 / GETNr   r   r,   r   r-   r   rL   r   r0   r   r@   rG   r   r3   s       r   'test_overflowBytesSentToWrappedProtocolzEHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocol   s     ))<^)L)LMM%%ud33
 
 566	Y'''LMMM.35FGGGGGr   c                 ~   t          t          j        t                              }|                    t          j        ddd                    }t                      }|                    |           |	                    d           |	                    d           | 
                    |j        j        d           dS )K
        Test if header streaming passes extra data appropriately.
        r(   rK   r*      PROXY TCP6 ::1 ::2    8080 8888
HTTP/1.1 / GETrP   NrQ   r3   s       r   -test_overflowBytesSentToWrappedProtocolChunkszKHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolChunks   s     ))<^)L)LMM%%ud33
 
 566	Y'''12229:::.35FGGGGGr   c                    t          t          j        t                              }|                    t          j        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(   rK   r*   rU   rV   s   

s   HTTP/1.1 / GET

NrQ   r3   s       r   ,test_overflowBytesSentToWrappedProtocolAfterzJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfter   s     ))<^)L)LMM%%ud33
 
 566	Y'''12229:::;'''.35NOOOOOr   r   )r   r   r    r!   r6   r8   rA   rH   rM   rR   rW   rY   r#   r   r   r%   r%   #   s         
. . . .. . . .F F F F"
 
 
 
@
 
 
 
@H H H HH H H HP P P P P Pr   r%   c                   ^    e Zd ZdZdZdZdZdez   ez   ZddZdd	Z	dd
Z
ddZddZ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                 v   t          t          j        t                              }|                    t          j        ddd                    }t                      }||_        |	                    |           |
                    d| j        dd         z              |                     |j                   dS )r'   r(   rK   r*          N)r   r   r,   r   r-   r   rL   r   r/   r0   r   
IPV4HEADERr1   r2   r3   s       r   r6   z;HAProxyWrappingFactoryV2Tests.test_invalidHeaderDisconnects   s     ))<^)L)LMM%%ud33
 
 566	"	Y'''7T_QRR%88999,-----r   c                 >   t          t          j        t                              }|                    t          j        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 )rC   r(   r:   r*   rD   N)r   r   r,   r   r-   r   r.   r   r0   r   r_   r@   r   rE   rF   rG   r   r   r3   s       r   rH   zFHAProxyWrappingFactoryV2Tests.test_validIPv4HeaderResolves_getPeerHost  s    ))<^)L)LMM%%{D99
 
 566	Y'''4?+++-{;;;-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	-{;;;-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	
 	
r   c                 >   t          t          j        t                              }|                    t          j        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 )rJ   r(   rK   r*   z0:0:0:0:0:0:0:1rD   N)r   r   r,   r   r-   r   r.   r   r0   r   
IPV6HEADERr@   r   rE   rF   rG   r   r   r3   s       r   rM   zFHAProxyWrappingFactoryV2Tests.test_validIPv6HeaderResolves_getPeerHost(  s    ))<^)L)LMM%%ud33
 
 566	Y'''4?+++-/@AAA-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	-/@AAA-t444!+3355:	
 	
 	
 	!+3355:	
 	
 	
 	
 	
r   c                    t          t          j        t                              }|                    t          j        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   r0   r   
UNIXHEADERr@   r   namerG   r   r   r3   s       r   (test_validUNIXHeaderResolves_getPeerHostzFHAProxyWrappingFactoryV2Tests.test_validUNIXHeaderResolves_getPeerHostH  s-    ))<^)L)LMM%% ABB
 
 566	Y'''4?+++-/LMMM!+3355:)	
 	
 	
 	-/LMMM!+3355:)	
 	
 	
 	
 	
r   c                 d   t          t          j        t                              }|                    t          j        ddd                    }t                      }|                    |           |	                    | j
        dz              |                     |j        j        d           dS )rO   r(   rK   r*   rP   Nr   r   r,   r   r-   r   rL   r   r0   r   rb   r@   rG   r   r3   s       r   rR   zEHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocol^  s     ))<^)L)LMM%%ud33
 
 566	Y'''4?->>???.35FGGGGGr   c                    t          t          j        t                              }|                    t          j        ddd                    }t                      }|                    |           |	                    | j
        dd                    |	                    | j
        dd         dz              |                     |j        j        d           dS )rT   r(   rK   r*   N   rP   ri   r3   s       r   rW   zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunksk  s     ))<^)L)LMM%%ud33
 
 566	Y'''4?3B3/0004?233/2CCDDD.35FGGGGGr   r   )r   r   r    r!   r_   rb   
_SOCK_PATHre   r6   rH   rM   rg   rR   rW   r#   r   r   r[   r[      s         
	  	 "	E  	 	  . . . .
 
 
 
@
 
 
 
@
 
 
 
,H H H HH H H H H Hr   r[   N)r!   typingr   r	   r   twisted.internetr   twisted.internet.protocolr   r   twisted.internet.testingr   twisted.trial_wrapperr   r   TestCaser%   r[   r#   r   r   <module>rt      sH                $ $ $ $ $ $ 7 7 7 7 7 7 7 7 E E E E E E " " " " " " - - - - - -    X   $\P \P \P \P \PH$5 \P \P \P~uH uH uH uH uHH$5 uH uH uH uH uHr   