o
    JXîhÎS  ã                   @   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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 zddlZW n eyY   dZY nw d
d„ ZG dd„ dejƒZG dd„ dejƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZejdkrªG dd„ deejƒZG dd„ deejƒZ n;ddl!Z!e"e!dƒr½G dd„ deejƒZ#e"e!d ƒrÌG d!d"„ d"eejƒZ$e"e!d#ƒrÛG d$d%„ d%eejƒZ%G d&d„ deejƒZe&d'krïe '¡  dS dS )(z!Tests for sendfile functionality.é    N)Úbase_events)Ú	constants)Úmock)Úsupport)Ú	os_helper)Úsocket_helper)Úutilsc                   C   s   t  d ¡ d S ©N)ÚasyncioZset_event_loop_policy© r   r   úI/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/test_sendfile.pyÚtearDownModule   ó   r   c                       sF   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡ fdd„Z‡  Z	S )ÚMySendfileProtoNr   c                 C   s@   d | _ d| _d| _|d ur| ¡ | _| ¡ | _tƒ | _|| _d S )NÚINITIALr   )	Ú	transportÚstateÚnbytesÚcreate_futureÚ	connectedÚdoneÚ	bytearrayÚdataÚclose_after)ÚselfÚloopr   r   r   r   Ú__init__   s   


zMySendfileProto.__init__c                 G   s$   | j |vrtd| j ›d|›ƒ‚d S )Nzstate: z, expected: )r   ÚAssertionError)r   Úexpectedr   r   r   Ú_assert_state(   s   
ÿzMySendfileProto._assert_statec                 C   s0   || _ |  d¡ d| _| jr| j d ¡ d S d S )Nr   Ú	CONNECTED)r   r   r   r   Ú
set_result©r   r   r   r   r   Úconnection_made,   s   
ÿzMySendfileProto.connection_madec                 C   s   |   d¡ d| _d S )Nr    ÚEOF)r   r   ©r   r   r   r   Úeof_received3   s   

zMySendfileProto.eof_receivedc                 C   s,   |   dd¡ d| _| jr| j d ¡ d S d S )Nr    r$   ZCLOSED)r   r   r   r!   ©r   Úexcr   r   r   Úconnection_lost7   s
   ÿzMySendfileProto.connection_lostc                    s\   |   d¡ |  jt|ƒ7  _| j |¡ tƒ  |¡ | jr*| j| jkr,| j 	¡  d S d S d S )Nr    )
r   r   Úlenr   ÚextendÚsuperÚdata_receivedr   r   Úclose©r   r   ©Ú	__class__r   r   r-   =   s   
ÿzMySendfileProto.data_received©Nr   )
Ú__name__Ú
__module__Ú__qualname__r   r   r#   r&   r)   r-   Ú__classcell__r   r   r0   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 )ÚMyProtoc                 C   s(   d| _ d| _tƒ | _| ¡ | _d | _d S ©NF)ÚstartedÚclosedr   r   r   Úfutr   )r   r   r   r   r   r   H   s
   

zMyProto.__init__c                 C   s   d| _ || _d S ©NT)r9   r   r"   r   r   r   r#   O   s   
zMyProto.connection_madec                 C   s   | j  |¡ d S r	   )r   r+   r/   r   r   r   r-   S   s   zMyProto.data_receivedc                 C   s   d| _ | j d ¡ d S r<   )r:   r;   r!   r'   r   r   r   r)   V   s   zMyProto.connection_lostc                 Ã   s   | j I d H  d S r	   )r;   r%   r   r   r   Úwait_closedZ   s   €zMyProto.wait_closedN)r3   r4   r5   r   r#   r-   r)   r=   r   r   r   r   r7   F   s    r7   c                       sd   e Zd Zdd ZdZdd„ Ze‡ fdd„ƒZe‡ fdd	„ƒZ‡ fd
d„Z	‡ fdd„Z
dd„ Z‡  ZS )ÚSendfileBaseó   xi  é   c                 C   s   t ‚r	   )ÚNotImplementedErrorr%   r   r   r   Úcreate_event_loopj   s   zSendfileBase.create_event_loopc                    sF   t tjdƒ}| | j¡ W d   ƒ n1 sw   Y  tƒ  ¡  d S )NÚwb)Úopenr   ÚTESTFNÚwriteÚDATAr,   Ú
setUpClass)ÚclsÚfpr0   r   r   rH   m   s   ÿzSendfileBase.setUpClassc                    s   t  t j¡ tƒ  ¡  d S r	   )r   ÚunlinkrE   r,   ÚtearDownClass©rI   r0   r   r   rL   s   s   zSendfileBase.tearDownClassc                    s@   t tjdƒ| _|  | jj¡ |  ¡ | _|  | j¡ t	ƒ  
¡  d S )NÚrb)rD   r   rE   ÚfileÚ
addCleanupr.   rB   r   Zset_event_loopr,   ÚsetUpr%   r0   r   r   rQ   x   s
   
