
    [4%e               
          d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl	m
Z
mZmZmZmZ d dlmZmZmZ d dlmZ d dlZej        rd dlmZ 	 d dlZd dlmZ n# e$ r dZY nw xY w	 d dlZd dlZd dlmZ n# e$ r dZY nw xY w G d	 d
e           Z! G d de           Z"d Z#e G d dee!                      Z$ G d dee"          Z% G d dee!          Z&e G d dee!                      Z' G d dee"          Z(e ej)        ej*        dk    d           G d dej+                                          Z,e ej)        edu d           ej)        ej*        dk    d           ej)        ej*        dk    d           G d  d!ee!                                                          Z-e ej)        edu d"           ej)         e.ed#d$          d%k     d&           ej)        ej*        dk    d'           G d( d)ee!                                                          Z/ G d* d+ej+                  Z0 G d, d-ej+                  Z1dS ).    N)Popen)BlockingResolverOverrideResolverThreadedResolveris_valid_ipbind_sockets)AsyncTestCasegen_testbind_unused_port)skipIfNoNetwork)List)CaresResolver)TwistedResolverc                   8    e Zd ZdZedej        fd            ZdS )_ResolverTestMixinNselfc              #      K   | j                             ddt          j                  V }|                     t          j        df|v pt          j        df|v d|            d S )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     9lib/python3.11/site-packages/tornado/test/netutil_test.pytest_localhostz!_ResolverTestMixin.test_localhost,   sy      ..{B@PQQQQ 	n/0H< <+.(:7X77	
 	
 	
 	
 	
    )__name__
__module____qualname__r   r
   typingAnyr!    r"   r    r   r   )   s@        H	
VZ 	
 	
 	
 X	
 	
 	
r"   r   c                   8    e Zd ZdZedej        fd            ZdS )_ResolverErrorTestMixinNr   c              #      K   |                      t                    5  | j                            ddt          j                  V  d d d            d S # 1 swxY w Y   d S )Nzan invalid domainr   )assertRaisesIOErrorr   r   r   r   r   s    r    test_bad_hostz%_ResolverErrorTestMixin.test_bad_host>   s      w'' 	S 	S-''(;RAQRRRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Ss   )AAA)r#   r$   r%   r   r
   r&   r'   r/   r(   r"   r    r*   r*   ;   sG        HSFJ S S S XS S Sr"   r*   c                  @    t          j        t          j        d          )z4Dummy implementation of getaddrinfo for use in mockszmock: lookup failed)r   gaierrorerrnoEIO)argss    r    _failing_getaddrinfor5   D   s    
/%)%:
;
;;r"   c                        e Zd Z fdZ xZS )BlockingResolverTestc                 n    t                                                       t                      | _        d S N)supersetUpr   r   r   	__class__s    r    r;   zBlockingResolverTest.setUpK   %    (**r"   r#   r$   r%   r;   __classcell__r=   s   @r    r7   r7   I   s8        + + + + + + + + +r"   r7   c                   (     e Zd Z fdZ fdZ xZS )BlockingResolverErrorTestc                     t                                                       t                      | _        t          j        | _        t          t          _        d S r9   r:   r;   r   r   r   getaddrinforeal_getaddrinfor5   r<   s    r    r;   zBlockingResolverErrorTest.setUpT   :    (** & 21r"   c                 j    | j         t          _        t                                                       d S r9   rG   r   rF   r:   tearDownr<   s    r    rK   z"BlockingResolverErrorTest.tearDownZ   *    !2r"   r#   r$   r%   r;   rK   r@   rA   s   @r    rC   rC   S   Q        2 2 2 2 2        r"   rC   c                   4     e Zd Z fdZed             Z xZS )OverrideResolverTestc                     t                                                       ddddt          j        fdddt          j        fdi}t          t                      |          | _        d S )N)
google.comr   z1.2.3.4r   rR   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r:   r;   r   r   r   r   r   r   )r   mappingr=   s     r    r;   zOverrideResolverTest.setUp`   s]    2v~.2v/ 2
 ))9););WEEr"   c              #   2  K   | j                             ddt          j                  V }|                     t          j        df|           | j                             ddt          j                  V }|                     t          j        df|           d S )NrR   r   rS   )rT   r   r   r   )r   r   r   r   assertInr   )r   results     r    test_resolve_multiaddrz+OverrideResolverTest.test_resolve_multiaddrl   s      },,\2v~NNNNv~7@@@},,\2vOOOO_LMv	
 	
 	
 	
 	
r"   )r#   r$   r%   r;   r
   rY   r@   rA   s   @r    rP   rP   _   sX        
F 
F 
F 
F 
F 
 
 X
 
 
 
 
r"   rP   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverTestc                 n    t                                                       t                      | _        d S r9   )r:   r;   r   r   r<   s    r    r;   zThreadedResolverTest.setUpy   r>   r"   c                 z    | j                                          t                                                       d S r9   )r   closer:   rK   r<   s    r    rK   zThreadedResolverTest.tearDown}   s3    r"   rM   rA   s   @r    r[   r[   w   sQ        + + + + +        r"   r[   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverErrorTestc                     t                                                       t                      | _        t          j        | _        t          t          _        d S r9   rE   r<   s    r    r;   zThreadedResolverErrorTest.setUp   rH   r"   c                 j    | j         t          _        t                                                       d S r9   rJ   r<   s    r    rK   z"ThreadedResolverErrorTest.tearDown   rL   r"   rM   rA   s   @r    r`   r`      rN   r"   r`   win32z!preexec_fn not available on win32c                       e Zd Zd ZdS )ThreadedResolverImportTestc                    dt           j        ddg}t          j                    }t          |fd          }t          j                    |z
  k     r\|                                }||                     d|           d S t          j        d           t          j                    |z
  k     \|                     d           d S )	N   z-cz'import tornado.test.resolve_test_helperc                  ,    t          j                   S r9   )signalalarm)TIMEOUTs   r    <lambda>z8ThreadedResolverImportTest.test_import.<locals>.<lambda>   s    &,w2G2G r"   )
