a
    	¼3j8	 ã                   @   s  d 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 e
jdkr¤e d¡‚ddlZddlmZ dd	lmZ dd
lmZ ejZdd„ Zdd„ Ze ed¡G dd„ dej ƒƒZ!e e"edƒd¡G dd„ dej ƒƒZ#e e"edƒd¡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"d#¡Z*G d$d%„ d%ƒZ+G d&d'„ d'e+ej ƒZ,G d(d)„ d)e+ej ƒZ-G d*d+„ d+ej ƒZ.G d,d-„ d-ej ƒZ/e0d.kre 1¡  dS )/zTests for unix_events.py.é    N)Úmock)Úsupport)Úsocket_helperÚwin32z	UNIX only)Úlog)Úunix_events)Úutilsc                   C   s   t  d ¡ d S ©N)ÚasyncioZset_event_loop_policy© r   r   ú^/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_unix_events.pyÚtearDownModule!   s    r   c                 C   s"   | j d u rd S | j  ¡  d | _ d S r	   )Z_pipeÚclose)Ú	transportr   r   r   Úclose_pipe_transport%   s    

r   zSignals are not supportedc                       sF  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Ze d	¡d
d„ ƒZ	e d	¡dd„ ƒZ
e d	¡dd„ ƒZe d	¡dd„ ƒZe d	¡e d¡dd„ ƒƒZe d	¡e d¡dd„ ƒƒZe d	¡dd„ ƒZe d	¡dd„ ƒZe d	¡e d¡dd„ ƒƒZe d	¡dd„ ƒZe d	¡dd „ ƒZe d	¡d!d"„ ƒZe d#¡e d	¡d$d%„ ƒƒZ‡  ZS )&ÚSelectorEventLoopSignalTestsc                    s$   t ƒ  ¡  t ¡ | _|  | j¡ d S r	   ©ÚsuperÚsetUpr
   ZSelectorEventLoopÚloopÚset_event_loop©Úself©Ú	__class__r   r   r   1   s    

z"SelectorEventLoopSignalTests.setUpc                 C   s.   |   t| jjd¡ |   t| jjtjd ¡ d S )NÚ1é   )ÚassertRaisesÚ	TypeErrorr   Z_check_signalÚ
ValueErrorÚsignalÚNSIGr   r   r   r   Útest_check_signal6   s    
ÿÿz.SelectorEventLoopSignalTests.test_check_signalc                 C   s   | j  tjd ¡ d S )Nr   )r   Ú_handle_signalr    r!   r   r   r   r   Útest_handle_signal_no_handler<   s    z:SelectorEventLoopSignalTests.test_handle_signal_no_handlerc                 C   sh   t jt ¡ dt ¡ d}| ¡  || jjtjd < t ¡ | j_	| j 
tjd ¡ | jj	 tjd ¡ d S )Nr   )r   r   )r
   ÚHandler   ÚMockÚcancelr   Ú_signal_handlersr    r!   Úremove_signal_handlerr#   Úassert_called_with)r   Úhr   r   r   Ú$test_handle_signal_cancelled_handler?   s    ÿzASelectorEventLoopSignalTests.test_handle_signal_cancelled_handlerzasyncio.unix_events.signalc                 C   s6   t j|_t j|_t|j_|  t| jj	t j
dd„ ¡ d S )Nc                   S   s   dS ©NTr   r   r   r   r   Ú<lambda>Q   ó    zRSelectorEventLoopSignalTests.test_add_signal_handler_setup_error.<locals>.<lambda>)r    r!   Úvalid_signalsr   Úset_wakeup_fdÚside_effectr   ÚRuntimeErrorr   Úadd_signal_handlerÚSIGINT©r   Úm_signalr   r   r   Ú#test_add_signal_handler_setup_errorH   s    
ýz@SelectorEventLoopSignalTests.test_add_signal_handler_setup_errorc                 C   sP   t j|_dd„ }|}|ƒ }|  |j¡ ||fD ]}|  td| jjt j|¡ q.d S )Nc                   Ó   s   d S r	   r   r   r   r   r   Úsimple_coroutineW   s    z^SelectorEventLoopSignalTests.test_add_signal_handler_coroutine_error.<locals>.simple_coroutinez1coroutines cannot be used with add_signal_handler)	r    r!   Ú
addCleanupr   ÚassertRaisesRegexr   r   r4   r5   )r   r7   r9   Z	coro_funcZcoro_objÚfuncr   r   r   Ú'test_add_signal_handler_coroutine_errorS   s    ýzDSelectorEventLoopSignalTests.test_add_signal_handler_coroutine_errorc                 C   sX   t j|_t j|_dd„ }| j t j|¡ | jj t j¡}|  |t	j
¡ |  |j|¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   i   r/   zFSelectorEventLoopSignalTests.test_add_signal_handler.<locals>.<lambda>)r    r!   r0   r   r4   ÚSIGHUPr(   ÚgetÚassertIsInstancer
   r%   ÚassertEqualÚ	_callback)r   r7   Úcbr+   r   r   r   Útest_add_signal_handlerd   s    z4SelectorEventLoopSignalTests.test_add_signal_handlerc                 C   sT   t j|_t j|_dd„ }||_G dd„ dtƒ}||j _|  || jjt j	dd„ ¡ d S )Nc                 S   s   | dkrt ƒ ‚d S )Néÿÿÿÿ)r   )Úfdr   r   r   r1   t   s    zYSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.set_wakeup_fdc                   @   s   e Zd ZejZdS )zOSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.ErrN)Ú__name__Ú
__module__Ú__qualname__ÚerrnoZEFAULTr   r   r   r   ÚErry   s   rK   c                   S   s   dS r-   r   r   r   r   r   r.   €   r/   zTSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.<lambda>)
r    r!   r0   r1   ÚOSErrorr2   r   r   r4   r5   )r   r7   r1   rK   r   r   r   Ú%test_add_signal_handler_install_erroro   s    
ýzBSelectorEventLoopSignalTests.test_add_signal_handler_install_errorzasyncio.base_events.loggerc                 C   sv   t j|_t j|_G dd„ dtƒ}||j _dd„ | jjt j< |  t	| jj
t jdd„ ¡ |  |jj¡ |  d|jj¡ d S )Nc                   @   s   e Zd ZejZdS )zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.ErrN©rG   rH   rI   rJ   ÚEINVALr   r   r   r   rK   ˆ   s   rK   c                   S   s   dS r-   r   r   r   r   r   r.   Œ   r/   zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.<lambda>c                   S   s   dS r-   r   r   r   r   r   r.      r/   r   )r    r!   r0   rL   r2   r   r(   r>   r   r3   r4   r5   ÚassertFalseÚinfoÚcalledrA   r1   Ú
call_count©r   Ú	m_loggingr7   rK   r   r   r   Ú&test_add_signal_handler_install_error2‚   s    
ýzCSelectorEventLoopSignalTests.test_add_signal_handler_install_error2c                 C   sd   G dd„ dt ƒ}||j_tj|_tj|_|  t| jjtj	dd„ ¡ |  
|jj¡ |  d|jj¡ d S )Nc                   @   s   e Zd ZejZdS )zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.ErrNrN   r   r   r   r   rK   —   s   rK   c                   S   s   dS r-   r   r   r   r   r   r.       r/   zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.<lambda>é   )rL   r    r2   r!   r0   r   r3   r   r4   r5   rP   rQ   rR   rA   r1   rS   rT   r   r   r   Ú&test_add_signal_handler_install_error3”   s    
ýzCSelectorEventLoopSignalTests.test_add_signal_handler_install_error3c                 C   st   t j|_t j|_| j t jdd„ ¡ |  | j t j¡¡ |  |jj	¡ |  |j j	¡ |  
t j|jf|j jd ¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   ©   r/   zISelectorEventLoopSignalTests.test_remove_signal_handler.<locals>.<lambda>r   )r    r!   r0   r   r4   r>   Ú
assertTruer)   r1   rR   rA   ÚSIG_DFLÚ	call_argsr6   r   r   r   Útest_remove_signal_handler¤   s    ÿÿz7SelectorEventLoopSignalTests.test_remove_signal_handlerc                 C   s–   t j|_t j|_t j|_| j t jdd„ ¡ tƒ | jjt j< |j	 
¡  |  | j t j¡¡ |  |j	j¡ |  |j j¡ |  t j|jf|j jd ¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   ¸   r/   zKSelectorEventLoopSignalTests.test_remove_signal_handler_2.<locals>.<lambda>r   )r    r!   r5   r0   r   r4   Úobjectr(   r>   r1   Ú
reset_mockrY   r)   rP   rR   rA   Údefault_int_handlerr[   r6   r   r   r   Útest_remove_signal_handler_2²   s    
ÿ

þz9SelectorEventLoopSignalTests.test_remove_signal_handler_2c                 C   sJ   t j|_t j|_| j t jdd„ ¡ t|j_| j 	t j¡ |  
|j¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   É   r/   zWSelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_error.<locals>.<lambda>)r    r!   r0   r   r4   r>   r   r1   r2   r)   rY   rQ   )r   rU   r7   r   r   r   Ú(test_remove_signal_handler_cleanup_errorÄ   s    zESelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_errorc                 C   sD   t j|_t j|_| j t jdd„ ¡ t|j _|  t| jj	t j¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   Ô   r/   zOSelectorEventLoopSignalTests.test_remove_signal_handler_error.<locals>.<lambda>)
r    r!   r0   r   r4   r>   rL   r2   r   r)   r6   r   r   r   Ú test_remove_signal_handler_errorÐ   s    ÿz=SelectorEventLoopSignalTests.test_remove_signal_handler_errorc                 C   sT   t j|_t j|_| j t jdd„ ¡ G dd„ dtƒ}||j _|  t	| jj
t j¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   ß   r/   zPSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.<lambda>c                   @   s   e Zd ZejZdS )zKSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.ErrNrN   r   r   r   r   rK   á   s   rK   )r    r!   r0   r   r4   r>   rL   r2   r   r3   r)   )r   r7   rK   r   r   r   Ú!test_remove_signal_handler_error2Û   s    ÿz>SelectorEventLoopSignalTests.test_remove_signal_handler_error2c                 C   s„   t j|_t j|_| j t jdd„ ¡ | j t jdd„ ¡ |  t| jj	ƒd¡ |j
 ¡  | j ¡  |  t| jj	ƒd¡ |j
 d¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   í   r/   z9SelectorEventLoopSignalTests.test_close.<locals>.<lambda>c                   S   s   dS r-   r   r   r   r   r   r.   î   r/   rW   r   rE   )r    r!   r0   r   r4   r>   ÚSIGCHLDrA   Úlenr(   r1   r^   r   Úassert_called_once_withr6   r   r   r   Ú
test_closeè   s    

z'SelectorEventLoopSignalTests.test_closezasyncio.unix_events.sysc                 C   s¦   t j|_t j|_| j t jdd„ ¡ |  t| jjƒd¡ d|j	_
|j  ¡  |  td¡ | j ¡  W d   ƒ n1 sv0    Y  |  t| jjƒd¡ |  |j j¡ d S )Nc                   S   s   dS r-   r   r   r   r   r   r.   þ   r/   zGSelectorEventLoopSignalTests.test_close_on_finalizing.<locals>.<lambda>r   Tz skipping signal handlers removalr   )r    r!   r0   r   r4   r>   rA   re   r(   Úis_finalizingÚreturn_valuer^   ÚassertWarnsRegexÚResourceWarningr   rP   rR   )r   r7   Zm_sysr   r   r   Útest_close_on_finalizingù   s    
ÿ(z5SelectorEventLoopSignalTests.test_close_on_finalizing)rG   rH   rI   r   r"   r$   r,   r   Úpatchr8   r=   rD   rM   rV   rX   r\   r`   ra   rb   rc   rg   rl   Ú__classcell__r   r   r   r   r   .   sD   	












