
    ^h@                     \   S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJr  S S	KJrJrJr  S S
KJr  S SKr\R6                  (       a  S SKJr  S SKJrJrJ r   Su  r!r" " S S\5      r# " S S\5      r$ " S S\RJ                  5      r& " S S\5      r'g)    )closingNFuture)bind_socketsResolver)Queue)	TCPClient
_Connector)	TCPServer)AsyncTestCasegen_test)skipIfNoIPv6refusing_portskipIfNonUnix)TimeoutError)IOStream)ListDictTuple)      c                   :   ^  \ rS rSrU 4S jrS rU 4S jrSrU =r$ )TestTCPServer(   c                    > [         TU ]  5         / U l        [        5       U l        [        SSU5      nU R                  U5        US   R                  5       S   U l        g )Nr   	localhostr   )	super__init__streamsr   queuer   add_socketsgetsocknameport)selffamilysockets	__class__s      U/home/james-whalen/.local/lib/python3.13/site-packages/tornado/test/tcpclient_test.pyr   TestTCPServer.__init__)   sS    W
q+v6!AJ**,Q/	    c                 p    U R                   R                  U5        U R                  R                  U5        g N)r   appendr    put)r$   streamaddresss      r(   handle_streamTestTCPServer.handle_stream1   s$    F#

vr*   c                 h   > [         TU ]  5         U R                   H  nUR                  5         M     g r,   )r   stopr   closer$   r/   r'   s     r(   r4   TestTCPServer.stop5   s#    llFLLN #r*   )r#   r    r   )	__name__
__module____qualname____firstlineno__r   r1   r4   __static_attributes____classcell__r'   s   @r(   r   r   (   s    0 r*   r   c                      ^  \ rS rSrU 4S jrS rS rU 4S jrS r\	SS j5       r
S rS	 r\S
 5       r\S 5       rS r\S 5       rS r\	S 5       rS rS r\S 5       r\	S 5       rSrU =r$ )TCPClientTest;   c                 N   > [         TU ]  5         S U l        [        5       U l        g r,   )r   setUpserverr	   clientr$   r'   s    r(   rC   TCPClientTest.setUp<   s    kr*   c                 N    [        U5      U l        U R                  R                  $ r,   )r   rD   r#   )r$   r%   s     r(   start_serverTCPClientTest.start_serverA   s    #F+{{r*   c                 b    U R                   b"  U R                   R                  5         S U l         g g r,   )rD   r4   r$   s    r(   stop_serverTCPClientTest.stop_serverE   s(    ;;"KKDK #r*   c                 v   > U R                   R                  5         U R                  5         [        TU ]  5         g r,   )rE   r5   rM   r   tearDownrF   s    r(   rP   TCPClientTest.tearDownJ   s*    r*   c                     U R                   R                  S 5      nU Vs1 s H  o"S   iM	     nn[        R                  U;  a  U R	                  S5        g g s  snf )Nc                  6    [        5       R                  SS5      $ )Nr   P   )r   resolve r*   r(   <lambda>1TCPClientTest.skipIfLocalhostV4.<locals>.<lambda>R   s    1C1CKQS1Tr*   r   z"localhost does not resolve to ipv6)io_looprun_syncsocketAF_INET6skipTest)r$   addrinfoaddrfamiliess       r(   skipIfLocalhostV4TCPClientTest.skipIfLocalhostV4O   sR     <<(()TU(01G1??(*MM>? + 2s   Ac              #     #    U R                  U5      nU R                  R                  UUUUUS9v nU R                  c   eU R                  R                  R                  5       v n[        U5         UR                  S5        UR                  S5      v nU R                  US5        S S S 5        g ! , (       d  f       g = f7f)N)	source_ipsource_portafs   hello   )