zSendfileBase.setUpc                    s4   | j  ¡ st | j ¡ |  ¡  t ¡  tƒ  ¡  d S r	   )	r   Z	is_closedÚ
test_utilsZrun_brieflyZ
doCleanupsr   Ú
gc_collectr,   ÚtearDownr%   r0   r   r   rT      s
   
zSendfileBase.tearDownc                 C   s   | j  |¡S r	   )r   Úrun_until_complete)r   Úcoror   r   r   Úrun_loopˆ   s   zSendfileBase.run_loop)r3   r4   r5   rG   ÚBUF_SIZErB   ÚclassmethodrH   rL   rQ   rT   rW   r6   r   r   r0   r   r>   ^   s    	r>   c                       st   e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZddd„Zdd	„ Zddd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Z‡  ZS )ÚSockSendfileMixinc                    s   t j| _dt _tƒ  ¡  d S )Ni @  )r   Ú!SENDFILE_FALLBACK_READBUFFER_SIZEÚ_SockSendfileMixin__old_bufsizer,   rH   rM   r0   r   r   rH   Ž   s   zSockSendfileMixin.setUpClassc                    s   | j t_tƒ  ¡  d S r	   )r\   r   r[   r,   rL   rM   r0   r   r   rL   ”   s   zSockSendfileMixin.tearDownClassTc                 C   s.   t   t jt j¡}| d¡ |r|  |j¡ |S r8   )ÚsocketÚAF_INETÚSOCK_STREAMÚsetblockingrP   r.   )r   ÚcleanupÚsockr   r   r   Úmake_socket™   s
   
zSockSendfileMixin.make_socketc                 C   s   |  tjtj| j¡ d S r	   )Ú
setsockoptr]   Ú
SOL_SOCKETÚ	SO_RCVBUFrX   )r   rb   r   r   r   Úreduce_receive_buffer_size    s   z,SockSendfileMixin.reduce_receive_buffer_sizeNc                 C   s2   |  tjtj| j¡ |d ur|j| jd d S d S )N)Úhigh)rd   r]   re   Ú	SO_SNDBUFrX   Zset_write_buffer_limits)r   rb   r   r   r   r   Úreduce_send_buffer_size¥   s   ÿz)SockSendfileMixin.reduce_send_buffer_sizec                    s¢   t ˆjƒ‰ t ¡ }ˆjdd}| tj|f¡ ˆ ˆjj‡ fdd„|d¡‰ˆ 	|¡ ˆ ¡ }ˆ ˆj 
|d|f¡¡ ˆ |¡ ‡ ‡‡fdd„}ˆ |¡ |ˆ fS )	NF)ra   c                      ó   ˆ S r	   r   r   )Úprotor   r   Ú<lambda>µ   ó    z8SockSendfileMixin.prepare_socksendfile.<locals>.<lambda>)rb   z	127.0.0.1c                      s<   ˆ j d urˆ j  ¡  ˆ ˆ  ¡ ¡ ˆ ¡  ˆ ˆ ¡ ¡ d S r	   )r   r.   rW   r=   r   ©rl   r   Úserverr   r   ra   ¼   s
   

z7SockSendfileMixin.prepare_socksendfile.<locals>.cleanup)r7   r   r   Úfind_unused_portrc   ÚbindÚHOSTrW   Úcreate_serverrg   Zsock_connectrj   rP   )r   ÚportÚsrv_sockrb   ra   r   ro   r   Úprepare_socksendfile¯   s   

ÿ



