
    Mh@                     X   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlZej        rd dlmZ d dlmZmZm Z  d\  Z!Z" G d de          Z# G d de          Z$ G d dej%                  Z& G d de          Z'dS )    )closingNFuture)bind_socketsResolver)Queue)	TCPClient
_Connector)	TCPServer)AsyncTestCasegen_test)skipIfNoIPv6refusing_portskipIfNonUnix)TimeoutError)IOStream)ListDictTuple)      c                   .     e Zd Z fdZd Z fdZ xZS )TestTCPServerc                    t                                                       g | _        t                      | _        t          dd|          }|                     |           |d                                         d         | _        d S )Nr   	localhostr   )	super__init__streamsr   queuer   add_socketsgetsocknameport)selffamilysockets	__class__s      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/tcpclient_test.pyr   zTestTCPServer.__init__)   sp    WW
q+v66!!!AJ**,,Q/			    c                 n    | j                             |           | j                            |           d S N)r   appendr   put)r#   streamaddresss      r'   handle_streamzTestTCPServer.handle_stream1   s2    F###
vr(   c                     t                                                       | j        D ]}|                                 d S r*   )r   stopr   closer#   r-   r&   s     r'   r1   zTestTCPServer.stop5   s>    l 	 	FLLNNNN	 	r(   )__name__
__module____qualname__r   r/   r1   __classcell__r&   s   @r'   r   r   (   s`        0 0 0 0 0          r(   r   c                        e Zd Z fdZd Zd Z fdZd Zedd            Z	d Z
d	 Zed
             Zed             Zd Zed             Zd Zed             Zd Zd Zed             Zed             Z xZS )TCPClientTestc                 |    t                                                       d | _        t                      | _        d S r*   )r   setUpserverr	   clientr#   r&   s    r'   r<   zTCPClientTest.setUp<   s*    kkr(   c                 B    t          |          | _        | j        j        S r*   )r   r=   r"   )r#   r$   s     r'   start_serverzTCPClientTest.start_serverA   s    #F++{r(   c                 X    | j         "| j                                          d | _         d S d S r*   )r=   r1   r#   s    r'   stop_serverzTCPClientTest.stop_serverE   s1    ;"KDKKK #"r(   c                     | j                                          |                                  t                                                       d S r*   )r>   r2   rD   r   tearDownr?   s    r'   rF   zTCPClientTest.tearDownJ   sE    r(   c                     | j                             d           }d |D             }t          j        |vr|                     d           d S d S )Nc                  F    t                                          dd          S )Nr   P   )r   resolve r(   r'   <lambda>z1TCPClientTest.skipIfLocalhostV4.<locals>.<lambda>R   s    1C1CKQS1T1T r(   c                     h | ]
}|d          S )r   rK   ).0addrs     r'   	<setcomp>z2TCPClientTest.skipIfLocalhostV4.<locals>.<setcomp>S   s    111DG111r(   z"localhost does not resolve to ipv6)io_looprun_syncsocketAF_INET6skipTest)r#   addrinfofamiliess      r'   skipIfLocalhostV4zTCPClientTest.skipIfLocalhostV4O   s^     <(()T)TUU11111?(**MM>????? +*r(   Nc              #     K   |                      |          }| j                            |||||          V }| j        J | j        j                                        V }t          |          5  |                    d           |                    d          V }| 	                    |d           d d d            d S # 1 swxY w Y   d S )N)	source_ipsource_portafs   hello   )
rA   r>   connectr=   r   getr   write
read_bytesassertEqual)	r#   r$   hostrZ   r[   r"   r-   server_streamdatas	            r'   do_test_connectzTCPClientTest.do_test_connectW   s+       (({**# + 
 
 
 
 {&&&"k/335555V__ 	- 	-LL"""&11!4444DT8,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   1ACCCc                 F    |                      t          j        d           d S N	127.0.0.1rf   rS   AF_INETrC   s    r'   test_connect_ipv4_ipv4z$TCPClientTest.test_connect_ipv4_ipv4h        V^[99999r(   c                 F    |                      t          j        d           d S Nr   rj   rC   s    r'   test_connect_ipv4_dualz$TCPClientTest.test_connect_ipv4_dualk   rm   r(   c                 n    |                                   |                     t          j        d           d S Nz::1rX   rf   rS   rT   rC   s    r'   test_connect_ipv6_ipv6z$TCPClientTest.test_connect_ipv6_ipv6n   s2       V_e44444r(   c                 n    |                                   |                     t          j        d           d S ro   rs   rC   s    r'   test_connect_ipv6_dualz$TCPClientTest.test_connect_ipv6_duals   s2       V_k:::::r(   c                 F    |                      t          j        d           d S rh   rf   rS   	AF_UNSPECrC   s    r'   test_connect_unspec_ipv4z&TCPClientTest.test_connect_unspec_ipv4x   !    V-{;;;;;r(   c                 n    |                                   |                     t          j        d           d S rr   )rX   rf   rS   ry   rC   s    r'   test_connect_unspec_ipv6z&TCPClientTest.test_connect_unspec_ipv6{   s3       V-u55555r(   c                 F    |                      t          j        d           d S ro   rx   rC   s    r'   test_connect_unspec_dualz&TCPClientTest.test_connect_unspec_dual   r{   r(   c              #      K   t                      \  }}|                     |           |                     t                    5  | j                            d|          V  d d d            d S # 1 swxY w Y   d S rh   )r   
addCleanupassertRaisesIOErrorr>   r^   )r#   cleanup_funcr"   s      r'   test_refused_ipv4zTCPClientTest.test_refused_ipv4   s      *__d%%%w'' 	9 	9+%%k488888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   A..A25A2c                 l    |                      t          j        | j        t          j        dd           dS )z8Fail when trying to use the source IP Address '8.8.8.8'.ri   z8.8.8.8rZ   N)r   rS   errorrf   rk   rC   s    r'   test_source_ip_failz!TCPClientTest.test_source_ip_fail   s?    L N 	 	
 	
 	
 	
 	
r(   c                 J    |                      t          j        dd           dS )z=Success when trying to use the source IP Address '127.0.0.1'.ri   r   Nrj   rC   s    r'   test_source_ip_successz$TCPClientTest.test_source_ip_success   s%    V^[KPPPPPr(   c                     t          j                    dk    r|                     d           |                     t          j        | j        t          j        dd           dS )z&Fail when trying to use source port 1.rootzrunning as rootri   r   )r[   N)getpassgetuserrU   r   rS   r   rf   rk   rC   s    r'   test_source_port_failz#TCPClientTest.test_source_port_fail   si     ?&& MM+,,,L N 	 	
 	
 	
 	
 	
r(   c              #      K   d} G d dt                     }|                     t                    5  t           |                                          dd|          V  d d d            d S # 1 swxY w Y   d S )Ng?c                       e Zd Zd ZdS );TCPClientTest.test_connect_timeout.<locals>.TimeoutResolverc                     t                      S r*   r   )r#   argskwargss      r'   rJ   zCTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s    xxr(   N)r4   r5   r6   rJ   rK   r(   r'   TimeoutResolverr      s#                 r(   r   )resolverz1.2.3.4i90  )timeout)r   r   r   r	   r^   )r#   r   r   s      r'   test_connect_timeoutz"TCPClientTest.test_connect_timeout   s      	  	  	  	  	 h 	  	  	  |,, 	 	__%6%6777??5' @     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   1A00A47A4)NN)r4   r5   r6   r<   rA   rD   rF   rX   r   rf   rl   rp   r   rt   rv   rz   r}   r   r   r   r   r   r   r   r7   r8   s   @r'   r:   r:   ;   s       " " " " "
       
    
@ @ @ - - - X- : : :: : : 5 5 \5 ; ; \;< < < 6 6 \6< < < 9 9 X9
 
 
Q Q Q 
 
 ]
 
 
 X
 
 
 
 
r(   r:   c                       e Zd Zd Zd ZdS )TestConnectorSplitc                     t          j        t          dft          dfg          \  }}|                     |t          dft          dfg           |                     |g            d S )Nab)r
   splitAF1rb   r#   primary	secondarys      r'   test_one_familyz"TestConnectorSplit.test_one_family   sc    '-SzC:.FGGC:Sz":;;;B'''''r(   c                    t          j        t          dft          dft          dft          dfg          \  }}|                     |t          dft          dfg           |                     |t          dft          dfg           d S Nr   r   cd)r
   r   r   AF2rb   r   s      r'   
test_mixedzTestConnectorSplit.test_mixed   s    '-3Z#sc3Z#s<
 
 	C:Sz":;;;c3Z#s$<=====r(   N)r4   r5   r6   r   r   rK   r(   r'   r   r      s2        ( ( (> > > > >r(   r   c                        e Zd Z G d d          Z fdZ fdZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )ConnectorTestc                       e Zd Zd Zd ZdS )ConnectorTest.FakeStreamc                     d| _         d S )NFclosedrC   s    r'   r   z!ConnectorTest.FakeStream.__init__   s    DKKKr(   c                     d| _         d S )NTr   rC   s    r'   r2   zConnectorTest.FakeStream.close   s    DKKKr(   N)r4   r5   r6   r   r2   rK   r(   r'   
FakeStreamr      s2        	  	  	 	 	 	 	 	r(   r   c                     t                                                       i | _        i | _        t          dft          dft
          dft
          dfg| _        d S r   )r   r<   connect_futuresr   r   r   rV   r?   s    r'   r<   zConnectorTest.setUp   sL     	 sc3Z#sc3ZHr(   c                     | j                                         D ]}|                     |j                   t	                                                       d S r*   )r   valuesassertFalser   r   rF   r3   s     r'   rF   zConnectorTest.tearDown   sW     l))++ 	, 	,FV]++++r(   c                     t                                           }|| j        |<   t                      }|| j        ||f<   ||fS r*   )r   r   r   r   r   )r#   r\   rO   r-   futures        r'   create_streamzConnectorTest.create_stream   sC    ))++#T+1b$Z(v~r(   c                     |                      t          | j                                                  t          |                     d S r*   )rb   sortedr   keys)r#   r   s     r'   assert_pendingzConnectorTest.assert_pending   s;     4 9 9 ; ;<<fTllKKKKKr(   c                 `   | j                             ||f          }|r!|                    | j        |                    n;| j                            |           |                    t                                 | j                            | j                   | 	                                 d S r*   )
