B
    r%Z\S7                 @   s   d dl mZmZm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
Z
d dlZd dlZd dlmZ d dlmZ d dlZd dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3m4Z4 d d
l2m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd  ZEd!d" ZFd#d$ ZGd%d& ZHd'd( ZId)d* ZJd+d, ZKd-d. ZLd/d0 ZMd1d2 ZNd3d4 ZOd5d6 ZPd7d8 ZQd9d: ZRe9 d;d< ZSd=d> ZTd?d@ ZUe9 dAdB ZVdS )C    )print_functiondivisionabsolute_importN)partial)gen)IOLoop)QueueEmptyisqueuePY2Iterator)time)Allsync	is_kernel	ensure_ip	str_graphtruncate_exceptionget_tracebackqueue_to_iteratoriterator_to_queue_maybe_complex
read_blockseek_delimiterfuncnameensure_bytes	open_portget_ip_interfacenbytesset_thread_statethread_state
LoopRunnerparse_bytesparse_timedelta)looploop_in_thread)divhas_ipv6incthrowsgen_testcaptured_loggerc                sN   t jdd t jdd t jdd  t j fdd}| | d S )	Nc               S   s   dd  d S )N   r    r-   r-   r-   ;lib/python3.7/site-packages/distributed/tests/test_utils.pyr)      s    ztest_All.<locals>.throwsc               s   s   t dV  d S )N
   )r   sleepr-   r-   r-   r.   slow"   s    ztest_All.<locals>.slowc             S   s   t | d d S )Nr,   )r   ZReturn)xr-   r-   r.   r(   &   s    ztest_All.<locals>.incc           	   3   s   t  fddtdD V } | ttddks2tt }xb  g  ggD ]F}yt |V  dsjtW n tk
r   Y nX t }|| dk sRtqRW d S )Nc                s   g | ]} |qS r-   r-   ).0i)r(   r-   r.   
<listcomp>-   s    z'test_All.<locals>.f.<locals>.<listcomp>r/   r,      F)r   rangelistAssertionErrorr   ZeroDivisionError)ZresultsstartZtasksend)r(   r1   r)   r-   r.   f*   s    
ztest_All.<locals>.f)r   	coroutineZrun_sync)r$   r=   r-   )r(   r1   r)   r.   test_All   s
    r?   c          
      s  | }yt |td}W n\ tk
