U
    d                  	   @   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   s*   | j ddtjV }| tjdf| d S )N	localhostP   )	127.0.0.1r   )resolverresolvesocket	AF_UNSPECassertInAF_INET)r   Zaddrinfo r   =/tmp/pip-unpacked-wheel-fekwu36z/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_host7   s    z%_ResolverErrorTestMixin.test_bad_host)r   r   r    r   r	   r!   r"   r&   r   r   r   r   r#   4   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_getaddrinfo=   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   r.   D   s    
zBlockingResolverTest.setUpr   r   r    r.   __classcell__r   r   r/   r   r+   B   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-   r.   r   r   r   getaddrinforeal_getaddrinfor*   r   r/   r   r   r.   M   s    
zBlockingResolverErrorTest.setUpc                    s   | j t_t   d S r,   r6   r   r5   r-   tearDownr   r/   r   r   r8   S   s    z"BlockingResolverErrorTest.tearDownr   r   r    r.   r8   r2   r   r   r/   r   r3   L   s   r3   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-   r.   r   r   AF_INET6r   r   r   )r   mappingr/   r   r   r.   Y   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   r   r>   )r   resultr   r   r   test_resolve_multiaddre   s     z+OverrideResolverTest.test_resolve_multiaddr)r   r   r    r.   r	   rA   r2   r   r   r/   r   r:   X   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-   r.   r   r   r   r/   r   r   r.   r   s    
zThreadedResolverTest.setUpc                    s   | j   t   d S r,   )r   closer-   r8   r   r/   r   r   r8   v   s    
zThreadedResolverTest.tearDownr9   r   r   r/   r   rB   p   s   rB   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,   r4   r   r/   r   r   r.   |   s    
zThreadedResolverErrorTest.setUpc                    s   | j t_t   d S r,   r7   r   r/   r   r   r8      s    z"ThreadedResolverErrorTest.tearDownr9   r   r   r/   r   rD   {   s   rD   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   rJ   r   test_import   s    z&ThreadedResolverImportTest.test_importN)r   r   r    rX   r   r   r   r   rF      s   rF   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-   r.   r   r   r   r/   r   r   r.      s    
zCaresResolverTest.setUpr1   r   r   r/   r   rZ      s   rZ   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-   r.   r   r   r   r/   r   r   r.      s    
zTwistedResolverTest.setUpr1   r   r   r/   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.4z::1z2620:0:1cfe:face:b00c::3zwww.google.comr   z4.4.4.4<z
 127.0.0.1  
 Zdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
assertTruer   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   rC   rh   rb   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
   rC   r   rb   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   rH   r   
subprocessr   rO   rQ   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+   r3   r:   rB   rD   ry   platformZTestCaserF   rZ   getattrr\   r]   rd   r   r   r   r   <module>   sh   

		
 