
    Vh6                         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y)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y)StaticProtocolz6
    Protocol stand-in that maintains test state.
    returnNc                 <    d | _         d | _        d| _        d| _        y )N    F)sourcedestinationdatadisconnected)selfs    [/home/dcms/DCMS/lib/python3.12/site-packages/twisted/protocols/haproxy/test/test_wrapper.py__init__zStaticProtocol.__init__   s     267;	!r   r   c                     | j                   sJ | j                   j                         | _        | j                   j                         | _        | xj
                  |z  c_        y )N)	transportgetPeerr   getHostr   r   )r   r   s     r   dataReceivedzStaticProtocol.dataReceived   sE    ~~~nn,,.>>113		T	r   r   N)__name__
__module____qualname____doc__r   bytesr    r   r   r   r      s    " 4 r   r   c                   P    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y)HAProxyWrappingFactoryV1Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
    headers.
    Nc                 0   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }||_        |j                  |       |j                  d       | j                  |j                         y)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M%%{D9
 56	"	Y'?@,,-r   c                 R   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }||_        |j                  |       |j                  d       |j                  d       | j                  |j                         y)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M%%{D9
 56	"	Y'45./,,-r   c                    t        t        j                  t                    }|j	                  t        j                  ddd            }t        t        j                  j                  t        j                  j                        }|j                  |       | j                  |j                         t        j                  j                         | j                  |j                         t        j                  j                         y)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M%%{D9
 52222
	 	Y'$--*D*DE$--*D*DEr   c                 ,   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  d       | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                  j                  j                         j                  d       | j                  |j                  j                  j                         j                  d       | j                  |j!                         j                  d       | j                  |j!                         j                  d       | j                  |j                  j                  j!                         j                  d       | j                  |j                  j                  j!                         j                  d       y)	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M%%{D9
 56	Y'FG--y9--t4!!++335::	
 	!!++335::	
 	--y9--t4!!++335::	
 	!!++335::	
r   c                 ,   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  d       | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                  j                  j                         j                  d       | j                  |j                  j                  j                         j                  d       | j                  |j!                         j                  d       | j                  |j!                         j                  d       | j                  |j                  j                  j!                         j                  d       | j                  |j                  j                  j!                         j                  d       y)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M%%ud3
 56	Y'>?--u5--t4!!++335::	
 	!!++335::	
 	--u5--t4!!++335::	
 	!!++335::	
r   c                 8   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  d       | j                  |j                  j                  d       y)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M%%ud3
 56	Y'LM..335FGr   c                 Z   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  d       |j                  d       | j                  |j                  j                  d       y)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M%%ud3
 56	Y'129:..335FGr   c                 |   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  d       |j                  d       |j                  d       | j                  |j                  j                  d       y)	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M%%ud3
 56	Y'129:;'..335NOr   r   )r   r   r    r!   r6   r8   rA   rH   rM   rR   rW   rY   r#   r   r   r%   r%   #   s5    
..F"
@
@HH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y)HAProxyWrappingFactoryV2Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v2 PROXY
    headers.
    s   

 
QUIT
!     "s4   

 
QUIT
!! $                              "sl   /home/tests/mysockets/sock                                                                                  s   

 
QUIT
!1 Nc                 P   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }||_        |j                  |       |j                  d| j                  dd z          | j                  |j                         y)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M%%ud3
 56	"	Y'7T__QR%889,,-r   c                 @   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  | j                         | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                  j                   j                         j                  d       | j                  |j                  j                   j                         j                  d       | j                  |j#                         j                  d       | j                  |j#                         j                  d       | j                  |j                  j                   j#                         j                  d       | j                  |j                  j                   j#                         j                  d       y)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M%%{D9
 56	Y'4??+--{;--t4!!++335::	
 	!!++335::	
 	--{;--t4!!++335::	
 	!!++335::	
r   c                 @   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  | j                         | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                  j                   j                         j                  d       | j                  |j                  j                   j                         j                  d       | j                  |j#                         j                  d       | j                  |j#                         j                  d       | j                  |j                  j                   j#                         j                  d       | j                  |j                  j                   j#                         j                  d       y)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M%%ud3
 56	Y'4??+--/@A--t4!!++335::	
 	!!++335::	
 	--/@A--t4!!++335::	
 	!!++335::	
r   c                    t        t        j                  t                    }|j	                  t        j                  d            }t               }|j                  |       |j                  | j                         | j                  |j                         j                  d       | j                  |j                  j                  j                         j                  d       | j                  |j!                         j                  d       | j                  |j                  j                  j!                         j                  d       y)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M%% AB
 56	Y'4??+--/LM!!++335::)	
 	--/LM!!++335::)	
r   c                 R   t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  | j                  dz          | j                  |j                  j                  d       y)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M%%ud3
 56	Y'4??->>?..335FGr   c                    t        t        j                  t                    }|j	                  t        j                  ddd            }t               }|j                  |       |j                  | j                  dd        |j                  | j                  dd dz          | j                  |j                  j                  d       y)rT   r(   rK   r*   N   rP   ri   r3   s       r   rW   zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunksk  s     ))<)<^)LM%%ud3
 56	Y'4??3B/04??23/2CCD..335FGr   r   )r   r   r    r!   r_   rb   
_SOCK_PATHre   r6   rH   rM   rg   rR   rW   r#   r   r   r[   r[      sf    
	  	 "	E  	 	  .
@
@
,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      sZ      $ 7 E " -X $\PH$5$5 \P~uHH$5$5 uHr   