
    #/hA                     d   S SK Jr  S SK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\R8                  (       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\RL                  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      =/usr/lib/python3/dist-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_stream2   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.stop6   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\\R0                  " S5      S 5       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                     U[         R                  :X  a%  S[        R                  ;   a  U R	                  S5        [        U5      U l        U R                  R                  $ )NTRAVISz6dual-stack servers often have port conflicts on travis)socket	AF_UNSPECosenvironskipTestr   rD   r#   )r$   r%   s     r(   start_serverTCPClientTest.start_serverB   sD    V%%%(bjj*@MMR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_serverH   s(    ;;"KKDK #r*   c                 v   > U R                   R                  5         U R                  5         [        TU ]  5         g r,   )rE   r5   rS   r   tearDownrF   s    r(   rV   TCPClientTest.tearDownM   s*    r*   c                     U R                   R                  S 5      n[        S U 5       5      n[        R                  U;  a  U R                  S5        g g )Nc                  6    [        5       R                  SS5      $ )Nr   P   )r   resolve r*   r(   <lambda>1TCPClientTest.skipIfLocalhostV4.<locals>.<lambda>U   s    1C1CKQS1Tr*   c              3   *   #    U  H	  oS    v   M     g7f)r   Nr\   ).0addrs     r(   	<genexpr>2TCPClientTest.skipIfLocalhostV4.<locals>.<genexpr>V   s     484Aw8s   z"localhost does not resolve to ipv6)io_looprun_syncsetrJ   AF_INET6rN   )r$   addrinfofamiliess      r(   skipIfLocalhostV4TCPClientTest.skipIfLocalhostV4R   sG     <<(()TU4844??(*MM>? +r*   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   )
rO   rE   connectrD   r    getr   write
read_bytesassertEqual)	r$   r%   hostrm   rn   r#   r/   server_streamdatas	            r(   do_test_connectTCPClientTest.do_test_connectZ   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ry   rJ   AF_INETrR   s    r(   test_connect_ipv4_ipv4$TCPClientTest.test_connect_ipv4_ipv4k       V^^[9r*   c                 D    U R                  [        R                  S5        g Nr   r~   rR   s    r(   test_connect_ipv4_dual$TCPClientTest.test_connect_ipv4_dualn   r   r*   c                 d    U R                  5         U R                  [        R                  S5        g Nz::1)rj   ry   rJ   rg   rR   s    r(   test_connect_ipv6_ipv6$TCPClientTest.test_connect_ipv6_ipv6q   s"     V__e4r*   c                     U R                  5         [        R                  " 5       R                  R	                  S5      (       a  U R                  S5        U R                  [        R                  S5        g )NTwistedResolverz3TwistedResolver does not support multiple addressesr   )	rj   r   configured_classr8   endswithrN   ry   rJ   rg   rR   s    r(   test_connect_ipv6_dual$TCPClientTest.test_connect_ipv6_dualv   sP     $$&//889JKKMMOPV__k:r*   c                 D    U R                  [        R                  S5        g r|   ry   rJ   rK   rR   s    r(   test_connect_unspec_ipv4&TCPClientTest.test_connect_unspec_ipv4}       V--{;r*   c                 d    U R                  5         U R                  [        R                  S5        g r   )rj   ry   rJ   rK   rR   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   rR   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r|   )r   
addCleanupassertRaisesIOErrorrE   rq   )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'.r}   z8.8.8.8rm   N)r   rJ   errorry   r   rR   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'.r}   r   Nr~   rR   s    r(   test_source_ip_success$TCPClientTest.test_source_ip_success   s    V^^[KPr*   zfailing on Salsa CIc                     [         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 rootr}   r   )rn   N)getpassgetuserrN   r   rJ   r   ry   r   rR   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(   r[   CTCPClientTest.test_connect_timeout.<locals>.TimeoutResolver.resolve   s	    xr*   r\   N)r8   r9   r:   r;   r[   r<   r\   r*   r(   TimeoutResolverr      s     r*   r   )resolverz1.2.3.4i90  )timeout)r   r   r   r	   rq   )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   rO   rS   rV   rj   r   ry   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipr   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AF1ru   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   AF2ru   r   s      r(   
test_mixedTestConnectorSplit.test_mixed   sm    '--3Z#sc3Z#s<
 	C:Sz":;c3Z#s$<=r*   r\   N)r8   r9   r:   r;   r   r   r<   r\   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closedrR   s    r(   r   !ConnectorTest.FakeStream.__init__   s	    DKr*   c                     SU l         g )NTr   rR   s    r(   r5   ConnectorTest.FakeStream.close   s	    DKr*   r   N)r8   r9   r:   r;   r   r5   r<   r\   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   rh   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   rV   r6   s     r(   rV   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$   ro   ra   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,   )ru   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   rd   add_callbackr4   wait)r$   ro   ra   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   startrd   time)r$   rh   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  rh   ru   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   ru   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   ru   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  rh   r   r   r   r   ru   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  rh   r   r   r  r   r   ru   r  r   r  s      r(   test_two_families_timeout'ConnectorTest.test_two_families_timeout2  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  rh   r   r   r  r   r   ru   r  r   r   r   r   r  s      r(   test_success_after_timeout(ConnectorTest.test_success_after_timeout=  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  rh   r   r   r  r   r   r   doner   r   r  r  s      r(   test_all_failConnectorTest.test_all_failH  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  ru   lenr   r   r   r  r  s      r(   -test_one_family_timeout_after_connect_timeout;ConnectorTest.test_one_family_timeout_after_connect_timeoutX  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                  S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   TFr   )r  r   r   r   r(  ru   r   r   r)  r   r  r  s      r(   .test_one_family_success_before_connect_timeout<ConnectorTest.test_one_family_success_before_connect_timeouth  s    ))C:Sz*BCS#J'S#t,!c*1159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   ru   r)  r   r   r   r  r  s      r(   0test_one_family_second_try_after_connect_timeout>ConnectorTest.test_one_family_second_try_after_connect_timeoutu  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 r0  )r  r   r   r   r(  ru   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  rh   r   r   r  r   r(  r   r   r   r   r   ru   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  rh   r   r   r  r   r   r   r   r   r   r   ru   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  rh   r   r   r(  r   r   r   r   r   r  ru   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*   )rh   r   r   )r8   r9   r:   r;   objectr   rC   rV   r   r   r   r   r  r	  r  r  r  r  r  r  r!  r%  r*  r-  r1  r4  r7  r:  r=  r<   r=   r>   s   @r(   r   r      s    V IL	+I2I2
II		62 7 I7
27I7 7r*   r   ))
contextlibr   r   rL   rJ   r   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   r\   r*   r(   <module>rM     s      	   % 2   3 ' 3 H H $ 	)(( SI &|M |~>** >n7M n7r*   