
    Xh~              	       ,   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mZ d dlZ	 d dlZd dlmZ e G d de             Ze G d	 d
e             Zd Ze G d de             Z G d de      Z G d de      Ze G d de             Z  G d de      Z!e ejD                  ejF                  dk(  d       G d dejH                                      Z%e ejD                  edu d       ejD                  ejF                  dk(  d       ejD                  ejF                  dk(  d       G d de                                  Z& G d  d!ejH                        Z' G d" d#ejH                        Z(y# e$ r dZY Dw xY w)$    N)Popen)BlockingResolverOverrideResolverThreadedResolveris_valid_ipbind_sockets)AsyncTestCasegen_testbind_unused_port)skipIfNoNetworkabstract_base_test)CaresResolverc                        e Zd ZdZed        Zy)_ResolverTestMixinNc              #      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)selfaddrinfos     M/var/www/html/myenv/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
   r         r   r   r      s    H	
 	
r%   r   c                        e Zd ZdZed        Zy)_ResolverErrorTestMixinNc              #      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_host4   sL     w' 	S--''(;RAQAQRR	S 	S 	Ss   A.A	AAA)r!   r"   r#   r   r
   r,   r$   r%   r   r'   r'   0   s    H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_getaddrinfor2   :   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   r8   zBlockingResolverTest.setUpA       (*r%   r!   r"   r#   r8   __classcell__r:   s   @r   r4   r4   ?   s    + +r%   r4   c                   (     e Zd Z fdZ fdZ xZS )BlockingResolverErrorTestc                     t         |           t               | _        t        j
                  | _        t        t        _        y r6   r7   r8   r   r   r   getaddrinforeal_getaddrinfor2   r9   s    r   r8   zBlockingResolverErrorTest.setUpJ   ,    (* & 2 21r%   c                 L    | j                   t        _        t        |           y r6   rD   r   rC   r7   tearDownr9   s    r   rH   z"BlockingResolverErrorTest.tearDownP       !22r%   r!   r"   r#   r8   rH   r=   r>   s   @r   r@   r@   I       2 r%   r@   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   rO   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r7   r8   r   r   r   r   r   r   )r   mappingr:   s     r   r8   zOverrideResolverTest.setUpV   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)NrO   r   rP   )rQ   r   r   r   )r   r   r   r   assertInr   )r   results     r   test_resolve_multiaddrz+OverrideResolverTest.test_resolve_multiaddrb   sv     }},,\2v~~NNv~~7@}},,\2vOO__LMv	
s   B B")r!   r"   r#   r8   r
   rV   r=   r>   s   @r   rM   rM   U   s    
F 
 
r%   rM   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverTestc                 @    t         |           t               | _        y r6   )r7   r8   r   r   r9   s    r   r8   zThreadedResolverTest.setUpo   r;   r%   c                 V    | j                   j                          t        |           y r6   )r   closer7   rH   r9   s    r   rH   zThreadedResolverTest.tearDowns   s    r%   rJ   r>   s   @r   rX   rX   m   s    + r%   rX   c                   (     e Zd Z fdZ fdZ xZS )ThreadedResolverErrorTestc                     t         |           t               | _        t        j
                  | _        t        t        _        y r6   rB   r9   s    r   r8   zThreadedResolverErrorTest.setUpy   rE   r%   c                 L    | j                   t        _        t        |           y r6   rG   r9   s    r   rH   z"ThreadedResolverErrorTest.tearDown   rI   r%   rJ   r>   s   @r   r]   r]   x   rK   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 r6   )signalalarm)TIMEOUTs   r   <lambda>z8ThreadedResolverImportTest.test_import.<locals>.<lambda>   s    &,,w2G r%   )
preexec_fnr   g?zimport timed out)sys
executabletimer   pollassertEqualsleepfail)r   commandstartpopenreturn_coderh   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#   rv   r$   r%   r   rb   rb      s    &r%   rb   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 r6   )r7   r8   r   r   r9   s    r   r8   zCaresResolverTest.setUp   s    %r%   r<   r>   s   @r   ry   ry      s    
( (r%   ry   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   assertFalser+   s    r   test_is_valid_ipzIsValidIPTest.test_is_valid_ip   s    K01I./E*+$>?@%567[12Z01\23R)S)*T*+V,-Y/0r%   N)r!   r"   r#   r   r$   r%   r   r|   r|      s    1r%   r|   c                   T    e Zd Zd Z ej
                   eed       d      d        Zy)TestPortAllocationc                     t        dd      }	 |d   j                         d   | j                  t        fd|dd  D                     |D ]  }|j	                           y # |D ]  }|j	                           w xY w)Nr   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!     Pq 2d :P    #)r   r   r   allr[   r   socketssockr   s      @r   test_same_port_allocationz,TestPortAllocation.test_same_port_allocation   sy    q+.	1:))+A.DOOCPGABKPPQ 

 

s   <A# #A<SO_REUSEPORTzSO_REUSEPORT is not supportedc                 2   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!     Lq 2d :Lr   )r   r   r   r   r[   r   s      @r   test_reuse_portz"TestPortAllocation.test_reuse_port   s     /1%6
d	"4FGOOCLGLLMJJL 

 JJL 

s   1A- -)BN)	r!   r"   r#   r   unittestskipIfhasattrr   r   r$   r%   r   r   r      s6     X__FN++-L		r%   r   ))r/   rf   r   
subprocessr   rk   rm   r   tornado.netutilr   r   r   r   r   tornado.testingr	   r
   r   tornado.test.utilr   r   typingpycarestornado.platform.caresresolverr   ImportErrorr   r'   r2   r4   r@   rM   rX   r]   r   platformTestCaserb   ry   r|   r   r$   r%   r   <module>r      s       
    F E A = = 
 
 
$ Sm S S<
 +- + +	 7 	
- 
0 -  	 7 	 (*MN&!2!2 & O &6 D">?(*VW)+WX(* ( Y X @ (1H%% 1"** K  Gs   F FF