r   pop
set_resultr   set_exceptionr   rQ   add_callbackr1   wait)r#   r\   rO   successr   s        r'   resolve_connectzConnectorTest.resolve_connect   s    %))2t*55 	,dl401111LT"""  +++!!$),,,		r(   c                 N    |j         D ]}|                     |j                   d S r*   )r   
assertTruer   )r#   connr-   s      r'   assert_connector_streams_closedz-ConnectorTest.assert_connector_streams_closed   s4    l 	+ 	+FOOFM****	+ 	+r(   c                     t          || j                  }|                    d| j                                        dz             }||fS )Ni  )connect_timeout)r
   r   startrQ   time)r#   rV   r   r   s       r'   start_connectzConnectorTest.start_connect   sF    (D$677D$,2C2C2E2E2LMMV|r(   c                 r   |                      | j                  \  }}|                     t          | j                                                  t          dfg           |                     t          dd           |                     |                                t          d| j	        d         f           d S )Nr   T)
r   rV   rb   listr   r   r   r   resultr   r#   r   r   s      r'   test_immediate_successz$ConnectorTest.test_immediate_success   s    ))$-88fd27799::c3ZLIIIS#t,,,3T\#5F*GHHHHHr(   c                     |                      t          dfg          \  }}|                     t          df           |                     t          dd           |                     t
          |j                   d S )Nr   Fr   r   r   r   r   r   r   r   s      r'   test_immediate_failurez$ConnectorTest.test_immediate_failure   sm    ))C:,77fS#J'''S#u---'6=11111r(   c                    |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                     t          df           |                     t          dd           |                     |                                t          d| j        d         f           d S Nr   r   FT)r   r   r   r   rb   r   r   r   s      r'   test_one_family_second_tryz(ConnectorTest.test_one_family_second_try  s    ))C:Sz*BCCfS#J'''S#u---S#J'''S#t,,,3T\#5F*GHHHHHr(   c                 v   |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                     t          df           |                     t          dd           |                     t
          |j                   d S )Nr   r   Fr   r   s      r'   "test_one_family_second_try_failurez0ConnectorTest.test_one_family_second_try_failure  s    ))C:Sz*BCCfS#J'''S#u---S#J'''S#u---'6=11111r(   c                    |                      t          dft          dfg          \  }}|                     t          df           |                                 |                     t          df           |                     t          dd           |                     t          df           |                     t          dd           |                     |                                t          d| j        d         f           d S r   )r   r   r   