rp } z>|}dt|ks:tt }t|}tdd |D s`tW d d }~X Y nX  fdd}dd  yt ||d}W np tk
r } zPdt|kstt }t|}td	d |D sttd
d |D stW d d }~X Y nX d S )Nr,   Zhelloc             s   s   | ]}d |kV  qdS )r)   Nr-   )r3   liner-   r-   r.   	<genexpr>F   s    z"test_sync_error.<locals>.<genexpr>c                s    | S )Nr-   )r2   )	function2r-   r.   	function1H   s    z"test_sync_error.<locals>.function1c             S   s   t | S )N)r)   )r2   r-   r-   r.   rB   K   s    z"test_sync_error.<locals>.function2c             s   s   | ]}d |kV  qdS )rC   Nr-   )r3   r@   r-   r-   r.   rA   T   s    c             s   s   | ]}d |kV  qdS )rB   Nr-   )r3   r@   r-   r-   r.   rA   U   s    )	r   r)   	Exceptionstrr9   r   	traceback	format_tbany)r%   r$   resultexcr=   tbLrC   r-   )rB   r.   test_sync_error=   s&    
(
rM   c          	   C   s2   | }t tj t| tjddd W d Q R X d S )Ng      ?g?)Zcallback_timeout)pytestraisesr   TimeoutErrorr   r0   )r%   r$   r-   r-   r.   test_sync_timeoutX   s    rQ   c           	   C   sP   t  } |   t   t   tt}t| t	d W d Q R X |
d d S )Nr,   zIOLoop is clos(ed|ing))r   currentcloseZclear_currentZclear_instancerN   rO   RuntimeErrorr   r(   match)r$   exc_infor-   r-   r.   test_sync_closed_loop^   s    rW   c               C   s   t d t dkstd S )NZIPythonF)rN   Zimportorskipr   r9   r-   r-   r-   r.   test_is_kerneli   s    
rX   c               C   sZ   t ddkstt ddks tt ddks0tt rVt ddksFtt ddksVtd S )NZ	localhost)z	127.0.0.1z::1z123.123.123.123z8.8.8.8z2001:4860:4860::8888z::1)r   r9   r'   r-   r-   r-   r.   test_ensure_ipv   s    rY   c            	   C   sn   t jdkrtddksLtn0t jdr:tddksLtntdt jf  tt td W d Q R X d S )NdarwinZlo0z	127.0.0.1Zlinuxloz)test needs to be enhanced for platform %rz__non-existent-interface)	sysplatformr   r9   
startswithrN   skiprO   KeyErrorr-   r-   r-   r.   test_get_ip_interface   s    
ra   c              C   sz   t d} tt| dkstt| d}t|t| ks:ttt|dk sNtdt|ks^tt d} t| | ksvtd S )NA  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai  d      Zaaaaa)
ValueErrorlenrE   r9   r   type)er=   r-   r-   r.   test_truncate_exception   s    
ri   c           
      sl   dd   fddfdd} y| d W n: t k
rf } zt }t|jdksVtW d d }~X Y nX d S )	Nc             S   s
   t | dS )Nr   )r&   )r2   r-   r-   r.   rd      s    ztest_get_traceback.<locals>.ac                s    | S )Nr-   )r2   )rd   r-   r.   b   s    ztest_get_traceback.<locals>.bc                s    | S )Nr-   )r2   )rj   r-   r.   c   s    ztest_get_traceback.<locals>.cr,   rF   )rD   r   rg   __name__r9   )rk   rh   rK   r-   )rd   rj   r.   test_get_traceback   s    rm   c              C   sT   t  } | d | d t| }t|ts0tt|dks@tt|dksPtd S )Nr,      )r   putr   
isinstancer   r9   next)qseqr-   r-   r.   test_queue_to_iterator   s    

rt   c              C   s6   t dddg} t| }t|s"t| dks2td S )Nr,   rn      )iterr   r
   r9   get)rs   rr   r-   r-   r.   test_iterator_to_queue   s    rx   c              C   s  ddi} t | | kstdtdfi} t | tdtdfiks@ttdftdfd} t | tdtdftdttdfiks~tdditdftdfdtdddgftddgfdg}x\|D ]T} t | }t| }dd	 |D }td
d |D stt| |t||kstqW d S )Nr2   r,   )r2   r,   ))r2   r,   )r2   rn   )r2   rn   rn   ru   c             S   s   g | ]}t |qS r-   )rE   )r3   kr-   r-   r.   r5      s    z"test_str_graph.<locals>.<listcomp>c             s   s   | ]}t |tV  qd S )N)rp   rE   )r3   ry   r-   r-   r.   rA      s    z!test_str_graph.<locals>.<genexpr>)	r   r9   r(   rE   sumr8   alldaskrw   )ZdskZdsksZsdskkeysZskeysr-   r-   r.   test_str_graph   s"    
r~   c               C   sd   t drtt drtt tdfs(tt tdfgs:tt tdfgsLtt dtdfis`td S )Nr,   r2   )r   r9   r(   r-   r-   r-   r.   test_maybe_complex   s    r   c                 s^  d} |  dddg}t| t dddks2tt dddd	d
ksJtt dddd	d
ksbtt dddd	d
ksztt dddd	dkstt dddd	dkstt dddd	dkstt dddd	dkstt dddd	dkstt dddd	dkstxLddddgdddggD ]2} fdd|D }d td ||ks$tq$W d S )N   
s   123s   456s   789r,   rn   s   23r   )	delimiters   123
ru      s   123
456
   s   123
456
789rb       s   456
s   456
789)r   ru   )ru   ru   )   ru   )	   rn   )r      )r   r   )r   r   c                s   g | ]\}}t  ||d qS )r   )r   )r3   ol)r=   r-   r.   r5      s    z#test_read_block.<locals>.<listcomp>)joinioBytesIOr   r9   filter)r   dataZolsoutr-   )r=   r.   test_read_block   s"    
r   c              C   s   t d} t| dd |  dks&tx4dD ],}| d t| d|d |  dks,tq,W t d	} x4d
D ],}| d t| d|d |  dksltqlW t d} | d t| dd |  dkstd S )Ns   123
456
789r   r   r   )r,   r   rb   r,   )Z	blocksizer   s   123abc456abc789)r,   rn   ru   r   r   r   r/   s   abcr   s   123
456   )r   r   r   tellr9   seek)r=   Zbsr-   r-   r.   test_seek_delimiter_endline   s     







r   c              C   sH   dd } t | dkstt t| dks,tt tt| dksDtd S )Nc               S   s   d S )Nr-   r-   r-   r-   r.   r=     s    ztest_funcname.<locals>.fr=   )r   r9   r   )r=   r-   r-   r.   test_funcname  s    r   c              C   sZ   ddt dtdg} tr&| td x.| D ]&}t|}t|tsFt|dks,tq,W d S )N   11)	
memoryview	bytearrayr   appendbufferr   rp   bytesr9   )r   drI   r-   r-   r.   test_ensure_bytes  s    
r   c              C   sR   dd } | dd | t dd tjdd}td	}| ||j | ||j d S )
Nc             S   s(   t | |kstt t| |ks$td S )N)r   r9   r   )objZexpectedr-   r-   r.   check  s    ztest_nbytes.<locals>.checks   123ru   s   4567r   )r/   r/   )shaper,   )r   npZonesZarrayr   )r   Z	multi_dimZscalarr-   r-   r.   test_nbytes  s    