r   ÚAF_UNIXzUNIX Sockets are not supportedc                       sÒ   e Zd Z‡ fdd„Zejdd„ ƒZejdd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Ze eedƒd¡ejdd„ ƒƒZdd„ Zdd„ Ze d¡dd„ ƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Z‡  ZS )(Ú SelectorEventLoopUnixSocketTestsc                    s$   t ƒ  ¡  t ¡ | _|  | j¡ d S r	   r   r   r   r   r   r     s    

z&SelectorEventLoopUnixSocketTests.setUpc                 C   sŠ   t  ¡ n}t tj¡}| |¡ | d¡ | ¡  | j dd„ |¡}| j 	|¡}| ¡  | j 	| 
¡ ¡ W d   ƒ n1 s|0    Y  d S )Nr   c                   S   s   d S r	   r   r   r   r   r   r.     r/   z]SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sock.<locals>.<lambda>)Ú
test_utilsÚunix_socket_pathÚsocketro   ÚbindÚlistenr   r   Úcreate_unix_serverÚrun_until_completeÚwait_closed)r   ÚpathÚsockÚcoroÚsrvr   r   r   Ú*test_create_unix_server_existing_path_sock  s    


zKSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sockc                 C   sl   t  ¡ P}t |¡}| j dd„ |¡}| j |¡}| ¡  | j | ¡ ¡ W d   ƒ n1 s^0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   &  r/   zRSelectorEventLoopUnixSocketTests.test_create_unix_server_pathlib.<locals>.<lambda>)	rq   rr   ÚpathlibÚPathr   rv   rw   r   rx   )r   ry   Zsrv_coror|   r   r   r   Útest_create_unix_server_pathlib"  s    

