
    g               
       `   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 	 d dlZd dlZd dlmZ  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jR                  ejT                  dk(  d       G d dejV                                      Z,e ejR                  edu d       ejR                  ejT                  dk(  d       ejR                  ejT                  dk(  d       G d  d!ee!                                  Z-e ejR                  edu d"       ejR                   e.ed#d$      d%k  d&       ejR                  ejT                  dk(  d'       G d( d)ee!                                  Z/ G d* d+ejV                        Z0 G d, d-ejV                        Z1y# e$ r dZY w xY w# e$ r dZY w xY w).    N)Popen)BlockingResolverOverrideResolverThreadedResolveris_valid_ipbind_sockets)AsyncTestCasegen_testbind_unused_port)skipIfNoNetwork)List)CaresResolver)TwistedResolverc                   :    e Zd ZdZedej                  fd       Zy)_ResolverTestMixinNselfc              #      K   | j                   j                  ddt        j                        }| j	                  t        j
                  df|v xs t        j                  df|v d|        y w)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     N/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/netutil_test.pytest_localhostz!_ResolverTestMixin.test_localhost,   sg     ..{B@P@PQQ 	nn/0H< <+.(:,XJ7	
s   A,A.)__name__
__module____qualname__r   r
   typingAnyr!        r    r   r   )   s$    H	
VZZ 	
 	
r(   r   c                   :    e Zd ZdZedej                  fd       Zy)_ResolverErrorTestMixinNr   c              #      K   | j                  t              5  | j                  j                  ddt        j
                         d d d        y # 1 sw Y   y xY ww)Nzan invalid domainr   )assertRaisesIOErrorr   r   r   r   r   s    r    test_bad_hostz%_ResolverErrorTestMixin.test_bad_host>   s?     w'--''(;RAQAQRR (''s   A.A	AAA)r"   r#   r$   r   r
   r%   r&   r/   r'   r(   r    r*   r*   ;   s'    HSFJJ S Sr(   r*   c                  J    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                 @    t         |           t               | _        y N)supersetUpr   r   r   	__class__s    r    r;   zBlockingResolverTest.setUpK       (*r(   r"   r#   r$   r;   __classcell__r=   s   @r    r7   r7   I   s    + +r(   r7   c                   (     e Zd Z fdZ fdZ xZS )BlockingResolverErrorTestc                     t         |           t               | _        t        j
                  | _        t        t        _        y r9   r:   r;   r   r   r   getaddrinforeal_getaddrinfor5   r<   s    r    r;   zBlockingResolverErrorTest.setUpT   ,    (* & 2 21r(   c                 L    | j                   t        _        t        |           y r9   rG   r   rF   r:   tearDownr<   s    r    rK   z"BlockingResolverErrorTest.tearDownZ       !22r(   r"   r#   r$   r;   rK   r@   rA   s   @r    rC   rC   S       2 r(   rC   c                   .     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               |      | _        y )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`   sO    2v~~.2v/ 2
 ))9);WEr(   c              #   H  K   | j                   j                  ddt        j                        }| j	                  t        j                  df|       | j                   j                  ddt        j
                        }| j	                  t        j
                  df|       y w)NrR   r   rS   )rT   r   r   r   )r   r   r   r   assertInr   )r   results     r    test_resolve_multiaddrz+OverrideResolverTest.test_resolve_multiaddrl   sv     }},,\2v~~NNv~~7@}},,\2vOO__LMv	
s   B B")r"   r#   r$   r;   r
   rY   r@   rA   s   @r    rP   rP   _   s    
F 
 
r(   rP   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverTestc                 @    t         |           t               | _        y r9   )r:   r;   r   r   r<   s    r    r;   zThreadedResolverTest.setUpy   r>   r(   c                 V    | j                   j                          t        |           y r9   )r   closer:   rK   r<   s    r    rK   zThreadedResolverTest.tearDown}   s    r(   rM   rA   s   @r    r[   r[   w   s    + r(   r[   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverErrorTestc                     t         |           t               | _        t        j
                  | _        t        t        _        y r9   rE   r<   s    r    r;   zThreadedResolverErrorTest.setUp   rH   r(   c                 L    | j                   t        _        t        |           y 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y)ThreadedResolverImportTestc                 x   dt         j                  ddg}t        j                         }t        |fd      }t        j                         |z
  k  rU|j	                         }|| j                  d|       y t        j                  d       t        j                         |z
  k  rU| j                  d       y )	N   z-cz'import tornado.test.resolve_test_helperc                  .    t        j                         S r9   )signalalarm)TIMEOUTs   r    <lambda>z8ThreadedResolverImportTest.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_coderk   s        @r    test_importz&ThreadedResolverImportTest.test_import   s    
 >>4)RS		g*GHiikE!G+**,K&  K0JJt iikE!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                 @    t         |           t               | _        y r9   )r:   r;   r   r   r<   s    r    r;   zCaresResolverTest.setUp   s    %r(   r?   rA   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                        e Zd Z fdZ xZS )TwistedResolverTestc                 @    t         |           t               | _        y r9   )r:   r;   r   r   r<   s    r    r;   zTwistedResolverTest.setUp   s    ')r(   r?   rA   s   @r    r   r      s    * *r(   r   c                       e Zd Zd Zy)IsValidIPTestc                    | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d              | j                  t        d              | j                  t        d              | j                  t        d              | j                  t        d	              | j                  t        d
              | j                  t        d              | j                  t        d              | j                  t        d              y )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   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(   N)r"   r#   r$   r   r'   r(   r    r   r      s    4r(   r   c                   T    e Zd Zd Z ej
                   eed       d      d        Zy)TestPortAllocationc                 D   dt         j                  v r| j                  d       t        dd      }	 |d   j	                         d   | j                  t        fd|dd  D                     |D ]  }|j                           y # |D ]  }|j                           w xY w)NTRAVISz6dual-stack servers often have port conflicts on travisr   r      c              3   J   K   | ]  }|j                         d    k(    ywr   Ngetsockname.0sports     r    	<genexpr>z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>   s"     PKq 2d :K    #)osenvironskipTestr   r   r   allr^   )r   socketssockr   s      @r    test_same_port_allocationz,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                 6   g }t        d      \  }	 t        dd      }| j                  t        fd|D                      |j                          |D ]  }|j	                           y #  |j                          |D ]  }|j	                           w xY w)NT)
reuse_portr   c              3   J   K   | ]  }|j                         d    k(    ywr   r   r   s     r    r   z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>   s"     LGq 2d :Gr   )r   r   r   r   r^   )r   r   r   r   r   s       @r    test_reuse_portz"TestPortAllocation.test_reuse_port   s     '48	"4FGOOCLGLLMFLLN

   FLLN

  s   1A. .*BN)	r"   r#   r$   r   unittestskipIfhasattrr   r   r'   r(   r    r   r      s6    	 X__FN++-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      ss    	    
    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"H-,H-