
    [4%eA                     `   d dl mZ d dl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      ;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_stream2   s2    F###
vr(   c                     t                                                       | j        D ]}|                                 d S r*   )r   stopr   closer#   r-   r&   s     r'   r1   zTestTCPServer.stop6   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                     |t           j        k    r#dt          j        v r|                     d           t          |          | _        | j        j        S )NTRAVISz6dual-stack servers often have port conflicts on travis)socket	AF_UNSPECosenvironskipTestr   r=   r"   )r#   r$   s     r'   start_serverzTCPClientTest.start_serverB   sI    V%%%(bj*@*@MMRSSS#F++{r(   c                 X    | j         "| j                                          d | _         d S d S r*   )r=   r1   r#   s    r'   stop_serverzTCPClientTest.stop_serverH   s1    ;"KDKKK #"r(   c                     | j                                          |                                  t                                                       d S r*   )r>   r2   rJ   r   tearDownr?   s    r'   rL   zTCPClientTest.tearDownM   sE    r(   c                     | j                             d           }t          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>U   s    1C1CKQS1T1T r(   c              3   &   K   | ]}|d          V  dS )r   NrQ   ).0addrs     r'   	<genexpr>z2TCPClientTest.skipIfLocalhostV4.<locals>.<genexpr>V   s&      444tAw444444r(   z"localhost does not resolve to ipv6)io_looprun_syncsetrB   AF_INET6rF   )r#   addrinfofamiliess      r'   skipIfLocalhostV4zTCPClientTest.skipIfLocalhostV4R   sg     <(()T)TUU44844444?(**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   )
rG   r>   connectr=   r   getr   write
read_bytesassertEqual)	r#   r$   hostr_   r`   r"   r-   server_streamdatas	            r'   do_test_connectzTCPClientTest.do_test_connectZ   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rk   rB   AF_INETrI   s    r'   test_connect_ipv4_ipv4z$TCPClientTest.test_connect_ipv4_ipv4k        V^[99999r(   c                 F    |                      t          j        d           d S Nr   ro   rI   s    r'   test_connect_ipv4_dualz$TCPClientTest.test_connect_ipv4_dualn   rr   r(   c                 n    |                                   |                     t          j        d           d S Nz::1)r]   rk   rB   rZ   rI   s    r'   test_connect_ipv6_ipv6z$TCPClientTest.test_connect_ipv6_ipv6q   s2       V_e44444r(   c                     |                                   t          j                    j                            d          r|                     d           |                     t          j        d           d S )NTwistedResolverz3TwistedResolver does not support multiple addressesr   )	r]   r   configured_classr4   endswithrF   rk   rB   rZ   rI   s    r'   test_connect_ipv6_dualz$TCPClientTest.test_connect_ipv6_dualv   si       $&&/889JKK 	QMMOPPPV_k:::::r(   c                 F    |                      t          j        d           d S rm   rk   rB   rC   rI   s    r'   test_connect_unspec_ipv4z&TCPClientTest.test_connect_unspec_ipv4}   !    V-{;;;;;r(   c                 n    |                                   |                     t          j        d           d S rw   )r]   rk   rB   rC   rI   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 rt   r   rI   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 rm   )r   
addCleanupassertRaisesIOErrorr>   rc   )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'.rn   z8.8.8.8r_   N)r   rB   errorrk   rp   rI   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'.rn   r   Nro   rI   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 rootrn   r   )r`   N)getpassgetuserrF   r   rB   r   rk   rp   rI   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'   rP   zCTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s    xxr(   N)r4   r5   r6   rP   rQ   r(   r'   TimeoutResolverr      s#                 r(   r   )resolverz1.2.3.4i90  )timeout)r   r   r   r	   rc   )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<   rG   rJ   rL   r]   r   rk   rq   ru   r   rx   r}   r   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AF1rg   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   AF2rg   r   s      r'   
test_mixedzTestConnectorSplit.test_mixed   s    '-3Z#sc3Z#s<
 
 	C:Sz":;;;c3Z#s$<=====r(   N)r4   r5   r6   r   r   rQ   r(   r'   r   r      s2        ( ( (> > > > >r(   r   c                        e Zd Z G d de          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closedrI   s    r'   r   z!ConnectorTest.FakeStream.__init__   s    DKKKr(   c                     d| _         d S )NTr   rI   s    r'   r2   zConnectorTest.FakeStream.close   s    DKKKr(   N)r4   r5   r6   r   r2   rQ   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   r[   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   rL   r3   s     r'   rL   zConnectorTest.tearDown   sW     l))++ 	, 	,FV]++++r(   c                     t                                           }|| j        |<   t                      }|| j        ||f<   ||fS r*   )r   r   r   r   r   )r#   ra   rU   r-   futures        r'   create_streamzConnectorTest.create_stream   sC    ))++#T+1b$Z(v~r(   c                     |                      t          | j                                                  t          |                     d S r*   )rg   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   rW   add_callbackr1   wait)r#   ra   rU   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   startrW   time)r#   r[   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   r[   rg   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   rg   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   rg   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   r[   r   r   r   r   rg   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   r[   r   r   r   r   r   rg   r   r   r   s      r'   test_two_families_timeoutz'ConnectorTest.test_two_families_timeout1  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   r[   r   r   r   r   r   rg   r   r   r   r   r   r   s      r'   test_success_after_timeoutz(ConnectorTest.test_success_after_timeout<  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   r[   r   r   r   r   r   r   doner   r   r   r   s      r'   test_all_failzConnectorTest.test_all_failG  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   rg   lenr   r   r   r   r   s      r'   -test_one_family_timeout_after_connect_timeoutz;ConnectorTest.test_one_family_timeout_after_connect_timeoutW  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                 R   |                      t          dft          dfg          \  }}|                     t          df           |                     t          dd           |                                 |                                  |                     | j        d         j        d           |                     t          |j                  d           | 	                    |           |                     |
                                t          d| j        d         f           d S )Nr   r   TFr   )r   r   r   r   r   rg   r   r   r   r   r   r   s      r'   .test_one_family_success_before_connect_timeoutz<ConnectorTest.test_one_family_success_before_connect_timeoutg  s    ))C:Sz*BCCfS#J'''S#t,,,!!!c*15999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   rg   r   r   r   r   r   r   s      r'   0test_one_family_second_try_after_connect_timeoutz>ConnectorTest.test_one_family_second_try_after_connect_timeoutt  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   rg   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   r[   r   r   r   r   r   r   r   r   r   r   rg   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   r[   r   r   r   r   r   r   r   r   r   r   rg   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   r[   r   r   r   r   r   r   r   r   r   rg   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   objectr   r<   rL   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           V   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   rD   rB   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   rQ   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   &{ { { { {M { { {|> > > > >* > > >n7 n7 n7 n7 n7M n7 n7 n7 n7 n7r(   