
    #/h               
       n   S SK r S SKrS SKrS SKrS SKJr  S SKrS SKrS SKrS SK	J
r
JrJrJrJr  S SKJrJrJr  S SKJr  S SKr\R,                  (       a  S SKJr   S SKrS SKJr   S SKrS SKrS SKJr   " S	 S
\ 5      r! " S S\ 5      r"S r#\ " S S\\!5      5       r$ " S S\\"5      r% " S S\\!5      r&\ " S S\\!5      5       r' " S S\\"5      r(\\RR                  " \RT                  S:H  S5       " S S\RV                  5      5       5       r,\\RR                  " \SL S5      \RR                  " \RT                  S:H  S5      \RR                  " \RT                  S:H  S5       " S  S!\\!5      5       5       5       5       r-\\RR                  " \SL S"5      \RR                  " \." \S#S$5      S%:  S&5      \RR                  " \RT                  S:H  S'5       " S( S)\\!5      5       5       5       5       r/ " S* S+\RV                  5      r0 " S, S-\RV                  5      r1g! \ a    Sr GNf = f! \ a    Sr GNf = f).    N)Popen)BlockingResolverOverrideResolverThreadedResolveris_valid_ipbind_sockets)AsyncTestCasegen_testbind_unused_port)skipIfNoNetwork)List)CaresResolver)TwistedResolverc                   D    \ rS rSrSr\S\R                  4S j5       rSr	g)_ResolverTestMixin)   Nselfc              #      #    U R                   R                  SS[        R                  5      v nU R	                  [        R
                  S4U;   =(       d    [        R                  S4U;   SU 35        g 7f)N	localhostP   )	127.0.0.1r   )::1r   zloopback address not found in )resolverresolvesocket	AF_UNSPEC
assertTrueAF_INETAF_INET6)r   addrinfos     ;/usr/lib/python3/dist-packages/tornado/test/netutil_test.pytest_localhost!_ResolverTestMixin.test_localhost,   sf     ..{B@P@PQQ 	nn/0H< <+.(:,XJ7	
s   A3A5 )
__name__
__module____qualname____firstlineno__r   r
   typingAnyr"   __static_attributes__r$       r!   r   r   )   s$    H	
VZZ 	
 	
r,   r   c                   n    \ rS rSrSr\R                  " S5      \S\R                  4S j5       5       r
Srg)_ResolverErrorTestMixin;   Nz$Prevent internet access during buildr   c              #      #    U R                  [        5         U R                  R                  SS[        R
                  5      v   S S S 5        g ! , (       d  f       g = f7f)Nzan invalid domainr   )assertRaisesIOErrorr   r   r   r   r   s    r!   test_bad_host%_ResolverErrorTestMixin.test_bad_host>   s@      w'--''(;RAQAQRR (''s   A .A	A 