rI   rE   connectrD   r    getr   write
read_bytesassertEqual)	r$   r%   hostrd   re   r#   r/   server_streamdatas	            r(   do_test_connectTCPClientTest.do_test_connectW   s       ({{**# + 
 
 {{&&&"kk//3355V_LL"&11!44DT8, __s   A1C37B3*	C3
C=Cc                 D    U R                  [        R                  S5        g N	127.0.0.1rp   r[   AF_INETrL   s    r(   test_connect_ipv4_ipv4$TCPClientTest.test_connect_ipv4_ipv4h       V^^[9r*   c                 D    U R                  [        R                  S5        g Nr   ru   rL   s    r(   test_connect_ipv4_dual$TCPClientTest.test_connect_ipv4_dualk   ry   r*   c                 d    U R                  5         U R                  [        R                  S5        g Nz::1ra   rp   r[   r\   rL   s    r(   test_connect_ipv6_ipv6$TCPClientTest.test_connect_ipv6_ipv6n   s"     V__e4r*   c                 d    U R                  5         U R                  [        R                  S5        g r{   r   rL   s    r(   test_connect_ipv6_dual$TCPClientTest.test_connect_ipv6_duals   s"     V__k:r*   c                 D    U R                  [        R                  S5        g rs   rp   r[   	AF_UNSPECrL   s    r(   test_connect_unspec_ipv4&TCPClientTest.test_connect_unspec_ipv4x       V--{;r*   c                 d    U R                  5         U R                  [        R                  S5        g r   )ra   rp   r[   r   rL   s    r(   test_connect_unspec_ipv6&TCPClientTest.test_connect_unspec_ipv6{   s$     V--u5r*   c                 D    U R                  [        R                  S5        g r{   r   rL   s    r(   test_connect_unspec_dual&TCPClientTest.test_connect_unspec_dual   r   r*   c              #      #    [        5       u  pU R                  U5        U R                  [        5         U R                  R                  SU5      v   S S S 5        g ! , (       d  f       g = f7frs   )r   
addCleanupassertRaisesIOErrorrE   rh   )r$   cleanup_funcr#   s      r(   test_refused_ipv4TCPClientTest.test_refused_ipv4   sK     *_%w'++%%k488 (''s   3A.A	A.
A+'A.c                 v    U R                  [        R                  U R                  [        R                  SSS9  g)z8Fail when trying to use the source IP Address '8.8.8.8'.rt   z8.8.8.8rd   N)r   r[   errorrp   rv   rL   s    r(   test_source_ip_fail!TCPClientTest.test_source_ip_fail   s2    LL  NN 	 	
r*   c                 B    U R                  [        R                  SSS9  g)z=Success when trying to use the source IP Address '127.0.0.1'.rt   r   Nru   rL   s    r(   test_source_ip_success$TCPClientTest.test_source_ip_success   s    V^^[KPr*   c                     [         R                  " 5       S:X  a  U R                  S5        U R                  [        R
                  U R                  [        R                  SSS9  g)z&Fail when trying to use source port 1.rootzrunning as rootrt   r   )re   N)getpassgetuserr]   r   r[   r   rp   rv   rL   s    r(   test_source_port_fail#TCPClientTest.test_source_port_fail   sR     ??& MM+,LL  NN 	 	
r*   c              #      #    Sn " S S[         5      nU R                  [        5         [        U" 5       S9R	                  SSUS9v   S S S 5        g ! , (       d  f       g = f7f)Ng?c                       \ rS rSrS rSrg);TCPClientTest.test_connect_timeout.<locals>.TimeoutResolver   c                     [        5       $ r,   r   )r$   argskwargss      r(   rU   CTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s	    xr*   rV   N)r8   r9   r:   r;   rU   r<   rV   r*   r(   TimeoutResolverr      s     r*   r   )resolverz1.2.3.4i90  )timeout)r   r   r   r	   rh   )r$   r   r   s      r(   test_connect_timeout"TCPClientTest.test_connect_timeout   sY     	 h 	  |,_%67??5' @   -,,s   'A# A		A#
A A#)rE   rD   )NN)r8   r9   r:   r;   rC   rI   rM   rP   ra   r   rp   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r<   r=   r>   s   @r(   r@   r@   ;   s    "
 

@ - - :: 5 5 ; ;< 6 6< 9 9
Q 
 
 
 
r*   r@   c                        \ rS rSrS rS rSrg)TestConnectorSplit   c                     [         R                  " [        S4[        S4/5      u  pU R                  U[        S4[        S4/5        U R                  U/ 5        g )Nab)r
   splitAF1rl   r$   primary	secondarys      r(   test_one_family"TestConnectorSplit.test_one_family   sO    '--SzC:.FGC:Sz":;B'r*   c                     [         R                  " [        S4[        S4[        S4[        S4/5      u  pU R	                  U[        S4[        S4/5        U R	                  U[        S4[        S4/5        g Nr   r   cd)r
   r   r   AF2rl   r   s      r(   
test_mixedTestConnectorSplit.test_mixed   sm    '--3Z#sc3Z#s<
 	C:Sz":;c3Z#s$<=r*   rV   N)r8   r9   r:   r;   r   r   r<   rV   r*   r(   r   r      s    (>r*   r   c                      ^  \ rS rSr " S S5      rU 4S jrU 4S jrS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r$ )ConnectorTest   c                        \ rS rSrS rS rSrg)ConnectorTest.FakeStream   c                     SU l         g )NFclosedrL   s    r(   r   !ConnectorTest.FakeStream.__init__   s	    DKr*   c                     SU l         g )NTr   rL   s    r(   r5   ConnectorTest.FakeStream.close   s	    DKr*   r   N)r8   r9   r:   r;   r   r5   r<   rV   r*   r(   
FakeStreamr      s    	 	r*   r   c                    > [         TU ]  5         0 U l        0 U l        [        S4[        S4[
        S4[
        S4/U l        g r   )r   rC   connect_futuresr   r   r   r^   rF   s    r(   rC   ConnectorTest.setUp   s@     	 sc3Z#sc3ZHr*   c                    > U R                   R                  5        H  nU R                  UR                  5        M      [        TU ]  5         g r,   )r   valuesassertFalser   r   rP   r6   s     r(   rP   ConnectorTest.tearDown   s9     ll))+FV]]+ ,r*   c                 ~    [         R                  5       nX0R                  U'   [        5       nX@R                  X4'   X44$ r,   )r   r   r   r   r   )r$   rf   r_   r/   futures        r(   create_streamConnectorTest.create_stream   s;    ))+#T+1bZ(~r*   c                 |    U R                  [        U R                  R                  5       5      [        U5      5        g r,   )rl   sortedr   keys)r$   r   s     r(   assert_pendingConnectorTest.assert_pending   s*     4 4 9 9 ;<fTlKr*   c                 Z   U R                   R                  X45      nU(       a  UR                  U R                  U   5        O4U R                  R                  U5        UR	                  [        5       5        U R                  R                  U R                  5        U R                  5         g r,   )
r   pop
set_resultr   set_exceptionr   rY   add_callbackr4   wait)r$   rf   r_   successr   s        r(   resolve_connectConnectorTest.resolve_connect   su    %%))2*5dll401LLT"  +!!$)),		r*   c                 `    UR                    H  nU R                  UR                  5        M      g r,   )r   
assertTruer   )r$   connr/   s      r(   assert_connector_streams_closed-ConnectorTest.assert_connector_streams_closed   s     llFOOFMM* #r*   c                     [        XR                  5      nUR                  SU R                  R	                  5       S-   S9nX#4$ )Ni  )connect_timeout)r
   r   startrY   time)r$   r^   r   r   s       r(   start_connectConnectorTest.start_connect   s>    ($6$67D$,,2C2C2E2LM|r*   c                 H   U R                  U R                  5      u  pU R                  [        U R                  R                  5       5      [        S4/5        U R                  [        SS5        U R                  UR                  5       [        SU R                  S   45        g )Nr   T)
r   r^   rl   listr   r   r   r   resultr   r$   r   r   s      r(   test_immediate_success$ConnectorTest.test_immediate_success   sz    ))$--8d22779:c3ZLIS#t,3T\\#5F*GHr*   c                     U R                  [        S4/5      u  pU R                  [        S45        U R                  [        SS5        U R	                  [
        UR                  5        g )Nr   Fr   r   r   r   r   r   r   r   s      r(   test_immediate_failure$ConnectorTest.test_immediate_failure   sR    ))C:,7S#J'S#u-'6==1r*   c                 f   U R                  [        S4[        S4/5      u  pU R                  [        S45        U R                  [        SS5        U R                  [        S45        U R                  [        SS5        U R	                  UR                  5       [        SU R                  S   45        g Nr   r   FT)r   r   r   r   rl   r   r   r   s      r(   test_one_family_second_try(ConnectorTest.test_one_family_second_try  s    ))C:Sz*BCS#J'S#u-S#J'S#t,3T\\#5F*GHr*   c                 >   U R                  [        S4[        S4/5      u  pU R                  [        S45        U R                  [        SS5        U R                  [        S45        U R                  [        SS5        U R	                  [
        UR                  5        g )Nr   r   Fr   r   s      r(   "test_one_family_second_try_failure0ConnectorTest.test_one_family_second_try_failure  s}    ))C:Sz*BCS#J'S#u-S#J'S#u-'6==1r*   c                    U R                  [        S4[        S4/5      u  pU R                  [        S45        UR                  5         U R                  [        S45        U R	                  [        SS5        U R                  [        S45        U R	                  [        SS5        U R                  UR                  5       [        SU R                  S   45        g r  )r   r   r   
on_timeoutr   rl   r   r   r   s      r(   "test_one_family_second_try_timeout0ConnectorTest.test_one_family_second_try_timeout  s    ))C:Sz*BCS#J' 	S#J'S#u-S#J'S#t,3T\\#5F*GHr*   c                    U R                  U R                  5      u  pU R                  [        S45        U R	                  [        SS5        U R                  [        S4[
        S45        U R	                  [        SS5        U R	                  [
        SS5        U R                  UR                  5       [
        SU R                  S   45        g )Nr   Fr   r   T)	r   r^   r   r   r   r   rl   r   r   r   s      r(   #test_two_families_immediate_failure1ConnectorTest.test_two_families_immediate_failure#  s    ))$--8S#J'S#u-S#Jc
3S#u-S#t,3T\\#5F*GHr*   c                    U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R                  [        S4[
        S45        U R                  [
        SS5        U R                  UR                  5       [
        SU R                  S   45        U R                  [        SS5        U R                  5         g )Nr   r   TF)
r   r^   r   r   r  r   r   rl   r   r   r   s      r(   test_two_families_timeout'ConnectorTest.test_two_families_timeout,  s    ))$--8S#J'S#Jc
3S#t,3T\\#5F*GHS#u-r*   c                    U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R                  [        S4[
        S45        U R                  [        SS5        U R                  UR                  5       [        SU R                  S   45        U R                  [
        SS5        U R                  U R                  R                  S5      R                  5        g )Nr   r   T)r   r^   r   r   r  r   r   rl   r   r   r   r   r   r   s      r(   test_success_after_timeout(ConnectorTest.test_success_after_timeout7  s    ))$--8S#J'S#Jc
3S#t,3T\\#5F*GHS#t,((-445r*   c                    U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R                  [        S4[
        S45        U R                  [
        SS5        U R                  [        S4[
        S45        U R                  [
        SS5        U R                  [        S45        U R                  [        SS5        U R                  [        S45        U R                  UR                  5       5        U R                  [        SS5        U R                  [        UR                  5        g )Nr   r   Fr   r   )r   r^   r   r   r  r   r   r   doner   r   r   r   s      r(   test_all_failConnectorTest.test_all_failB  s    ))$--8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                 *   U R                  [        S4[        S4/5      u  pU R                  [        S45        UR                  5         U R                  R                  [        S45        U R                  U R                  R                  S5      R                  5        UR                  5         U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  [        UR                  5        g )Nr   r   r   )r   r   r   on_connect_timeoutr   r   r   r   r   r  rl   lenr   r   r   r   r   s      r(   -test_one_family_timeout_after_connect_timeout;ConnectorTest.test_one_family_timeout_after_connect_timeoutR  s    ))C:Sz*BCS#J'! 	  #s,((-445 	T\\*A.,,T2,6r*   c                    U R                  [        S4[        S4/5      u  pU R                  [        S45        U R                  [        SS5        UR	                  5         U R                  5         U R                  U R                  S   R                  5        U R                  [        UR                  5      S5        U R                  U5        U R                  UR                  5       [        SU R                  S   45        g )Nr   r   Tr   )r   r   r   r   r  r   r   r   rl   r  r   r   r   s      r(   .test_one_family_success_before_connect_timeout<ConnectorTest.test_one_family_success_before_connect_timeoutb  s    ))C:Sz*BCS#J'S#t,!c*112T\\*A.,,T23T\\#5F*GHr*   c                 f   U R                  [        S4[        S4/5      u  pU R                  [        S45        U R                  [        SS5        U R                  [        S45        UR	                  5         U R
                  R                  [        S45        U R                  U R                  R                  S5      R                  5        U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  [        UR                  5        g Nr   r   Fr   )r   r   r   r   r  r   r   r   r   r   rl   r  r   r   r   r   r   s      r(   0test_one_family_second_try_after_connect_timeout>ConnectorTest.test_one_family_second_try_after_connect_timeouto  s    ))C:Sz*BCS#J'S#u-S#J'!  #s,((-445T\\*A.,,T2,6r*   c                    U R                  [        S4[        S4/5      u  pU R                  [        S45        U R                  [        SS5        U R                  [        S45        U R                  [        SS5        UR	                  5         U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  [        UR                  5        g r$  )r   r   r   r   r  rl   r  r   r   r   r   r   r   s      r(   9test_one_family_second_try_failure_before_connect_timeoutGConnectorTest.test_one_family_second_try_failure_before_connect_timeout|  s    ))C:Sz*BCS#J'S#u-S#J'S#u-!T\\*A.,,T2'6==1r*   c                    U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R                  [        S4[
        S45        UR                  5         U R                  R                  [        S45        U R                  U R                  R                  S5      R                  5        U R                  R                  [
        S45        U R                  U R                  R                  S5      R                  5        U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  [         UR"                  5        g )Nr   r   r   )r   r^   r   r   r  r   r  r   r   r   r   r   rl   r  r   r   r   r   r   s      r(   .test_two_family_timeout_before_connect_timeout<ConnectorTest.test_two_family_timeout_before_connect_timeout  s   ))$--8S#J'S#Jc
3!  #s,((-445  #s,((-445T\\*A.,,T2,6r*   c                    U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R                  [        S4[
        S45        U R                  [        SS5        U R                  R                  [
        S45        U R                  U R                  R                  S5      R                  5        U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  UR                  5       [        SU R                  S   45        g )Nr   r   Tr   )r   r^   r   r   r  r   r   r   r   r   r   r   rl   r  r   r   r   s      r(   %test_two_family_success_after_timeout3ConnectorTest.test_two_family_success_after_timeout  s    ))$--8S#J'S#Jc
3S#t,  #s,((-445T\\*A.,,T23T\\#5F*GHr*   c                 B   U R                  U R                  5      u  pU R                  [        S45        UR	                  5         U R
                  R                  [        S45        U R                  U R                  R                  S5      R                  5        U R                  5         UR                  5         U R                  5         U R                  [        UR                  5      S5        U R                  U5        U R                  [        UR                   5        g )Nr   r   )r   r^   r   r   r  r   r   r   r   r   r  rl   r  r   r   r   r   r   s      r(   -test_two_family_timeout_after_connect_timeout;ConnectorTest.test_two_family_timeout_after_connect_timeout  s    ))$--8S#J'!  #s,((-445 	T\\*A.,,T2,6r*   )r^   r   r   )r8   r9   r:   r;   r   rC   rP   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  r%  r(  r+  r.  r1  r<   r=   r>   s   @r(   r   r      s     IL	+I2I2
II		62 7 I7
27I7 7r*   r   )(
contextlibr   r   r[   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   rV   r*   r(   <module>rA     s        % 2   3 ' 3 H H $ 	)(( SI &wM wt>** >n7M n7r*   