o
    h                   	   @   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   addrinfo r   M/var/www/vscode/kcb/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   )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errnoEIO)argsr   r   r   _failing_getaddrinfoD   s   r0   c                          e Zd Z fddZ  ZS )BlockingResolverTestc                       t    t | _d S N)supersetUpr   r   r*   	__class__r   r   r6   K      
zBlockingResolverTest.setUpr!   r"   r#   r6   __classcell__r   r   r7   r   r2   I   s    r2   c                       (   e Zd Z fddZ fddZ  ZS )BlockingResolverErrorTestc                    $   t    t | _tj| _tt_d S r4   r5   r6   r   r   r   getaddrinforeal_getaddrinfor0   r*   r7   r   r   r6   T      

zBlockingResolverErrorTest.setUpc                       | j t_t   d S r4   rA   r   r@   r5   tearDownr*   r7   r   r   rE   Z      z"BlockingResolverErrorTest.tearDownr!   r"   r#   r6   rE   r;   r   r   r7   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   rJ   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r5   r6   r   r   r   r   r   r   )r   mappingr7   r   r   r6   `   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 )NrJ   r   rK   )rL   r   r   r   )r   r   r   r   assertInr   )r   resultr   r   r   test_resolve_multiaddrl   s   
z+OverrideResolverTest.test_resolve_multiaddr)r!   r"   r#   r6   r	   rP   r;   r   r   r7   r   rI   _   s    rI   c                       r<   )ThreadedResolverTestc                    r3   r4   )r5   r6   r   r   r*   r7   r   r   r6   y   r9   zThreadedResolverTest.setUpc                    s   | j   t   d S r4   )r   closer5   rE   r*   r7   r   r   rE   }   s   
zThreadedResolverTest.tearDownrG   r   r   r7   r   rQ   w   s    rQ   c                       r<   )ThreadedResolverErrorTestc                    r>   r4   r?   r*   r7   r   r   r6      rB   zThreadedResolverErrorTest.setUpc                    rC   r4   rD   r*   r7   r   r   rE      rF   z"ThreadedResolverErrorTest.tearDownrG   r   r   r7   r   rS      rH   rS   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 r4   )signalalarmr   TIMEOUTr   r   <lambda>   s   
 z8ThreadedResolverImportTest.test_import.<locals>.<lambda>)
preexec_fnr   g?zimport timed out)sys
executabletimer   pollassertEqualsleepfail)r   commandstartpopenreturn_coder   rZ   r   test_import   s   
z&ThreadedResolverImportTest.test_importN)r!   r"   r#   ri   r   r   r   r   rV      s    rV   zpycares module not presentz*pycares doesn't return loopback on windowsdarwinz*pycares doesn't return 127.0.0.1 on darwinc                       r1   )CaresResolverTestc                    r3   r4   )r5   r6   r   r   r*   r7   r   r   r6      r9   zCaresResolverTest.setUpr:   r   r   r7   r   rk      s    rk   ztwisted module not present__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                       r1   )TwistedResolverTestc                    r3   r4   )r5   r6   r   r   r*   r7   r   r   r6      r9   zTwistedResolverTest.setUpr:   r   r   r7   r   rm      s    rm   c                   @   rU   )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  
 daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r*   r   r   r   test_is_valid_ip   s   zIsValidIPTest.test_is_valid_ipN)r!   r"   r#   rt   r   r   r   r   rn      s    rn   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 )NTRAVISz6dual-stack servers often have port conflicts on travisr   r      c                 3        | ]}|  d   kV  qdS rw   Ngetsockname.0sportr   r   	<genexpr>       z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>)osenvironskipTestr   r{   r   allrR   )r   socketssockr   r   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   rx   ry   rz   r|   r   r   r   r      r   z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>)r
   r   r   r   rR   )r   r   r   r   r   r   r   test_reuse_port   s   

z"TestPortAllocation.test_reuse_portN)	r!   r"   r#   r   unittestskipIfhasattrr   r   r   r   r   r   ru      s    ru   )2r-   r   rX   r   
subprocessr   r^   r`   r   tornado.netutilr   r   r   r   r   tornado.testingr   r	   r
   tornado.test.utilr   r$   TYPE_CHECKINGr   pycaresImportErrortornado.platform.caresresolverr   twistedtwisted.namestornado.platform.twistedr   objectr   r'   r0   r2   r=   rI   rQ   rS   r   platformTestCaserV   rk   getattrrm   rn   ru   r   r   r   r   <module>   sl    		