z&SockSendfileMixin.prepare_socksendfilec                 C   sv   |   ¡ \}}|  | j || j¡¡}| ¡  |  | ¡ ¡ |  |t| j	ƒ¡ |  |j
| j	¡ |  | j ¡ t| j	ƒ¡ d S r	   )rw   rW   r   Úsock_sendfilerO   r.   r=   ÚassertEqualr*   rG   r   Útell©r   rb   rl   Úretr   r   r   Útest_sock_sendfile_successÊ   s   z,SockSendfileMixin.test_sock_sendfile_successc                 C   sv   |   ¡ \}}|  | j || jdd¡¡}| ¡  |  | ¡ ¡ |  |j| j	dd… ¡ |  | j 
¡ d¡ |  |d¡ d S )Néè  iÐ  i¸  )rw   rW   r   rx   rO   r.   r=   ry   r   rG   rz   r{   r   r   r   Ú(test_sock_sendfile_with_offset_and_countÔ   s   ÿz:SockSendfileMixin.test_sock_sendfile_with_offset_and_countc              	   C   s„   |   ¡ \}}t ¡ }|  | j ||dd ¡¡}W d   ƒ n1 s!w   Y  | ¡  |  | ¡ ¡ |  |d¡ |  | j	 
¡ d¡ d S r2   )rw   ÚtempfileÚTemporaryFilerW   r   rx   r.   r=   ry   rO   rz   )r   rb   rl   Úfr|   r   r   r   Útest_sock_sendfile_zero_sizeß   s   
ÿÿz.SockSendfileMixin.test_sock_sendfile_zero_sizec                 C   s²   dd }|   ¡ \}}|  | j ||¡¡ |  | j || j¡¡}|  | j ||¡¡ | ¡  |  | ¡ ¡ |  |t	| j
ƒ¡ || j
 | }|  |j|¡ |  | j ¡ t	| j
ƒ¡ d S )Ns   mix_regular_sendr@   )rw   rW   r   Zsock_sendallrx   rO   r.   r=   ry   r*   rG   r   rz   )r   Úbufrb   rl   r|   r   r   r   r   Ú(test_sock_sendfile_mix_with_regular_sendê   s   z:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send)Tr	   )r3   r4   r5   rY   rH   rL   rc   rg   rj   rw   r}   r   rƒ   r…   r6   r   r   r0   r   rZ   Œ   s    



rZ   c                   @   sÖ   e Zd Zdddœdd„Ze ejdk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e ej d ¡d!¡d"d#„ ƒZd$d%„ Ze eed&ƒ d'¡d(d)„ ƒZd*d+„ Zd,S )-ÚSendfileMixinFr   ©Úis_sslr   c                   s   t  ¡ }tˆj|d‰|rtsˆ d¡ t ¡ }t ¡ }nd }d }t	 	t	j
t	j¡}| t j|f¡ ˆ ˆjj‡fdd„||d¡‰ˆ |¡ |rLt j}nd }t	 	t	j
t	j¡}| t j|f¡ tˆjd‰ ˆ ˆjj‡ fdd„|||d¡\}	}
ˆj||	d	 ‡ ‡‡‡fd
d„}ˆ |¡ ˆˆ fS )N)r   r   zNo ssl modulec                      rk   r	   r   r   )Ú	srv_protor   r   rm     rn   z0SendfileMixin.prepare_sendfile.<locals>.<lambda>)rb   Ússl)r   c                      rk   r	   r   r   )Ú	cli_protor   r   rm     rn   )rb   rŠ   Úserver_hostname)r   c                      sF   ˆj  ¡  ˆ j  ¡  ˆ ˆj¡ ˆ ˆ j¡ ˆ ¡  ˆ ˆ ¡ ¡ d S r	   )r   r.   rW   r   r=   r   ©r‹   r   rp   r‰   r   r   ra     s   

z/SendfileMixin.prepare_sendfile.<locals>.cleanup)r   rq   r   r   rŠ   ÚskipTestrR   Zsimple_server_sslcontextZsimple_client_sslcontextr]   r^   r_   rr   rs   rW   rt   rg   ÚconnectÚcreate_connectionrj   rP   )r   rˆ   r   ru   Zsrv_ctxZcli_ctxrv   rŒ   Zcli_sockÚtrÚprra   r   r   r   Úprepare_sendfileý   s>   ÿ


ÿ

þ
	zSendfileMixin.prepare_sendfileÚwin32zUDP sockets are not supportedc                 C   sŒ   |   | jjtjtjd¡\}}z1|  td¡ |   | j 	|| j
¡¡ W d   ƒ n1 s,w   Y  |  d| j
 ¡ ¡ W | ¡  d S | ¡  w )N)Úfamilyúnot supportedr   )rW   r   Zcreate_datagram_endpointr
   ZDatagramProtocolr]   r^   ÚassertRaisesRegexÚRuntimeErrorÚsendfilerO   ry   rz   r.   )r   r‘   r’   r   r   r   Útest_sendfile_not_supported(  s   þÿÿÿz)SendfileMixin.test_sendfile_not_supportedc                 C   sŒ   |   ¡ \}}|  | j |j| j¡¡}|j ¡  |  |j¡ |  |t	| j
