o
    u3b  ã                	   @   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                   @   s$   e Zd ZdZedejfdd„ƒZdS )Ú_ResolverTestMixinNÚselfc                 c   s,   � | j  ddtj¡V }|  tjdf|¡ d S )NÚ	localhostéP   )ú	127.0.0.1r   )ÚresolverÚresolveÚsocketÚ	AF_UNSPECÚassertInÚAF_INET)r   Úaddrinfo© r   ú;/usr/lib/python3/dist-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   )   s    r   c                   @   s.   e Zd ZdZe d¡edejfdd„ƒƒZ	dS )Ú_ResolverErrorTestMixinNz$Prevent internet access during buildr   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_host7   s   €"ÿz%_ResolverErrorTestMixin.test_bad_host)
r   r   r    r   ÚunittestÚskipr	   r!   r"   r'   r   r   r   r   r#   4   s
    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_getaddrinfo>   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   r4   E   ó   
zBlockingResolverTest.setUp©r   r   r    r4   Ú__classcell__r   r   r5   r   r0   C   s    r0   c                       ó(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚBlockingResolverErrorTestc                    ó$   t ƒ  ¡  tƒ | _tj| _tt_d S r2   ©r3   r4   r   r   r   ÚgetaddrinfoÚreal_getaddrinfor.   r&   r5   r   r   r4   N   ó   

zBlockingResolverErrorTest.setUpc                    ó   | j t_tƒ  ¡  d S r2   ©r?   r   r>   r3   ÚtearDownr&   r5   r   r   rC   T   ó   z"BlockingResolverErrorTest.tearDown©r   r   r    r4   rC   r9   r   r   r5   r   r;   M   ó    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   rH   r   )ú 2a02:6b8:7c:40c:c51e:495f:e23a:3r   )r3   r4   r   r   ÚAF_INET6r   r   r   )r   Úmappingr5   r   r   r4   Z   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 )NrH   r   rI   )rJ   r   r   r   )r   r   r   r   r   rK   )r   Úresultr   r   r   Útest_resolve_multiaddrf   s   €
ÿz+OverrideResolverTest.test_resolve_multiaddr)r   r   r    r4   r	   rN   r9   r   r   r5   r   rG   Y   s    rG   c                       r:   )ÚThreadedResolverTestc                    r1   r2   )r3   r4   r   r   r&   r5   r   r   r4   s   r7   zThreadedResolverTest.setUpc                    s   | j  ¡  tƒ  ¡  d S r2   )r   Úcloser3   rC   r&   r5   r   r   rC   w   s   
zThreadedResolverTest.tearDownrE   r   r   r5   r   rO   q   s    rO   c                       r:   )ÚThreadedResolverErrorTestc                    r<   r2   r=   r&   r5   r   r   r4   }   r@   zThreadedResolverErrorTest.setUpc                    rA   r2   rB   r&   r5   r   r   rC   ƒ   rD   z"ThreadedResolverErrorTest.tearDownrE   r   r   r5   r   rQ   |   rF   rQ   Ú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 r2   )Ú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   rX   r   Útest_import‹   s   
ûz&ThreadedResolverImportTest.test_importN)r   r   r    rg   r   r   r   r   rT   ˆ   s    rT   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                    r1   r2   )r3   r4   r   r   r&   r5   r   r   r4   ª   r7   zCaresResolverTest.setUpr8   r   r   r5   r   ri   ¥   s    ri   ztwisted module not presentÚ__version__z0.0z12.1zold version of twistedz!twisted resolver hangs on windowsc                       r/   )ÚTwistedResolverTestc                    r1   r2   )r3   r4   r   r   r&   r5   r   r   r4   ½   r7   zTwistedResolverTest.setUpr8   r   r   r5   r   rk   ¶   s    rk   c                   @   rS   )Ú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ƒ ¡ 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Ú ú Ú
ú )Ú
assertTruer   r&   r   r   r   Útest_is_valid_ipÃ   s   zIsValidIPTest.test_is_valid_ipN)r   r   r    rr   r   r   r   r   rl   Â   s    rl   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 ©ru   N©Úgetsockname©Ú.0Ús©Úportr   r   Ú	<genexpr>Ù   ó   € z?TestPortAllocation.test_same_port_allocation.<locals>.<genexpr>)ÚosÚenvironÚskipTestr   ry   rq   ÚallrP   )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   rv   rw   rx   rz   r}   r   r   r   æ   r€   z5TestPortAllocation.test_reuse_port.<locals>.<genexpr>)r
   r   rq   r„   rP   )r   r…   r   r†   r   r}   r   Útest_reuse_portÞ   s   
ÿÿ
ÿz"TestPortAllocation.test_reuse_portN)	r   r   r    r‡   r(   ÚskipIfÚhasattrr   rŠ   r   r   r   r   rs   Ò   s    ÿrs   )2r+   r�   rV   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#   r.   r0   r;   rG   rO   rQ   r‹   ÚplatformÚTestCaserT   ri   Úgetattrrk   rl   rs   r   r   r   r   Ú<module>   sl    ÿÿ
	
ÿ