AA r$   )r%   r&   r'   r(   r   unittestskipr
   r)   r*   r4   r+   r$   r,   r!   r.   r.   ;   s9    H]]9:SFJJ S  ;Sr,   r.   c                  L    [         R                  " [        R                  S5      e)z4Dummy implementation of getaddrinfo for use in mockszmock: lookup failed)r   gaierrorerrnoEIO)argss    r!   _failing_getaddrinfor=   E   s    
//%))%:
;;r,   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )BlockingResolverTestJ   c                 @   > [         TU ]  5         [        5       U l        g N)supersetUpr   r   r   	__class__s    r!   rD   BlockingResolverTest.setUpL       (*r,   r   r%   r&   r'   r(   rD   r+   __classcell__rF   s   @r!   r?   r?   J   s    + +r,   r?   c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )BlockingResolverErrorTestT   c                    > [         TU ]  5         [        5       U l        [        R
                  U l        [        [        l        g rB   rC   rD   r   r   r   getaddrinforeal_getaddrinfor=   rE   s    r!   rD   BlockingResolverErrorTest.setUpU   ,    (* & 2 21r,   c                 L   > U R                   [        l        [        TU ]  5         g rB   rS   r   rR   rC   tearDownrE   s    r!   rX   "BlockingResolverErrorTest.tearDown[       !22r,   rS   r   r%   r&   r'   r(   rD   rX   r+   rK   rL   s   @r!   rN   rN   T       2 r,   rN   c                   8   ^  \ rS rSrU 4S jr\S 5       rSrU =r$ )OverrideResolverTest`   c                    > [         TU ]  5         SSSS[        R                  4SSS[        R                  4S0n[        [        5       U5      U l        g )N)
google.comr   z1.2.3.4r   rb   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )rC   rD   r   r   r   r   r   r   )r   mappingrF   s     r!   rD   OverrideResolverTest.setUpa   sO    2v~~.2v/ 2
 ))9);WEr,   c              #   H  #    U R                   R                  SS[        R                  5      v nU R	                  [        R                  S4U5        U R                   R                  SS[        R
                  5      v nU R	                  [        R
                  S4U5        g 7f)Nrb   r   rc   )rd   r   r   r   )r   r   r   r   assertInr   )r   results     r!   test_resolve_multiaddr+OverrideResolverTest.test_resolve_multiaddrm   su     }},,\2v~~NNv~~7@}},,\2vOO__LMv	
