U
    luf                   	   @   sz  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rd dlmZ zd dlZW n ek
r   dZY nX d dlmZ zd dlZd dlZW n ek
r   dZY nX 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kde)ej*dkde)ej*dkd G d!d" d"ee!Z-ee)edk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                   @   s$   e Zd ZdZeejdddZdS )_ResolverTestMixinNselfc                 c   sB   | j ddtjV }| tjdf|kp2tjdf|k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   =/tmp/pip-unpacked-wheel-bmg6zs32/tornado/test/netutil_test.pytest_localhost,   s    z!_ResolverTestMixin.test_localhost)__name__
__module____qualname__r   r	   typingAnyr   r   r   r   r   r   )   s   r   c                   @   s$   e Zd ZdZeejdddZdS )_ResolverErrorTestMixinNr   c              	   c   s.   |  t | jddtjV  W 5 Q R X 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%   ;   s   r%   c                  G   s   t tjddS )z4Dummy implementation of getaddrinfo for use in mockszmock: lookup failedN)r   gaierrorerrnoZEIO)argsr   r   r   _failing_getaddrinfoD   s    r,   c                       s   e Zd Z fddZ  ZS )BlockingResolverTestc                    s   t    t | _d S N)supersetUpr   r   r   	__class__r   r   r0   K   s    
zBlockingResolverTest.setUpr    r!   r"   r0   __classcell__r   r   r1   r   r-   I   s   r-   c                       s(   e Zd Z fddZ fddZ  ZS )BlockingResolverErrorTestc                    s$   t    t | _tj| _tt_d S r.   r/   r0   r   r   r   getaddrinforeal_getaddrinfor,   r   r1   r   r   r0   T   s    
zBlockingResolverErrorTest.setUpc                    s   | j t_t   d S r.   r8   r   r7   r/   tearDownr   r1   r   r   r:   Z   s    z"BlockingResolverErrorTest.tearDownr    r!   r"   r0   r:   r4   r   r   r1   r   r5   S   s   r5   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   r=   r   ) 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r/   r0   r   r   r   r   r   r   )r   mappingr1   r   r   r0   `   s    
 
 
 zOverrideResolverTest.setUpc                 c   sP   | j ddtjV }| tjdf| | j ddtjV }| tjdf| d S )Nr=   r   r>   )r?   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"   r0   r	   rB   r4   r   r   r1   r   r<   _   s   r<   c                       s(   e Zd Z fddZ fddZ  ZS )ThreadedResolverTestc                    s   t    t | _d S r.   )r/   r0   r   r   r   r1   r   r   r0   y   s    
zThreadedResolverTest.setUpc                    s   | j   t   d S r.   )r   closer/   r:   r   r1   r   r   r:   }   s    
zThreadedResolverTest.tearDownr;   r   r   r1   r   rC   w   s   rC   c                       s(   e Zd Z fddZ fddZ  ZS )ThreadedResolverErrorTestc                    s$   t    t | _tj| _tt_d S r.   r6   r   r1   r   r   r0      s    
zThreadedResolverErrorTest.setUpc                    s   | j t_t   d S r.   r9   r   r1   r   r   r:      s    z"ThreadedResolverErrorTest.tearDownr;   r   r   r1   r   rE      s   rE   win32z!preexec_fn not available on win32c                   @   s   e Zd Zdd ZdS )ThreadedResolverImportTestc                    sv   d t jddg}t }t| fddd}t |  k rh| }|d k	r\| d| d S td q,| d	 d S )
N   z-cz'import tornado.test.resolve_test_helperc                      s
   t  S r.   )signalalarmr   TIMEOUTr   r   <lambda>       z8ThreadedResolverImportTest.test_import.<locals>.<lambda>)
preexec_fnr   g?zimport timed out)sys
executabletimer   pollassertEqualsleepZfail)r   commandstartpopenZreturn_coder   rK   r   test_import   s    z&ThreadedResolverImportTest.test_importN)r    r!   r"   rY   r   r   r   r   rG      s   rG   zpycares module not presentz*pycares doesn't return loopback on windowsdarwinz*pycares doesn't return 127.0.0.1 on darwinc                       s   e Zd Z fddZ  ZS )CaresResolverTestc                    s   t    t | _d S r.   )r/   r0   r   r   r   r1   r   r   r0      s    
zCaresResolverTest.setUpr3   r   r   r1   r   r[      s   r[   ztwisted module not present__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                       s   e Zd Z fddZ  ZS )TwistedResolverTestc                    s   t    t | _d S r.   )r/   r0   r   r   r   r1   r   r   r0      s    
zTwistedResolverTest.setUpr3   r   r   r1   r   r]      s   r]   c                   @   s   e Zd Zdd ZdS )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"   rc   r   r   r   r   r^      s   r^   c                   @   s0   e Zd Zdd Zeeed ddd ZdS )TestPortAllocationc              	      sp   dt jkr| d tdd}z8|d  d  | t fdd|dd  D  W 5 |D ]}|  q\X d S )NZTRAVISz6dual-stack servers often have port conflicts on travisr   r      c                 3   s   | ]}|  d   kV  qdS re   Ngetsockname.0sportr   r   	<genexpr>   s     z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>)osenvironZskipTestr   rD   rh   r   all)r   socketssockr   rl   r   test_same_port_allocation   s    


(z,TestPortAllocation.test_same_port_allocationSO_REUSEPORTzSO_REUSEPORT is not supportedc              	      sb   g }t dd\} z.t ddd}| t fdd|D  W 5 |  |D ]}|  qNX d S )NT)
reuse_portr   c                 3   s   | ]}|  d   kV  qdS rf   rg   ri   rl   r   r   rn      s     z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>)r
   rD   r   r   rq   )r   rr   r   rs   r   rl   r   test_reuse_port   s     z"TestPortAllocation.test_reuse_portN)	r    r!   r"   rt   unittestskipIfhasattrr   rw   r   r   r   r   rd      s   
 rd   )2r*   ro   rI   r   
subprocessr   rP   rR   rx   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-   r5   r<   rC   rE   ry   platformZTestCaserG   r[   getattrr]   r^   rd   r   r   r   r   <module>   sh   

		
 