z@SelectorEventLoopUnixSocketTests.test_create_unix_server_pathlibc              	   C   s~   t  ¡ b}t |¡}| j dd„ |¡}|  t¡ | j |¡ W d   ƒ n1 sR0    Y  W d   ƒ n1 sp0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   .  r/   zVSelectorEventLoopUnixSocketTests.test_create_unix_connection_pathlib.<locals>.<lambda>)	rq   rr   r~   r   r   Úcreate_unix_connectionr   ÚFileNotFoundErrorrw   )r   ry   r{   r   r   r   Ú#test_create_unix_connection_pathlib+  s
    

zDSelectorEventLoopUnixSocketTests.test_create_unix_connection_pathlibc              	   C   sx   t  ¡ \}| j dd„ |j¡}|  td¡ | j |¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   6  r/   z`SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsock.<locals>.<lambda>zAddress.*is already in use)ÚtempfileÚNamedTemporaryFiler   rv   Únamer;   rL   rw   )r   Úfiler{   r   r   r   Ú-test_create_unix_server_existing_path_nonsock4  s    
ÿzNSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsockc                 C   sR   | j jdd„ ddd}|  td¡ | j  |¡ W d   ƒ n1 sD0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   <  r/   zSSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_bool.<locals>.<lambda>ÚspamT)ry   Ússlz"ssl argument must be an SSLContext)r   rv   r;   r   rw   ©r   r{   r   r   r   Ú test_create_unix_server_ssl_bool;  s    ÿÿzASelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_boolc                 C   sP   | j jdd„ d d}|  td¡ | j  |¡ W d   ƒ n1 sB0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   C  r/   zXSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosock.<locals>.<lambda>©ry   z#path was not specified, and no sock©r   rv   r;   r   rw   r‹   r   r   r   Ú%test_create_unix_server_nopath_nosockB  s
    ÿzFSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosockc              	   C   s~   t   ¡ }|^ | jjdd„ d |d}|  td¡ | j |¡ W d   ƒ n1 sR0    Y  W d   ƒ n1 sp0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   K  r/   zXSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsock.<locals>.<lambda>©ry   rz   ú"A UNIX Domain Stream.*was expected)rs   r   rv   r;   r   rw   ©r   rz   r{   r   r   r   Ú%test_create_unix_server_path_inetsockH  s    ÿÿzFSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsockc              	   C   s†   t   t jt j¡}|^ | jjdd„ d |d}|  td¡ | j |¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   T  r/   zUSelectorEventLoopUnixSocketTests.test_create_unix_server_path_dgram.<locals>.<lambda>r   r‘   )rs   ro   Ú
SOCK_DGRAMr   rv   r;   r   rw   r’   r   r   r   Ú"test_create_unix_server_path_dgramQ  s    ÿÿzCSelectorEventLoopUnixSocketTests.test_create_unix_server_path_dgramÚSOCK_NONBLOCKz$no socket.SOCK_NONBLOCK (linux only)c              	   C   sÌ   t   t jt jt jB ¡}t ¡ }|j}W d   ƒ n1 s:0    Y  zv|T | |¡ | jj	dd„ d |d}| j 
|¡}| ¡  | j 
| ¡ ¡ W d   ƒ n1 s¤0    Y  W t |¡ nt |¡ 0 d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   e  r/   z^SelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittype.<locals>.<lambda>r   )rs   ro   ÚSOCK_STREAMr–   r„   r…   r†   rt   r   rv   rw   r   rx   ÚosÚunlink)r   rz   r‡   Úfnr{   r|   r   r   r   Ú+test_create_unix_server_path_stream_bittypeZ  s    ÿ
$
ÿ0zLSelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittypec                 C   sR   | j jdd„ ddd}|  td¡ | j  |¡ W d   ƒ n1 sD0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   n  r/   zfSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_timeout_with_plain_sock.<locals>.<lambda>r‰   r   ©ry   Zssl_handshake_timeoutú1ssl_handshake_timeout is only meaningful with sslrŽ   r‹   r   r   r   Ú3test_create_unix_server_ssl_timeout_with_plain_sockm  s    ÿþzTSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_timeout_with_plain_sockc              	   C   s|   t   ¡ }|\ | jjdd„ |d}|  td¡ | j |¡ W d   ƒ n1 sP0    Y  W d   ƒ n1 sn0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   x  r/   z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_path_inetsock.<locals>.<lambda>©rz   r‘   )rs   r   r   r;   r   rw   r’   r   r   r   Ú)test_create_unix_connection_path_inetsocku  s    ÿÿzJSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_inetsockzasyncio.unix_events.socketc                 C   sÔ   t  ¡ }||j_t|j_| jjdd„ dd}|  	t¡ | j 
|¡ W d   ƒ n1 sX0    Y  |  |jj¡ t|j_| jjdd„ dd}|  	t¡ | j 
|¡ W d   ƒ n1 s¸0    Y  |  |jj¡ d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   …  r/   zUSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_error.<locals>.<lambda>z/testr   c                   S   s   d S r	   r   r   r   r   r   r.   ‹  r/   )r   r&   rs   ri   rL   rt   r2   r   rv   r   rw   rY   r   rR   ÚMemoryError)r   Zm_socketrz   r{   r   r   r   Ú"test_create_unix_server_bind_error~  s    **zCSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_errorc                 C   sV   | j jdd„ tjtƒ d}|  td¡ | j  |¡ W d   ƒ n1 sH0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   ’  r/   zXSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sock.<locals>.<lambda>rŸ   zpath and sock can not be)r   r   r˜   Údevnullr]   r;   r   rw   r‹   r   r   r   Ú%test_create_unix_connection_path_sock  s
    ÿzFSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sockc                 C   sN   | j  dd„ d ¡}|  td¡ | j  |¡ W d   ƒ n1 s@0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   ˜  r/   z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosock.<locals>.<lambda>zno path and sock were specified©r   r   r;   r   rw   r‹   r   r   r   Ú)test_create_unix_connection_nopath_nosock–  s    ÿÿzJSelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosockc                 C   sT   | j jdd„ tjdd}|  td¡ | j  |¡ W d   ƒ n1 sF0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   Ÿ  r/   z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhost.<locals>.<lambda>r‰   )Zserver_hostnamez"server_hostname is only meaningful©r   r   r˜   r£   r;   r   rw   r‹   r   r   r   Ú,test_create_unix_connection_nossl_serverhost  s    ÿÿzMSelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhostc                 C   sT   | j jdd„ tjdd}|  td¡ | j  |¡ W d   ƒ n1 sF0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   ¦  r/   z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhost.<locals>.<lambda>T)rŠ   z/you have to pass server_hostname when using sslr§   r‹   r   r   r   Ú,test_create_unix_connection_ssl_noserverhost¤  s    ÿÿzMSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhostc                 C   sR   | j jdd„ ddd}|  td¡ | j  |¡ W d   ƒ n1 sD0    Y  d S )Nc                   S   s   d S r	   r   r   r   r   r   r.   ®  r/   zjSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock.<locals>.<lambda>r‰   r   rœ   r   r¥   r‹   r   r   r   Ú7test_create_unix_connection_ssl_timeout_with_plain_sock­  s    ÿþzXSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock)rG   rH   rI   r   r   Zskip_unless_bind_unix_socketr}   r€   rƒ   rˆ   rŒ   r   r“   r•   ÚunittestÚ
skipUnlessÚhasattrrs   r›   rž   r    r   rm   r¢   r¤   r¦   r¨   r©   rª   rn   r   r   r   r   rp     s2   

			ÿ	
	rp   Úsendfilezsendfile is not supportedc                       sÀ   e Zd Zdd ZG dd„ dejƒZe‡ fdd„ƒZe‡ fdd„ƒZ	‡ fd	d
„Z
d&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‡  ZS )'Ú&SelectorEventLoopUnixSockSendfileTestss    12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdeé   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )z.SelectorEventLoopUnixSockSendfileTests.MyProtoc                 C   s2   d| _ d| _tƒ | _| ¡ | _d | _| ¡ | _d S )NF)ÚstartedÚclosedÚ	bytearrayÚdataÚcreate_futureÚfutr   Ú_ready)r   r   r   r   r   Ú__init__½  s    
z7SelectorEventLoopUnixSockSendfileTests.MyProto.__init__c                 C   s   d| _ || _| j d ¡ d S r-   )r±   r   r·   Ú
set_result)r   r   r   r   r   Úconnection_madeÅ  s    z>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_madec                 C   s   | j  |¡ d S r	   )r´   Úextend)r   r´   r   r   r   Údata_receivedÊ  s    z<SelectorEventLoopUnixSockSendfileTests.MyProto.data_receivedc                 C   s   d| _ | j d ¡ d S r-   )r²   r¶   r¹   )r   Úexcr   r   r   Úconnection_lostÍ  s    z>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_lostc                 Ã   s   | j I d H  d S r	   )r¶   r   r   r   r   rx   Ñ  s    z:SelectorEventLoopUnixSockSendfileTests.MyProto.wait_closedN)rG   rH   rI   r¸   rº   r¼   r¾   rx   r   r   r   r   ÚMyProto»  s
   r¿   c                    sF   t tjdƒ}| | j¡ W d   ƒ n1 s.0    Y  tƒ  ¡  d S )NÚwb)Úopenr   ÚTESTFNÚwriteÚDATAr   Ú
setUpClass)ÚclsÚfpr   r   r   rÅ   Ô  s    *z1SelectorEventLoopUnixSockSendfileTests.setUpClassc                    s   t  t j¡ tƒ  ¡  d S r	   )r   r™   rÂ   r   ÚtearDownClass)rÆ   r   r   r   rÈ   Ú  s    z4SelectorEventLoopUnixSockSendfileTests.tearDownClassc                    s@   t  ¡ | _|  | j¡ ttjdƒ| _|  | jj	¡ t
ƒ  ¡  d S )NÚrb)r
   Únew_event_loopr   r   rÁ   r   rÂ   r‡   r:   r   r   r   r   r   r   r   r   ß  s
    
z,SelectorEventLoopUnixSockSendfileTests.setUpTc                 C   sR   t   t jt j¡}| d¡ | t jt jd¡ | t jt jd¡ |rN|  |j	¡ |S )NFr°   )
rs   ÚAF_INETr—   ÚsetblockingÚ
setsockoptÚ
SOL_SOCKETÚ	SO_SNDBUFÚ	SO_RCVBUFr:   r   )r   Úcleanuprz   r   r   r   Úmake_socketæ  s    
z2SelectorEventLoopUnixSockSendfileTests.make_socketc                 C   s   | j  |¡S r	   )r   rw   r‹   r   r   r   Úrun_loopï  s    z/SelectorEventLoopUnixSockSendfileTests.run_loopc                    sž   ˆ  ¡ }ˆ ˆj¡‰ t ¡ }ˆj dd}| tj|f¡ ˆ ˆjj‡ fdd„|d¡‰ˆ ˆj 	|tj|f¡¡ ˆ ˆ j
¡ ‡ ‡‡fdd„}ˆ |¡ |ˆ fS )NF)rÑ   c                      s   ˆ S r	   r   r   )Úprotor   r   r.   ù  r/   z@SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.<lambda>rŸ   c                      s2   ˆ j  ¡  ˆ ˆ  ¡ ¡ ˆ ¡  ˆ ˆ ¡ ¡ d S r	   )r   r   rÓ   rx   r   ©rÔ   r   Zserverr   r   rÑ   ý  s    
z?SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.cleanup)rÒ   r¿   r   r   Zfind_unused_portrt   ZHOSTrÓ   Úcreate_serverZsock_connectr·   r:   )r   rz   ÚportZsrv_sockrÑ   r   rÕ   r   Úprepareò  s    
ÿ
z.SelectorEventLoopUnixSockSendfileTests.preparec              
   C   s˜   |   ¡ \}}tjdg dX |  tjd¡* |  | j || j	dd ¡¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  |  
| j	 ¡ d¡ d S )Nzasyncio.unix_events.os)Úspecz$os[.]sendfile[(][)] is not availabler   )rØ   r   rm   r;   r
   ÚSendfileNotAvailableErrorrÓ   r   Ú_sock_sendfile_nativer‡   rA   Útell)r   rz   rÔ   r   r   r   Ú test_sock_sendfile_not_available  s    ÿÿBzGSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_availablec              	   C   sn   |   ¡ \}}tƒ }|  tjd¡( |  | j ||dd ¡¡ W d   ƒ n1 sN0    Y  |  | j	 
¡ d¡ d S ©Núnot a regular filer   )rØ   r]   r;   r
   rÚ   rÓ   r   rÛ   rA   r‡   rÜ   ©r   rz   rÔ   Úfr   r   r   Útest_sock_sendfile_not_a_file  s    ÿÿ$zDSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_a_filec              	   C   sp   |   ¡ \}}t ¡ }|  tjd¡( |  | j ||dd ¡¡ W d   ƒ n1 sP0    Y  |  	| j
 ¡ d¡ d S rÞ   )rØ   ÚioÚBytesIOr;   r
   rÚ   rÓ   r   rÛ   rA   r‡   rÜ   rà   r   r   r   Útest_sock_sendfile_iobuffer  s    ÿÿ$zBSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_iobufferc              	   C   sx   |   ¡ \}}t ¡ }d|j_|  tjd¡( |  | j	 
||dd ¡¡ W d   ƒ n1 sX0    Y  |  | j ¡ d¡ d S )NrE   rß   r   )rØ   r   r&   Úfilenori   r;   r
   rÚ   rÓ   r   rÛ   rA   r‡   rÜ   rà   r   r   r   Ú#test_sock_sendfile_not_regular_file#  s    ÿÿ$zJSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_regular_filec              
   C   sº   |   ¡ \}}| j ¡ }| j ¡ }| j |d ||dd t| jƒd¡ | ¡  t	 
tj¡ |  |¡ W d   ƒ n1 st0    Y  |  t¡ | jj |¡ W d   ƒ n1 s¬0    Y  d S ©Nr   )rØ   r   rµ   r‡   ræ   Ú_sock_sendfile_native_implre   rÄ   r'   Ú
contextlibÚsuppressr
   ÚCancelledErrorrÓ   r   ÚKeyErrorÚ	_selectorÚget_key©r   rz   rÔ   r¶   ræ   r   r   r   Útest_sock_sendfile_cancel1-  s    

ÿ(zASelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_cancel1c              
   C   s¨   |   ¡ \}}| j ¡ }| j ¡ }| j |d ||dd t| jƒd¡ | ¡  | j || ¡ ||dd t| jƒd¡ |  	t
¡ | jj |¡ W d   ƒ n1 sš0    Y  d S rè   )rØ   r   rµ   r‡   ræ   ré   re   rÄ   r'   r   rí   rî   rï   rð   r   r   r   Útest_sock_sendfile_cancel2:  s    

ÿÿzASelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_cancel2c                 C   s    |   ¡ \}}| j ¡ }t ¡ }d|j_tjdtƒ d0 | j	 
|d ||dd t| jƒd¡ W d   ƒ n1 sl0    Y  | j	j |¡}|  |¡ |j tj¡ d S )NFúos.sendfile©r2   r   )rØ   r‡   ræ   r   r&   Ú	cancelledri   rm   ÚBlockingIOErrorr   ré   re   rÄ   rî   rï   ÚassertIsNotNoneÚadd_done_callbackrf   ÚANY)r   rz   rÔ   ræ   r¶   Úkeyr   r   r   Ú!test_sock_sendfile_blocking_errorG  s    
ÿ"
zHSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_blocking_errorc                 C   sÔ   |   ¡ \}}| j ¡ }| j ¡ }tjdtƒ d0 | j |d ||dd t	| j
ƒd¡ W d   ƒ n1 sf0    Y  |  t¡ | jj |¡ W d   ƒ n1 sž0    Y  | ¡ }|  |tj¡ |  d| j ¡ ¡ d S )Nró   rô   r   )rØ   r‡   ræ   r   rµ   r   rm   rL   ré   re   rÄ   r   rí   rî   rï   Ú	exceptionr@   r
   rÚ   rA   rÜ   )r   rz   rÔ   ræ   r¶   r½   r   r   r   Ú&test_sock_sendfile_os_error_first_callT  s    

ÿ",zMSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_os_error_first_callc                 C   sÚ   |   ¡ \}}| j ¡ }| j ¡ }tƒ }tjd|d4 | j || ¡ ||dd t	| j
ƒd¡ W d   ƒ n1 sn0    Y  |  t¡ | jj |¡ W d   ƒ n1 s¦0    Y  | ¡ }|  ||¡ |  d| j ¡ ¡ d S ©Nró   rô   iè  )rØ   r‡   ræ   r   rµ   rL   r   rm   ré   re   rÄ   r   rí   rî   rï   rü   ÚassertIsrA   rÜ   ©r   rz   rÔ   ræ   r¶   Úerrr½   r   r   r   Ú%test_sock_sendfile_os_error_next_callb  s    

ý",zLSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_os_error_next_callc                 C   sÜ   |   ¡ \}}| j ¡ }| j ¡ }t ¡ }tjd|d4 | j 	|| ¡ ||dd t
| jƒd¡ W d   ƒ n1 sp0    Y  |  t¡ | jj |¡ W d   ƒ n1 s¨0    Y  | ¡ }|  ||¡ |  d| j ¡ ¡ d S rþ   )rØ   r‡   ræ   r   rµ   r
   rÚ   r   rm   ré   re   rÄ   r   rí   rî   rï   rü   rÿ   rA   rÜ   r   r   r   r   Útest_sock_sendfile_exceptions  s    

ý",zCSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_exception)T)rG   rH   rI   rÄ   r
   ÚProtocolr¿   ÚclassmethodrÅ   rÈ   r   rÒ   rÓ   rØ   rÝ   râ   rå   rç   rñ   rò   rû   rý   r  r  rn   r   r   r   r   r¯   ¶  s(   
				
r¯   c                       s
  e Zd Z‡ fdd„Zd(dd„Zdd„ Ze d¡d	d
„ ƒZe d¡dd„ ƒZ	e d¡dd„ ƒZ
e d¡e d¡dd„ ƒƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Z‡  ZS ))ÚUnixReadPipeTransportTestsc                    s’   t ƒ  ¡  |  ¡ | _t tj¡| _t	j
tjd| _d| jj_t	 d¡}| ¡  |  |j¡ t	 d¡}| ¡ }t	 
¡ }tj|_||_|  |j¡ d S ©N)Zspec_seté   zos.set_blockingzos.fstat)r   r   Únew_test_loopr   rq   Úmake_test_protocolr
   r  Úprotocolr   r&   rã   Ú	RawIOBaseÚpiperæ   ri   rm   Ústartr:   ÚstopÚstatÚS_IFIFOÚst_mode©r   Zblocking_patcherZfstat_patcherZm_fstatÚstr   r   r   r   ‡  s    




z UnixReadPipeTransportTests.setUpNc                 C   s(   t j| j| j| j|d}|  t|¡ |S ©N©Úwaiter)r   Z_UnixReadPipeTransportr   r  r  r:   r   ©r   r  r   r   r   r   Úread_pipe_transport™  s    þz.UnixReadPipeTransportTests.read_pipe_transportc                 C   sR   | j  ¡ }| j|d}| j  |¡ | jj |¡ | j  d|j¡ |  	| 
¡ ¡ d S ©Nr  r  )r   rµ   r  rw   r  rº   r*   Úassert_readerÚ_read_readyÚassertIsNoneÚresult©r   r  Útrr   r   r   Ú	test_ctor   s    
z$UnixReadPipeTransportTests.test_ctorzos.readc                 C   s6   |   ¡ }d|_| ¡  | d|j¡ | jj d¡ d S ©Nó   datar  )r  ri   r  r*   Úmax_sizer  r¼   ©r   Úm_readr   r   r   r   Útest__read_ready©  s
    z+UnixReadPipeTransportTests.test__read_readyc                 C   s\   |   ¡ }d|_| ¡  | d|j¡ |  | jj¡ t 	| j¡ | j
j ¡  | j
j d ¡ d S )Nr/   r  )r  ri   r  r*   r$  rP   r   Úreadersrq   Úrun_brieflyr  Zeof_receivedr¾   r%  r   r   r   Útest__read_ready_eof²  s    z/UnixReadPipeTransportTests.test__read_ready_eofc                 C   sD   |   ¡ }t|_| ¡  | d|j¡ t | j¡ |  	| j
jj¡ d S ©Nr  )r  rö   r2   r  r*   r$  rq   r)  r   rP   r  r¼   rR   r%  r   r   r   Útest__read_ready_blocked¾  s    z3UnixReadPipeTransportTests.test__read_ready_blockedúasyncio.log.logger.errorc                 C   s^   |   ¡ }tƒ }||_t ¡ |_| ¡  | d|j¡ |j |¡ |jt	 
d¡tttfd d S )Nr  z;Fatal read error on pipe transport
protocol:.*
transport:.*)Úexc_info)r  rL   r2   r   r&   Ú_closer  r*   r$  rq   ZMockPatternÚMOCK_ANY)r   r&  Úm_logexcr   r  r   r   r   Útest__read_ready_errorÈ  s    
ÿüz1UnixReadPipeTransportTests.test__read_ready_errorc                 C   s8   |   ¡ }t ¡ }| j d|¡ | ¡  |  | jj¡ d S r+  )r  r   r&   r   Ú
add_readerÚpause_readingrP   r(  )r   r&  r   Úmr   r   r   Útest_pause_readingÙ  s
    z-UnixReadPipeTransportTests.test_pause_readingc                 C   s,   |   ¡ }| ¡  | ¡  | j d|j¡ d S r+  )r  r4  Úresume_readingr   r  r  r%  r   r   r   Útest_resume_readingá  s    z.UnixReadPipeTransportTests.test_resume_readingc                 C   s*   |   ¡ }t ¡ |_| ¡  |j d ¡ d S r	   )r  r   r&   r/  r   r*   r%  r   r   r   rg   è  s    
z%UnixReadPipeTransportTests.test_closec                 C   s2   |   ¡ }d|_t ¡ |_| ¡  |  |jj¡ d S r-   )r  Ú_closingr   r&   r/  r   rP   rR   r%  r   r   r   Útest_close_already_closingï  s
    
z5UnixReadPipeTransportTests.test_close_already_closingc                 C   sR   |   ¡ }tƒ }| |¡ |  | ¡ ¡ |  | jj¡ t 	| j¡ | j
j |¡ d S r	   )r  r]   r/  rY   Ú
is_closingrP   r   r(  rq   r)  r  r¾   r*   )r   r&  r   r  r   r   r   Útest__close÷  s    
z&UnixReadPipeTransportTests.test__closec                 C   sd   |   ¡ }|  |j¡ |  |j¡ d }| |¡ | jj |¡ | jj	 ¡  |  
|j¡ |  
|j¡ d S r	   )r  r÷   Ú	_protocolÚ_loopÚ_call_connection_lostr  r¾   r*   r  r   r  ©r   r   r  r   r   r   Útest__call_connection_lost  s    
z5UnixReadPipeTransportTests.test__call_connection_lostc                 C   sf   |   ¡ }|  |j¡ |  |j¡ tƒ }| |¡ | jj |¡ | j	j
 ¡  |  |j¡ |  |j¡ d S r	   )r  r÷   r=  r>  rL   r?  r  r¾   r*   r  r   r  r@  r   r   r   Ú#test__call_connection_lost_with_err  s    
z>UnixReadPipeTransportTests.test__call_connection_lost_with_errc                 C   s4   |   ¡ }| ¡  t | j¡ |  |j¡ | ¡  d S r	   )r  r   rq   r)  r   r  r>  r4  ©r   r   r   r   r   Ú!test_pause_reading_on_closed_pipe  s
    z<UnixReadPipeTransportTests.test_pause_reading_on_closed_pipec                 C   s   |   ¡ }| ¡  | ¡  d S r	   )r  r4  rC  r   r   r   Ú!test_pause_reading_on_paused_pipe"  s    z<UnixReadPipeTransportTests.test_pause_reading_on_paused_pipec                 C   s4   |   ¡ }| ¡  t | j¡ |  |j¡ | ¡  d S r	   )r  r   rq   r)  r   r  r>  r7  rC  r   r   r   Ú"test_resume_reading_on_closed_pipe(  s
    z=UnixReadPipeTransportTests.test_resume_reading_on_closed_pipec                 C   s   |   ¡ }| ¡  d S r	   )r  r7  rC  r   r   r   Ú"test_resume_reading_on_paused_pipe/  s    z=UnixReadPipeTransportTests.test_resume_reading_on_paused_pipe)N)rG   rH   rI   r   r  r!  r   rm   r'  r*  r,  r2  r6  r8  rg   r:  r<  rA  rB  rD  rE  rF  rG  rn   r   r   r   r   r  …  s8   
	


	




	r  c                       s~  e Zd Z‡ fdd„Zd7dd„Zdd„ Zdd	„ Ze d
¡dd„ ƒZ	e d
¡dd„ ƒZ
e d
¡dd„ ƒZe d
¡dd„ ƒZe d
¡dd„ ƒZe d¡e d
¡dd„ ƒƒZe d
¡dd„ ƒZdd„ Ze d
¡dd„ ƒZe d
¡dd„ ƒZe d
¡d d!„ ƒZe d
¡d"d#„ ƒZe d$¡e d
¡d%d&„ ƒƒZe d
¡d'd(„ ƒZe d
¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z‡  ZS )8ÚUnixWritePipeTransportTestsc                    s’   t ƒ  ¡  |  ¡ | _t tj¡| _t	j
tjd| _d| jj_t	 d¡}| ¡  |  |j¡ t	 d¡}| ¡ }t	 
¡ }tj|_||_|  |j¡ d S r  )r   r   r	  r   rq   r
  r
   ZBaseProtocolr  r   r&   rã   r  r  ræ   ri   rm   r  r:   r  r  ÚS_IFSOCKr  r  r   r   r   r   8  s    




z!UnixWritePipeTransportTests.setUpNc                 C   s(   t j| j| j| j|d}|  t|¡ |S r  )r   Z_UnixWritePipeTransportr   r  r  r:   r   r  r   r   r   Úwrite_pipe_transportJ  s    þz0UnixWritePipeTransportTests.write_pipe_transportc                 C   sT   | j  ¡ }| j|d}| j  |¡ | jj |¡ | j  d|j¡ |  	d | 
¡ ¡ d S r  )r   rµ   rJ  rw   r  rº   r*   r  r  rA   r  r  r   r   r   r!  Q  s    
z%UnixWritePipeTransportTests.test_ctorc                 C   s   |   ¡ }|  | ¡ ¡ d S r	   )rJ  rY   Zcan_write_eofrC  r   r   r   Útest_can_write_eofZ  s    z.UnixWritePipeTransportTests.test_can_write_eofzos.writec                 C   sF   |   ¡ }d|_| d¡ | dd¡ |  | jj¡ |  tƒ |j	¡ d S )Né   r#  r  )
rJ  ri   rÃ   r*   rP   r   ÚwritersrA   r³   Ú_buffer©r   Úm_writer   r   r   r   Ú
test_write^  s    
z&UnixWritePipeTransportTests.test_writec                 C   sB   |   ¡ }| d¡ |  |j¡ |  | jj¡ |  tdƒ|j¡ d S )Nr/   )	rJ  rÃ   rP   rR   r   rM  rA   r³   rN  rO  r   r   r   Útest_write_no_datag  s
    
z.UnixWritePipeTransportTests.test_write_no_datac                 C   s>   |   ¡ }d|_| d¡ | j d|j¡ |  tdƒ|j¡ d S )NrW   r#  r  ó   ta)	rJ  ri   rÃ   r   Úassert_writerÚ_write_readyrA   r³   rN  rO  r   r   r   Útest_write_partialo  s
    
z.UnixWritePipeTransportTests.test_write_partialc                 C   s^   |   ¡ }| j d|j¡ tdƒ|_| d¡ |  |j¡ | j 	d|j¡ |  
tdƒ|j¡ d S )Nr  s   previousr#  s   previousdata)rJ  r   Ú
add_writerrU  r³   rN  rÃ   rP   rR   rT  rA   rO  r   r   r   Útest_write_bufferw  s    

z-UnixWritePipeTransportTests.test_write_bufferc                 C   sP   |   ¡ }tƒ |_| d¡ | dtdƒ¡ | j d|j¡ |  	tdƒ|j
¡ d S r"  )rJ  rö   r2   rÃ   r*   r³   r   rT  rU  rA   rN  rO  r   r   r   Útest_write_again  s    
z,UnixWritePipeTransportTests.test_write_againzasyncio.unix_events.loggerc                 C   sÆ   |   ¡ }tƒ }||_t ¡ |_| d¡ | dd¡ |  | j	j
¡ |  tƒ |j¡ |j |d¡ |  d|j¡ | d¡ |  d|j¡ | d¡ | d¡ | d¡ | d¡ |j d¡ | ¡  d S )Nr#  r  z#Fatal write error on pipe transportr   rW   z=pipe closed by peer or os.write(pipe, data) raised exception.)rJ  rL   r2   r   r&   Z_fatal_errorrÃ   r*   rP   r   rM  rA   r³   rN  Ú
_conn_lostÚwarningr   )r   rP  Zm_logr   r  r   r   r   Útest_write_errŠ  s.    

þ




ÿz*UnixWritePipeTransportTests.test_write_errc                 C   sD   |   ¡ }| ¡  | d¡ |  |jd¡ | d¡ |  |jd¡ d S )Nr#  r   rW   )rJ  r  rÃ   rA   rZ  rO  r   r   r   Útest_write_close¥  s    

z,UnixWritePipeTransportTests.test_write_closec                 C   sX   |   ¡ }| ¡  |  | jj¡ |  | jj¡ |  | ¡ ¡ t 	| j¡ | j
j d ¡ d S r	   )rJ  r  rP   r   r(  rM  rY   r;  rq   r)  r  r¾   r*   rC  r   r   r   r'  ¯  s    z,UnixWritePipeTransportTests.test__read_readyc                 C   sR   |   ¡ }| j d|j¡ tdƒ|_d|_| ¡  |  | jj¡ |  	tƒ |j¡ d S )Nr  r#  rL  )
rJ  r   rW  rU  r³   rN  ri   rP   rM  rA   rO  r   r   r   Útest__write_ready¸  s    
z-UnixWritePipeTransportTests.test__write_readyc                 C   sV   |   ¡ }| j d|j¡ tdƒ|_d|_| ¡  | j d|j¡ |  tdƒ|j¡ d S )Nr  r#  é   ó   a)	rJ  r   rW  rU  r³   rN  ri   rT  rA   rO  r   r   r   Útest__write_ready_partialÂ  s    
z5UnixWritePipeTransportTests.test__write_ready_partialc                 C   sh   |   ¡ }| j d|j¡ tdƒ|_tƒ |_| ¡  | dtdƒ¡ | j 	d|j¡ |  
tdƒ|j¡ d S )Nr  r#  )rJ  r   rW  rU  r³   rN  rö   r2   r*   rT  rA   rO  r   r   r   Útest__write_ready_againÌ  s    
z3UnixWritePipeTransportTests.test__write_ready_againc                 C   sf   |   ¡ }| j d|j¡ tdƒ|_d|_| ¡  | dtdƒ¡ | j d|j¡ |  	tdƒ|j¡ d S )Nr  r#  r   )
rJ  r   rW  rU  r³   rN  ri   r*   rT  rA   rO  r   r   r   Útest__write_ready_empty×  s    
z3UnixWritePipeTransportTests.test__write_ready_emptyr-  c                 C   s¤   |   ¡ }| j d|j¡ tdƒ|_tƒ  |_}| ¡  |  | jj	¡ |  | jj
¡ |  tƒ |j¡ |  | ¡ ¡ | ¡  |  d|j¡ t | j¡ | jj |¡ d S )Nr  r#  r   )rJ  r   rW  rU  r³   rN  rL   r2   rP   rM  r(  rA   rY   r;  Zassert_not_calledrZ  rq   r)  r  r¾   r*   )r   rP  r1  r   r  r   r   r   Útest__write_ready_errâ  s    
z1UnixWritePipeTransportTests.test__write_ready_errc                 C   s€   |   ¡ }| j d|j¡ d|_tdƒ|_d|_| ¡  |  | jj	¡ |  | jj
¡ |  tƒ |j¡ | jj d ¡ | jj ¡  d S )Nr  Tr#  rL  )rJ  r   rW  rU  r9  r³   rN  ri   rP   rM  r(  rA   r  r¾   r*   r  r   rO  r   r   r   Útest__write_ready_closingó  s    
z5UnixWritePipeTransportTests.test__write_ready_closingc                 C   sœ   |   ¡ }| j d|j¡ | j d|j¡ ddg|_| ¡  |  |j	¡ |  | jj
¡ |  | jj¡ |  g |j¡ |  | ¡ ¡ t | j¡ | jj d ¡ d S )Nr  s   darS  )rJ  r   rW  rU  r3  r  rN  ÚabortrP   rR   r(  rM  rA   rY   r;  rq   r)  r  r¾   r*   rO  r   r   r   Ú
test_abort  s    
z&UnixWritePipeTransportTests.test_abortc                 C   sd   |   ¡ }|  |j¡ |  |j¡ d }| |¡ | jj |¡ | jj	 ¡  |  
|j¡ |  
|j¡ d S r	   )rJ  r÷   r=  r>  r?  r  r¾   r*   r  r   r  r@  r   r   r   rA    s    
z6UnixWritePipeTransportTests.test__call_connection_lostc                 C   sf   |   ¡ }|  |j¡ |  |j¡ tƒ }| |¡ | jj |¡ | j	j
 ¡  |  |j¡ |  |j¡ d S r	   )rJ  r÷   r=  r>  rL   r?  r  r¾   r*   r  r   r  r@  r   r   r   rB    s    
z?UnixWritePipeTransportTests.test__call_connection_lost_with_errc                 C   s0   |   ¡ }t ¡ |_| ¡  |j ¡  | ¡  d S r	   )rJ  r   r&   Ú	write_eofr   r*   rC  r   r   r   rg   *  s
    

z&UnixWritePipeTransportTests.test_closec                 C   s2   |   ¡ }t ¡ |_d|_| ¡  |  |jj¡ d S r-   )rJ  r   r&   rh  r9  r   rP   rR   rC  r   r   r   Útest_close_closing3  s
    
z.UnixWritePipeTransportTests.test_close_closingc                 C   sJ   |   ¡ }| ¡  |  | ¡ ¡ |  | jj¡ t | j¡ | j	j
 d ¡ d S r	   )rJ  rh  rY   r;  rP   r   r(  rq   r)  r  r¾   r*   rC  r   r   r   Útest_write_eof:  s    z*UnixWritePipeTransportTests.test_write_eofc                 C   s:   |   ¡ }dg|_| ¡  |  | ¡ ¡ |  | jjj¡ d S )Nr#  )	rJ  rN  rh  rY   r;  rP   r  r¾   rR   rC  r   r   r   Útest_write_eof_pendingB  s
    z2UnixWritePipeTransportTests.test_write_eof_pending)N)rG   rH   rI   r   rJ  r!  rK  r   rm   rQ  rR  rV  rX  rY  r\  r]  r'  r^  ra  rb  rc  rd  re  rg  rA  rB  rg   ri  rj  rk  rn   r   r   r   r   rH  6  sR   
	



	

		
	
	





	rH  c                   @   s   e Zd Zdd„ ZdS )ÚAbstractChildWatcherTestsc                 C   s„   t  ¡ }t ¡ }|  t|j||¡ |  t|j|¡ |  t|j|¡ |  t|j	¡ |  t|j
¡ |  t|j¡ |  t|j|||¡ d S r	   )r   r&   r
   ZAbstractChildWatcherr   ÚNotImplementedErrorÚadd_child_handlerÚremove_child_handlerÚattach_loopr   Z	is_activeÚ	__enter__Ú__exit__©r   rá   Úwatcherr   r   r   Útest_not_implementedL  s.    
ÿÿÿÿÿÿÿz.AbstractChildWatcherTests.test_not_implementedN©rG   rH   rI   ru  r   r   r   r   rl  J  s   rl  c                   @   s   e Zd Zdd„ ZdS )ÚBaseChildWatcherTestsc                 C   s$   t  ¡ }t ¡ }|  t|j|¡ d S r	   )r   r&   r   ZBaseChildWatcherr   rm  Z_do_waitpidrs  r   r   r   ru  a  s
    ÿz*BaseChildWatcherTests.test_not_implementedNrv  r   r   r   r   rw  _  s   rw  ÚWaitPidMocks)ÚwaitpidÚ	WIFEXITEDÚWIFSIGNALEDÚWEXITSTATUSÚWTERMSIGc                       s  e Zd Zej ej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edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed d!„ ƒZed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZed*d+„ ƒZed,d-„ ƒZed.d/„ ƒZ‡  Z S )0ÚChildWatcherTestsMixinr[  c                    sn   t ƒ  ¡  |  ¡ | _d| _i | _tj | jd¡*| _	|  
¡ | _| j | j¡ W d   ƒ n1 s`0    Y  d S )NFr4   )r   r   r	  r   ÚrunningÚzombiesr   rm   r]   Úm_add_signal_handlerÚcreate_watcherrt  rp  r   r   r   r   r   u  s    

