o
    )Zh                   	   @   sv  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rMd dlmZ zd dlZW n ey^   dZY nw d dlmZ z
d dlZd dlZW n eyz   dZY nw d dlmZ G d	d
 d
e Z!G dd de Z"dd Z#eG dd dee!Z$G dd dee"Z%G dd dee!Z&eG dd dee!Z'G dd dee"Z(ee)ej*dkdG dd dej+Z,ee)edu de)ej*dkde)ej*dkd G d!d" d"ee!Z-ee)edu d#e)e.ed$d%d&k d'e)ej*dkd(G d)d* d*ee!Z/G d+d, d,ej+Z0G d-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                   @   $   e Zd ZdZedejfddZdS )_ResolverTestMixinNselfc                 c   sD    | 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   Zaddrinfo r   P/var/www/html/lang_env/lib/python3.10/site-packages/tornado/test/netutil_test.pytest_localhost,   s   z!_ResolverTestMixin.test_localhost)__name__
__module____qualname__r   r	   typingAnyr   r   r   r   r   r   )       r   c                   @   r   )_ResolverErrorTestMixinNr   c                 c   sF    |  t | jddtjV  W d    d S 1 sw   Y  d S )Nzan invalid domainr   )ZassertRaisesIOErrorr   r   r   r   r   r   r   r   test_bad_host>   s   "z%_ResolverErrorTestMixin.test_bad_host)r    r!   r"   r   r	   r#   r$   r)   r   r   r   r   r&   ;   r%   r&   c                  G   s   t tjd)z4Dummy implementation of getaddrinfo for use in mockszmock: lookup failed)r   gaierrorerrnoZEIO)argsr   r   r   _failing_getaddrinfoD   s   r-   c                          e Zd Z fddZ  ZS )BlockingResolverTestc                       t    t | _d S N)supersetUpr   r   r(   	__class__r   r   r3   K      
zBlockingResolverTest.setUpr    r!   r"   r3   __classcell__r   r   r4   r   r/   I   s    r/   c                       (   e Zd Z fddZ fddZ  ZS )BlockingResolverErrorTestc                    $   t    t | _tj| _tt_d S r1   r2   r3   r   r   r   getaddrinforeal_getaddrinfor-   r(   r4   r   r   r3   T      

zBlockingResolverErrorTest.setUpc                       | j t_t   d S r1   r>   r   r=   r2   tearDownr(   r4   r   r   rB   Z      z"BlockingResolverErrorTest.tearDownr    r!   r"   r3   rB   r8   r   r   r4   r   r:   S       r:   c                       s(   e Zd Z fddZedd Z  ZS )OverrideResolverTestc                    s<   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   rG   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r2   r3   r   r   r   r   r   r   )r   mappingr4   r   r   r3   `   s   
zOverrideResolverTest.setUpc                 c   sR    | j ddtjV }| tjdf| | j ddtjV }| tjdf| d S )NrG   r   rH   )rI   r   r   r   )r   r   r   r   ZassertInr   )r   resultr   r   r   test_resolve_multiaddrl   s   
z+OverrideResolverTest.test_resolve_multiaddr)r    r!   r"   r3   r	   rL   r8   r   r   r4   r   rF   _   s    rF   c                       r9   )ThreadedResolverTestc                    r0   r1   )r2   r3   r   r   r(   r4   r   r   r3   y   r6   zThreadedResolverTest.setUpc                    s   | j   t   d S r1   )r   closer2   rB   r(   r4   r   r   rB   }   s   
zThreadedResolverTest.tearDownrD   r   r   r4   r   rM   w   s    rM   c                       r9   )ThreadedResolverErrorTestc                    r;   r1   r<   r(   r4   r   r   r3      r?   zThreadedResolverErrorTest.setUpc                    r@   r1   rA   r(   r4   r   r   rB      rC   z"ThreadedResolverErrorTest.tearDownrD   r   r   r4   r   rO      rE   rO   win32z!preexec_fn not available on win32c                   @      e Zd Zdd ZdS )ThreadedResolverImportTestc                    s   d t jddg}t }t| fddd}t |  k r;| }|d ur.| d| d S td t |  k s| d	 d S )
N   z-cz'import tornado.test.resolve_test_helperc                      s
   t  S r1   )signalalarmr   TIMEOUTr   r   <lambda>   s   
 z8ThreadedResolverImportTest.test_import.<locals>.<lambda>)
preexec_fnr   g?zimport timed out)sys
executabletimer   pollZassertEqualsleepZfail)r   commandstartpopenZreturn_coder   rV   r   test_import   s   
z&ThreadedResolverImportTest.test_importN)r    r!   r"   rb   r   r   r   r   rR      s    rR   zpycares module not presentz*pycares doesn't return loopback on windowsdarwinz*pycares doesn't return 127.0.0.1 on darwinc                       r.   )CaresResolverTestc                    r0   r1   )r2   r3   r   r   r(   r4   r   r   r3      r6   zCaresResolverTest.setUpr7   r   r   r4   r   rd      s    rd   ztwisted module not present__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                       r.   )TwistedResolverTestc                    r0   r1   )r2   r3   r   r   r(   r4   r   r   r3      r6   zTwistedResolverTest.setUpr7   r   r   r4   r   rf      s    rf   c                   @   rQ   )IsValidIPTestc                 C   s   |  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  
 Zdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r(   r   r   r   test_is_valid_ip   s   zIsValidIPTest.test_is_valid_ipN)r    r!   r"   rl   r   r   r   r   rg      s    rg   c                   @   s0   e Zd Zdd Zeeed ddd ZdS )TestPortAllocationc              	      s   dt jv r
| d tdd}z&|d  d  | t fdd|dd  D  W |D ]}|  q-d S |D ]}|  q8w )NZTRAVISz6dual-stack servers often have port conflicts on travisr   r      c                 3        | ]}|  d   kV  qdS rn   Ngetsockname.0sportr   r   	<genexpr>       z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>)osenvironZskipTestr   rr   r   allrN   )r   socketssockr   rv   r   test_same_port_allocation   s   


&

z,TestPortAllocation.test_same_port_allocationSO_REUSEPORTzSO_REUSEPORT is not supportedc              	      sz   g }t dd\} z%t ddd}| t fdd|D  W |  |D ]}|  q&d S |  |D ]}|  q5w )NT)
reuse_portr   c                 3   ro   rp   rq   rs   rv   r   r   rx      ry   z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>)r
   r   r   r|   rN   )r   r}   r   r~   r   rv   r   test_reuse_port   s   

z"TestPortAllocation.test_reuse_portN)	r    r!   r"   r   unittestskipIfhasattrr   r   r   r   r   r   rm      s    rm   )2r+   rz   rT   r   
subprocessr   rZ   r\   r   Ztornado.netutilr   r   r   r   r   Ztornado.testingr   r	   r
   Ztornado.test.utilr   r#   TYPE_CHECKINGr   ZpycaresImportErrorZtornado.platform.caresresolverr   ZtwistedZtwisted.namesZtornado.platform.twistedr   objectr   r&   r-   r/   r:   rF   rM   rO   r   platformZTestCaserR   rd   getattrrf   rg   rm   r   r   r   r   <module>   sl    		