on_timeoutr   rb   r   r   r   s      r'   "test_one_family_second_try_timeoutz0ConnectorTest.test_one_family_second_try_timeout  s    ))C:Sz*BCCfS#J''' 	S#J'''S#u---S#J'''S#t,,,3T\#5F*GHHHHHr(   c                    |                      | j                  \  }}|                     t          df           |                     t          dd           |                     t          dft
          df           |                     t          dd           |                     t
          dd           |                     |                                t
          d| j        d         f           d S )Nr   Fr   r   T)	r   rV   r   r   r   r   rb   r   r   r   s      r'   #test_two_families_immediate_failurez1ConnectorTest.test_two_families_immediate_failure#  s    ))$-88fS#J'''S#u---S#Jc
333S#u---S#t,,,3T\#5F*GHHHHHr(   c                    |                      | j                  \  }}|                     t          df           |                                 |                     t          dft
          df           |                     t
          dd           |                     |                                t
          d| j	        d         f           |                     t          dd           |                                  d S )Nr   r   TF)
r   rV   r   r   r   r   r   rb   r   r   r   s      r'   test_two_families_timeoutz'ConnectorTest.test_two_families_timeout,  s    ))$-88fS#J'''S#Jc
333S#t,,,3T\#5F*GHHHS#u---r(   c                 2   |                      | j                  \  }}|                     t          df           |                                 |                     t          dft
          df           |                     t          dd           |                     |                                t          d| j	        d         f           |                     t
          dd           | 
                    | j	                            d          j                   d S )Nr   r   T)r   rV   r   r   r   r   r   rb   r   r   r   r   r   r   s      r'   test_success_after_timeoutz(ConnectorTest.test_success_after_timeout7  s    ))$-88fS#J'''S#Jc
