σ
¨[c           @` sS  d  d l  m Z m Z m Z d  d l m 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 m Z d  d l m Z d \ Z Z d e f d     YZ  d e f d     YZ! d e j" f d     YZ# d e f d     YZ$ d S(   i    (   t   absolute_importt   divisiont   print_function(   t   closingN(   t   Future(   t   bind_socketst   Resolver(   t   Queue(   t	   TCPClientt
   _Connector(   t	   TCPServer(   t   AsyncTestCaset   gen_test(   t   skipIfNoIPv6t   unittestt   refusing_portt   skipIfNonUnix(   t   TimeoutErrori   i   t   TestTCPServerc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sb   t  t |   j   g  |  _ t   |  _ t d  d |  } |  j |  | d j	   d |  _
 d  S(   Nt	   localhosti    i   (   t   superR   t   __init__t   streamsR   t   queueR   t   Nonet   add_socketst   getsocknamet   port(   t   selft   familyt   sockets(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR   %   s    	c         C` s$   |  j  j |  |  j j |  d  S(   N(   R   t   appendR   t   put(   R   t   streamt   address(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   handle_stream-   s    c         C` s5   t  t |   j   x |  j D] } | j   q Wd  S(   N(   R   R   t   stopR   t   close(   R   R!   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR$   1   s    (   t   __name__t
   __module__R   R#   R$   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR   $   s   		t   TCPClientTestc           B` sΪ   e  Z d    Z d   Z d   Z d   Z d   Z e d 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 RS(   c         C` s,   t  t |   j   d  |  _ t   |  _ d  S(   N(   R   R(   t   setUpR   t   serverR   t   client(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR)   8   s    	c         C` sG   | t  j k r. d t j k r. |  j d  n  t |  |  _ |  j j S(   Nt   TRAVISs6   dual-stack servers often have port conflicts on travis(   t   sockett	   AF_UNSPECt   ost   environt   skipTestR   R*   R   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   start_server=   s    c         C` s,   |  j  d  k	 r( |  j  j   d  |  _  n  d  S(   N(   R*   R   R$   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   stop_serverC   s    c         C` s.   |  j  j   |  j   t t |   j   d  S(   N(   R+   R%   R3   R   R(   t   tearDown(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR4   H   s    
c         C` sN   |  j  j d    } t d   | D  } t j | k rJ |  j d  n  d  S(   Nc           S` s   t    j d d  S(   NR   iP   (   R   t   resolve(    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   <lambda>P   s    c         s` s   |  ] } | d  Vq d S(   i    N(    (   t   .0t   addr(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pys	   <genexpr>Q   s    s"   localhost does not resolve to ipv6(   t   io_loopt   run_synct   setR-   t   AF_INET6R1   (   R   t   addrinfot   families(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   skipIfLocalhostV4M   s    c   	      c` s   |  j  |  } |  j j | | d | d | V} |  j j j   V} t |  2 | j d  | j d  V} |  j	 | d  Wd  QXd  S(   Nt	   source_ipt   source_portt   helloi   (
   R2   R+   t   connectR*   R   t   getR   t   writet
   read_bytest   assertEqual(	   R   R   t   hostR@   RA   R   R!   t   server_streamt   data(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   do_test_connectU   s    
c         C` s   |  j  t j d  d  S(   Ns	   127.0.0.1(   RK   R-   t   AF_INET(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_ipv4_ipv4a   s    c         C` s   |  j  t j d  d  S(   NR   (   RK   R-   RL   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_ipv4_duald   s    c         C` s!   |  j    |  j t j d  d  S(   Ns   ::1(   R?   RK   R-   R<   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_ipv6_ipv6g   s    
c         C` sI   |  j    t j   j j d  r2 |  j d  n  |  j t j d  d  S(   Nt   TwistedResolvers3   TwistedResolver does not support multiple addressesR   (	   R?   R   t   configured_classR&   t   endswithR1   RK   R-   R<   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_ipv6_duall   s    
c         C` s   |  j  t j d  d  S(   Ns	   127.0.0.1(   RK   R-   R.   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_unspec_ipv4s   s    c         C` s!   |  j    |  j t j d  d  S(   Ns   ::1(   R?   RK   R-   R.   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_unspec_ipv6v   s    
c         C` s   |  j  t j d  d  S(   NR   (   RK   R-   R.   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_unspec_dual{   s    c         c` sJ   t    \ } } |  j |  |  j t   |  j j d |  VWd  QXd  S(   Ns	   127.0.0.1(   R   t
   addCleanupt   assertRaisest   IOErrorR+   RC   (   R   t   cleanup_funcR   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_refused_ipv4~   s    c         C` s)   |  j  t j |  j t j d d d d S(   sJ   
        Fail when trying to use the source IP Address '8.8.8.8'.
        s	   127.0.0.1R@   s   8.8.8.8N(   RX   R-   t   errorRK   RL   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_source_ip_fail   s
    c         C` s   |  j  t j d d d d S(   sN   
        Success when trying to use the source IP Address '127.0.0.1'
        s	   127.0.0.1R@   N(   RK   R-   RL   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_source_ip_success   s    c         C` s)   |  j  t j |  j t j d d d d S(   s8   
        Fail when trying to use source port 1.
        s	   127.0.0.1RA   i   N(   RX   R-   R\   RK   RL   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_source_port_fail   s
    c      	   c` sY   d } d t  f d     Y} |  j t  ( t d |    j d d d | VWd  QXd  S(   Ng©?t   TimeoutResolverc           B` s   e  Z d    Z RS(   c         _` s   t    S(   N(   R   (   R   t   argst   kwargs(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR5   ₯   s    (   R&   R'   R5   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR`   €   s   t   resolvers   1.2.3.4i90  t   timeout(   R   RX   R   R   RC   (   R   Rd   R`   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_connect_timeout    s
    N(   R&   R'   R)   R2   R3   R4   R?   R   R   RK   RM   RN   R   RO   RS   RT   RU   RV   R[   R]   R^   R   R_   Re   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR(   7   s&   										
	t   TestConnectorSplitc           B` s   e  Z d    Z d   Z RS(   c         C` s]   t  j t d f t d f g  \ } } |  j | t d f t d f g  |  j | g   d  S(   Nt   at   b(   R	   t   splitt   AF1RG   (   R   t   primaryt	   secondary(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_one_family­   s    	c         C` s   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  d  S(   NRg   Rh   t   ct   d(   R	   Ri   Rj   t   AF2RG   (   R   Rk   Rl   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt
   test_mixedΆ   s    			"(   R&   R'   Rm   Rq   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyRf   ¬   s   		t   ConnectorTestc           B` sν   e  Z d  e f d     YZ 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 d   Z RS(   t
   FakeStreamc           B` s   e  Z d    Z d   Z RS(   c         C` s   t  |  _ d  S(   N(   t   Falset   closed(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR   Β   s    c         C` s   t  |  _ d  S(   N(   t   TrueRu   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR%   Ε   s    (   R&   R'   R   R%   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyRs   Α   s   	c         C` sV   t  t |   j   i  |  _ i  |  _ t d f t d f t d f t d f g |  _ d  S(   NRg   Rh   Rn   Ro   (   R   Rr   R)   t   connect_futuresR   Rj   Rp   R=   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR)   Θ   s
    		c         C` sA   x' |  j  j   D] } |  j | j  q Wt t |   j   d  S(   N(   R   t   valuest   assertFalseRu   R   Rr   R4   (   R   R!   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyR4   Ο   s    c         C` s?   t  j   } | |  j | <t   } | |  j | | f <| | f S(   N(   Rr   Rs   R   R   Rw   (   R   t   afR8   R!   t   future(    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   create_streamΦ   s
    	c         G` s)   |  j  t |  j j    t |   d  S(   N(   RG   t   sortedRw   t   keys(   R   R~   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   assert_pendingέ   s    c         C` sv   |  j  j | | f  } | r5 | j |  j |  n  |  j j |  | j t    |  j j |  j  |  j	   d  S(   N(
   Rw   t   popt
   set_resultR   t   set_exceptionRY   R9   t   add_callbackR$   t   wait(   R   Rz   R8   t   successR{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   resolve_connectΰ   s    c         C` s(   x! | j  D] } |  j | j  q
 Wd  S(   N(   R   t
   assertTrueRu   (   R   t   connR!   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   assert_connector_streams_closedλ   s    c         C` s>   t  | |  j  } | j d d |  j j   d } | | f S(   Ni  t   connect_timeout(   R	   R|   t   startR9   t   time(   R   R=   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   start_connectο   s    "c         C` s}   |  j  |  j  \ } } |  j t |  j j    t d f g  |  j t d t  |  j | j	   t d |  j
 d f  d  S(   NRg   (   R   R=   RG   t   listRw   R~   Rj   R   Rv   t   resultR   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_immediate_successυ   s
    c         C` s[   |  j  t d f g  \ } } |  j t d f  |  j t d t  |  j t | j  d  S(   NRg   (   R   Rj   R   R   Rt   RX   RY   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_immediate_failureό   s    c         C` s   |  j  t d f t d f g  \ } } |  j t d f  |  j t d t  |  j t d f  |  j t d t  |  j | j   t d |  j d f  d  S(   NRg   Rh   (	   R   Rj   R   R   Rt   Rv   RG   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_one_family_second_try  s    'c         C` s   |  j  t d f t d f g  \ } } |  j t d f  |  j t d t  |  j t d f  |  j t d t  |  j t | j  d  S(   NRg   Rh   (   R   Rj   R   R   Rt   RX   RY   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt"   test_one_family_second_try_failure  s    'c         C` sΊ   |  j  t d f t d f g  \ } } |  j t d f  | j   |  j t d f  |  j t d t  |  j t d f  |  j t d t  |  j | j   t d |  j	 d f  d  S(   NRg   Rh   (
   R   Rj   R   t
   on_timeoutR   Rt   Rv   RG   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt"   test_one_family_second_try_timeout  s    '
c         C` sͺ   |  j  |  j  \ } } |  j t d f  |  j t d t  |  j t d f t d f  |  j t d t  |  j t d t  |  j | j	   t d |  j
 d f  d  S(   NRg   Rh   Rn   (   R   R=   R   Rj   R   Rt   Rp   Rv   RG   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt#   test_two_families_immediate_failure  s    c         C` s«   |  j  |  j  \ } } |  j t d f  | j   |  j t d f t d f  |  j t d t  |  j | j	   t d |  j
 d f  |  j t d t  |  j   d  S(   NRg   Rn   (   R   R=   R   Rj   R   Rp   R   Rv   RG   R   R   Rt   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_two_families_timeout(  s    
&c         C` s½   |  j  |  j  \ } } |  j t d f  | j   |  j t d f t d f  |  j t d t  |  j | j	   t d |  j
 d f  |  j t d t  |  j |  j
 j d  j  d  S(   NRg   Rn   (   R   R=   R   Rj   R   Rp   R   Rv   RG   R   R   R   R   Ru   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_success_after_timeout3  s    
&c         C` s	  |  j  |  j  \ } } |  j t d f  | j   |  j t d f t d f  |  j t d t  |  j t d f t d f  |  j t d t  |  j t d f  |  j t d t  |  j t d f  |  j | j	    |  j t d t  |  j
 t | j  d  S(   NRg   Rn   Ro   Rh   (   R   R=   R   Rj   R   Rp   R   Rt   Ry   t   doneRX   RY   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   test_all_fail>  s    
c         C` sΗ   |  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  d  S(   NRg   Rh   i   (   R   Rj   R   t   on_connect_timeoutRw   R   R   R   Ru   R   RG   t   lenR   RX   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt-   test_one_family_timeout_after_connect_timeoutN  s    '


c         C` sΛ   |  j  t d f t d f g  \ } } |  j t d f  |  j t d t  | j   |  j   |  j |  j d j t	  |  j t
 | j  d  |  j |  |  j | j   t d |  j d f  d  S(   NRg   Rh   i    (   R   Rj   R   R   Rv   R   RG   R   Ru   Rt   R   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt.   test_one_family_success_before_connect_timeout^  s    '

c         C` sγ   |  j  t d f t d f g  \ } } |  j t d f  |  j t d t  |  j t d f  | j   |  j j t d f  |  j |  j	 j d  j
  |  j   |  j t | j	  d  |  j |  |  j t | j  d  S(   NRg   Rh   i   (   R   Rj   R   R   Rt   R   Rw   R   R   R   Ru   RG   R   R   RX   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt0   test_one_family_second_try_after_connect_timeoutk  s    '

c         C` sΔ   |  j  t d f t d f g  \ } } |  j t d f  |  j t d t  |  j t d f  |  j t d t  | j   |  j   |  j t | j  d  |  j	 |  |  j
 t | j  d  S(   NRg   Rh   i   (   R   Rj   R   R   Rt   R   RG   R   R   R   RX   RY   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt9   test_one_family_second_try_failure_before_connect_timeoutx  s    '

c         C` s  |  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  d  S(   NRg   Rn   i   (   R   R=   R   Rj   R   Rp   R   Rw   R   R   R   Ru   RG   R   R   RX   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt.   test_two_family_timeout_before_connect_timeout  s    


c         C` sπ   |  j  |  j  \ } } |  j t d f  | j   |  j t d f t d f  |  j t d t  |  j j	 t d f  |  j
 |  j j	 d  j  |  j   |  j t | j  d  |  j |  |  j | j   t d |  j d f  d  S(   NRg   Rn   i   (   R   R=   R   Rj   R   Rp   R   Rv   Rw   R   R   R   Ru   RG   R   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt%   test_two_family_success_after_timeout  s    

c         C` sΒ   |  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  d  S(   NRg   i   (   R   R=   R   Rj   R   Rw   R   R   R   Ru   R   RG   R   R   RX   R   R   (   R   R   R{   (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt-   test_two_family_timeout_after_connect_timeout‘  s    



(   R&   R'   t   objectRs   R)   R4   R|   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R‘   R’   R£   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyRr   ΐ   s0   																							(   i   i   (%   t
   __future__R    R   R   t
   contextlibR   R/   R-   t   tornado.concurrentR   t   tornado.netutilR   R   t   tornado.queuesR   t   tornado.tcpclientR   R	   t   tornado.tcpserverR
   t   tornado.testingR   R   t   tornado.test.utilR   R   R   R   t   tornado.genR   Rj   Rp   R   R(   t   TestCaseRf   Rr   (    (    (    s:   lib/python2.7/site-packages/tornado/test/tcpclient_test.pyt   <module>   s    "u