ƒ¡ |  |jt	| j
ƒ¡ |  |j| j
¡ |  | j ¡ t	| j
ƒ¡ d S r	   ©r“   rW   r   r™   r   rO   r.   r   ry   r*   rG   r   r   rz   ©r   r‰   r‹   r|   r   r   r   Útest_sendfile7  s   ÿ
zSendfileMixin.test_sendfilec                    s    ˆ   ¡ \}}‡ fdd„}|ˆ j_ˆ  ˆ j |jˆ j¡¡}|j ¡  ˆ  |j¡ ˆ  	|t
ˆ jƒ¡ ˆ  	|jt
ˆ jƒ¡ ˆ  	|jˆ j¡ ˆ  	ˆ j ¡ t
ˆ jƒ¡ d S )Nc                    ó   t j ˆ j| |||¡S r	   ©r   ZBaseEventLoopÚ_sendfile_nativer   ©ZtransprO   ÚoffsetÚcountr%   r   r   Úsendfile_nativeE  ó   ÿzCSendfileMixin.test_sendfile_force_fallback.<locals>.sendfile_native)r“   r   r    rW   r™   r   rO   r.   r   ry   r*   rG   r   r   rz   )r   r‰   r‹   r¤   r|   r   r%   r   Útest_sendfile_force_fallbackB  s   ÿ
z*SendfileMixin.test_sendfile_force_fallbackc                    sÆ   t jdkrtˆ jtjƒrˆ  d¡ ˆ  ¡ \}}‡ fdd„}|ˆ j_ˆ  	tj
d¡ ˆ  ˆ jj|jˆ jdd¡ W d   ƒ n1 sAw   Y  |j ¡  ˆ  |j¡ ˆ  |jd¡ ˆ  ˆ j ¡ d¡ d S )	Nr”   zFails on proactor event loopc                    rž   r	   rŸ   r¡   r%   r   r   r¤   [  r¥   zMSendfileMixin.test_sendfile_force_unsupported_native.<locals>.sendfile_nativer–   F©Úfallbackr   )ÚsysÚplatformÚ
isinstancer   r
   ÚProactorEventLooprŽ   r“   r    r—   ZSendfileNotAvailableErrorrW   r™   r   rO   r.   r   ry   r   rz   )r   r‰   r‹   r¤   r   r%   r   Ú&test_sendfile_force_unsupported_nativeU  s&   

ÿÿÿþ
z4SendfileMixin.test_sendfile_force_unsupported_nativec                 C   s   | j dd\}}|  | j |j| j¡¡}|j ¡  |  |j¡ |  |t	| j
ƒ¡ |  |jt	| j
ƒ¡ |  |j| j
¡ |  | j ¡ t	| j
ƒ¡ d S )NT©rˆ   r›   rœ   r   r   r   Útest_sendfile_sslm  s   ÿ
zSendfileMixin.test_sendfile_sslc                 C   sŠ   |   ¡ \}}|j ¡  |  td¡ |  | j |j| j¡¡ W d   ƒ n1 s(w   Y  |  |j	¡ |  
|jd¡ |  
| j ¡ d¡ d S )Nz
is closingr   )r“   r   r.   r—   r˜   rW   r   r™   rO   r   ry   r   rz   ©r   r‰   r‹   r   r   r   Ú test_sendfile_for_closing_transpx  s   
ÿz.SendfileMixin.test_sendfile_for_closing_transpc                 C   s¨   |   ¡ \}}dd }dd }|j |¡ |  | j |j| j¡¡}|j |¡ |j ¡  |  |j¡ |  	|t
| jƒ¡ |  	|j|| j | ¡ |  	| j ¡ t
| jƒ¡ d S )Ns   PREFIX__é   s   --SUFFIX©r“   r   rF   rW   r   r™   rO   r.   r   ry   r*   rG   r   rz   ©r   r‰   r‹   ZPREFIXZSUFFIXr|   r   r   r   Útest_sendfile_pre_and_post_data  s   ÿ
z-SendfileMixin.test_sendfile_pre_and_post_datac                 C   s¬   | j dd\}}dd }dd }|j |¡ |  | j |j| j¡¡}|j |¡ |j ¡  |  |j¡ |  	|t
| jƒ¡ |  	|j|| j | ¡ |  	| j ¡ t
| jƒ¡ d S )NTr®   s   zxcvbnmr²   s
   0987654321r³   r´   r   r   r   Ú#test_sendfile_ssl_pre_and_post_data  s   ÿ
