a
    	¼3jVP  ã                   @   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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yž   dZY n0 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rBG dd„ deejƒZG dd„ deejƒZn|ddlZe edƒrjG 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dS )&z!Tests for sendfile functionality.é    N)Úbase_events)Ú	constants)Úmock)Úsupport)Úsocket_helper)Ú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_sendfile.pyÚtearDownModule   s    r   c                       s>   e Zd Zd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 )NZINITIALr   )	Ú	transportÚstateÚnbytesÚcreate_futureÚ	connectedÚdoneÚ	bytearrayÚdataÚclose_after)ÚselfÚloopr   r
   r
   r   Ú__init__   s    

zMySendfileProto.__init__c                 C   s"   || _ d| _| jr| j d ¡ d S )NZ	CONNECTED)r   r   r   Ú
set_result©r   r   r
   r
   r   Úconnection_made&   s    zMySendfileProto.connection_madec                 C   s
   d| _ d S )NZEOF)r   ©r   r
   r
   r   Úeof_received-   s    zMySendfileProto.eof_receivedc                 C   s   d| _ | jr| j d ¡ d S )NZCLOSED)r   r   r   ©r   Úexcr
   r
   r   Úconnection_lost1   s    zMySendfileProto.connection_lostc                    sJ   |  j t|ƒ7  _ | j |¡ tƒ  |¡ | jrF| j | jkrF| j ¡  d S r   )	r   Úlenr   ÚextendÚsuperÚdata_receivedr   r   Úclose©r   r   ©Ú	__class__r
   r   r%   7   s
    zMySendfileProto.data_received)Nr   )	Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r%   Ú__classcell__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 )ÚMyProtoc                 C   s(   d| _ d| _tƒ | _| ¡ | _d | _d S ©NF)ÚstartedÚclosedr   r   r   Úfutr   )r   r   r
   r
   r   r   B   s
    
zMyProto.__init__c                 C   s   d| _ || _d S ©NT)r0   r   r   r
   r
   r   r   I   s    zMyProto.connection_madec                 C   s   | j  |¡ d S r   )r   r#   r'   r
   r
   r   r%   M   s    zMyProto.data_receivedc                 C   s   d| _ | j d ¡ d S r3   )r1   r2   r   r   r
   r
   r   r!   P   s    zMyProto.connection_lostc                 Ã   s   | j I d H  d S r   )r2   r   r
   r
   r   Úwait_closedT   s    zMyProto.wait_closedN)r*   r+   r,   r   r   r%   r!   r4   r
   r
   r
   r   r.   @   s
   r.   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 )ÚSendfileBases   SendfileBaseDatai   é   c                 C   s   t ‚d S r   )ÚNotImplementedErrorr   r
   r
   r   Úcreate_event_loop`   s    zSendfileBase.create_event_loopc                    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>   c   s    *zSendfileBase.setUpClassc                    s   t  t j¡ tƒ  ¡  d S r   )r   Úunlinkr;   r$   ÚtearDownClass©r?   r(   r
   r   rB   i   s    zSendfileBase.tearDownClassc                    s@   t tjdƒ| _|  | jj¡ |  ¡ | _|  | j¡ t	ƒ  
¡  d S )NÚrb)r:   r   r;   ÚfileÚ
addCleanupr&   r8   r   Zset_event_loopr$   ÚsetUpr   r(   r
   r   rG   n   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   r(   r
   r   rJ   u   s
    
zSendfileBase.tearDownc                 C   s   | j  |¡S r   )r   Úrun_until_complete)r   Úcoror
   r
   r   Úrun_loop~   s    zSendfileBase.run_loop)r*   r+   r,   r=   ÚBUF_SIZEr8   Úclassmethodr>   rB   rG   rJ   rM   r-   r
   r
   r(   r   r5   X   s   	r5   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$   r>   rC   r(   r
   r   r>   „   s    zSockSendfileMixin.setUpClassc                    s   | j t_tƒ  ¡  d S r   )rR   r   rQ   r$   rB   rC   r(   r
   r   rB   Š   s    zSockSendfileMixin.tearDownClassTc                 C   s.   t   t jt j¡}| d¡ |r*|  |j¡ |S r/   )ÚsocketÚAF_INETÚSOCK_STREAMÚsetblockingrF   r&   )r   ÚcleanupÚsockr
   r
   r   Úmake_socket   s
    
zSockSendfileMixin.make_socketc                 C   s   |  tjtj| j¡ d S r   )Ú
setsockoptrS   Ú
SOL_SOCKETÚ	SO_RCVBUFrN   )r   rX   r
   r
   r   Úreduce_receive_buffer_size–   s    z,SockSendfileMixin.reduce_receive_buffer_sizeNc                 C   s.   |  tjtj| j¡ |d ur*|j| jd d S )N)Úhigh)rZ   rS   r[   Ú	SO_SNDBUFrN   Zset_write_buffer_limits)r   rX   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)rW   c                      s   ˆ S r   r
   r
   )Úprotor
   r   Ú<lambda>«   ó    z8SockSendfileMixin.prepare_socksendfile.<locals>.<lambda>)rX   z	127.0.0.1c                      s<   ˆ j d ur"ˆ j  ¡  ˆ ˆ  ¡ ¡ ˆ ¡  ˆ ˆ ¡ ¡ d S r   )r   r&   rM   r4   r
   ©ra   r   Úserverr
   r   rW   ²   s
    

z7SockSendfileMixin.prepare_socksendfile.<locals>.cleanup)r.   r   r   Úfind_unused_portrY   ÚbindÚHOSTrM   Úcreate_serverr]   Zsock_connectr`   rF   )r   ÚportÚsrv_sockrX   rW   r
   rd   r   Úprepare_socksendfile¥   s    

