
    gA                     Z   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j8                  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jL                        Z' G d de      Z(y)    )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|      }| j                  |       |d   j                         d   | _        y )Nr   	localhostr   )	super__init__streamsr   queuer   add_socketsgetsocknameport)selffamilysockets	__class__s      P/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/tcpclient_test.pyr   zTestTCPServer.__init__*   sS    W
q+v6!AJ**,Q/	    c                 p    | j                   j                  |       | j                  j                  |       y N)r   appendr   put)r#   streamaddresss      r'   handle_streamzTestTCPServer.handle_stream2   s$    F#

vr(   c                 d    t         |           | j                  D ]  }|j                           y r*   )r   stopr   closer#   r-   r&   s     r'   r1   zTestTCPServer.stop6   s#    llFLLN #r(   )__name__
__module____qualname__r   r/   r1   __classcell__r&   s   @r'   r   r   )   s    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                 N    t         |           d | _        t               | _        y r*   )r   setUpserverr	   clientr#   r&   s    r'   r<   zTCPClientTest.setUp=   s    kr(   c                     |t         j                  k(  r#dt        j                  v r| j	                  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   sD    V%%%(bjj*@MMRS#F+{{r(   c                 `    | j                   "| j                   j                          d | _         y y r*   )r=   r1   r#   s    r'   stop_serverzTCPClientTest.stop_serverH   s(    ;;"KKDK #r(   c                 v    | j                   j                          | j                          t        |           y r*   )r>   r2   rJ   r   tearDownr?   s    r'   rL   zTCPClientTest.tearDownM   s*    r(   c                     | j                   j                  d       }t        d |D              }t        j                  |vr| j                  d       y y )Nc                  6    t               j                  dd      S )Nr   P   )r   resolve r(   r'   <lambda>z1TCPClientTest.skipIfLocalhostV4.<locals>.<lambda>U   s    1C1CKQS1Tr(   c              3   &   K   | ]	  }|d      yw)r   NrQ   ).0addrs     r'   	<genexpr>z2TCPClientTest.skipIfLocalhostV4.<locals>.<genexpr>V   s     484tAw8s   z"localhost does not resolve to ipv6)io_looprun_syncsetrB   AF_INET6rF   )r#   addrinfofamiliess      r'   skipIfLocalhostV4zTCPClientTest.skipIfLocalhostV4R   sG     <<(()TU4844??(*MM>? +r(   c              #     K   | j                  |      }| j                  j                  |||||      }| j                  J | j                  j                  j                         }t        |      5  |j                  d       |j                  d      }| j                  |d       d d d        y # 1 sw Y   y xY ww)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       ({{**# + 
 
 {{&&&"kk//3355V_LL"&11!44DT8, __s   A3C57B5,	C5B>:Cc                 D    | j                  t        j                  d       y N	127.0.0.1rk   rB   AF_INETrI   s    r'   test_connect_ipv4_ipv4z$TCPClientTest.test_connect_ipv4_ipv4k       V^^[9r(   c                 D    | j                  t        j                  d       y Nr   ro   rI   s    r'   test_connect_ipv4_dualz$TCPClientTest.test_connect_ipv4_dualn   rr   r(   c                 d    | j                          | j                  t        j                  d       y Nz::1)r]   rk   rB   rZ   rI   s    r'   test_connect_ipv6_ipv6z$TCPClientTest.test_connect_ipv6_ipv6q   s"     V__e4r(   c                     | j                          t        j                         j                  j	                  d      r| j                  d       | j                  t        j                  d       y )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   sM     $$&//889JKMMOPV__k:r(   c                 D    | j                  t        j                  d       y rm   rk   rB   rC   rI   s    r'   test_connect_unspec_ipv4z&TCPClientTest.test_connect_unspec_ipv4}       V--{;r(   c                 d    | j                          | j                  t        j                  d       y rw   )r]   rk   rB   rC   rI   s    r'   test_connect_unspec_ipv6z&TCPClientTest.test_connect_unspec_ipv6   s$     V--u5r(   c                 D    | j                  t        j                  d       y rt   r   rI   s    r'   test_connect_unspec_dualz&TCPClientTest.test_connect_unspec_dual   r   r(   c              #      K   t               \  }}| j                  |       | j                  t              5  | j                  j                  d|       d d d        y # 1 sw Y   y xY wwrm   )r   
addCleanupassertRaisesIOErrorr>   rc   )r#   cleanup_funcr"   s      r'   test_refused_ipv4zTCPClientTest.test_refused_ipv4   sN     *_d%w'++%%k488 (''s   4A*A	A*A'#A*c                 |    | j                  t        j                  | j                  t        j                  dd       y)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   s2    LL  NN 	 	
r(   c                 H    | j                  t        j                  dd       y)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Pr(   c                     t        j                         dk(  r| j                  d       | j                  t        j
                  | j                  t        j                  dd       y)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   sR     ??& MM+,LL  NN 	 	
r(   c              #      K   d} G d dt               }| j                  t              5  t         |             j	                  dd|       d d d        y # 1 sw Y   y xY ww)Ng?c                       e Zd Zd Zy);TCPClientTest.test_connect_timeout.<locals>.TimeoutResolverc                     t               S r*   r   )r#   argskwargss      r'   rP   zCTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s	    x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   sZ     	 h 	  |,_%67??5' @   -,,s   'A$&A	A$A!A$)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    "
 

@ - - :: 5 5 ; ;< 6 6< 9 9
Q 
 
 
 
r(   r:   c                       e Zd Zd Zd Zy)TestConnectorSplitc                     t        j                  t        dft        dfg      \  }}| j                  |t        dft        dfg       | j                  |g        y )Nab)r
   splitAF1rg   r#   primary	secondarys      r'   test_one_familyz"TestConnectorSplit.test_one_family   sQ    '--SzC:.FGC:Sz":;B'r(   c                     t        j                  t        dft        dft        dft        dfg      \  }}| j	                  |t        dft        dfg       | j	                  |t        dft        dfg       y Nr   r   cd)r
   r   r   AF2rg   r   s      r'   