z1SendfileMixin.test_sendfile_ssl_pre_and_post_datac                 C   s†   |   ¡ \}}|  | j |j| jdd¡¡}|j ¡  |  |j¡ |  |d¡ |  |j	d¡ |  |j
| jdd… ¡ |  | j ¡ d¡ d S )Nr~   éd   éL  ©r“   rW   r   r™   r   rO   r.   r   ry   r   r   rG   rz   rœ   r   r   r   Útest_sendfile_partial  s   ÿ
z#SendfileMixin.test_sendfile_partialc                 C   sŠ   | j dd\}}|  | j |j| jdd¡¡}|j ¡  |  |j¡ |  |d¡ |  |j	d¡ |  |j
| jdd… ¡ |  | j ¡ d¡ d S )NTr®   r~   r·   r¸   r¹   rœ   r   r   r   Útest_sendfile_ssl_partial¨  s   ÿ
z'SendfileMixin.test_sendfile_ssl_partialc                 C   s–   | j t| jƒd\}}|  | j |j| j¡¡}|j ¡  |  |j	¡ |  
|t| jƒ¡ |  
|jt| jƒ¡ |  
|j| j¡ |  
| j ¡ t| jƒ¡ d S )N©r   )r“   r*   rG   rW   r   r™   r   rO   r.   r   ry   r   r   rz   rœ   r   r   r   Ú(test_sendfile_close_peer_after_receiving³  s   
ÿÿ
z6SendfileMixin.test_sendfile_close_peer_after_receivingc                 C   sŽ   | j dt| jƒd\}}|  | j |j| j¡¡}|  |j¡ |  	|t| jƒ¡ |  	|j
t| jƒ¡ |  	|j| j¡ |  	| j ¡ t| jƒ¡ d S )NTr‡   )r“   r*   rG   rW   r   r™   r   rO   r   ry   r   r   rz   rœ   r   r   r   Ú,test_sendfile_ssl_close_peer_after_receiving¿  s   

ÿÿz:SendfileMixin.test_sendfile_ssl_close_peer_after_receivingZsunoszDoesn't work on Solarisc                 C   sÎ   | j dd\}}|  t¡ |  | j |j| j¡¡ W d   ƒ n1 s$w   Y  |  |j¡ |  	d|j
  ko>t| jƒk n  |j
¡ |  	d| j ¡   koUt| jƒk n  | j ¡ ¡ |  	|j ¡ ¡ d S )Nr²   r¼   )r“   ÚassertRaisesÚConnectionErrorrW   r   r™   r   rO   r   Ú
assertTruer   r*   rG   rz   Ú
is_closingr°   r   r   r   Ú3test_sendfile_close_peer_in_the_middle_of_receivingÎ  s   ÿÿ"ÿ&ÿzASendfileMixin.test_sendfile_close_peer_in_the_middle_of_receivingc                    s  ‡ fdd„}|ˆ j _ˆ jdd\}}ˆ  t¡1 zˆ  ˆ j  |jˆ j¡¡ W n t	y@ } z|j
t
jkr;tjdkr;t‚‚ d }~ww W d   ƒ n1 sKw   Y  ˆ  |j¡ ˆ  d|j  koetˆ jƒk n  |j¡ ˆ  dˆ j ¡   ko|tˆ jƒk n  ˆ j ¡ ¡ d S )Nc                    rž   r	   rŸ   r¡   r%   r   r   r¤   ß  r¥   zcSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving.<locals>.sendfile_nativer²   r¼   Údarwin)r   r    r“   r¿   rÀ   rW   r™   r   rO   ÚOSErrorÚerrnoZ
EPROTOTYPEr©   rª   r   rÁ   r   r*   rG   rz   )r   r¤   r‰   r‹   Úer   r%   r   Ú<test_sendfile_fallback_close_peer_in_the_middle_of_receivingÝ  s.   ÿ€úþþ"ÿ&ÿzJSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receivingr™   z"Don't have native sendfile supportc                    s–   ˆ  ¡ \}‰ ˆj ¡ ‰‡ ‡‡fdd„}ˆj |ƒ ¡}ˆ ˆ¡ ˆ td¡ ˆ j d¡ W d   ƒ n1 s6w   Y  ˆ |¡}ˆ 	|t
ˆjƒ¡ d S )Nc                   “   s$   ˆ  d ¡ ˆj ˆ jˆj¡I d H S r	   )r!   r   r™   r   rO   r   ©r‹   r;   r   r   r   rV      s   €
z=SendfileMixin.test_sendfile_prevents_bare_write.<locals>.corozsendfile is in progresss   data)r“   r   r   Zcreate_taskrW   r—   r˜   r   rF   ry   r*   rG   )r   r‰   rV   Útr|   r   rÉ   r   Ú!test_sendfile_prevents_bare_writeú  s   

