a
    	¼3j°#  ã                   @   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mZ ejdkrXe 	d¡‚d dl
Z
d dlZd dlZd dlmZ d dlmZ dd„ ZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkrúe ¡  dS )é    N)ÚmockÚwin32zWindows only)Úwindows_events)Úutilsc                   C   s   t  d ¡ d S ©N)ÚasyncioÚset_event_loop_policy© r	   r	   úa/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_windows_events.pyÚtearDownModule   s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
UpperProtoc                 C   s
   g | _ d S r   )Úbuf©Úselfr	   r	   r
   Ú__init__   s    zUpperProto.__init__c                 C   s
   || _ d S r   )Útrans)r   r   r	   r	   r
   Úconnection_made   s    zUpperProto.connection_madec                 C   s:   | j  |¡ d|v r6| j d | j ¡ ¡ ¡ | j ¡  d S )Nó   
ó    )r   Úappendr   ÚwriteÚjoinÚupperÚclose)r   Údatar	   r	   r
   Údata_received    s    zUpperProto.data_receivedN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r	   r	   r	   r
   r      s   r   c                   @   s   e Zd Zdd„ ZdS )ÚProactorLoopCtrlCc              	   C   sz   dd„ }t j|d}t ¡ }zDz"| |j¡ | ¡  |  d¡ W n tyR   Y n0 W |  	|¡ n|  	|¡ 0 | 
¡  d S )Nc                   S   s   t  d¡ t tj¡ d S )Nçš™™™™™¹?)ÚtimeÚsleepÚsignalÚraise_signalÚSIGINTr	   r	   r	   r
   ÚSIGINT_after_delay+   s    
z9ProactorLoopCtrlC.test_ctrl_c.<locals>.SIGINT_after_delay©Útargetz%should not fall through 'run_forever')Ú	threadingÚThreadr   Zget_event_loopZ	call_soonÚstartÚrun_foreverZfailÚKeyboardInterruptÚ
close_loopr   )r   r&   ÚthreadÚloopr	   r	   r
   Útest_ctrl_c)   s    zProactorLoopCtrlC.test_ctrl_cN)r   r   r   r1   r	   r	   r	   r
   r   '   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚProactorMultithreadingc                    sD   d‰dd„ ‰ ‡ ‡fdd„}t j|d}| ¡  | ¡  |  ˆ¡ d S )NFc                   Ó   s   t  d¡I d H  d S )Nr   )r   r"   r	   r	   r	   r
   ÚcoroA   s    zAProactorMultithreading.test_run_from_nonmain_thread.<locals>.coroc                     s$   t  ¡ } |  ˆ ƒ ¡ |  ¡  d‰d S )NT)r   Znew_event_loopÚrun_until_completer   ©r0   ©r3   Úfinishedr	   r
   ÚfuncD   s    zAProactorMultithreading.test_run_from_nonmain_thread.<locals>.funcr'   )r)   r*   r+   r   Ú
assertTrue)r   r8   r/   r	   r6   r
   Útest_run_from_nonmain_thread>   s    z3ProactorMultithreading.test_run_from_nonmain_threadN)r   r   r   r:   r	   r	   r	   r
   r2   =   s   r2   c                       s\   e Z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‡  ZS )ÚProactorTestsc                    s$   t ƒ  ¡  t ¡ | _|  | j¡ d S r   )ÚsuperÚsetUpr   ÚProactorEventLoopr0   Zset_event_loopr   ©Ú	__class__r	   r
   r=   T   s    

zProactorTests.setUpc                 C   sh   t  ¡ \}}| j |t ¡ ¡}tj| j |d¡| jd}| ¡  | j 	|¡ |  
| ¡ d¡ | ¡  d S )Néd   r5   r   )ÚsocketÚ
socketpairr0   Z_make_socket_transportr   ÚProtocolZensure_futureZ	sock_recvr   r4   ÚassertEqualÚresult)r   ÚaÚbr   Úfr	   r	   r
   Ú
test_closeY   s    zProactorTests.test_closec                 C   sV   dt  ¡  }t |¡}|  t¡ t |¡ W d   ƒ n1 s@0    Y  | ¡  d S )Nz\\.\pipe\test_double_bind-%s)ÚosÚgetpidr   Ú
PipeServerÚassertRaisesÚPermissionErrorr   )r   ÚADDRESSZserver1r	   r	   r
   Útest_double_bindb   s
    
(zProactorTests.test_double_bindc                 C   s    | j  |  ¡ ¡}|  |d¡ d S )NÚdone)r0   r4   Ú
_test_piperE   )r   Úresr	   r	   r
   Ú	test_pipei   s    zProactorTests.test_pipec                 ƒ   s¤  dt  ¡  }|  t¡& | j tj|¡I d H  W d   ƒ n1 sB0    Y  | j t	|¡I d H \}|  
|tj¡ g }tdƒD ]j}tj| jd}tj|| jd‰ | j ‡ fdd„|¡I d H \}}|  
|tj¡ |  ˆ |¡ | ||f¡ q|t|ƒD ] \}\}}	|	 d |¡ ¡ ¡ qðt|ƒD ]:\}\}}	| ¡ I d H }
|  |
d |¡ ¡ ¡ |	 ¡  q| ¡  |  t¡& | j tj|¡I d H  W d   ƒ n1 s–0    Y  dS )	Nz\\.\pipe\_test_pipe-%sé   r5   c                      s   ˆ S r   r	   r	   ©Úprotocolr	   r
   Ú<lambda>~   r   z*ProactorTests._test_pipe.<locals>.<lambda>z	lower-{}
