
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \ó:  ã               @   sü  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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Zd dlmZ d dlmZ d dlmZmZ yd dlZW n ek
r¼   dZY nX ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z  d dl!m"Z" ej#dk�rDddl$m%Z% nd dlm%Z% dd„ Z&e&dƒZ'e&dƒZ(dd„ Z)dd„ Z*dQdd„Z+dd„ Z,G dd„ deƒZ-G d d!„ d!eƒZ.G d"d#„ d#ƒZ/G d$d%„ d%e/e.ƒZ0d&d'œd(d)„Z1e2ed*ƒ�rVG d+d,„ d,ej3eƒZ4G d-d.„ d.e4eƒZ5G d/d0„ d0e5ƒZ6G d1d2„ d2e/e6ƒZ7d3d4„ Z8ej9d5d6„ ƒZ:ej9d&d'œd7d8„ƒZ;ej9d9d d&d:œd;d<„ƒZ<d=d>„ Z=G d?d@„ d@ej>ƒZ?G dAdB„ dBej@ƒZAdCdD„ ZBG dEdF„ dFeCƒZDdGdH„ ZEG dIdJ„ dJejFƒZFej9dKdL„ ƒZGejHejIejJfdMdN„ZKdOdP„ ZLdS )Ré    N)Úmock)Ú
HTTPServer)ÚWSGIRequestHandlerÚ
WSGIServeré   )Úbase_events)Úcompat)Úevents)Úfutures)Ú	selectors)Útasks)Ú	coroutine)Úlogger)ÚsupportZwin32)Ú
socketpairc             C   s`   t tdƒr*tjjtj| ƒ}tjj|ƒr*|S tjjtjjtjƒd| ƒ}tjj|ƒrT|S t	| ƒ‚d S )NÚTEST_HOME_DIRÚtest)
Úhasattrr   ÚosÚpathÚjoinr   ÚisfileÚdirnameÚ__file__ÚFileNotFoundError)ÚfilenameÚfullname© r   ú*/usr/lib64/python3.6/asyncio/test_utils.pyÚ	data_file-   s    
r   zssl_cert.pemzssl_key.pemc               C   s   t d krd S t jt jƒS d S )N)ÚsslÚ
SSLContextZPROTOCOL_SSLv23r   r   r   r   Údummy_ssl_context<   s    r"   c          
   C   s@   t dd„ ƒ}|ƒ }| j|ƒ}d|_z| j|ƒ W d |jƒ  X d S )Nc               S   s   d S )Nr   r   r   r   r   ÚonceD   s    zrun_briefly.<locals>.onceF)r   Zcreate_taskZ_log_destroy_pendingÚrun_until_completeÚclose)Úloopr#   ÚgenÚtr   r   r   Úrun_brieflyC   s    
r)   é   c             C   sT   t j ƒ | }xB|ƒ sN|d k	r8|t j ƒ  }|dkr8tjƒ ‚| jtjd| d�ƒ qW d S )Nr   gü©ñÒMbP?)r&   )Útimer
   ÚTimeoutErrorr$   r   Zsleep)r&   ZpredÚtimeoutZdeadliner   r   r   Ú	run_untilR   s    r.   c             C   s   | j | jƒ | jƒ  d S )N)Z	call_soonÚstopZrun_forever)r&   r   r   r   Úrun_once\   s    r0   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚSilentWSGIRequestHandlerc             C   s   t jƒ S )N)ÚioÚStringIO)Úselfr   r   r   Ú
get_stderri   s    z#SilentWSGIRequestHandler.get_stderrc             G   s   d S )Nr   )r4   ÚformatÚargsr   r   r   Úlog_messagel   s    z$SilentWSGIRequestHandler.log_messageN)Ú__name__Ú
__module__Ú__qualname__r5   r8   r   r   r   r   r1   g   s   r1   c                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚSilentWSGIServeré   c                s"   t ƒ jƒ \}}|j| jƒ ||fS )N)ÚsuperÚget_requestÚ
settimeoutÚrequest_timeout)r4   ÚrequestÚclient_addr)Ú	__class__r   r   r?   t   s    zSilentWSGIServer.get_requestc             C   s   d S )Nr   )r4   rB   Úclient_addressr   r   r   Úhandle_errory   s    zSilentWSGIServer.handle_error)r9   r:   r;   rA   r?   rF   Ú__classcell__r   r   )rD   r   r<   p   s   r<   c               @   s   e Zd Zdd„ ZdS )ÚSSLWSGIServerMixinc             C   s^   t }t}tjƒ }|j||ƒ |j|dd�}y| j||| ƒ |jƒ  W n tk
rX   Y nX d S )NT)Zserver_side)	ÚONLYKEYÚONLYCERTr    r!   Zload_cert_chainZwrap_socketZRequestHandlerClassr%   ÚOSError)r4   rB   rE   ZkeyfileZcertfileÚcontextZssockr   r   r   Úfinish_request   s    z!SSLWSGIServerMixin.finish_requestN)r9   r:   r;   rM   r   r   r   r   rH   }   s   rH   c               @   s   e Zd ZdS )ÚSSLWSGIServerN)r9   r:   r;   r   r   r   r   rN   ’   s   rN   F)Úuse_sslc          
   #   sv   dd„ }|r|n|}|| t ƒ‰ ˆ j|ƒ ˆ jˆ _tj‡ fdd„d�}|jƒ  z
ˆ V  W d ˆ jƒ  ˆ jƒ  |j	ƒ  X d S )Nc             S   s   d}dg}|||ƒ dgS )Nz200 OKúContent-typeú
text/plains   Test message)rP   rQ   r   )ÚenvironZstart_responseZstatusZheadersr   r   r   Úapp˜   s    
z_run_test_server.<locals>.appc                  s   ˆ j dd�S )Ngš™™™™™©?)Zpoll_interval)Zserve_foreverr   )Úhttpdr   r   Ú<lambda>¥   s    z"_run_test_server.<locals>.<lambda>)Útarget)
r1   Zset_appZserver_addressÚaddressÚ	threadingZThreadÚstartÚshutdownZserver_closer   )rW   rO   Ú
server_clsÚserver_ssl_clsrS   Zserver_classZserver_threadr   )rT   r   Ú_run_test_server–   s    


r]   ZAF_UNIXc               @   s   e Zd Zdd„ ZdS )ÚUnixHTTPServerc             C   s   t jj| ƒ d| _d| _d S )Nz	127.0.0.1éP   )ÚsocketserverÚUnixStreamServerÚserver_bindZserver_nameZserver_port)r4   r   r   r   rb   ³   s    zUnixHTTPServer.server_bindN)r9   r:   r;   rb   r   r   r   r   r^   ±   s   r^   c                   s(   e Zd ZdZdd„ Z‡ fdd„Z‡  ZS )ÚUnixWSGIServerr=   c             C   s   t j| ƒ | jƒ  d S )N)r^   rb   Zsetup_environ)r4   r   r   r   rb   ½   s    
zUnixWSGIServer.server_bindc                s"   t ƒ jƒ \}}|j| jƒ |dfS )Nú	127.0.0.1Ú )rd   re   )r>   r?   r@   rA   )r4   rB   rC   )rD   r   r   r?   Á   s    zUnixWSGIServer.get_request)r9   r:   r;   rA   rb   r?   rG   r   r   )rD   r   rc   ¹   s   rc   c               @   s   e Zd Zdd„ ZdS )ÚSilentUnixWSGIServerc             C   s   d S )Nr   )r4   rB   rE   r   r   r   rF   Ï   s    z!SilentUnixWSGIServer.handle_errorN)r9   r:   r;   rF   r   r   r   r   rf   Í   s   rf   c               @   s   e Zd ZdS )ÚUnixSSLWSGIServerN)r9   r:   r;   r   r   r   r   rg   Ó   s   rg   c           	   C   s   t jƒ �} | jS Q R X d S )N)ÚtempfileZNamedTemporaryFileÚname)Úfiler   r   r   Úgen_unix_socket_path×   s    
rk   c              c   s<   t ƒ } z
| V  W d ytj| ƒ W n tk
r4   Y nX X d S )N)rk   r   ÚunlinkrK   )r   r   r   r   Úunix_socket_pathÜ   s    
rm   c             c   s,   t ƒ �}t|| ttd�E d H  W d Q R X d S )N)rW   rO   r[   r\   )rm   r]   rf   rg   )rO   r   r   r   r   Úrun_test_unix_serverè   s    rn   z	127.0.0.1)ÚhostÚportrO   c             c   s   t | |f|ttd�E d H  d S )N)rW   rO   r[   r\   )r]   r<   rN   )ro   rp   rO   r   r   r   Úrun_test_serverð   s    
rq   c             C   sP   i }x4t | ƒD ](}|jdƒr(|jdƒr(qtd d�||< qW td| f| j |ƒƒ S )NÚ__)Úreturn_valueZTestProtocol)ÚdirÚ
startswithÚendswithÚMockCallbackÚtypeÚ	__bases__)ÚbaseZdctri   r   r   r   Úmake_test_protocol÷   s    r{   c               @   s6   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestSelectorc             C   s
   i | _ d S )N)Úkeys)r4   r   r   r   Ú__init__  s    zTestSelector.__init__Nc             C   s   t j|d||ƒ}|| j|< |S )Nr   )r   ZSelectorKeyr}   )r4   Úfileobjr	   ÚdataÚkeyr   r   r   Úregister  s    
zTestSelector.registerc             C   s   | j j|ƒS )N)r}   Úpop)r4   r   r   r   r   Ú
unregister  s    zTestSelector.unregisterc             C   s   g S )Nr   )r4   r-   r   r   r   Úselect  s    zTestSelector.selectc             C   s   | j S )N)r}   )r4   r   r   r   Úget_map  s    zTestSelector.get_map)N)r9   r:   r;   r~   r‚   r„   r…   r†   r   r   r   r   r|     s
   
r|   c                   sÊ   e Zd Zd,‡ fdd„	Zdd„ Zdd„ Z‡ fdd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Z‡ fd$d%„Z‡ fd&d'„Zd(d)„ Zd*d+„ Z‡  ZS )-ÚTestLoopNc                sv   t ƒ jƒ  |d kr"dd„ }d| _nd| _|ƒ | _t| jƒ d| _d| _g | _tƒ | _	i | _
i | _| jƒ  tjƒ | _d S )Nc               s   s
   d V  d S )Nr   r   r   r   r   r'   ,  s    zTestLoop.__init__.<locals>.genFTr   g•Ö&è.>)r>   r~   Ú_check_on_closeÚ_genÚnextÚ_timeZ_clock_resolutionÚ_timersr|   Z	_selectorÚreadersÚwritersÚreset_countersÚweakrefÚWeakValueDictionaryÚ_transports)r4   r'   )rD   r   r   r~   (  s    

zTestLoop.__init__c             C   s   | j S )N)r‹   )r4   r   r   r   r+   ?  s    zTestLoop.timec             C   s   |r|  j |7  _ d S )N)r‹   )r4   Úadvancer   r   r   Úadvance_timeB  s    zTestLoop.advance_timec                sB   t ƒ jƒ  | jr>y| jjdƒ W n tk
r4   Y n
X tdƒ‚d S )Nr   zTime generator is not finished)r>   r%   rˆ   r‰   ÚsendÚStopIterationÚAssertionError)r4   )rD   r   r   r%   G  s    
zTestLoop.closec             G   s   t j||| ƒ| j|< d S )N)r	   ÚHandler�   )r4   ÚfdÚcallbackr7   r   r   r   Ú_add_readerQ  s    zTestLoop._add_readerc             C   s0   | j |  d7  < || jkr(| j|= dS dS d S )Nr   TF)Úremove_reader_countr�   )r4   r™   r   r   r   Ú_remove_readerT  s
    
zTestLoop._remove_readerc             G   sh   || j krtd|› d�ƒ‚| j | }|j|krDtd|j› d|› �ƒ‚|j|krdtd|j› d|› �ƒ‚d S )Nzfd z is not registeredzunexpected callback: z != zunexpected callback args: )r�   r—   Z	_callbackZ_args)r4   r™   rš   r7   Úhandler   r   r   Úassert_reader\  s    



zTestLoop.assert_readerc             C   s   || j krtd|› d�ƒ‚d S )Nzfd z is registered)r�   r—   )r4   r™   r   r   r   Úassert_no_readerg  s    
zTestLoop.assert_no_readerc             G   s   t j||| ƒ| j|< d S )N)r	   r˜   rŽ   )r4   r™   rš   r7   r   r   r   Ú_add_writerk  s    zTestLoop._add_writerc             C   s0   | j |  d7  < || jkr(| j|= dS dS d S )Nr   TF)Úremove_writer_countrŽ   )r4   r™   r   r   r   Ú_remove_writern  s
    
zTestLoop._remove_writerc             G   s   | j | }d S )N)rŽ   )r4   r™   rš   r7   rž   r   r   r   Úassert_writerv  s    
zTestLoop.assert_writerc             C   s8   y| j | }W n tk
r"   Y nX tdj||ƒƒ‚d S )Nz.File descriptor {!r} is used by transport {!r})r’   ÚKeyErrorÚRuntimeErrorr6   )r4   r™   Z	transportr   r   r   Ú_ensure_fd_no_transport~  s    z TestLoop._ensure_fd_no_transportc             G   s   | j |ƒ | j||f|žŽ S )N)r§   r›   )r4   r™   rš   r7   r   r   r   Ú
add_readerˆ  s    
zTestLoop.add_readerc             C   s   | j |ƒ | j|ƒS )N)r§   r�   )r4   r™   r   r   r   Úremove_reader�  s    
zTestLoop.remove_readerc             G   s   | j |ƒ | j||f|žŽ S )N)r§   r¡   )r4   r™   rš   r7   r   r   r   Ú
add_writer’  s    
zTestLoop.add_writerc             C   s   | j |ƒ | j|ƒS )N)r§   r£   )r4   r™   r   r   r   Úremove_writer—  s    
zTestLoop.remove_writerc             C   s   t jtƒ| _t jtƒ| _d S )N)ÚcollectionsÚdefaultdictÚintrœ   r¢   )r4   r   r   r   r�   œ  s    zTestLoop.reset_countersc                s:   t ƒ jƒ  x$| jD ]}| jj|ƒ}| j|ƒ qW g | _d S )N)r>   Ú	_run_oncerŒ   r‰   r•   r”   )r4   Úwhenr“   )rD   r   r   r¯      s
    
zTestLoop._run_oncec                s    | j j|ƒ tƒ j||f|žŽ S )N)rŒ   Úappendr>   Úcall_at)r4   r°   rš   r7   )rD   r   r   r²   §  s    zTestLoop.call_atc             C   s   d S )Nr   )r4   Z
event_listr   r   r   Ú_process_events«  s    zTestLoop._process_eventsc             C   s   d S )Nr   )r4   r   r   r   Ú_write_to_self®  s    zTestLoop._write_to_self)N)r9   r:   r;   r~   r+   r”   r%   r›   r�   rŸ   r    r¡   r£   r¤   r§   r¨   r©   rª   r«   r�   r¯   r²   r³   r´   rG   r   r   )rD   r   r‡     s*   

r‡   c              K   s   t jf ddgi| —ŽS )NÚspecÚ__call__)r   ZMock)Úkwargsr   r   r   rw   ²  s    rw   c               @   s   e Zd Zdd„ ZdS )ÚMockPatternc             C   s   t tjt| ƒ|tjƒƒS )N)ÚboolÚreÚsearchÚstrÚS)r4   Úotherr   r   r   Ú__eq__¿  s    zMockPattern.__eq__N)r9   r:   r;   r¿   r   r   r   r   r¸   ¶  s   	r¸   c             C   s$   t j| ƒ}|d kr td| f ƒ‚|S )Nzunable to get the source of %r)r	   Z_get_function_sourceÚ
ValueError)ÚfuncÚsourcer   r   r   Úget_function_sourceÃ  s    
rÃ   c               @   sV   e Zd Zedd„ ƒZddœdd„Zddd	„Zd
d„ Zdd„ Zdd„ Z	e
jsRdd„ ZdS )ÚTestCasec             C   s&   | j }|d k	r|jdd� | jƒ  d S )NT)Úwait)Z_default_executorrZ   r%   )r&   Zexecutorr   r   r   Ú
close_loopË  s    zTestCase.close_loopT)Úcleanupc            C   s    t jd ƒ |r| j| j|ƒ d S )N)r	   Úset_event_loopZ
addCleanuprÆ   )r4   r&   rÇ   r   r   r   rÈ   Ò  s    
zTestCase.set_event_loopNc             C   s   t |ƒ}| j|ƒ |S )N)r‡   rÈ   )r4   r'   r&   r   r   r   Únew_test_loopÙ  s    
zTestCase.new_test_loopc             C   s   | j t_ d S )N)Ú_get_running_loopr	   )r4   r   r   r   Úunpatch_get_running_loopÞ  s    z!TestCase.unpatch_get_running_loopc             C   s    t j| _dd„ t _tjƒ | _d S )Nc               S   s   d S )Nr   r   r   r   r   rU   ã  s    z TestCase.setUp.<locals>.<lambda>)r	   rÊ   r   Zthreading_setupÚ_thread_cleanup)r4   r   r   r   ÚsetUpá  s    
zTestCase.setUpc             C   sB   | j ƒ  tjd ƒ | jtjƒ dƒ | jƒ  tj| j	Ž  tj
ƒ  d S )N)NNN)rË   r	   rÈ   ZassertEqualÚsysÚexc_infoZ
doCleanupsr   Zthreading_cleanuprÌ   Zreap_children)r4   r   r   r   ÚtearDownæ  s    
zTestCase.tearDownc             O   s   G dd„ dƒ}|ƒ S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z!TestCase.subTest.<locals>.EmptyCMc             S   s   d S )Nr   )r4   r   r   r   Ú	__enter__÷  s    z+TestCase.subTest.<locals>.EmptyCM.__enter__c             W   s   d S )Nr   )r4   Úexcr   r   r   Ú__exit__ù  s    z*TestCase.subTest.<locals>.EmptyCM.__exit__N)r9   r:   r;   rÑ   rÓ   r   r   r   r   ÚEmptyCMö  s   rÔ   r   )r4   r7   r·   rÔ   r   r   r   ÚsubTestõ  s    zTestCase.subTest)N)r9   r:   r;   ÚstaticmethodrÆ   rÈ   rÉ   rË   rÍ   rÐ   r   ZPY34rÕ   r   r   r   r   rÄ   Ê  s   
rÄ   c              c   s2   t j} zt jtjd ƒ d V  W d t j| ƒ X d S )Nr   )r   ÚlevelZsetLevelÚloggingZCRITICAL)Z	old_levelr   r   r   Údisable_loggerþ  s
    
rÙ   c             C   s*   t jtjƒ}| |_||_||_d|j_|S )Ng        )r   Z	MagicMockÚsocketÚprotorx   ÚfamilyZ
gettimeoutrs   )rÛ   rx   rÜ   Zsockr   r   r   Úmock_nonblocking_socket  s    rÝ   c               C   s   t jddd�S )Nz'asyncio.sslproto._is_sslproto_availableF)rs   )r   Zpatchr   r   r   r   Úforce_legacy_ssl_support  s    rÞ   )r*   )Mr¬   Ú
contextlibr2   rØ   r   rº   rÚ   r`   rÎ   rh   rX   r+   Zunittestr�   r   Zhttp.serverr   Zwsgiref.simple_serverr   r   r    ÚImportErrorre   r   r   r	   r
   r   r   Z
coroutinesr   Úlogr   r   r   ÚplatformZwindows_utilsr   r   rJ   rI   r"   r)   r.   r0   r1   r<   rH   rN   r]   r   ra   r^   rc   rf   rg   rk   Úcontextmanagerrm   rn   rq   r{   ZBaseSelectorr|   ZBaseEventLoopr‡   rw   r¼   r¸   rÃ   rÄ   rÙ   ZIPPROTO_TCPZSOCK_STREAMZAF_INETrÝ   rÞ   r   r   r   r   Ú<module>   s†   


	
 4