preexec_fnr   g?zimport timed out)sys
executabletimer   pollassertEqualsleepfail)r   commandstartpopenreturn_coderk   s        @r    test_importz&ThreadedResolverImportTest.test_import   s    
 >4)RS	g*G*G*G*GHHHikkE!G++**,,K&  K000Jt ikkE!G++ 			$%%%%%r"   N)r#   r$   r%   ry   r(   r"   r    re   re      s#        & & & & &r"   re   zpycares module not presentz*pycares doesn't return loopback on windowsdarwinz*pycares doesn't return 127.0.0.1 on darwinc                        e Zd Z fdZ xZS )CaresResolverTestc                 n    t                                                       t                      | _        d S r9   )r:   r;   r   r   r<   s    r    r;   zCaresResolverTest.setUp   s#    %r"   r?   rA   s   @r    r|   r|      s8        
( ( ( ( ( ( ( ( (r"   r|   ztwisted module not present__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                        e Zd Z fdZ xZS )TwistedResolverTestc                 n    t                                                       t                      | _        d S r9   )r:   r;   r   r   r<   s    r    r;   zTwistedResolverTest.setUp   s%    '))r"   r?   rA   s   @r    r   r      s8        * * * * * * * * *r"   r   c                       e Zd Zd ZdS )IsValidIPTestc                    |                      t          d                     |                      t          d                     |                      t          d                     |                      t          d                     |                      t          d                      |                      t          d                      |                      t          d                      |                      t          d                      |                      t          d	                      |                      t          d
                      |                      t          d                      |                      t          d                      |                      t          d                      d S )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   r.   s    r    test_is_valid_ipzIsValidIPTest.test_is_valid_ip   su   K00111I..///E**+++$>??@@@K(8999:::K444555K
333444K555666KOO+,,,K,,,---K---...K///000K	22233333r"   N)r#   r$   r%   r   r(   r"   r    r   r      s#        4 4 4 4 4r"   r   c                   ^    e Zd Zd Z ej         eed           d          d             ZdS )TestPortAllocationc                    dt           j        v r|                     d           t          dd          }	 |d                                         d         |                     t          fd|dd          D                                  |D ]}|                                 d S # |D ]}|                                 w xY w)NTRAVISz6dual-stack servers often have port conflicts on travisr   r      c              3   T   K   | ]"}|                                 d          k    V  #dS r   Ngetsockname.0sports     r    	<genexpr>z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>   s5      PPq 2d :PPPPPPr"   )osenvironskipTestr   r   r   allr^   )r   socketssockr   s      @r    test_same_port_allocationz,TestPortAllocation.test_same_port_allocation   s    rz!!MMRSSSq+..	1:))++A.DOOCPPPPGABBKPPPPPQQQ  

   

s   AB' 'CSO_REUSEPORTzSO_REUSEPORT is not supportedc                 ^   g }t          d          \  }	 t          dd          }|                     t          fd|D                                   |j                     |D ]}|                                 d S #  |j                     |D ]}|                                 w xY w)NT)
reuse_portr   c              3   T   K   | ]"}|                                 d          k    V  #dS r   r   r   s     r    r   z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>   s5      LLq 2d :LLLLLLr"   )r   r   r   r   r^   )r   r   r   r   r   s       @r    test_reuse_portz"TestPortAllocation.test_reuse_port   s     '4888	"4FFFGOOCLLLLGLLLLLMMMFLNNN  

  FLNNN  

s   A B *B,N)	r#   r$   r%   r   unittestskipIfhasattrr   r   r(   r"   r    r   r      sd        	 	 	 X_GFN+++-L 	 	 	 	 	r"   r   )2r2   r   ri   r   
subprocessr   rn   rp   r   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*   r5   r7   rC   rP   r[   r`   r   platformTestCasere   r|   getattrr   r   r   r(   r"   r    <module>r      s    				         



                F E E E E E E E E E - - - - - - 	 =NNN =<<<<<<    GGG
9NNN 9888888    GGG
 
 
 
 
 
 
 
$S S S S Sf S S S< < <
 + + + + +=*< + + +	 	 	 	 	/F 	 	 	
 
 
 
 
=*< 
 
 
0     =*<   	 	 	 	 	/F 	 	 	 (*MNN& & & & &!2 & & ON &6 D">??(*VWW)+WXX( ( ( ( ('9 ( ( YX XW @? ( D">??GG]E**V35M  (*MNN* * * * *-); * * ON  @? *4 4 4 4 4H% 4 4 4"    *     s$   A A('A(,A; ;BB