ÿ
zChildWatcherTestsMixin.setUpc                 C   st   t | jtjƒs|dkr"|  |d¡ z*|dk r8| j ¡ W S || j |¡fW S W n ty^   Y n0 | j	rjdS t
ƒ ‚d S )NrE   r   )r   r   )Ú
isinstancert  r
   ÚSafeChildWatcherZassertGreaterr€  ÚpopitemÚpoprí   r  ÚChildProcessError)r   ÚpidÚflagsr   r   r   ry  €  s    zChildWatcherTestsMixin.waitpidc                 C   s   |d | j |< d S ©Né €  )r€  )r   rˆ  Ú
returncoder   r   r   Ú
add_zombie  s    z!ChildWatcherTestsMixin.add_zombiec                 C   s   |dkS rŠ  r   ©r   Ústatusr   r   r   rz  ’  s    z ChildWatcherTestsMixin.WIFEXITEDc                 C   s   d|  k odk S   S )Ni¼  r‹  r   rŽ  r   r   r   r{  •  s    z"ChildWatcherTestsMixin.WIFSIGNALEDc                 C   s   |   |  |¡¡ |d S rŠ  )rY   rz  rŽ  r   r   r   r|  ˜  s    z"ChildWatcherTestsMixin.WEXITSTATUSc                 C   s   |   |  |¡¡ d| S rŠ  )rY   r{  rŽ  r   r   r   r}  œ  s    zChildWatcherTestsMixin.WTERMSIGc                 C   s   | j  tj| jj¡ d S r	   )r  rf   r    rd   rt  Ú	_sig_chldr   r   r   r   Útest_create_watcher   s    
ÿz*ChildWatcherTestsMixin.test_create_watcherc                    s   ‡ fdd„}|S )Nc                    sþ   dd„ }|d| j ƒÖ}|d| jƒª}|d| jƒ~}|d| jƒR}|d| jƒ&}ˆ | t|||||ƒƒ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  W d   ƒ n1 s´0    Y  W d   ƒ n1 sÒ0    Y  W d   ƒ n1 sð0    Y  d S )Nc                 S   s   t j| |t jdS )N)ÚwrapsZnew_callable)r   rm   r&   )ÚtargetÚwrapperr   r   r   rm   ¦  s    ÿzIChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_func.<locals>.patchzos.WTERMSIGzos.WEXITSTATUSzos.WIFSIGNALEDzos.WIFEXITEDz
os.waitpid)r}  r|  r{  rz  ry  rx  )r   rm   Z
m_WTERMSIGZm_WEXITSTATUSZm_WIFSIGNALEDZm_WIFEXITEDZ	m_waitpid©r<   r   r   Úwrapped_func¥  s$    
ÿ
þ
ý
üþz:ChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_funcr   )r<   r–  r   r•  r   Úwaitpid_mocks¤  s    z$ChildWatcherTestsMixin.waitpid_mocksc                 C   s*  t  ¡ }| j* d| _| j d|ddd¡ W d   ƒ n1 s>0    Y  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j ¡  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d| _|  dd¡ | j ¡  |  |jj¡ |  |j	j¡ |  |j
j¡ | ddddd¡ |j ¡  |j ¡  |j	 ¡  | ¡  |  dd¡ | j | j ¡  W d   ƒ n1 sŒ0    Y  |  |j¡ |  |j
j¡ |j ¡  |j ¡  |j	 ¡  | j ¡  | j ¡  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d S )	NTé*   é	   é
   é   Fé   é   )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r  r  rY   rf   r^   Úignore_warningsr€  Úclear©r   r5  Úcallbackr   r   r   Útest_sigchldµ  sR    2