ÿþ
z/SendfileMixin.test_sendfile_prevents_bare_writec                 C   sj   t  ¡ }dd„ |j_tjj|_|  t	d¡ | j
 | j
j|d dd¡ W d   ƒ d S 1 s.w   Y  d S )Nc                   S   s   dS r8   r   r   r   r   r   rm     rn   zPSendfileMixin.test_sendfile_no_fallback_for_fallback_transport.<locals>.<lambda>zfallback is disabledFr§   )r   ZMockrÂ   Zside_effectr   Z_SendfileModeZFALLBACKZ_sendfile_compatibler—   r˜   r   rU   r™   r"   r   r   r   Ú0test_sendfile_no_fallback_for_fallback_transport  s   
ÿ"ÿz>SendfileMixin.test_sendfile_no_fallback_for_fallback_transportN)r3   r4   r5   r“   ÚunittestZskipIfr©   rª   rš   r   r¦   r­   r¯   r±   rµ   r¶   rº   r»   r½   r¾   Ú
startswithrÃ   rÈ   ÚhasattrÚosrË   rÌ   r   r   r   r   r†   ù   s2    +
	ÿ
ÿ
r†   c                   @   s   e Zd ZdS )ÚSendfileTestsBaseN)r3   r4   r5   r   r   r   r   rÑ     s    rÑ   r”   c                   @   ó   e Zd Zdd„ ZdS )ÚSelectEventLoopTestsc                 C   ó   t  ¡ S r	   )r
   ÚSelectorEventLoopr%   r   r   r   rB     ó   ú&SelectEventLoopTests.create_event_loopN©r3   r4   r5   rB   r   r   r   r   rÓ     ó    rÓ   c                   @   rÒ   )ÚProactorEventLoopTestsc                 C   rÔ   r	   )r
   r¬   r%   r   r   r   rB   $  rÖ   z(ProactorEventLoopTests.create_event_loopNrØ   r   r   r   r   rÚ   !  rÙ   rÚ   ÚKqueueSelectorc                   @   rÒ   )ÚKqueueEventLoopTestsc                 C   ó   t  t ¡ ¡S r	   )r
   rÕ   Ú	selectorsrÛ   r%   r   r   r   rB   .  s   ÿz&KqueueEventLoopTests.create_event_loopNrØ   r   r   r   r   rÜ   +  rÙ   rÜ   ÚEpollSelectorc                   @   rÒ   )ÚEPollEventLoopTestsc                 C   rÝ   r	   )r
   rÕ   rÞ   rß   r%   r   r   r   rB   6  r   z%EPollEventLoopTests.create_event_loopNrØ   r   r   r   r   rà   3  rÙ   rà   ÚPollSelectorc                   @   rÒ   )ÚPollEventLoopTestsc                 C   rÝ   r	   )r
   rÕ   rÞ   rá   r%   r   r   r   rB   =  r   z$PollEventLoopTests.create_event_loopNrØ   r   r   r   r   râ   :  rÙ   râ   c                   @   rÒ   )rÓ   c                 C   rÝ   r	   )r
   rÕ   rÞ   ÚSelectSelectorr%   r   r   r   rB   D  r   r×   NrØ   r   r   r   r   rÓ   A  rÙ   Ú__main__)(Ú__doc__r
   rÆ   rÐ   r]   r©   r€   rÍ   r   r   r   Útestr   Ztest.supportr   r   Ztest.test_asyncior   rR   rŠ   ÚImportErrorr   ZProtocolr   r7   r>   rZ   r†   rÑ   rª   ZTestCaserÓ   rÚ   rÞ   rÏ   rÜ   rà   râ   r3   Úmainr   r   r   r   Ú<module>   sn    ÿ*.m  
ÿÿ
ÿ
ÿ
ÿÿÿ