333S#t,,,3T\#5F*GHHHS#t,,,((--455555r(   c                    |                      | j                  \  }}|                     t          df           |                                 |                     t          dft
          df           |                     t
          dd           |                     t          dft
          df           |                     t
          dd           |                     t          df           |                     t          dd           |                     t          df           |                     |                                           |                     t          dd           | 	                    t          |j                   d S )Nr   r   Fr   r   )r   rV   r   r   r   r   r   r   doner   r   r   r   s      r'   test_all_failzConnectorTest.test_all_failB  sI   ))$-88fS#J'''S#Jc
333S#u---S#Jc
333S#u---S#J'''S#u---S#J''''''S#u---'6=11111r(   c                 f   |                      t          dft          dfg          \  }}|                     t          df           |                                 | j                            t          df           |                     | j                            d          j                   |	                                 |                                  | 
                    t          |j                  d           |                     |           |                     t          |j                   d S )Nr   r   r   )r   r   r   on_connect_timeoutr   r   r   r   r   r   rb   lenr   r   r   r   r   s      r'   -test_one_family_timeout_after_connect_timeoutz;ConnectorTest.test_one_family_timeout_after_connect_timeoutR  s   ))C:Sz*BCCfS#J'''!!! 	  #s,,,((--4555 	T\**A...,,T222,66666r(   c                 P   |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                                 |                                  |                     | j        d         j                   |                     t          |j                  d           | 
                    |           |                     |                                t          d| j        d         f           d S )Nr   r   Tr   )r   r   r   r   r   r   r   r   rb   r   r   r   r   s      r'   .test_one_family_success_before_connect_timeoutz<ConnectorTest.test_one_family_success_before_connect_timeoutb  s    ))C:Sz*BCCfS#J'''S#t,,,!!!c*1222T\**A...,,T2223T\#5F*GHHHHHr(   c                    |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                     t          df           |                                 | j                            t          df           |                     | j                            d          j	                   |                                  | 
                    t          |j                  d           |                     |           |                     t          |j                   d S Nr   r   Fr   )r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   s      r'   0test_one_family_second_try_after_connect_timeoutz>ConnectorTest.test_one_family_second_try_after_connect_timeouto  s$   ))C:Sz*BCCfS#J'''S#u---S#J'''!!!  #s,,,((--4555T\**A...,,T222,66666r(   c                 @   |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                     t          df           |                     t          dd           |                                 |                                  |                     t          |j                  d           |                     |           | 	                    t          |j                   d S r   )r   r   r   r   r   rb   r   r   r   r   r   r   r   s      r'   9test_one_family_second_try_failure_before_connect_timeoutzGConnectorTest.test_one_family_second_try_failure_before_connect_timeout|  s    ))C:Sz*BCCfS#J'''S#u---S#J'''S#u---!!!T\**A...,,T222'6=11111r(   c                 >   |                      | j                  \  }}|                     t          df           |                                 |                     t          dft
          df           |                                 | j                            t          df           | 	                    | j
                            d          j                   | j                            t
          df           | 	                    | j
                            d          j                   |                                  |                     t          |j
                  d           |                     |           |                     t           |j                   d S )Nr   r   r   )r   rV   r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   s      r'   .test_two_family_timeout_before_connect_timeoutz<ConnectorTest.test_two_family_timeout_before_connect_timeout  sW   ))$-88fS#J'''S#Jc