*




z#ChildWatcherTestsMixin.test_sigchldc                 C   sÚ  t  ¡ }t  ¡ }| j( d| _| j d|dd¡ W d   ƒ n1 sD0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j" | j d|dd¡ W d   ƒ n1 sÌ0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j ¡  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |  dd¡ | j ¡  | dddd¡ |  |j¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |j ¡  |j ¡  |j
 ¡  | ¡  | j ¡  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |  dd	¡ d
| _| j ¡  | dd	dd¡ |  |j¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |j ¡  |j ¡  |j	 ¡  | ¡  |  dd¡ |  dd¡ | j | j ¡  W d   ƒ n1 s$0    Y  |  |j¡ |  |j¡ |  |j
j¡ |j ¡  |j ¡  |j	 ¡  | j ¡  | j ¡  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d S )NTé+   é   é   é,   é“   é   éýÿÿÿél   Fr›  é   )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r  r  rf   rY   r^   rž  r€  rŸ  ©r   r5  Ú	callback1Ú	callback2r   r   r   Útest_sigchld_two_childrenò  s”    00









*




z0ChildWatcherTestsMixin.test_sigchld_two_childrenc                 C   s¬  t  ¡ }t  ¡ }| j( d| _| j d|dd¡ W d   ƒ n1 sD0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j" | j d|dd¡ W d   ƒ n1 sÌ0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j ¡  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |  dd¡ |  dd	¡ d
| _| j ¡  | dddd¡ | dd	dd¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |j ¡  |j ¡  |j
 ¡  |j	 ¡  | ¡  | ¡  |  dd¡ |  dd¡ | j | j ¡  W d   ƒ n1 sx0    Y  |  |j¡ |  |j¡ |  |j
j¡ d S )NTé-   é   r¥  é.   i{  r¨  éN   éûÿÿÿFr›  r«  )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r  r  rf   rY   r^   rž  r¬  r   r   r   Ú.test_sigchld_two_children_terminating_togetherZ  sb    00