test_mixedzTestConnectorSplit.test_mixed   so    '--3Z#sc3Z#s<
 	C:Sz":;c3Z#s$<=r(   N)r4   r5   r6   r   r   rQ   r(   r'   r   r      s    (>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y)ConnectorTest.FakeStreamc                     d| _         y )NFclosedrI   s    r'   r   z!ConnectorTest.FakeStream.__init__   s	    DKr(   c                     d| _         y )NTr   rI   s    r'   r2   zConnectorTest.FakeStream.close   s	    DKr(   N)r4   r5   r6   r   r2   rQ   r(   r'   
FakeStreamr      s    	 	r(   r   c                     t         |           i | _        i | _        t        dft        dft
        dft
        dfg| _        y r   )r   r<   connect_futuresr   r   r   r[   r?   s    r'   r<   zConnectorTest.setUp   s@     	 sc3Z#sc3ZHr(   c                     | j                   j                         D ]  }| j                  |j                          t        |           y r*   )r   valuesassertFalser   r   rL   r3   s     r'   rL   zConnectorTest.tearDown   s9     ll))+FV]]+ ,r(   c                     t         j                         }|| 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                 |    | j                  t        | j                  j                               t        |             y r*   )rg   sortedr   keys)r#   r   s     r'   assert_pendingzConnectorTest.assert_pending   s*     4 4 9 9 ;<fTlKr(   c                 R   | j                   j                  ||f      }|r|j                  | j                  |          n4| j                  j                  |       |j	                  t                      | j                  j                  | j                         | j                          y r*   )
r   pop
set_resultr   set_exceptionr   rW   add_callbackr1   wait)r#   ra   rU   successr   s        r'   resolve_connectzConnectorTest.resolve_connect   sw    %%))2t*5dll401LLT"  +!!$)),		r(   c                 \    |j                   D ]  }| j                  |j                          y r*   )r   
assertTruer   )r#   connr-   s      r'   assert_connector_streams_closedz-ConnectorTest.assert_connector_streams_closed   s     llFOOFMM* #r(   c                     t        || j                        }|j                  d| j                  j	                         dz         }||fS )Ni  )connect_timeout)r
   r   startrW   time)r#   r[   r   r   s       r'   start_connectzConnectorTest.start_connect   sB    (D$6$67D$,,2C2C2E2LMV|r(   c                 J   | j                  | j                        \  }}| j                  t        | j                  j                               t        dfg       | j                  t        dd       | j                  |j                         t        d| j                  d   f       y )Nr   T)
r   r[   rg   listr   r   r   r   resultr   r#   r   r   s      r'   test_immediate_successz$ConnectorTest.test_immediate_success   s|    ))$--8fd22779:c3ZLIS#t,3T\\#5F*GHr(   c                     | j                  t        dfg      \  }}| j                  t        df       | j                  t        dd       | j	                  t
        |j                         y )Nr   Fr   r   r   r   r   r   r   r   s      r'   test_immediate_failurez$ConnectorTest.test_immediate_failure  sT    ))C:,7fS#J'S#u-'6==1r(   c                 h   | j                  t        dft        dfg      \  }}| j                  t        df       | j                  t        dd       | j                  t        df       | j                  t        dd       | j	                  |j                         t        d| j                  d   f       y 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fS#J'S#u-S#J'S#t,3T\\#5F*GHr(   c                 @   | j                  t        dft        dfg      \  }}| j                  t        df       | j                  t        dd       | j                  t        df       | j                  t        dd       | j	                  t
        |j                         y )Nr   r   Fr   r   s      r'   "test_one_family_second_try_failurez0ConnectorTest.test_one_family_second_try_failure  s    ))C:Sz*BCfS#J'S#u-S#J'S#u-'6==1r(   c                    | j                  t        dft        dfg      \  }}| j                  t        df       |j                          | j                  t        df       | j	                  t        dd       | j                  t        df       | j	                  t        dd       | j                  |j                         t        d| j                  d   f       y 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fS#J' 	S#J'S#u-S#J'S#t,3T\\#5F*GHr(   c                    | j                  | j                        \  }}| j                  t        df       | j	                  t        dd       | j                  t        dft
        df       | j	                  t        dd       | j	                  t
        dd       | j                  |j                         t
        d| j                  d   f       y )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fS#J'S#u-S#Jc