333!!!  #s,,,((--4555  #s,,,((--4555T\**A...,,T222,66666r(   c                    |                      | j                  \  }}|                     t          df           |                                 |                     t          dft
          df           |                     t          dd           | j                            t
          df           | 	                    | j
                            d          j                   |                                  |                     t          |j
                  d           |                     |           |                     |                                t          d| j
        d         f           d S )Nr   r   Tr   )r   rV   r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   s      r'   %test_two_family_success_after_timeoutz3ConnectorTest.test_two_family_success_after_timeout  s1   ))$-88fS#J'''S#Jc
333S#t,,,  #s,,,((--4555T\**A...,,T2223T\#5F*GHHHHHr(   c                 x   |                      | j                  \  }}|                     t          df           |                                 | j                            t          df           |                     | j                            d          j	                   |                                  |
                                 |                                  |                     t          |j                  d           |                     |           |                     t          |j                   d S )Nr   r   )r   rV   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   s      r'   -test_two_family_timeout_after_connect_timeoutz;ConnectorTest.test_two_family_timeout_after_connect_timeout  s   ))$-88fS#J'''!!!  #s,,,((--4555 	T\**A...,,T222,66666r(   )r4   r5   r6   r   r<   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   s   @r'   r   r      s              I I I I I      L L L	 	 	+ + +  I I I2 2 2I I I2 2 2
I 
I 
II I I	 	 		6 	6 	62 2 2 7 7 7 I I I7 7 7
2 
2 
27 7 7I I I7 7 7 7 7 7 7r(   r   )(
contextlibr   r   rS   unittesttornado.concurrentr   tornado.netutilr   r   tornado.queuesr   tornado.tcpclientr	   r
   tornado.tcpserverr   tornado.testingr   r   tornado.test.utilr   r   r   tornado.genr   typingTYPE_CHECKINGtornado.iostreamr   r   r   r   r   r   r   r:   TestCaser   r   rK   r(   r'   <module>r
     s            % % % % % % 2 2 2 2 2 2 2 2             3 3 3 3 3 3 3 3 ' ' ' ' ' ' 3 3 3 3 3 3 3 3 H H H H H H H H H H $ $ $ $ $ $ 	 )))))))(((((((((( S    I   &w w w w wM w w wt> > > > >* > > >n7 n7 n7 n7 n7M n7 n7 n7 n7 n7r(   