*zEChildWatcherTestsMixin.test_sigchld_two_children_terminating_togetherc                 C   sº   t  ¡ }| j8 |  dd¡ | j ¡  | j d|dd¡ W d   ƒ n1 sL0    Y  | dddd¡ | ¡  |  dd¡ | j | j ¡  W d   ƒ n1 s 0    Y  |  	|j
¡ d S )Né2   rL  r   rœ  rE   )r   r&   rt  r  r  rn  rf   r^   rž  rP   rR   r   r   r   r   Útest_sigchld_race_conditionŸ  s    
0(z2ChildWatcherTestsMixin.test_sigchld_race_conditionc                 C   s  t  ¡ }t  ¡ }| j& d| _| j d|d¡ W d   ƒ n1 sB0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j  | j d|d¡ W d   ƒ n1 sÈ0    Y  |  |j¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d| _|  dd¡ | j ¡  | ddd¡ |  |j¡ |  |jj¡ |  |j	j¡ |  |j
j¡ |j ¡  |j ¡  |j
 ¡  | ¡  |  dd¡ | j | j ¡  W d   ƒ n1 sÜ0    Y  |  |j¡ |  |j¡ |  |j
j¡ d S )NTé3   é   é   Fiøÿÿÿr  )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r  r  rf   rY   r^   rž  r¬  r   r   r   Útest_sigchld_replace_handlerµ  sJ    ..