r   c              C   s0   t  } ttjtj}|d| f |  d S )N )r   socketZAF_INETZSOCK_STREAMZbindrS   )Zportsr-   r-   r.   test_open_port-  s    r   c            	   C   s6   t dd tjdkstW d Q R X ttdr2td S )Nr,   )r2   r2   )r   r    r2   r9   hasattrr-   r-   r-   r.   test_set_thread_state4  s    r   c             C   s,   t  }| |jd |jdddks(tdS )z3
    Raise if the given IOLoop is not running.
    *   r,   )timeoutN)r   add_callbackro   rw   r9   )r$   rr   r-   r-   r.   assert_running;  s    r   c          	   C   sT   t  }y| |jd W n tk
r,   Y n$X tt |jdd W dQ R X dS )z/
    Raise if the given IOLoop is running.
    r   g{Gz?)r   N)r   r   ro   rT   rN   rO   r	   rw   )r$   rr   r-   r-   r.   assert_not_runningD  s    r   c             C   s:  t  }|  t }|j|| fks&t| r2tt|j |  | sPtt|j |	  | rntt|j t  }t|d}|j|kst| rtt| |  | stt| |	  | rtt| t| d}| rtt|  |  | stt|  |	  | r4tt|  t  }|  tdd}|j|ksdt| rrtt|j |  | stt|j |	  | rtt|j t  }t|dd}|j|kst| rtt|j |  | stt|j |	  | r,tt|j d S )N)r$   T)asynchronous)r$   r   )
r   Zmake_currentr!   r$   r9   
is_startedr   r;   r   stop)r%   r$   runnerr-   r-   r.   test_loop_runnerS  sn    










r   c             C   sx  t  }t|d}t|d}t| |  t| t|d}|  t| |  t| |  t| |  t| |  t| t  }t|d}t|d}t| |  t| |  t| t|d}|  t| |  t| |  t| |  t| t| d}t| d}t|  |  t|  |  t|  |  t|  |  t|  d S )N)r$   )r   r!   r   r;   r   r   )r%   r$   rd   rj   rk   r-   r-   r.   test_two_loop_runners  sZ    







r   c              c   sx   t dd} | jt kst|  r(ttdV  |   |  sHttdV  | 	  |  rhttdV  d S )NT)r   g{Gz?)
r!   r$   r   rR   r9   r   r   r0   r;   r   )r   r-   r-   r.   test_loop_runner_gen  s    
r   c               C   s   t ddkstt ddks tt ddks0tt ddks@tt dd	ksPtt d
dks`tt ddksptt ddkstt ddkstt ddkstd S )NZ100rb   z100 MBi Z100MZ5kBi  z5.4 kBi  Z1kiBi   Z1Mii   Z1e6i@B z1e6 kBi ʚ;ZMB)r"   r9   r-   r-   r-   r.   test_parse_bytes  s    r   c              C   s   x`ddddddddd	d
ddt jdddft jdddfgD ]$\} }t| }t|| dk s:tq:W tddddksvttddddksttddddksttddddkstd S )N)Z1sr,   )Z100msg?)Z5Sr   )z5.5sg      @)z5.5 sg      @)z1 secondr,   )z3.3 secondsgffffff
@)z3.3 millisecondsgF%uk?)z3500 usgy&1l?)z1 nsg&.>)Z2mx   )z	2 minutesr   rn   )secondsrb   )Zmillisecondsg?g+=Z1msr   )defaultgMbP?r   r,   Zms)datetimeZ	timedeltar#   absr9   )textvaluerI   r-   r-   r.   test_parse_timedelta  s(    r   c           	   #   s   t jdd  td\} y$t fddtdD tdV  W n tk
rP   Y nX dd l}|  t d	V  W d Q R X d
| 	 kst
d S )Nc               S   s   t dd S )Nfoo1234)rD   r-   r-   r-   r.   r)     s    z+test_all_exceptions_logging.<locals>.throwsr   c                s   g | ]
}  qS r-   r-   )r3   _)r)   r-   r.   r5     s    z/test_all_exceptions_logging.<locals>.<listcomp>r   )Zquiet_exceptionsr   g?r   )r   r>   r+   r   r7   rD   gcZcollectr0   getvaluer9   )Zsior   r-   )r)   r.   test_all_exceptions_logging   s    
 r   )WZ
__future__r   r   r   r   	functoolsr   r   r   r\   rF   Znumpyr   rN   Ztornador   Ztornado.ioloopr   r|   Zdistributed.compatibilityr   r	   r
   r   r   Zdistributed.metricsr   Zdistributed.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Zdistributed.utils_testr$   r%   r&   r'   r(   r)   r*   r+   r?   rM   rQ   rW   rX   rY   ra   ri   rm   rt   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   sX   `  			
	C7