
    Xh@                     R   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j6                  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jJ                        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      O/var/www/html/myenv/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_stream1   s$    F#

vr(   c                 d    t         |           | j                  D ]  }|j                           y r*   )r   stopr   closer#   r-   r&   s     r'   r1   zTestTCPServer.stop5   s(    ll 	F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                 N    t        |      | _        | j                  j                  S r*   )r   r=   r"   )r#   r$   s     r'   start_serverzTCPClientTest.start_serverA   s    #F+{{r(   c                 `    | j                   "| j                   j                          d | _         y y r*   )r=   r1   r#   s    r'   stop_serverzTCPClientTest.stop_serverE   s(    ;;"KKDK #r(   c                 v    | j                   j                          | j                          t        |           y r*   )r>   r2   rD   r   tearDownr?   s    r'   rF   zTCPClientTest.tearDownJ   s*    r(   c                     | j                   j                  d       }|D ch c]  }|d   	 }}t        j                  |vr| j	                  d       y y c c}w )Nc                  6    t               j                  dd      S )Nr   P   )r   resolve r(   r'   <lambda>z1TCPClientTest.skipIfLocalhostV4.<locals>.<lambda>R   s    1C1CKQS1T r(   r   z"localhost does not resolve to ipv6)io_looprun_syncsocketAF_INET6skipTest)r#   addrinfoaddrfamiliess       r'   skipIfLocalhostV4zTCPClientTest.skipIfLocalhostV4O   sS     <<(()TU(01DG11??(*MM>? + 2s   A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   )
rA   r>   connectr=   r   getr   write
read_bytesassertEqual)	r#   r$   hostrW   rX   r"   r-   server_streamdatas	            r'   do_test_connectzTCPClientTest.do_test_connectW   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rc   rO   AF_INETrC   s    r'   test_connect_ipv4_ipv4z$TCPClientTest.test_connect_ipv4_ipv4h       V^^[9r(   c                 D    | j                  t        j                  d       y Nr   rg   rC   s    r'   test_connect_ipv4_dualz$TCPClientTest.test_connect_ipv4_dualk   rj   r(   c                 d    | j                          | j                  t        j                  d       y Nz::1rU   rc   rO   rP   rC   s    r'   test_connect_ipv6_ipv6z$TCPClientTest.test_connect_ipv6_ipv6n   s"     V__e4r(   c                 d    | j                          | j                  t        j                  d       y rl   rp   rC   s    r'   test_connect_ipv6_dualz$TCPClientTest.test_connect_ipv6_duals   s"     V__k:r(   c                 D    | j                  t        j                  d       y re   rc   rO   	AF_UNSPECrC   s    r'   test_connect_unspec_ipv4z&TCPClientTest.test_connect_unspec_ipv4x       V--{;r(   c                 d    | j                          | j                  t        j                  d       y ro   )rU   rc   rO   rv   rC   s    r'   test_connect_unspec_ipv6z&TCPClientTest.test_connect_unspec_ipv6{   s$     V--u5r(   c                 D    | j                  t        j                  d       y rl   ru   rC   s    r'   test_connect_unspec_dualz&TCPClientTest.test_connect_unspec_dual   rx   r(   c              #      K   t               \  }}| j                  |       | j                  t              5  | j                  j                  d|       d d d        y # 1 sw Y   y xY wwre   )r   
addCleanupassertRaisesIOErrorr>   r[   )r#   cleanup_funcr"   s      r'   test_refused_ipv4zTCPClientTest.test_refused_ipv4   sW     *_d%w' 	9++%%k488	9 	9 	9s   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'.rf   z8.8.8.8rW   N)r   rO   errorrc   rh   rC   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'.rf   r   Nrg   rC   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 rootrf   r   )rX   N)getpassgetuserrQ   r   rO   r   rc   rh   rC   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'   rJ   zCTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s	    x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   sc     	 h 	  |, 	_%67??5' @  	 	 	s   'A$&A	A$A!A$)NN)r4   r5   r6   r<   rA   rD   rF   rU   r   rc   ri   rm   r   rq   rs   rw   rz   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AF1r_   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   AF2r_   r   s      r'   
test_mixedzTestConnectorSplit.test_mixed   so    '--3Z#sc3Z#s<
 	C:Sz":;c3Z#s$<=r(   N)r4   r5   r6   r   r   rK   r(   r'   r   r      s    (>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y)ConnectorTest.FakeStreamc                     d| _         y )NFclosedrC   s    r'   r   z!ConnectorTest.FakeStream.__init__   s	    DKr(   c                     d| _         y )NTr   rC   s    r'   r2   zConnectorTest.FakeStream.close   s	    DKr(   N)r4   r5   r6   r   r2   rK   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   rR   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   rF   r3   s     r'   rF   zConnectorTest.tearDown   s>     ll))+ 	,FV]]+	,r(   c                     t         j                         }|| j                  |<   t               }|| j                  ||f<   ||fS r*   )r   r   r   r   r   )r#   rY   rS   r-   futures        r'   create_streamzConnectorTest.create_stream   sC    ))+#T+1b$Z(v~r(   c                 |    | j                  t        | j                  j                               t        |             y r*   )r_   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   rM   add_callbackr1   wait)r#   rY   rS   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%    ll 	+FOOFMM*	+r(   c                     t        || j                        }|j                  d| j                  j	                         dz         }||fS )Ni  )connect_timeout)r
   r   startrM   time)r#   rR   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   rR   r_   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   r_   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   r_   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   rR   r   r   r   r   r_   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   rR   r   r   r   r   r   r_   r   r   r   s      r'   test_two_families_timeoutz'ConnectorTest.test_two_families_timeout,  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   rR   r   r   r   r   r   r_   r   r   r   r   r   r   s      r'   test_success_after_timeoutz(ConnectorTest.test_success_after_timeout7  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   rR   r   r   r   r   r   r   doner   r   r   r   s      r'   test_all_failzConnectorTest.test_all_failB  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   r_   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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                         | 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   r   s      r'   .test_one_family_success_before_connect_timeoutz<ConnectorTest.test_one_family_success_before_connect_timeoutb  s    ))C:Sz*BCfS#J'S#t,!c*112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   r_   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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   r_   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   rR   r   r   r   r   r   r   r   r   r   r   r_   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   rR   r   r   r   r   r   r   r   r   r   r   r_   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   rR   r   r   r   r   r   r   r   r   r   r_   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   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L	+I2I2
II		62 7 I7
27I7r(   r   )(
contextlibr   r   rO   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   3 ' 3 H H $ 	)(( SI &wM wt>** >n7M n7r(   