s   B B"rI   )	r%   r&   r'   r(   rD   r
   rj   r+   rK   rL   s   @r!   r_   r_   `   s    
F 
 
r,   r_   c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )ThreadedResolverTestx   c                 @   > [         TU ]  5         [        5       U l        g rB   )rC   rD   r   r   rE   s    r!   rD   ThreadedResolverTest.setUpz   rH   r,   c                 V   > U R                   R                  5         [        TU ]  5         g rB   )r   closerC   rX   rE   s    r!   rX   ThreadedResolverTest.tearDown~   s    r,   rI   r\   rL   s   @r!   rm   rm   x   s    + r,   rm   c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )ThreadedResolverErrorTest   c                    > [         TU ]  5         [        5       U l        [        R
                  U l        [        [        l        g rB   rQ   rE   s    r!   rD   ThreadedResolverErrorTest.setUp   rU   r,   c                 L   > U R                   [        l        [        TU ]  5         g rB   rW   rE   s    r!   rX   "ThreadedResolverErrorTest.tearDown   rZ   r,   r[   r\   rL   s   @r!   ru   ru      r]   r,   ru   win32z!preexec_fn not available on win32c                       \ rS rSrS rSrg)ThreadedResolverImportTest   c                   ^ Sm[         R                  SS/n[        R                  " 5       n[        UU4S jS9n[        R                  " 5       U-
  T:  aZ  UR	                  5       nUb  U R                  SU5        g [        R                  " S5        [        R                  " 5       U-
  T:  a  MZ  U R                  S5        g )	N   z-cz'import tornado.test.resolve_test_helperc                  0   > [         R                  " T 5      $ rB   )signalalarm)TIMEOUTs   r!   <lambda>8ThreadedResolverImportTest.test_import.<locals>.<lambda>   s    &,,w2Gr,   )
preexec_fnr   g?zimport timed out)sys
executabletimer   pollassertEqualsleepfail)r   commandstartpopenreturn_coder   s        @r!   test_import&ThreadedResolverImportTest.test_import   s    
 >>4)RS		g*GHiikE!G+**,K&  K0JJt iikE!G+ 			$%r,   r$   N)r%   r&   r'   r(   r   r+   r$   r,   r!   r}   r}      s    &r,   r}   zpycares module not presentz*pycares doesn't return loopback on windowsdarwinz*pycares doesn't return 127.0.0.1 on darwinc                   (   ^  \ rS rSrU 4S jrSrU =r$ )CaresResolverTest   c                 @   > [         TU ]  5         [        5       U l        g rB   )rC   rD   r   r   rE   s    r!   rD   CaresResolverTest.setUp   s    %r,   rI   rJ   rL   s   @r!   r   r      s    
( (r,   r   ztwisted module not present__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                   (   ^  \ rS rSrU 4S jrSrU =r$ )TwistedResolverTest   c                 @   > [         TU ]  5         [        5       U l        g rB   )rC   rD   r   r   rE   s    r!   rD   TwistedResolverTest.setUp   s    ')r,   rI   rJ   rL   s   @r!   r   r      s    * *r,   r   c                       \ rS rSrS rSrg)IsValidIPTest   c                    U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      (       + 5        U R                  [        S5      (       + 5        U R                  [        S5      (       + 5        U R                  [        S5      (       + 5        U R                  [        S	5      (       + 5        U R                  [        S
5      (       + 5        U R                  [        S5      (       + 5        U R                  [        S5      (       + 5        U R                  [        S5      (       + 5        g )Nr   z4.4.4.4r   z2620:0:1cfe:face:b00c::3zwww.google.comr   z4.4.4.4<z
 127.0.0.1  
 daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r3   s    r!   test_is_valid_ipIsValidIPTest.test_is_valid_ip   s    K01I./E*+$>?@K(899:K445K
334K556KO+,K,,-K--.K//0K	223r,   r$   N)r%   r&   r'   r(   r   r+   r$   r,   r!   r   r      s    4r,   r   c                   d    \ rS rSrS r\R                  " \" \S5      (       + S5      S 5       r	Sr
g)TestPortAllocation   c                 R  ^ S[         R                  ;   a  U R                  S5        [        SS5      n US   R	                  5       S   mU R                  [        U4S jUSS   5       5      5        U H  nUR                  5         M     g ! U H  nUR                  5         M     f = f)NTRAVISz6dual-stack servers often have port conflicts on travisr   r      c              3   N   >#    U  H  oR                  5       S    T:H  v   M     g7fr   Ngetsockname.0sports     r!   	<genexpr>?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>   s     PKq 2d :K   "%)osenvironskipTestr   r   r   allrr   )r   socketssockr   s      @r!   test_same_port_allocation,TestPortAllocation.test_same_port_allocation   s    rzz!MMRSq+.	1:))+A.DOOCPGABKPPQ

  

  s   =B B&SO_REUSEPORTzSO_REUSEPORT is not supportedc                 4  ^ / n[        SS9u  nm [        TSSS9nU R                  [        U4S jU 5       5      5        UR                  " 5         U H  nUR	                  5         M     g ! UR                  " 5         U H  nUR	                  5         M     f = f)NT)
reuse_portr   c              3   N   >#    U  H  oR                  5       S    T:H  v   M     g7fr   r   r   s     r!   r   5TestPortAllocation.test_reuse_port.<locals>.<genexpr>   s     LGq 2d :Gr   )r   r   r   r   rr   )r   r   r   r   r   s       @r!   test_reuse_port"TestPortAllocation.test_reuse_port   s~     '48	"4FGOOCLGLLMLLN

   LLN

  s   /A+ +,Br$   N)r%   r&   r'   r(   r   r6   skipIfhasattrr   r   r+   r$   r,   r!   r   r      s4    	 __FN++-L		r,   r   )2r:   r   r   r   
subprocessr   r   r   r6   tornado.netutilr   r   r   r   r   tornado.testingr	   r
   r   tornado.test.utilr   r)   TYPE_CHECKINGr   pycarestornado.platform.caresresolverr   ImportErrortwistedtwisted.namestornado.platform.twistedr   objectr   r.   r=   r?   rN   r_   rm   ru   r   platformTestCaser}   r   getattrr   r   r   r$   r,   r!   <module>r      se    	    
    F E - 	= =9 9
 
$Sf S<
 +=*< + +	/F 	
=*< 
0 =*<  	/F 	 	(*MN&!2!2 & O &6 	D">?	(*VW	)+WX('9 ( Y X @ ( 	D">?	G]E*V35M 
(*MN*-); * O @ *4H%% 4"**   G  Gs$   H (H( H%$H%(H43H4