3S#u-S#t,3T\\#5F*GHr(   c                    | j                  | j                        \  }}| j                  t        df       |j	                          | j                  t        dft
        df       | j                  t
        dd       | j                  |j                         t
        d| j                  d   f       | j                  t        dd       | j                          y )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fS#J'S#Jc
3S#t,3T\\#5F*GHS#u-r(   c                    | j                  | j                        \  }}| j                  t        df       |j	                          | j                  t        dft
        df       | j                  t        dd       | j                  |j                         t        d| j                  d   f       | j                  t
        dd       | j                  | j                  j                  d      j                         y )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fS#J'S#Jc
3S#t,3T\\#5F*GHS#t,((-445r(   c                    | j                  | j                        \  }}| j                  t        df       |j	                          | j                  t        dft
        df       | j                  t
        dd       | j                  t        dft
        df       | j                  t
        dd       | j                  t        df       | j                  t        dd       | j                  t        df       | j                  |j                                | j                  t        dd       | j                  t        |j                         y )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  s    ))$--8fS#J'S#Jc
3S#u-S#Jc
3S#u-S#J'S#u-S#J''S#u-'6==1r(   c                 ,   | j                  t        dft        dfg      \  }}| j                  t        df       |j                          | j                  j                  t        df       | j                  | j                  j                  d      j                         |j                          | j                          | j                  t        |j                        d       | j                  |       | j                  t        |j                         y )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fS#J'! 	  #s,((-445 	T\\*A.,,T2,6r(   c                 
   | j                  t        dft        dfg      \  }}| j                  t        df       | j                  t        dd       |j	                          | j                          | j                  | j                  d   j                  d       | j                  t        |j                        d       | j                  |       | j                  |j                         t        d| j                  d   f       y )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fS#J'S#t,!c*1159T\\*A.,,T23T\\#5F*GHr(   c                 h   | j                  t        dft        dfg      \  }}| j                  t        df       | j                  t        dd       | j                  t        df       |j	                          | j
                  j                  t        df       | j                  | j                  j                  d      j                         | j                          | j                  t        |j                        d       | j                  |       | j                  t        |j                         y 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fS#J'S#u-S#J'!  #s,((-445T\\*A.,,T2,6r(   c                    | j                  t        dft        dfg      \  }}| j                  t        df       | j                  t        dd       | j                  t        df       | j                  t        dd       |j	                          | j                          | j                  t        |j                        d       | j                  |       | j                  t        |j                         y 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fS#J'S#u-S#J'S#u-!T\\*A.,,T2'6==1r(   c                 
   | j                  | j                        \  }}| j                  t        df       |j	                          | j                  t        dft
        df       |j                          | j                  j                  t        df       | j                  | j                  j                  d      j                         | j                  j                  t
        df       | j                  | j                  j                  d      j                         | j                          | j                  t        |j                        d       | j                  |       | j                  t         |j"                         y )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  s   ))$--8fS#J'S#Jc
3!  #s,((-445  #s,((-445T\\*A.,,T2,6r(   c                    | j                  | j                        \  }}| j                  t        df       |j	                          | j                  t        dft
        df       | j                  t        dd       | j                  j                  t
        df       | j                  | j                  j                  d      j                         | j                          | j                  t        |j                        d       | j                  |       | j                  |j                         t        d| j                  d   f       y )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  s    ))$--8fS#J'S#Jc
3S#t,  #s,((-445T\\*A.,,T23T\\#5F*GHr(   c                 D   | j                  | j                        \  }}| j                  t        df       |j	                          | j
                  j                  t        df       | j                  | j                  j                  d      j                         | j                          |j                          | j                          | j                  t        |j                        d       | j                  |       | j                  t        |j                          y )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fS#J'!  #s,((-445 	T\\*A.,,T2,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L	+I2I2
II		62 7 I7
27I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   3 ' 3 H H $ 	)(( SI &{M {|>** >n7M n7r(   