z	LOWER-{}
rR   )rK   rL   rN   ÚFileNotFoundErrorr0   Zcreate_pipe_connectionr   rD   Zstart_serving_piper   ÚassertIsInstancer   rM   ÚrangeÚStreamReaderZStreamReaderProtocolZ	TransportrE   r   Ú	enumerater   ÚformatÚencodeÚreadliner   )r   rP   ZserverZclientsÚiZstream_readerr   ÚprotoÚrÚwÚresponser	   rW   r
   rS   m   sB    ÿ(ÿÿÿÿ*zProactorTests._test_pipec              	   C   sž   t ƒ }tj|_tjjtd|dj}| jj 	d¡}| j 
|¡}| ¡  |  tj¡ | j |¡ W d   ƒ n1 sr0    Y  W d   ƒ n1 s0    Y  d S )NZConnectPipe)Zside_effectZpipe_address)ÚOSErrorÚ_overlappedZERROR_PIPE_BUSYÚwinerrorr   ZpatchÚobjectr0   Ú	_proactorZconnect_pipeZcreate_taskÚcancelrN   r   ÚCancelledErrorr4   )r   ÚexcÚconnectr3   Ztaskr	   r	   r
   Útest_connect_pipe_cancel“   s    
ÿz&ProactorTests.test_connect_pipe_cancelc                 C   s  t  d ddd ¡}|  tj|¡ | jj |d¡}| j ¡ }| j 	|¡}| j ¡ | }|  
|d¡ |  | ¡ ¡ |  d|  ko‚dkn  |¡ t  |¡ | jj |d¡}| j ¡ }| j 	|¡}| j ¡ | }|  
|d¡ |  | ¡ ¡ |  d|  koúdk n  |¡ | ¡  d S )	NTFg      à?gÍÌÌÌÌÌÜ?gÍÌÌÌÌÌì?é
   r   g333333Ó?)rh   ÚCreateEventÚ
addCleanupÚ_winapiÚCloseHandler0   rk   Úwait_for_handler!   r4   rE   ÚassertFalserF   r9   ZSetEventrl   )r   ÚeventÚfutr+   rR   Úelapsedr	   r	   r
   Útest_wait_for_handle    s$    
 

 z"ProactorTests.test_wait_for_handlec                 C   sÈ   t  d ddd ¡}|  tj|¡ | jj |d¡}| ¡  | j 	¡ }|  
tj¡ | j |¡ W d   ƒ n1 sn0    Y  | j 	¡ | }|  d|  koœdk n  |¡ | jj |¡}| ¡  | ¡  d S )NTFrq   r   r    )rh   rr   rs   rt   ru   r0   rk   rv   rl   r!   rN   r   rm   r4   r9   )r   rx   ry   r+   rz   r	   r	   r
   Útest_wait_for_handle_cancelÂ   s    
* z)ProactorTests.test_wait_for_handle_cancelc                 C   sr   t  ¡ | j_| j d dd„ ¡}| j ¡  | j ¡  | j ¡  | j ¡  | j |¡ |  | j¡ |  	| jjj
¡ d S )Nc                   S   s   d S r   r	   r	   r	   r	   r
   rY   ß   r   z;ProactorTests.test_read_self_pipe_restart.<locals>.<lambda>)r   ZMockr0   Zcall_exception_handlerZrun_in_executorÚstopr,   r4   r.   rw   Zcalled)r   rI   r	   r	   r
   Útest_read_self_pipe_restartÖ   s    



	z)ProactorTests.test_read_self_pipe_restart)r   r   r   r=   rJ   rQ   rU   rS   rp   r{   r|   r~   Ú__classcell__r	   r	   r?   r
   r;   R   s   	&"r;   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚWinPolicyTestsc              	      sN   ‡ fdd„}t  ¡ }z(t  t  ¡ ¡ t  |ƒ ¡ W t  |¡ nt  |¡ 0 d S )Nc                   “   s   ˆ   t ¡ tj¡ d S r   )r[   r   Úget_running_loopZSelectorEventLoopr	   r   r	   r
   Úmainö   s    þz5WinPolicyTests.test_selector_win_policy.<locals>.main)r   Úget_event_loop_policyr   ZWindowsSelectorEventLoopPolicyÚrun©r   r‚   Z
old_policyr	   r   r
   Útest_selector_win_policyõ   s    ÿz'WinPolicyTests.test_selector_win_policyc              	      sN   ‡ fdd„}t  ¡ }z(t  t  ¡ ¡ t  |ƒ ¡ W t  |¡ nt  |¡ 0 d S )Nc                   “   s   ˆ   t ¡ tj¡ d S r   )r[   r   r   r>   r	   r   r	   r
   r‚     s    þz5WinPolicyTests.test_proactor_win_policy.<locals>.main)r   rƒ   r   ZWindowsProactorEventLoopPolicyr„   r…   r	   r   r
   Útest_proactor_win_policy  s    ÿz'WinPolicyTests.test_proactor_win_policyN)r   r   r   r†   r‡   r	   r	   r	   r
   r€   ó   s   r€   Ú__main__)rK   r#   rB   Úsysr!   r)   Zunittestr   ÚplatformZSkipTestrh   rt   r   r   Ztest.test_asyncior   Z
test_utilsr   rD   r   ZTestCaser   r2   r;   r€   r   r‚   r	   r	   r	   r
   Ú<module>   s.   

 "