*z3ChildWatcherTestsMixin.test_sigchld_replace_handlerc                 C   s,  t  ¡ }| j& d| _| j d|d¡ W d   ƒ n1 s:0    Y  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | j d¡ |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d| _|  dd¡ | j | j ¡  W d   ƒ n1 s0    Y  |  |j¡ d S )NTé4   iÀ  Féc   )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  ro  r  rž  r  r   r   r   r   Útest_sigchld_remove_handlerê  s(    .*z2ChildWatcherTestsMixin.test_sigchld_remove_handlerc                 C   sR  t  ¡ }| j& d| _| j d|d¡ W d   ƒ n1 s:0    Y  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d| jd< d| _| j ¡  | ddd¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ | ¡  |j ¡  |j ¡  |  dd¡ | j | j ¡  W d   ƒ n1 s80    Y  |  |j¡ d S )NTé5   iíÿÿÿiš  Fée   )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r€  r  rf   rY   r^   r  rž  r   r   r   r   Útest_sigchld_unknown_status
  s0    .



*z2ChildWatcherTestsMixin.test_sigchld_unknown_statusc                 C   sB  t  ¡ }t  ¡ }t  ¡ }| jF d| _| j d|d¡ | j d|d¡ | j d|d¡ W d   ƒ n1 sj0    Y  |  | j d¡¡ |  | j d¡¡ |  | j d¡¡ |  | j d¡¡ |  dd¡ |  dd¡ |  dd¡ d	| _| j	 | j 
¡  W d   ƒ n1 s0    Y  |  |j¡ |  |j¡ | ddd¡ d S )
NTé6   r   é7   rW   é8   r_  r   F)r   r&   rt  r  rn  rY   ro  rP   r  rž  r  rR   rf   )r   r5  r­  r®  Ú	callback3r   r   r   Útest_remove_child_handler/  s*    .*z0ChildWatcherTestsMixin.test_remove_child_handlerc                 C   sœ   t  ¡ }| j$ d| _| j d|¡ W d   ƒ n1 s80    Y  t|j_t j 	t
jd¡.}|  | j ¡ d ¡ |  |j¡ W d   ƒ n1 sŽ0    Y  d S )NTé9   Úerror)r   r&   rt  r  rn  r   ry  r2   rm   r]   r   ÚloggerrA   r  rY   rR   )r   r5  r¡  Zm_errorr   r   r   Ú test_sigchld_unhandled_exceptionP  s    ,
ÿz7ChildWatcherTestsMixin.test_sigchld_unhandled_exceptionc                 C   s  t  ¡ }| j$ d| _| j d|¡ W d   ƒ n1 s80    Y  |  |j¡ |  |jj¡ |  |jj¡ |  |j	j¡ |  |j
j¡ d| _|  dd¡ t dtj¡ |j ¡  | j | j ¡  W d   ƒ n1 sÖ0    Y  t| jtjƒrü|  |j¡ n| dd¡ d S )NTé:   FrL  éÿ   )r   r&   rt  r  rn  rP   rR   rz  r{  r|  r}  r  r˜   ry  ÚWNOHANGr^   rž  r  rƒ  r
   ÚFastChildWatcherrf   r   r   r   r   Ú#test_sigchld_child_reaped_elsewhereb  s$    ,
(z:ChildWatcherTestsMixin.test_sigchld_child_reaped_elsewherec              	   C   s¼   t  ¡ }t  ¡ }| jz | jT d| _|  dd¡ |  dd¡ | j ¡  | j d|¡ | j d|¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  | dd¡ |  	|j
¡ d S )NTiO  r¤  iQ  r±  iP  )r   r&   rž  rt  r  r  r  rn  rf   rP   rR   r¬  r   r   r   Ú,test_sigchld_unknown_pid_during_registration…  s    
JzCChildWatcherTestsMixin.test_sigchld_unknown_pid_during_registrationc              	   C   s  t  ¡ }| j$ d| _| j d|¡ W d   ƒ n1 s80    Y  | j}|  ¡ | _t jj}||dƒh}|| jdƒ<}| j 	| j¡ | 
tj¡ | 
tj| jj¡ W d   ƒ n1 s´0    Y  W d   ƒ n1 sÒ0    Y  d| _|  dd¡ | j ¡  | 
dd¡ d S )NTé<   r)   r4   Fr™  )r   r&   rt  r  rn  r   r	  rm   r]   rp  rf   r    rd   r  r  )r   r5  r¡  Úold_looprm   Zm_old_removeZ	m_new_addr   r   r   Útest_set_loopš  s,    ,