ÿ



z&SockSendfileMixin.prepare_socksendfilec                 C   sv   |   ¡ \}}|  | j || j¡¡}| ¡  |  | ¡ ¡ |  |t| j	ƒ¡ |  |j
| j	¡ |  | j ¡ t| j	ƒ¡ d S r   )rl   rM   r   Úsock_sendfilerE   r&   r4   ÚassertEqualr"   r=   r   Útell©r   rX   ra   Ú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¸  )rl   rM   r   rm   rE   r&   r4   rn   r   r=   ro   rp   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 sB0    Y  | ¡  |  | ¡ ¡ |  |d¡ |  | j	 
¡ d¡ d S )Nr   )rl   ÚtempfileÚTemporaryFilerM   r   rm   r&   r4   rn   rE   ro   )r   rX   ra   Úfrq   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_sendr6   )rl   rM   r   Zsock_sendallrm   rE   r&   r4   rn   r"   r=   r   ro   )r   ÚbufrX   ra   rq   Zexpectedr
   r
   r   Ú(test_sock_sendfile_mix_with_regular_sendà   s    z:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send)T)N)r*   r+   r,   rO   r>   rB   rY   r]   r`   rl   rr   rt   rx   rz   r-   r
   r
   r(   r   rP   ‚   s   



rP   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¡‰ˆ |¡ |r˜t 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                      s   ˆ S r   r
   r
   )Ú	srv_protor
   r   rb     rc   z0SendfileMixin.prepare_sendfile.<locals>.<lambda>)rX   Ússl)r   c                      s   ˆ S r   r
   r
   )Ú	cli_protor
   r   rb     rc   )rX   r   Úserver_hostname)r   c                      sF   ˆj  ¡  ˆ j  ¡  ˆ ˆj¡ ˆ ˆ j¡ ˆ ¡  ˆ ˆ ¡ ¡ d S r   )r   r&   rM   r   r4   r
   ©r€   r   re   r~   r
   r   rW     s    

z/SendfileMixin.prepare_sendfile.<locals>.cleanup)r   rf   r   r   r   ÚskipTestrH   Zsimple_server_sslcontextZsimple_client_sslcontextrS   rT   rU   rg   rh   rM   ri   r]   ÚconnectÚcreate_connectionr`   rF   )r   r}   r   rj   Zsrv_ctxZcli_ctxrk   r   Zcli_sockÚtrÚprrW   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¡\}}z`|  td¡& |   | j 	|| j
¡¡ W d   ƒ n1 sX0    Y  |  d| j
 ¡ ¡ W | ¡  n
| ¡  0 d S )N)Úfamilyúnot supportedr   )rM   r   Zcreate_datagram_endpointr	   ZDatagramProtocolrS   rT   ÚassertRaisesRegexÚRuntimeErrorÚsendfilerE   rn   ro   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ˆ   rM   r   rŽ   r   rE   r&   r   rn   r"   r=   r   r   ro   ©r   r~   r€   rq   r
   r
   r   Útest_sendfile-  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                    s   t j ˆ j| |||¡S r   ©r   ZBaseEventLoopÚ_sendfile_nativer   ©ZtransprE   ÚoffsetÚcountr   r
   r   Úsendfile_native;  s    ÿzCSendfileMixin.test_sendfile_force_fallback.<locals>.sendfile_native)rˆ   r   r”   rM   rŽ   r   rE   r&   r   rn   r"   r=   r   r   ro   )r   r~   r€   r˜   rq   r
   r   r   Útest_sendfile_force_fallback8  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 s‚0    Y  |j ¡  ˆ  |j¡ ˆ  |jd¡ ˆ  ˆ j ¡ d¡ d S )	Nr‰   zFails on proactor event loopc                    s   t j ˆ j| |||¡S r   r“   r•   r   r
   r   r˜   Q  s    ÿzMSendfileMixin.test_sendfile_force_unsupported_native.<locals>.sendfile_nativer‹   F©Úfallbackr   )ÚsysÚplatformÚ
isinstancer   r	   ÚProactorEventLooprƒ   rˆ   r”   rŒ   ZSendfileNotAvailableErrorrM   rŽ   r   rE   r&   r   rn   r   ro   )r   r~   r€   r˜   r
   r   r   Ú&test_sendfile_force_unsupported_nativeK  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_sslc  s    ÿ
zSendfileMixin.test_sendfile_sslc                 C   sŠ   |   ¡ \}}|j ¡  |  td¡( |  | j |j| j¡¡ W d   ƒ n1 sP0    Y  |  |j	¡ |  
|jd¡ |  
| j ¡ d¡ d S )Nz
is closingr   )rˆ   r   r&   rŒ   r   rM   r   rŽ   rE   r   rn   r   ro   ©r   r~   r€   r
   r
   r   Ú test_sendfile_for_closing_transpn  s    
6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   r<   rM   r   rŽ   rE   r&   r   rn   r"   r=   r   ro   ©r   r~   r€   ZPREFIXZSUFFIXrq   r
   r
   r   Útest_sendfile_pre_and_post_dataw  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 )Nrs   éd   éL  ©rˆ   rM   r   rŽ   r   rE   r&   r   rn   r   r   r=   ro   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¡   rs   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"   r=   rM   r   rŽ   r   rE   r&   r   rn   r   r   ro   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"   r=   rM   r   rŽ   r   rE   r   rn   r   r   ro   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 sH0    Y  |  |j¡ |  	d|j
  ko|t| jƒk n  |j
¡ |  	d| j ¡   koªt| jƒk n  | j ¡ ¡ |  	|j ¡ ¡ d S )Nr¥   r¯   )rˆ   ÚassertRaisesÚConnectionErrorrM   r   rŽ   r   rE   r   Ú
assertTruer   r"   r=   ro   Ú
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¡( ˆ  ˆ j  |jˆ j¡¡ W d   ƒ n1 s\0    Y  ˆ  |j	¡ ˆ  
d|j  kotˆ jƒk n  |j¡ ˆ  
dˆ j ¡   ko¾tˆ jƒk n  ˆ j ¡ ¡ d S )Nc                    s   t j ˆ j| |||¡S r   r“   r•   r   r
   r   r˜   Õ  s    ÿzcSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving.<locals>.sendfile_nativer¥   r¯   )r   r”   rˆ   r²   r³   rM   rŽ   r   rE   r   r´   r   r"   r=   ro   )r   r˜   r~   r€   r
   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 sl0    Y  ˆ |¡}ˆ 	|t
ˆjƒ¡ d S )Nc                   “   s"   ˆ  d ¡ ˆj ˆ jˆj¡I d H S r   )r   r   rŽ   r   rE   r
   ©r€   r2   r   r
   r   rL   í  s    
z=SendfileMixin.test_sendfile_prevents_bare_write.<locals>.corozsendfile is in progresss   data)rˆ   r   r   Zcreate_taskrM   rŒ   r   r   r<   rn   r"   r=   )r   r~   rL   Útrq   r
   r¸   r   Ú!test_sendfile_prevents_bare_writeç  s    

ÿ*
z/SendfileMixin.test_sendfile_prevents_bare_writec                 C   sh   t  ¡ }dd„ |j_tjj|_|  t	d¡* | j
 | j
j|d dd¡ W d   ƒ n1 sZ0    Y  d S )Nc                   S   s   dS r/   r
   r
   r
   r
   r   rb   û  rc   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   rK   rŽ   r   r
   r
   r   Ú0test_sendfile_no_fallback_for_fallback_transportù  s    
ÿz>SendfileMixin.test_sendfile_no_fallback_for_fallback_transportN)r*   r+   r,   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{   ï   s0   +
	ÿ
ÿ
r{   c                   @   s   e Zd ZdS )ÚSendfileTestsBaseN)r*   r+   r,   r
   r
   r
   r   rÀ     s   rÀ   r‰   c                   @   s   e Zd Zdd„ ZdS )ÚSelectEventLoopTestsc                 C   s   t  ¡ S r   )r	   ÚSelectorEventLoopr   r
   r
   r   r8     s    ú&SelectEventLoopTests.create_event_loopN©r*   r+   r,   r8   r
   r
   r
   r   rÁ     s   rÁ   c                   @   s   e Zd Zdd„ ZdS )ÚProactorEventLoopTestsc                 C   s   t  ¡ S r   )r	   rŸ   r   r
   r
   r   r8     s    z(ProactorEventLoopTests.create_event_loopNrÄ   r
   r
   r
   r   rÅ     s   rÅ   ÚKqueueSelectorc                   @   s   e Zd Zdd„ ZdS )ÚKqueueEventLoopTestsc                 C   s   t  t ¡ ¡S r   )r	   rÂ   Ú	selectorsrÆ   r   r
   r
   r   r8     s    ÿz&KqueueEventLoopTests.create_event_loopNrÄ   r
   r
   r
   r   rÇ     s   rÇ   ÚEpollSelectorc                   @   s   e Zd Zdd„ ZdS )ÚEPollEventLoopTestsc                 C   s   t  t ¡ ¡S r   )r	   rÂ   rÈ   rÉ   r   r
   r
   r   r8   #  s    z%EPollEventLoopTests.create_event_loopNrÄ   r
   r
   r
   r   rÊ      s   rÊ   ÚPollSelectorc                   @   s   e Zd Zdd„ ZdS )ÚPollEventLoopTestsc                 C   s   t  t ¡ ¡S r   )r	   rÂ   rÈ   rË   r   r
   r
   r   r8   *  s    z$PollEventLoopTests.create_event_loopNrÄ   r
   r
   r
   r   rÌ   '  s   rÌ   c                   @   s   e Zd Zdd„ ZdS )rÁ   c                 C   s   t  t ¡ ¡S r   )r	   rÂ   rÈ   ÚSelectSelectorr   r
   r
   r   r8   1  s    rÃ   NrÄ   r
   r
   r
   r   rÁ   .  s   )$Ú__doc__r	   r¿   rS   rœ   ru   r¼   r   r   r   Útestr   Ztest.supportr   Ztest.test_asyncior   rH   r   ÚImportErrorr   ÚProtocolr   r.   r5   rP   r{   rÀ   r   ZTestCaserÁ   rÅ   rÈ   r¾   rÇ   rÊ   rÌ   r
   r
   r
   r   Ú<module>   s`   
&*m  ÿÿÿÿÿÿ