ÿÿ
ÿ@
z$ChildWatcherTestsMixin.test_set_loopc              	   C   sü  t  ¡ }t  ¡ }t  ¡ }| j@ d| _| j d|¡ | j d|¡ | j d|¡ W d   ƒ n1 sd0    Y  | j}d | _t j |d¡T}|  t	d¡ | j 
d ¡ W d   ƒ n1 s¸0    Y  | tj¡ W d   ƒ n1 sâ0    Y  |  dd¡ |  dd¡ |  |j¡ |  |j¡ |  |j¡ |  ¡ | _t j | jd	¡T}| j 
| j¡ | tj| jj¡ | dd¡ | dd¡ |  |j¡ W d   ƒ n1 sž0    Y  | ¡  | ¡  d
| _|  dd¡ | j ¡  |  |j¡ |  |j¡ | dd¡ d S )NTé=   é>   in  r)   zA loop is being detachedé   r´  r4   Fr¹  )r   r&   rt  r  rn  r   rm   r]   rj   ÚRuntimeWarningrp  rf   r    rd   r  rP   rR   r	  r  r^   )r   r5  r­  r®  rÅ  rÒ  Úm_remove_signal_handlerr  r   r   r   Útest_set_loop_race_condition¹  s\    ,ÿÿ*ÿ"
ÿ
ÿ,
z3ChildWatcherTestsMixin.test_set_loop_race_conditionc              	   C   s  t  ¡ }| jú d| _|  dd¡ |  dd¡ | j ¡  | j d|¡ | j d|¡ |  t| jj	ƒd¡ t
| jtjƒrŠ|  t| jjƒd¡ t j | jd¡P}| j ¡  | tj¡ |  | jj	¡ t
| jtjƒrÜ|  | jj¡ W d   ƒ n1 sð0    Y  W d   ƒ n1 s0    Y  d S )	NTé?   r™  éA   r¨  é@   r   r)   )r   r&   rt  r  r  r  rn  rA   re   Z
_callbacksrƒ  r
   rÎ  Z_zombiesrm   r]   r   r   rf   r    rd   rP   )r   r5  r­  rØ  r   r   r   rg   ÷  s.    
þ
ÿz!ChildWatcherTestsMixin.test_close)!rG   rH   rI   r   rm   r]   r   rÉ  rž  r   ry  r  rz  r{  r|  r}  r‘  r—  r¢  r¯  rµ  r·  r»  r¾  rÁ  rÆ  rÊ  rÏ  rÐ  rÓ  rÙ  rg   rn   r   r   r   r   r~  q  sL   
<
g
D

4

$
 

"


=r~  c                   @   s   e Zd Zdd„ ZdS )ÚSafeChildWatcherTestsc                 C   s   t  ¡ S r	   )r
   r„  r   r   r   r   r‚    s    z$SafeChildWatcherTests.create_watcherN©rG   rH   rI   r‚  r   r   r   r   rÝ    s   rÝ  c                   @   s   e Zd Zdd„ ZdS )ÚFastChildWatcherTestsc                 C   s   t  ¡ S r	   )r
   rÎ  r   r   r   r   r‚    s    z$FastChildWatcherTests.create_watcherNrÞ  r   r   r   r   rß    s   rß  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚPolicyTestsc                 C   s   t  ¡ S r	   )r
   ZDefaultEventLoopPolicyr   r   r   r   Úcreate_policy$  s    zPolicyTests.create_policyc                 C   sL   |   ¡ }|  |j¡ | ¡ }|  |tj¡ |  |j|¡ |  || ¡ ¡ d S r	   )rá  r  Ú_watcherÚget_child_watcherr@   r
   ZThreadedChildWatcherrÿ   ©r   Úpolicyrt  r   r   r   Útest_get_default_child_watcher'  s    z*PolicyTests.test_get_default_child_watcherc                 C   s<   |   ¡ }t ¡ }| |¡ |  |j|¡ |  || ¡ ¡ d S r	   )rá  r
   rÎ  Úset_child_watcherrÿ   râ  rã  rä  r   r   r   Ú test_get_child_watcher_after_set2  s
    
z,PolicyTests.test_get_child_watcher_after_setc                    sD   ‡ ‡fdd„}ˆ  ¡ ‰ ˆ  t ¡ ¡ tj|d}| ¡  | ¡  d S )Nc                     sR   ˆ   ˆ  ¡ ¡ ˆ ˆ  ¡ tj¡ ˆ  ¡ } ˆ | tj¡ ˆ | j	¡ ˆ  ¡  
¡  d S r	   )r   rÊ   r@   Úget_event_loopr
   ZAbstractEventLooprã  r„  r  r>  r   )rt  ©rå  r   r   r   rá   <  s    
ÿz4PolicyTests.test_get_child_watcher_thread.<locals>.f)r“  )rá  rç  r
   r„  Ú	threadingÚThreadr  Újoin)r   rá   Úthr   rê  r   Útest_get_child_watcher_thread:  s    z)PolicyTests.test_get_child_watcher_threadc                 C   s†   |   ¡ }| ¡ }t ¡ }| |¡ | |¡ |  |j|¡ | ¡ }| 	|¡ |  |j|¡ | 	d ¡ |  |jd ¡ | 
¡  | 
¡  d S r	   )rá  ré  r
   r„  rç  rp  rÿ   r>  rÊ   r   r   )r   rå  r   rt  Znew_loopr   r   r   Ú,test_child_watcher_replace_mainloop_existingO  s    



z8PolicyTests.test_child_watcher_replace_mainloop_existingN)rG   rH   rI   rá  ræ  rè  rï  rð  r   r   r   r   rà  "  s
   rà  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestFunctionalc                 C   s   t  ¡ | _t  | j¡ d S r	   )r
   rÊ   r   r   r   r   r   r   r   j  s    
zTestFunctional.setUpc                 C   s   | j  ¡  t d ¡ d S r	   )r   r   r
   r   r   r   r   r   ÚtearDownn  s    
zTestFunctional.tearDownc                    sì   ‡ fdd„}dd„ }|ƒ   ˆ j  tƒ |¡ W d   ƒ n1 s@0    Y  |ƒ   ˆ j  tƒ |¡ W d   ƒ n1 sv0    Y  |ƒ  ˆ j  tƒ ¡ W d   ƒ n1 sª0    Y  |ƒ  ˆ j  tƒ ¡ W d   ƒ n1 sÞ0    Y  d S )Nc                      s   ˆ   td¡S )NzInvalid file object)r;   r   r   r   r   r   Úassert_raisess  s    zFTestFunctional.test_add_reader_invalid_argument.<locals>.assert_raisesc                   S   s   d S r	   r   r   r   r   r   r.   v  r/   zATestFunctional.test_add_reader_invalid_argument.<locals>.<lambda>)r   r3  r]   rW  Úremove_readerÚremove_writer)r   ró  rC   r   r   r   Ú test_add_reader_invalid_argumentr  s    ..,z/TestFunctional.test_add_reader_invalid_argumentc                    sb   ‡fdd„‰ ‡ ‡‡fdd„}t  ¡ \‰}z"ˆj |ƒ ¡ W ˆ ¡  | ¡  nˆ ¡  | ¡  0 d S )Nc                      s   ˆ   td¡S )Nz'File descriptor .* is used by transport)r;   r3   r   r   r   r   ró  ƒ  s    þzLTestFunctional.test_add_reader_or_writer_transport_fd.<locals>.assert_raisesc                  “   sô  ˆj jdd„ ˆdI d H \} }zÄdd„ }ˆ ƒ  ˆj  ˆ|¡ W d   ƒ n1 sT0    Y  ˆ ƒ " ˆj  ˆ ¡ |¡ W d   ƒ n1 sŒ0    Y  ˆ ƒ  ˆj  ˆ¡ W d   ƒ n1 s¾0    Y  ˆ ƒ   ˆj  ˆ ¡ ¡ W d   ƒ n1 sô0    Y  ˆ ƒ  ˆj  ˆ|¡ W d   ƒ n1 s*0    Y  ˆ ƒ " ˆj  ˆ ¡ |¡ W d   ƒ n1 sd0    Y  ˆ ƒ  ˆj  ˆ¡ W d   ƒ n1 s˜0    Y  ˆ ƒ   ˆj  ˆ ¡ ¡ W d   ƒ n1 sÐ0    Y  W |  ¡  n
|  ¡  0 d S )Nc                   S   s   t  ¡ S r	   )r
   r  r   r   r   r   r.   Š  r/   zWTestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner.<locals>.<lambda>rŸ   c                   S   s   d S r	   r   r   r   r   r   r.     r/   )r   Úcreate_connectionr3  ræ   rô  rW  rõ  r   )r   ZprrC   ©ró  Zrsockr   r   r   Úrunnerˆ  s,    ÿ,0*..2,2zETestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner)rs   Ú
socketpairr   rw   r   )r   rù  Zwsockr   rø  r   Ú&test_add_reader_or_writer_transport_fd‚  s    
ÿz5TestFunctional.test_add_reader_or_writer_transport_fdN)rG   rH   rI   r   rò  rö  rû  r   r   r   r   rñ  h  s   rñ  Ú__main__)2Ú__doc__Úcollectionsrê   rJ   rã   r˜   r~   r    rs   r  Úsysr„   rë  r«   r   Útestr   Ztest.supportr   ÚplatformZSkipTestr
   r   r   Ztest.test_asyncior   rq   rù   r0  r   r   r¬   ZTestCaser   r­   rp   r¯   r  rH  rl  rw  Ú
namedtuplerx  r~  rÝ  rß  rà  rñ  rG   Úmainr   r   r   r   Ú<module>   sx   

	
 ^ÿ )ÿ N 2  	ÿ	     ,FF
