a
    òñ"hQ ã                   @   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zddlZW n eyn   dZY n0 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ZejdkrÆ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" ddl!m#Z#m$Z$m%Z% dd„ Z&dd„ Z'dd„ Z(G dd„ dƒZ)G dd„ dej*ƒZ+G dd„ de+ƒZ,G dd„ dej-ƒZ.G dd„ dej*ƒZ/G dd„ dej0ƒZ1G dd „ d ej2ƒZ3G d!d"„ d"ƒZ4G d#d$„ d$ƒZ5ejdkrG d%d&„ d&e4ej6ƒZ7G d'd(„ d(e4e5ej6ƒZ8n”ddl9Z9G d)d*„ d*e4ƒZ:e;e9d+ƒrTG d,d-„ d-e:e5ej6ƒZ<e;e9d.ƒrvG d/d0„ d0e:e5ej6ƒZ=e;e9d1ƒr˜G d2d3„ d3e:e5ej6ƒZ>G d4d&„ d&e:e5ej6ƒZ7d5d6„ Z?G d7d8„ d8ej6ƒZ@G d9d:„ d:ej6ƒZAG d;d<„ d<ej6ƒZBG d=d>„ d>ej6ƒZCG d?d@„ d@ƒZDG dAdB„ dBeDej6ƒZEzddlFZFW n ey@   Y n0 G dCdD„ dDeDej6ƒZGG dEdF„ dFej6ƒZHG dGdH„ dHej6ƒZIeJdIkrŒe K¡  dS )JzTests for events.py.é    N)ÚmockÚwin32)Ú
coroutines)Úevents)Úproactor_events)Úselector_events)Úutils)Úsupport)Úsocket_helper)Ú	ALWAYS_EQÚLARGESTÚSMALLESTc                   C   s   t  d ¡ d S ©N)ÚasyncioÚset_event_loop_policy© r   r   úE/opt/python-3.9.21/usr/lib/python3.9/test/test_asyncio/test_events.pyÚtearDownModule'   s    r   c                  C   sF   t j d¡rdS t jdkrdS t ¡ d } ttt|  d¡ƒƒ} | dk S )z4Return True if the platform is Mac OS 10.4 or older.ZaixTÚdarwinFr   Ú.)é
   é   )ÚsysÚplatformÚ
startswithZmac_verÚtupleÚmapÚintÚsplit)Úversionr   r   r   Úbroken_unix_getsockname+   s    
r    c                  C   s&   dd„ } t  ¡ }t  |¡ | | ƒ ¡S )Nc                   Ó   s   dS ©NÚhellor   r   r   r   r   Údoit7   s    z8_test_get_event_loop_new_process__sub_proc.<locals>.doit)r   Únew_event_loopÚset_event_loopÚrun_until_complete)r#   Úloopr   r   r   Ú*_test_get_event_loop_new_process__sub_proc6   s    
r(   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCoroLikec                 C   s   d S r   r   )ÚselfÚvr   r   r   Úsend@   s    zCoroLike.sendc                 G   s   d S r   r   ©r*   Úexcr   r   r   ÚthrowC   s    zCoroLike.throwc                 C   s   d S r   r   ©r*   r   r   r   ÚcloseF   s    zCoroLike.closec                 C   s   d S r   r   r0   r   r   r   Ú	__await__I   s    zCoroLike.__await__N)Ú__name__Ú
__module__Ú__qualname__r,   r/   r1   r2   r   r   r   r   r)   ?   s   r)   c                   @   s>   e Zd ZdZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚMyBaseProtoNc                 C   s2   d | _ d| _d| _|d ur.| ¡ | _| ¡ | _d S ©NÚINITIALr   )Ú	transportÚstateÚnbytesÚcreate_futureÚ	connectedÚdone©r*   r'   r   r   r   Ú__init__Q   s    
zMyBaseProto.__init__c                 C   s6   || _ | jdksJ | jƒ‚d| _| jr2| j d ¡ d S ©Nr8   Ú	CONNECTED©r9   r:   r=   Ú
set_result©r*   r9   r   r   r   Úconnection_madeY   s
    zMyBaseProto.connection_madec                 C   s*   | j dksJ | j ƒ‚|  jt|ƒ7  _d S ©NrB   ©r:   r;   Úlen©r*   Údatar   r   r   Údata_received`   s    zMyBaseProto.data_receivedc                 C   s   | j dksJ | j ƒ‚d| _ d S )NrB   ÚEOF©r:   r0   r   r   r   Úeof_receivedd   s    zMyBaseProto.eof_receivedc                 C   s0   | j dv sJ | j ƒ‚d| _ | jr,| j d ¡ d S )N)rB   rM   ÚCLOSED©r:   r>   rD   r-   r   r   r   Úconnection_losth   s    zMyBaseProto.connection_lost)N)
r3   r4   r5   r=   r>   r@   rF   rL   rO   rR   r   r   r   r   r6   M   s   
r6   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚMyProtoc                    s   t ƒ  |¡ | d¡ d S )Ns%   GET / HTTP/1.0
Host: example.com

)ÚsuperrF   ÚwriterE   ©Ú	__class__r   r   rF   p   s    zMyProto.connection_made©r3   r4   r5   rF   Ú__classcell__r   r   rV   r   rS   o   s   rS   c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚMyDatagramProtoNc                 C   s"   d| _ d| _|d ur| ¡ | _d S r7   )r:   r;   r<   r>   r?   r   r   r   r@   x   s    zMyDatagramProto.__init__c                 C   s$   || _ | jdksJ | jƒ‚d| _d S )Nr8   ÚINITIALIZED©r9   r:   rE   r   r   r   rF   ~   s    zMyDatagramProto.connection_madec                 C   s*   | j dksJ | j ƒ‚|  jt|ƒ7  _d S ©Nr[   rH   ©r*   rK   Úaddrr   r   r   Údatagram_receivedƒ   s    z!MyDatagramProto.datagram_receivedc                 C   s   | j dksJ | j ƒ‚d S r]   rN   r-   r   r   r   Úerror_received‡   s    zMyDatagramProto.error_receivedc                 C   s0   | j dksJ | j ƒ‚d| _ | jr,| j d ¡ d S )Nr[   rP   rQ   r-   r   r   r   rR   Š   s    zMyDatagramProto.connection_lost)N)	r3   r4   r5   r>   r@   rF   r`   ra   rR   r   r   r   r   rZ   u   s   
rZ   c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚMyReadPipeProtoNc                 C   s*   dg| _ d| _d | _|d ur&| ¡ | _d S r7   )r:   r;   r9   r<   r>   r?   r   r   r   r@   ”   s
    zMyReadPipeProto.__init__c                 C   s,   || _ | jdgksJ | jƒ‚| j d¡ d S rA   )r9   r:   ÚappendrE   r   r   r   rF   ›   s    zMyReadPipeProto.connection_madec                 C   s.   | j ddgksJ | j ƒ‚|  jt|ƒ7  _d S rA   rH   rJ   r   r   r   rL       s    zMyReadPipeProto.data_receivedc                 C   s(   | j ddgksJ | j ƒ‚| j  d¡ d S )Nr8   rB   rM   )r:   rc   r0   r   r   r   rO   ¤   s    zMyReadPipeProto.eof_receivedc                 C   sP   d| j vr| j  d¡ | j g d¢ks.J | j ƒ‚| j  d¡ | jrL| j d ¡ d S )NrM   )r8   rB   rM   rP   )r:   rc   r>   rD   r-   r   r   r   rR   ¨   s    
zMyReadPipeProto.connection_lost)N)	r3   r4   r5   r>   r@   rF   rL   rO   rR   r   r   r   r   rb   ‘   s   
rb   c                   @   s*   e Zd ZdZddd„Zdd„ Zdd„ ZdS )	ÚMyWritePipeProtoNc                 C   s"   d| _ d | _|d ur| ¡ | _d S )Nr8   )r:   r9   r<   r>   r?   r   r   r   r@   ´   s    zMyWritePipeProto.__init__c                 C   s$   || _ | jdksJ | jƒ‚d| _d S rA   r\   rE   r   r   r   rF   º   s    z MyWritePipeProto.connection_madec                 C   s0   | j dksJ | j ƒ‚d| _ | jr,| j d ¡ d S ©NrB   rP   rQ   r-   r   r   r   rR   ¿   s    z MyWritePipeProto.connection_lost)N)r3   r4   r5   r>   r@   rF   rR   r   r   r   r   rd   ±   s   
rd   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚMySubprocessProtocolc                    sb   d| _ d | _ˆ  ¡ | _ˆ  ¡ | _‡ fdd„tdƒD ƒ| _dddœ| _d | _t	 
¡ t	 
¡ dœ| _d S )Nr8   c                    s   i | ]}|ˆ   ¡ “qS r   )r<   )Ú.0Úfd©r'   r   r   Ú
<dictcomp>Í   ó    z1MySubprocessProtocol.__init__.<locals>.<dictcomp>é   rk   ©é   é   )r:   r9   r<   r=   Ú	completedÚrangeÚdisconnectsrK   Ú
returncoder   ÚEventÚgot_datar?   r   ri   r   r@   È   s    

ÿzMySubprocessProtocol.__init__c                 C   s0   || _ | jdksJ | jƒ‚d| _| j d ¡ d S rA   rC   rE   r   r   r   rF   Ó   s    z$MySubprocessProtocol.connection_madec                 C   s*   | j dksJ | j ƒ‚d| _ | j d ¡ d S re   )r:   rp   rD   r-   r   r   r   rR   Ù   s    z$MySubprocessProtocol.connection_lostc                 C   s8   | j dksJ | j ƒ‚| j|  |7  < | j|  ¡  d S rG   )r:   rK   ru   Úset)r*   rh   rK   r   r   r   Úpipe_data_receivedÞ   s    z'MySubprocessProtocol.pipe_data_receivedc                 C   s>   | j dksJ | j ƒ‚|r*| j|  |¡ n| j|  |¡ d S rG   )r:   rr   Úset_exceptionrD   )r*   rh   r.   r   r   r   Úpipe_connection_lostã   s    z)MySubprocessProtocol.pipe_connection_lostc                 C   s$   | j dksJ | j ƒ‚| j ¡ | _d S rG   )r:   r9   Zget_returncoders   r0   r   r   r   Úprocess_exitedê   s    z#MySubprocessProtocol.process_exitedN)	r3   r4   r5   r@   rF   rR   rw   ry   rz   r   r   r   r   rf   Æ   s   rf   c                       s0  e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd ¡d!d"„ ƒZe eedƒd ¡d#d$„ ƒZdœd&d'„Zd(d)„ Zejd*d+„ ƒZd%d,i fd-d.„Zdd/d0„Zdžd1d2„Ze e d,u d3¡d4d5„ ƒZ!eje e d,u d3¡d6d7„ ƒƒZ"d8d9„ Z#d:d;„ Z$dŸd<d=„Z%e e d,u d3¡d>d?„ ƒZ&d@dA„ Z'e( )dB¡dCdD„ ƒZ*dEdF„ Z+dGdH„ Z,dIdJ„ Z-e ee.dKƒdL¡dMdN„ ƒZ/dOdP„ Z0ejdQdR„ ƒZ1e ee.dSƒdT¡dUdV„ ƒZ2d dWdX„Z3d¡dYdZ„Z4d¢d[d\„Z5e e d,u d3¡d]d^„ ƒZ6eje e d,u d3¡d_d`„ ƒƒZ7e e d,u d3¡dadb„ ƒZ8eje e d,u d3¡dcdd„ ƒƒZ9e e d,u d3¡dedf„ ƒZ:eje e d,u d3¡dgdh„ ƒƒZ;e e d,u d3¡didj„ ƒZ<dkdl„ Z=dmdn„ Z>e ej?do¡dpdq„ ƒZ@drds„ ZAdtdu„ ZBdvdw„ ZCe ej?do¡dxdy„ ƒZDdzd{„ ZEd|d}„ ZFe eGjHd~kd¡d€d„ ƒZIe eGjHd~kd¡d‚dƒ„ ƒZJe eGjHd~kd¡d„d…„ ƒZKe eGjHd~kd¡d†d‡„ ƒZLe eGjHd~kd¡dˆd‰„ ƒZMe eGjHd~kd¡eN OdŠd‹¡dŒd„ ƒƒZPe eGjHd~kd¡eN OdŠd‹¡dŽd„ ƒƒZQdd‘„ ZRd’d“„ ZSd”d•„ ZTd–d—„ ZUd˜d™„ ZVdšd›„ ZW‡  ZXS )£ÚEventLoopTestsMixinc                    s$   t ƒ  ¡  |  ¡ | _|  | j¡ d S r   )rT   ÚsetUpÚcreate_event_loopr'   r%   r0   rV   r   r   r|   ñ   s    

zEventLoopTestsMixin.setUpc                    s4   | j  ¡ st | j ¡ |  ¡  t ¡  tƒ  ¡  d S r   )	r'   Ú	is_closedÚ
test_utilsÚrun_brieflyZ
doCleanupsr	   Ú
gc_collectrT   ÚtearDownr0   rV   r   r   r‚   ö   s
    
zEventLoopTestsMixin.tearDownc                    sZ   dd„ ‰ ‡ ‡fdd„}ˆ  td¡$ ˆ tˆjj|ƒ ¡ W d   ƒ n1 sL0    Y  d S )Nc                   Ó   s   t  d¡I d H  d S ©Nr   )r   Úsleepr   r   r   r   Úcoro1   s    zBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro1c                   “   s"   ˆ  ˆj ¡ ¡ ˆj ˆ ƒ ¡ d S r   )Ú
assertTruer'   Ú
is_runningr&   r   ©r…   r*   r   r   Úcoro2  s    zBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro2zcoroutine \S+ was never awaited)ZassertWarnsRegexÚRuntimeWarningÚassertRaisesÚRuntimeErrorr'   r&   )r*   r‰   r   rˆ   r   Útest_run_until_complete_nestingÿ   s    þÿz3EventLoopTestsMixin.test_run_until_complete_nestingc                 C   sR   | j  ¡ }| j  t d¡¡ | j  ¡ }|  d||   ko@dkn  || ¡ d S )Nçš™™™™™¹?g{®Gáz´?gš™™™™™é?)r'   Útimer&   r   r„   r†   )r*   Út0Út1r   r   r   Útest_run_until_complete  s    

z+EventLoopTestsMixin.test_run_until_completec                    s(   ‡ fdd„}|ƒ }ˆ   tˆ jj|¡ d S )Nc                   “   s   ˆ j  ¡  t d¡I d H  d S )NrŽ   )r'   Ústopr   r„   r   r0   r   r   Úcb  s    
z?EventLoopTestsMixin.test_run_until_complete_stopped.<locals>.cb)r‹   rŒ   r'   r&   )r*   r”   Ztaskr   r0   r   Útest_run_until_complete_stopped  s
    ÿz3EventLoopTestsMixin.test_run_until_complete_stoppedc                    s>   g ‰ ‡ ‡fdd„}ˆj  d|d¡ ˆj  ¡  ˆ ˆ dg¡ d S )Nc                    s   ˆ   | ¡ ˆj ¡  d S r   ©rc   r'   r“   ©Úarg©Úresultsr*   r   r   Úcallback#  s    
z5EventLoopTestsMixin.test_call_later.<locals>.callbackrŽ   zhello world)r'   Ú
call_laterÚrun_foreverÚassertEqual©r*   r›   r   r™   r   Útest_call_later   s
    
z#EventLoopTestsMixin.test_call_laterc                    s>   g ‰ ‡ ‡fdd„}ˆj  |dd¡ ˆj  ¡  ˆ ˆ dg¡ d S )Nc                    s   ˆ   | |f¡ ˆj ¡  d S r   r–   )Zarg1Zarg2r™   r   r   r›   .  s    z4EventLoopTestsMixin.test_call_soon.<locals>.callbackr"   Úworld)r"   r¡   )r'   Ú	call_soonr   rž   rŸ   r   r™   r   Útest_call_soon+  s
    
z"EventLoopTestsMixin.test_call_soonc                    sž   g ‰t  ¡ ‰‡‡fdd„‰ ‡ ‡‡fdd„}ˆ ¡  t j|d}| ¡  ˆ( ˆj ˆ d¡ ˆj ¡  W d   ƒ n1 sx0    Y  | ¡  ˆ 	ˆddg¡ d S )Nc                    s$   ˆ   | ¡ tˆ ƒdkr ˆj ¡  d S ©Nro   ©rc   rI   r'   r“   r—   r™   r   r   r›   :  s    
z?EventLoopTestsMixin.test_call_soon_threadsafe.<locals>.callbackc                      s   ˆj  ˆ d¡ ˆ ¡  d S r!   )r'   Úcall_soon_threadsafeÚreleaser   )r›   Úlockr*   r   r   Úrun_in_thread?  s    zDEventLoopTestsMixin.test_call_soon_threadsafe.<locals>.run_in_thread©Útargetr¡   r"   )
Ú	threadingÚLockÚacquireÚThreadÚstartr'   r¢   r   Újoinrž   )r*   r©   Útr   )r›   r¨   rš   r*   r   Útest_call_soon_threadsafe6  s    (z-EventLoopTestsMixin.test_call_soon_threadsafec                    sL   g ‰ ‡ ‡fdd„}ˆj  |d¡ ˆj  |d¡ ˆj  ¡  ˆ ˆ ddg¡ d S )Nc                    s$   ˆ   | ¡ tˆ ƒdkr ˆj ¡  d S r¤   r¥   r—   r™   r   r   r›   P  s    
zKEventLoopTestsMixin.test_call_soon_threadsafe_same_thread.<locals>.callbackr"   r¡   )r'   r¦   r¢   r   rž   rŸ   r   r™   r   Ú%test_call_soon_threadsafe_same_threadM  s    
z9EventLoopTestsMixin.test_call_soon_threadsafe_same_threadc                 C   sH   dd„ }| j  d |d¡}| j  |¡\}}|  |d¡ |  |t ¡ ¡ d S )Nc                 S   s   | t  ¡ fS r   )r¬   Ú	get_identr—   r   r   r   Úrun[  s    z5EventLoopTestsMixin.test_run_in_executor.<locals>.runZyo)r'   Úrun_in_executorr&   rž   ZassertNotEqualr¬   rµ   )r*   r¶   Úf2ÚresZ	thread_idr   r   r   Útest_run_in_executorZ  s
    z(EventLoopTestsMixin.test_run_in_executorc                    sr   d‰ ‡ fdd„}dd„ }| j  d |¡}| ¡  | j  | j  ¡ ¡ | j  ¡  || j _|| j _t 	d¡ |  
ˆ ¡ d S )NFc                     s   d‰ d S ©NTr   ©Úargs©Zcalledr   r   Úpatched_call_soone  s    zJEventLoopTestsMixin.test_run_in_executor_cancel.<locals>.patched_call_soonc                   S   s   t  d¡ d S )Ngš™™™™™©?)r   r„   r   r   r   r   r¶   i  s    z<EventLoopTestsMixin.test_run_in_executor_cancel.<locals>.rungš™™™™™Ù?)r'   r·   Úcancelr&   Zshutdown_default_executorr1   r¢   r¦   r   r„   ÚassertFalse)r*   r¿   r¶   r¸   r   r¾   r   Útest_run_in_executor_cancelb  s    ÿ

z/EventLoopTestsMixin.test_run_in_executor_cancelc                    sÂ   t  ¡ \‰}ˆ d¡ tƒ ‰ ‡ ‡‡fdd„}ˆj ˆ ¡ |¡ ˆj |jd¡ t	 
ˆj‡ fdd„¡ ˆj |jd¡ t	 
ˆj‡ fdd„¡ ˆj |j¡ ˆj ˆjj¡ ˆj ¡  ˆ ˆ d	¡ d S )
NFc                     sV   zˆ  d¡} W n ty"   Y d S 0 | r4ˆ  | ¡ nˆ ˆj ˆ ¡ ¡¡ ˆ ¡  d S ©Né   )ÚrecvÚBlockingIOErrorÚextendr†   r'   Úremove_readerÚfilenor1   ©rK   ©Ú
bytes_readÚrr*   r   r   Úreader{  s    z8EventLoopTestsMixin.test_reader_callback.<locals>.readers   abcc                      s   t ˆ ƒdkS )Nrl   ©rI   r   ©rÌ   r   r   Ú<lambda>Š  rk   z:EventLoopTestsMixin.test_reader_callback.<locals>.<lambda>s   defc                      s   t ˆ ƒdkS )Né   rÏ   r   rÐ   r   r   rÑ   Œ  rk   s   abcdef)ÚsocketÚ
socketpairÚsetblockingÚ	bytearrayr'   Ú
add_readerrÉ   r¢   r,   r   Ú	run_untilr1   r“   r   rž   )r*   ÚwrÎ   r   rË   r   Útest_reader_callbackv  s    

z(EventLoopTestsMixin.test_reader_callbackc                    s¤   t  ¡ \}‰ˆ d¡ ‡ ‡fdd„}d}ˆ j ˆ ¡ ||¡ ˆ j ¡  ˆ  ˆ j ˆ ¡ ¡¡ ˆ  	ˆ j ˆ ¡ ¡¡ ˆ 
¡  | t|ƒd ¡}| 
¡  ˆ  ||¡ d S )NFc                    s   ˆ  | ¡ ˆ j ¡  d S r   )r,   r'   r“   rÊ   ©r*   rÙ   r   r   Úwriter–  s    
z8EventLoopTestsMixin.test_writer_callback.<locals>.writers   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxro   )rÓ   rÔ   rÕ   r'   Ú
add_writerrÉ   r   r†   Úremove_writerrÁ   r1   rÅ   rI   rž   )r*   rÍ   rÜ   rK   Úreadr   rÛ   r   Útest_writer_callback’  s    

z(EventLoopTestsMixin.test_writer_callbackÚSIGKILLz
No SIGKILLc                    sX  d‰ ‡ fdd„}|   t| jjd|¡ |   t| jjd¡ |   t| jjtjd |¡ |   t| jjtjd ¡ |   t| jjd|¡ |   t| jjd¡ |   t| jjd|¡ |   t| jjd¡ |   t| jjtj	|¡ |  
| j tj	¡¡ | j tj|¡ t t ¡ tj¡ t | j‡ fdd„¡ |  | j tj¡¡ |  t tj¡tj¡ |  
| j tj¡¡ d S )	Nr   c                      s   ˆ d7 ‰ d S ©Nrn   r   r   ©Úcaughtr   r   Ú
my_handlerª  s    z?EventLoopTestsMixin.test_add_signal_handler.<locals>.my_handlerZboomrn   éÿÿÿÿc                      s   ˆ S r   r   r   rã   r   r   rÑ   É  rk   z=EventLoopTestsMixin.test_add_signal_handler.<locals>.<lambda>)r‹   Ú	TypeErrorr'   Úadd_signal_handlerÚremove_signal_handlerÚ
ValueErrorÚsignalÚNSIGrŒ   rá   rÁ   ÚSIGINTÚosÚkillÚgetpidr   rØ   r†   rž   Ú	getsignalÚdefault_int_handler©r*   rå   r   rã   r   Útest_add_signal_handler¦  sP    ÿ
ÿþÿÿ
ÿÿ
ÿþÿz+EventLoopTestsMixin.test_add_signal_handlerÚSIGALRMz
No SIGALRMc                    s^   d‰ ‡ ‡fdd„}ˆj  tj|¡ t tjdd¡ ˆj  dˆj j¡ ˆj  ¡  ˆ 	ˆ d¡ d S )Nr   c                      s   ˆ d7 ‰ ˆj  ¡  d S râ   )r'   r“   r   ©rä   r*   r   r   rå   ×  s    zLEventLoopTestsMixin.test_signal_handling_while_selecting.<locals>.my_handlerç{®Gáz„?é<   rn   ©
r'   rè   rë   rõ   Ú	setitimerÚITIMER_REALrœ   r“   r   rž   ró   r   rö   r   Ú$test_signal_handling_while_selectingÒ  s    
z8EventLoopTestsMixin.test_signal_handling_while_selectingc                    sl   d‰d‰ ‡ ‡‡fdd„}ˆj jtj|gˆ¢R Ž  t tjdd¡ ˆj  dˆj j¡ ˆj  ¡  ˆ 	ˆ d¡ d S )N)é*   r   c                     s"   ˆ d7 ‰ ˆ  | ˆ¡ ˆj ¡  d S râ   )rž   r'   r“   r¼   ©rä   r*   Z	some_argsr   r   rå   è  s    zAEventLoopTestsMixin.test_signal_handling_args.<locals>.my_handlerrŽ   rø   rn   rù   ró   r   rþ   r   Útest_signal_handling_argsã  s    
z-EventLoopTestsMixin.test_signal_handling_argsTc                 C   sv   | j  |¡\}}|  |tj¡ |  |tj¡ |  |j|¡ |rN|  | 	d¡¡ | j  |j
¡ |  |jd¡ | ¡  d S )NÚsocknamer   )r'   r&   ÚassertIsInstancer   Ú	TransportÚProtocolÚassertIsr9   ÚassertIsNotNoneÚget_extra_infor>   ÚassertGreaterr;   r1   )r*   Úconnection_futÚcheck_socknameÚtrÚprr   r   r   Ú_basetest_create_connectionõ  s    z/EventLoopTestsMixin._basetest_create_connectionc                    sT   t  ¡ 8}ˆ jj‡ fdd„g|j¢R Ž }ˆ  |¡ W d   ƒ n1 sF0    Y  d S )Nc                      s   t ˆ jdS ©Nri   ©rS   r'   r   r0   r   r   rÑ     rk   z<EventLoopTestsMixin.test_create_connection.<locals>.<lambda>)r   Úrun_test_serverr'   Úcreate_connectionÚaddressr  )r*   ÚhttpdÚconn_futr   r0   r   Útest_create_connection   s    

ÿÿz*EventLoopTestsMixin.test_create_connectionc                    sX   t ƒ  }t ¡ 4}ˆ j ‡ fdd„|j¡}ˆ  ||¡ W d   ƒ n1 sJ0    Y  d S )Nc                      s   t ˆ jdS r  r  r   r0   r   r   rÑ     rk   zAEventLoopTestsMixin.test_create_unix_connection.<locals>.<lambda>)r    r   Úrun_test_unix_serverr'   Úcreate_unix_connectionr  r  )r*   r	  r  r  r   r0   r   Útest_create_unix_connection  s    
ÿz/EventLoopTestsMixin.test_create_unix_connectionNc                 C   s  |r|   | d¡¡ |r,|  || d¡¡ n|   | d¡¡ |  || d¡¡ | d¡}|  |t¡ |  t|ƒd|¡ |  |d t¡ |  |d t¡ |  |d t¡ | d	¡}|   |¡ |  | ¡ | d
¡¡ |  | 	¡ | d¡¡ |  | 
¡ | d¡¡ |  | ¡ | d
¡¡ d S )Nr   ÚpeernameÚpeercertÚcipherrl   r   rn   ro   Z
ssl_objectÚcompression)r  r  rž   r  r   rI   Ústrr   r  r  Zgetpeercert)r*   Úclientr	  r  r  r  Zsslobjr   r   r   Úcheck_ssl_extra_info  s<    ÿÿ



ÿ
ÿ
ÿ
ÿz(EventLoopTestsMixin.check_ssl_extra_infoc                 C   sx   | j  |¡\}}|  |tj¡ |  |tj¡ |  d|jj 	¡ v ¡ |  
|||¡ | j  |j¡ |  |jd¡ | ¡  d S )NÚsslr   )r'   r&   r  r   r  r  r†   rW   r3   Úlowerr  r>   r  r;   r1   )r*   r  r	  r  r
  r  r   r   r   Ú_basetest_create_ssl_connection1  s    z3EventLoopTestsMixin._basetest_create_ssl_connectionc           	   	      s  |t  ¡ d}ˆ  |||¡ ttdƒr˜tjjfd d d dœ‡ fdd„}tjd|d6}|dd}ˆ  |||¡ ˆ  	|j
d	¡ W d   ƒ n1 sŽ0    Y  ˆ  tj¡P}|dd}t  ¡  ˆ  |||¡ W d   ƒ n1 sÜ0    Y  W d   ƒ n1 sú0    Y  ˆ  	|jjd
¡ d S )N©r  ÚPurpose)ÚcafileÚcapathÚcadatac                   s   ˆ   | tjj¡ t ¡ S )z
                A ssl.create_default_context() replacement that doesn't enable
                cert validation.
                )rž   r  r#  ÚSERVER_AUTHr   Údummy_ssl_context)Zpurposer$  r%  r&  r0   r   r   Ú_dummy_ssl_create_contextE  s    zREventLoopTestsMixin._test_create_ssl_connection.<locals>._dummy_ssl_create_contextzssl.create_default_context)Úside_effectTrn   ZCERTIFICATE_VERIFY_FAILED)r   r(  r!  Úhasattrr  r#  r'  r   Úpatchrž   Z
call_countr‹   ÚSSLErrorÚdisable_loggerÚ	exceptionÚreason)	r*   r  r  r	  r  r  r)  ÚmÚcmr   r0   r   Ú_test_create_ssl_connection=  s2    ÿ
þÿ
ÿ,

ÿ@z/EventLoopTestsMixin._test_create_ssl_connectionzNo ssl modulec                    sd   t jddD}tjˆ jj‡ fdd„g|j¢R Ž }ˆ j|||jd W d   ƒ n1 sV0    Y  d S )NT©Zuse_sslc                      s   t ˆ jdS r  r  r   r0   r   r   rÑ   g  rk   z@EventLoopTestsMixin.test_create_ssl_connection.<locals>.<lambda>©r  )r   r  Ú	functoolsÚpartialr'   r  r  r3  )r*   r  r  r   r0   r   Útest_create_ssl_connectionb  s    
þýÿz.EventLoopTestsMixin.test_create_ssl_connectionc                    sl   t ƒ  }tjddD}tjˆ jj‡ fdd„|jdd}ˆ j||||jd W d   ƒ n1 s^0    Y  d S )NTr4  c                      s   t ˆ jdS r  r  r   r0   r   r   rÑ   v  rk   zEEventLoopTestsMixin.test_create_ssl_unix_connection.<locals>.<lambda>ú	127.0.0.1)Úserver_hostnamer5  )	r    r   r  r6  r7  r'   r  r  r3  )r*   r	  r  r  r   r0   r   Útest_create_ssl_unix_connectionl  s    ýþz3EventLoopTestsMixin.test_create_ssl_unix_connectionc                    s–   t  ¡ z}t ¡ }ˆ jj‡ fdd„g|j¢R d|jd |fiŽ}ˆ j |¡\}}|j 	d¡d }ˆ  
||¡ | ¡  W d   ƒ n1 sˆ0    Y  d S )Nc                      s   t ˆ jdS r  r  r   r0   r   r   rÑ     rk   zGEventLoopTestsMixin.test_create_connection_local_addr.<locals>.<lambda>Ú
local_addrr   r   rn   )r   r  r
   Úfind_unused_portr'   r  r  r&   r9   r  rž   r1   )r*   r  ÚportÚfr
  r  Zexpectedr   r0   r   Ú!test_create_connection_local_addr}  s    

ÿþþz5EventLoopTestsMixin.test_create_connection_local_addrc              	      s°   t  ¡ ”}ˆ jj‡ fdd„g|j¢R d|jiŽ}ˆ  t¡}ˆ j |¡ W d   ƒ n1 s\0    Y  ˆ  |j	j
t
j¡ ˆ  t|jƒ|j	j¡ W d   ƒ n1 s¢0    Y  d S )Nc                      s   t ˆ jdS r  r  r   r0   r   r   rÑ   ‹  rk   zNEventLoopTestsMixin.test_create_connection_local_addr_in_use.<locals>.<lambda>r<  )r   r  r'   r  r  r‹   ÚOSErrorr&   rž   r/  ÚerrnoÚ
EADDRINUSEÚassertInr  Ústrerror)r*   r  r?  r2  r   r0   r   Ú(test_create_connection_local_addr_in_useˆ  s    

ÿþþ*z<EventLoopTestsMixin.test_create_connection_local_addr_in_usec           	         s  | j ‰G ‡‡fdd„dtƒ}tjddd}| ¡ ‰ d‰d ‰d‰‡ ‡‡‡fdd	„}tj|d
d}| ¡  | ¡ \}}|ˆd‰ˆˆ_ ˆ 	ˆj
‡fdd„||d¡ ˆ ¡  ˆj ¡  | ¡  t |¡ |  | ¡ ¡ |  ˆjd¡ |  ˆjtˆƒ¡ |  ˆˆ¡ d S )Nc                       s,   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )zAEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProtoc                    s   t ƒ  |¡ ˆ ˆj¡ d S r   )rT   rR   r¢   r“   r-   )rW   r'   r   r   rR   —  s    zQEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.connection_lostc                    s   t ƒ  |¡ | j ˆ¡ d S r   )rT   rL   r9   rU   rJ   )rW   Úexpected_responser   r   rL   ›  s    zOEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.data_received)r3   r4   r5   rR   rL   rY   r   )rG  r'   rV   r   rS   •  s   rS   ©r9  r   rn   )Úbacklogs	   test datas   rogerc               
      sx   zDt   ¡ } ˆd urˆ | ¡} |  ˆ ¡ |  ˆ¡ |  d¡‰|  ¡  W n. tyr } ztd|ƒ W Y d }~n
d }~0 0 d S )Néc   z8Failure in client thread in test_connect_accepted_socket)rÓ   Zwrap_socketÚconnectÚsendallrÅ   r1   Ú	ExceptionÚprint)Úcsockr.   )r_   Ú
client_sslÚmessageÚresponser   r   r  ¦  s    



þz@EventLoopTestsMixin.test_connect_accepted_socket.<locals>.clientT)r«   Údaemonri   c                      s   ˆ S r   r   r   ©Úprotor   r   rÑ   ½  rk   zBEventLoopTestsMixin.test_connect_accepted_socket.<locals>.<lambda>r"  rP   )r'   r6   rÓ   Úcreate_serverÚgetsocknamer¬   r¯   r°   Úacceptr&   Úconnect_accepted_socketr   r9   r1   r	   Újoin_threadrÁ   Úis_aliverž   r:   r;   rI   )	r*   Z
server_sslrP  rS   Úlsockr  ÚthreadÚconnÚ_r   )r_   rP  rG  r'   rQ  rU  rR  r   Útest_connect_accepted_socket’  s4    

ÿÿ

z0EventLoopTestsMixin.test_connect_accepted_socketc                 C   sL   t jdkr,t jdk r,t| jtjƒr,t d¡‚t	 
¡ }t	 ¡ }|  ||¡ d S )Nr   )rl   r   z=SSL not supported with proactor event loops before Python 3.5)r   r   Úversion_infoÚ
isinstancer'   r   ZBaseProactorEventLoopÚunittestÚSkipTestr   Zsimple_server_sslcontextZsimple_client_sslcontextr`  )r*   Zserver_contextZclient_contextr   r   r   Ú test_ssl_connect_accepted_socketÈ  s    
ÿþÿz4EventLoopTestsMixin.test_ssl_connect_accepted_socketc                 C   sd   t   ¡ }|  |j¡ | jjt|tjd}|  t	d¡ | j 
|¡ W d   ƒ n1 sV0    Y  d S )N)Zssl_handshake_timeoutz1ssl_handshake_timeout is only meaningful with ssl)rÓ   Ú
addCleanupr1   r'   rY  rS   r	   ZLOOPBACK_TIMEOUTÚassertRaisesRegexrê   r&   )r*   ÚsockÚcoror   r   r   Ú9test_connect_accepted_socket_ssl_timeout_for_plain_socket×  s    ÿþzMEventLoopTestsMixin.test_connect_accepted_socket_ssl_timeout_for_plain_socketzasyncio.base_events.socketc           	         sÊ   ‡ fdd„‰‡‡fdd„}t |ƒ}ˆ tjkrDdd„ |D ƒ| ¡ j_ndd„ |D ƒ| ¡ j_|ˆj_t ¡ ˆj_	t ¡ ˆj_
ˆj ‡fdd	„|d
¡}ˆj |¡}ˆ |j¡ dd„ |jD ƒ}ˆ ||¡ d S )Nc                 Ÿ   s>   ˆ t jkr ˆ t jdd| |ffgS ˆ t jdd| |ddffgS d S )NrÒ   Ú r   )rÓ   ÚAF_INETÚSOCK_STREAM)Úhostr>  r½   Úkw)Úfamilyr   r   Úgetaddrinfoã  s    
zEEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfoc                     s   ˆj  ˆ | i |¤Ž¡S r   )r'   Úcreate_task)r½   Úkwds)rq  r*   r   r   Úgetaddrinfo_taské  s    zJEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfo_taskc                 S   s   g | ]}|d f‘qS )éP   r   ©rg   rn  r   r   r   Ú
<listcomp>ï  s   zDEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<listcomp>c                 S   s   g | ]}|d ddf‘qS )ru  r   r   rv  r   r   r   rw  ò  s   c                      s
   t ˆ jƒS r   r  r   r0   r   r   rÑ   ÷  rk   zBEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<lambda>ru  c                 S   s   h | ]}|  ¡ d  ’qS )r   )Úgetsockbyname)rg   rh  r   r   r   Ú	<setcomp>ú  rk   zCEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<setcomp>)rv   rÓ   rl  rx  r*  r'   rq  r   ÚMockZ_start_servingÚ_stop_servingrV  r&   rf  r1   Úsocketsrž   )	r*   rp  ÚhostsZ	mock_sockrt  Zunique_hostsr?  ÚserverZserver_hostsr   )rp  rq  r*   r   Úcreate_server_multiple_hostsá  s$    
ÿÿz0EventLoopTestsMixin.create_server_multiple_hostsc                 C   s   |   tjg d¢¡ d S )N)ú1.2.3.4z5.6.7.8r€  )r  rÓ   rl  r0   r   r   r   Ú&test_create_server_multiple_hosts_ipv4ý  s    ÿz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv4c                 C   s   |   tjg d¢¡ d S )N)ú::1z::2r‚  )r  rÓ   ÚAF_INET6r0   r   r   r   Ú&test_create_server_multiple_hosts_ipv6  s    ÿz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv6c                    s&  t | jƒ‰ | j ‡ fdd„dd¡}| j |¡}|  t|jƒd¡ |jd }| ¡ \}}|  |d¡ t ¡ }| 	d|f¡ | 
d¡ | j ˆ j¡ |  dˆ j¡ t | j‡ fd	d„¡ |  d
ˆ j¡ |  ˆ j d¡¡ |  dˆ j d¡d ¡ ˆ j ¡  | j ˆ j¡ |  dˆ j¡ | ¡  | ¡  d S )Nc                      s   ˆ S r   r   r   rT  r   r   rÑ     rk   z8EventLoopTestsMixin.test_create_server.<locals>.<lambda>ú0.0.0.0r   rn   r9  ó   xxxrB   c                      s
   ˆ j dkS rƒ   ©r;   r   rT  r   r   rÑ     rk   rl   r   r  rP   )rS   r'   rV  r&   rž   rI   r|  rW  rÓ   rK  rL  r=   r:   r   rØ   r;   r  r9   r  r1   r>   ©r*   r?  r~  rh  rn  r>  r  r   rT  r   Útest_create_server  s.    


ÿ
z&EventLoopTestsMixin.test_create_serverÚSO_REUSEPORTzNo SO_REUSEPORTc                    sä   t | jƒ‰ | j ‡ fdd„dd¡}| j |¡}|  t|jƒd¡ |jd }|  | t	j
t	j¡¡ | ¡  t | j¡ t | jƒ‰ | jj‡ fdd„dddd}| j |¡}|  t|jƒd¡ |jd }|  | t	j
t	j¡¡ | ¡  d S )	Nc                      s   ˆ S r   r   r   rT  r   r   rÑ   -  rk   zCEventLoopTestsMixin.test_create_server_reuse_port.<locals>.<lambda>r…  r   rn   c                      s   ˆ S r   r   r   rT  r   r   rÑ   :  rk   T)Ú
reuse_port)rS   r'   rV  r&   rž   rI   r|  rÁ   Ú
getsockoptrÓ   Ú
SOL_SOCKETrŠ  r1   r   r€   r†   )r*   r?  r~  rh  r   rT  r   Útest_create_server_reuse_port)  s6    
ÿ
ÿÿ
ÿ
ÿÿz1EventLoopTestsMixin.test_create_server_reuse_portc                    sD   t  ¡ ‰ |  ‡ fdd„¡ | jj|ˆ fi |¤Ž}| j |¡}|ˆ fS )Nc                      s   t j ˆ ¡ot  ˆ ¡S r   )rî   ÚpathÚexistsÚunlinkr   ©r  r   r   rÑ   E  rk   z7EventLoopTestsMixin._make_unix_server.<locals>.<lambda>)r   Zgen_unix_socket_pathrf  r'   Úcreate_unix_serverr&   )r*   ÚfactoryÚkwargsr?  r~  r   r’  r   Ú_make_unix_serverC  s
    z%EventLoopTestsMixin._make_unix_serverc                    sÎ   t | jd‰ |  ‡ fdd„¡\}}|  t|jƒd¡ t tj¡}| |¡ | 	d¡ | j 
ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  dˆ j¡ ˆ j ¡  | j 
ˆ j¡ |  d	ˆ j¡ | ¡  | ¡  d S )
Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   O  rk   z=EventLoopTestsMixin.test_create_unix_server.<locals>.<lambda>rn   r†  rB   c                      s
   ˆ j dkS rƒ   r‡  r   rT  r   r   rÑ   X  rk   rl   rP   )rS   r'   r–  rž   rI   r|  rÓ   ÚAF_UNIXrK  rL  r&   r=   r:   r   rØ   r;   r9   r1   r>   )r*   r~  r  r  r   rT  r   Útest_create_unix_serverL  s    


z+EventLoopTestsMixin.test_create_unix_serverr—  zNo UNIX Socketsc              	      sŽ   t | jd‰ t ¡ }|b | jj‡ fdd„d|d}|  td¡ | j |¡ W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  d S )Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   m  rk   zOEventLoopTestsMixin.test_create_unix_server_path_socket_error.<locals>.<lambda>z/test©rh  z3path and sock can not be specified at the same time)rS   r'   rÓ   r“  rg  rê   r&   )r*   rh  r?  r   rT  r   Ú)test_create_unix_server_path_socket_errorh  s    ÿz=EventLoopTestsMixin.test_create_unix_server_path_socket_errorc                 C   s,   t  t j¡}| jt jO  _| ||¡ |S r   )r  Ú
SSLContextZPROTOCOL_TLS_SERVERÚoptionsÚOP_NO_SSLv2Zload_cert_chain)r*   ÚcertfileÚkeyfileÚ
sslcontextr   r   r   Ú_create_ssl_contexts  s    z'EventLoopTestsMixin._create_ssl_contextc           
      C   sX   |   ||¡}| jj|dd|d}| j |¡}|jd }| ¡ \}}	|  |d¡ |||	fS )Nr9  r   r"  )r¡  r'   rV  r&   r|  rW  rž   )
r*   r”  rž  rŸ  r   r?  r~  rh  rn  r>  r   r   r   Ú_make_ssl_servery  s    
z$EventLoopTestsMixin._make_ssl_serverc                 C   s   |   ||¡}| j||dS )Nr"  )r¡  r–  )r*   r”  rž  rŸ  r   r   r   r   Ú_make_ssl_unix_server„  s    z)EventLoopTestsMixin._make_ssl_unix_serverc                    sê   t | jd‰ |  ‡ fdd„tjtj¡\}}}| jjt||t ¡ d}| j 	|¡\}}| 
d¡ | j 	ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  dˆ j¡ | j|||fd	 ˆ j ¡  | j 	ˆ j¡ |  d
ˆ j¡ | ¡  | ¡  d S )Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   Œ  rk   z<EventLoopTestsMixin.test_create_server_ssl.<locals>.<lambda>r"  r†  rB   c                      s
   ˆ j dkS rƒ   r‡  r   rT  r   r   rÑ   –  rk   rl   r5  rP   )rS   r'   r¢  r   ÚONLYCERTÚONLYKEYr  r6   r(  r&   rU   r=   rž   r:   rØ   r;   r  r9   r1   r>   )r*   r~  rn  r>  Úf_cr  r  r   rT  r   Útest_create_server_sslˆ  s&    ÿ
ÿ

z*EventLoopTestsMixin.test_create_server_sslc                    sÖ   t | jd‰ |  ‡ fdd„tjtj¡\}}| jjt|t ¡ dd}| j 	|¡\}}| 
d¡ | j 	ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  d	ˆ j¡ ˆ j ¡  | j 	ˆ j¡ |  d
ˆ j¡ | ¡  | ¡  d S )Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   ­  rk   zAEventLoopTestsMixin.test_create_unix_server_ssl.<locals>.<lambda>rk  ©r  r:  r†  rB   c                      s
   ˆ j dkS rƒ   r‡  r   rT  r   r   rÑ   ¸  rk   rl   rP   )rS   r'   r£  r   r¤  r¥  r  r6   r(  r&   rU   r=   rž   r:   rØ   r;   r9   r1   r>   )r*   r~  r  r¦  r  r  r   rT  r   Útest_create_unix_server_ssl¨  s&    ÿ
þ

z/EventLoopTestsMixin.test_create_unix_server_sslc              
      s(  t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_t|dƒr\d|_| jjt |||d}tj | jd¡~ t ¡ J |  tjd¡ | j |¡ W d   ƒ n1 s¼0    Y  W d   ƒ n1 sÚ0    Y  t | j¡ W d   ƒ n1 s0    Y  |  ˆ j¡ | ¡  d S )	Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   Ë  rk   zJEventLoopTestsMixin.test_create_server_ssl_verify_failed.<locals>.<lambda>Úcheck_hostnameTr"  Úcall_exception_handlerú(?i)certificate.verify.failed)rS   r'   r¢  r   ÚSIGNED_CERTFILEr  r›  ÚPROTOCOL_TLS_CLIENTrœ  r  ÚCERT_REQUIREDÚverify_moder+  rª  r  r   r,  Úobjectr.  rg  r-  r&   r€   ÚassertIsNoner9   r1   ©r*   r~  rn  r>  Ússlcontext_clientr¦  r   rT  r   Ú$test_create_server_ssl_verify_failedÇ  s*    ÿ

ÿ
ÿH,z8EventLoopTestsMixin.test_create_server_ssl_verify_failedc              
      s&  t | jd‰ |  ‡ fdd„tj¡\}}t tj¡}| jtj	O  _tj
|_t|dƒrZd|_| jjt ||dd}tj | jd¡~ t ¡ J |  tjd	¡ | j |¡ W d   ƒ n1 sº0    Y  W d   ƒ n1 sØ0    Y  t | j¡ W d   ƒ n1 s0    Y  |  ˆ j¡ | ¡  d S )
Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   é  rk   zOEventLoopTestsMixin.test_create_unix_server_ssl_verify_failed.<locals>.<lambda>rª  TÚinvalidr¨  r«  r¬  )rS   r'   r£  r   r­  r  r›  r®  rœ  r  r¯  r°  r+  rª  r  r   r,  r±  r.  rg  r-  r&   r€   r²  r9   r1   )r*   r~  r  r´  r¦  r   rT  r   Ú)test_create_unix_server_ssl_verify_failedä  s,    ÿ

þ
ÿH,z=EventLoopTestsMixin.test_create_unix_server_ssl_verify_failedc              
      s*  t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒrjd|_| jjt |||d}tj | jd¡r t ¡ J |  tjd	¡ | j |¡ W d   ƒ n1 sÊ0    Y  W d   ƒ n1 sè0    Y  W d   ƒ n1 s0    Y  |  ˆ j¡ | ¡  d S )
Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ     rk   zIEventLoopTestsMixin.test_create_server_ssl_match_failed.<locals>.<lambda>©r$  rª  Tr"  r«  z=IP address mismatch, certificate is not valid for '127.0.0.1')rS   r'   r¢  r   r­  r  r›  r®  rœ  r  r¯  r°  Úload_verify_locationsÚ
SIGNING_CAr+  rª  r  r   r,  r±  r.  rg  ZCertificateErrorr&   r²  r9   r1   r³  r   rT  r   Ú#test_create_server_ssl_match_failed  s0    ÿ
ÿ
ÿ
þhz7EventLoopTestsMixin.test_create_server_ssl_match_failedc                    sÆ   t | jd‰ |  ‡ fdd„tj¡\}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒrhd|_| jjt ||dd}| j |¡\}}| j ˆ j¡ ˆ j ¡  | ¡  | ¡  | j ˆ j¡ d S )	Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   %  rk   zJEventLoopTestsMixin.test_create_unix_server_ssl_verified.<locals>.<lambda>r¸  rª  TÚ	localhostr¨  )rS   r'   r£  r   r­  r  r›  r®  rœ  r  r¯  r°  r¹  rº  r+  rª  r  r&   r=   r9   r1   r>   )r*   r~  r  r´  r¦  r  r  r   rT  r   Ú$test_create_unix_server_ssl_verified   s(    ÿ

þ
z8EventLoopTestsMixin.test_create_unix_server_ssl_verifiedc                    sà   t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒrjd|_| jjt |||dd}| j |¡\}}| j ˆ j¡ | j|||ftjd	 ˆ j ¡  | ¡  | ¡  | j ˆ j¡ d S )
Nri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   ?  rk   zEEventLoopTestsMixin.test_create_server_ssl_verified.<locals>.<lambda>r¸  rª  Tr¼  r¨  )r  r  )rS   r'   r¢  r   r­  r  r›  r®  rœ  r  r¯  r°  r¹  rº  r+  rª  r  r&   r=   r  ZPEERCERTr9   r1   r>   )r*   r~  rn  r>  r´  r¦  r  r  r   rT  r   Útest_create_server_ssl_verified;  s.    ÿ

þÿ
z3EventLoopTestsMixin.test_create_server_ssl_verifiedc           	         s®   | j  ¡ ‰ G ‡ fdd„dtƒ}t d¡}| j j||d}| j  |¡}|jd }|  | ¡ | ¡ ¡ | 	¡ \}}|  |d¡ t ¡ }| 
d|f¡ | d¡ | ¡  | ¡  d S )	Nc                       s   e Zd Z‡ ‡fdd„Z‡  ZS )z@EventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProtoc                    s   t ƒ  |¡ ˆ | ¡ d S r   ©rT   rF   rD   rE   )rW   rU  r   r   rF   ]  s    zPEventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProto.connection_maderX   r   rT  rV   r   ÚTestMyProto\  s   rÀ  ©r…  r   r™  r   r…  r9  r†  )r'   r<   rS   rÓ   rV  r&   r|  rž   rÉ   rW  rK  r,   r1   )	r*   rÀ  Úsock_obr?  r~  rh  rn  r>  r  r   rT  r   Útest_create_server_sockY  s    



z+EventLoopTestsMixin.test_create_server_sockc                 C   s¢   t  d¡}| jjt|d}| j |¡}|jd }| ¡ \}}| jjt||d}|  t¡}| j |¡ W d   ƒ n1 sz0    Y  |  	|j
jtj¡ | ¡  d S )NrÁ  r™  r   ©rn  r>  )rÓ   rV  r'   rS   r&   r|  rW  r‹   rA  rž   r/  rB  rC  r1   )r*   rÂ  r?  r~  rh  rn  r>  r2  r   r   r   Útest_create_server_addr_in_usep  s    

*z2EventLoopTestsMixin.test_create_server_addr_in_usezIPv6 not supported or enabledc           	   
      s<  | j  ¡ ‰ G ‡ fdd„dtƒ}d}z*t ¡ }| j j|d |d}| j  |¡}W q¦ ty  } z<|jtj	krŠ|d7 }|  
d|¡ W Y d }~q"n‚ W Y d }~q"d }~0 0 q¦q"t ¡ }| d|f¡ | d¡ | j  ˆ ¡}|j ¡  | ¡  | j  ¡ ‰ t tj¡}| d	|f¡ | d¡ | j  ˆ ¡}|j ¡  | ¡  | ¡  d S )
Nc                       s   e Zd Z‡ ‡fdd„Z‡  ZS )zFEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProtoc                    s   t ƒ  |¡ ˆ | ¡ d S r   r¿  rE   )rW   Úf_protor   r   rF   „  s    zVEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProto.connection_maderX   r   ©rÆ  rV   r   rÀ  ƒ  s   rÀ  r   rÄ  rn   r   r9  r†  r‚  )r'   r<   rS   r
   r=  rV  r&   rA  rB  rC  ZassertGreaterEqualrÓ   rK  r,   r9   r1   rƒ  )	r*   rÀ  Z	try_countr>  r?  r~  Úexr  rU  r   rÇ  r   Útest_create_server_dual_stack  s8    





z1EventLoopTestsMixin.test_create_server_dual_stackc                 C   sŠ   | j  tdd¡}| j  |¡}|jd }| ¡ \}}t ¡ }| d|f¡ | d¡ | 	¡  | 	¡  t ¡ }|  
t|jd|f¡ | 	¡  d S )Nr…  r   r9  r†  )r'   rV  rS   r&   r|  rW  rÓ   rK  r,   r1   r‹   ÚConnectionRefusedErrorrˆ  r   r   r   Útest_server_close¨  s    

ÿz%EventLoopTestsMixin.test_server_closec           
         s„  G ‡fdd„dt ƒ}ˆjj|||d}ˆj |¡\}‰| d¡}t |tjtjB ¡\}}ˆ 	|t
j¡ ˆ 	ˆ|¡ ˆ dˆj¡ ˆ ˆj|¡ ˆjj‡fdd„||fd}ˆj |¡\}	‰ ˆ 	|	t
j¡ ˆ 	ˆ t ¡ ˆ dˆ j¡ ˆ ˆ j|	¡ |	 d	¡ t ˆj‡fd
d„¡ ˆ dˆj¡ t ˆj‡ fdd„¡ ˆ dˆ j¡ ˆ |	 d¡¡ |	 ¡  ˆj ˆ j¡ ˆ dˆ j¡ ˆj ¡  d S )Nc                       s*   e Zd Z‡ ‡fdd„Z‡ fdd„Z‡  ZS )zOEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProtoc                    s   t ƒ jˆjd d S r  )rT   r@   r'   )Z
inner_self)rW   r*   r   r   r@   ¼  s    zXEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProto.__init__c                    s$   t ƒ  ||¡ | j d| |¡ d S )Ns   resp:)rT   r`   r9   Úsendtor^   rV   r   r   r`   ¿  s    zaEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProto.datagram_received)r3   r4   r5   r@   r`   rY   r   r0   rV   r   ÚTestMyDatagramProto»  s   rÍ  )r<  rp  r   r[   c                      s   t ˆ jdS r  ©rZ   r'   r   r0   r   r   rÑ   Ð  rk   zDEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.<lambda>)Zremote_addrr†  c                      s   ˆ j S r   r‡  r   )r~  r   r   rÑ   Ú  rk   rl   c                      s   ˆ j S r   r‡  r   )r  r   r   rÑ   Ü  rk   é   rP   )rZ   r'   Úcreate_datagram_endpointr&   r  rÓ   ÚgetnameinfoÚNI_NUMERICHOSTÚNI_NUMERICSERVr  r   r  rž   r:   r  r9   rÌ  r   rØ   r;   r  r1   r>   )
r*   r<  rp  rÍ  ri  Zs_transportr   rn  r>  r9   r   )r  r*   r~  r   Ú_test_create_datagram_endpointº  s@    ÿ
ÿ
þ
z2EventLoopTestsMixin._test_create_datagram_endpointc                 C   s   |   dtj¡ d S )NrH  )rÔ  rÓ   rl  r0   r   r   r   Útest_create_datagram_endpointê  s    z1EventLoopTestsMixin.test_create_datagram_endpointc                 C   s   |   dtj¡ d S )N)r‚  r   )rÔ  rÓ   rƒ  r0   r   r   r   Ú"test_create_datagram_endpoint_ipv6í  s    z6EventLoopTestsMixin.test_create_datagram_endpoint_ipv6c                    sÚ   d }d}ˆ j  ˆ j j|dtjiŽ¡}|D ]H\}}}}}z(tj|||d}| d¡ | |¡ W n   Y q(0  q~q(ds~J dƒ‚ˆ j j‡ fdd„|d}	ˆ j  |	¡\}
}ˆ  |
t	j
¡ ˆ  |t¡ |
 ¡  ˆ j  |j¡ d S )	NrH  Útype)rp  r×  rU  FzCan not create socket.c                      s   t ˆ jdS r  rÎ  r   r0   r   r   rÑ     rk   zHEventLoopTestsMixin.test_create_datagram_endpoint_sock.<locals>.<lambda>r™  )r'   r&   rq  rÓ   Ú
SOCK_DGRAMrÕ   ÚbindrÐ  r  r   r  rZ   r1   r>   )r*   rh  Zlocal_addressZinfosrp  r×  rU  Zcnamer  r?  r
  r  r   r0   r   Ú"test_create_datagram_endpoint_sockñ  s4    ÿÿÿ
ÿz6EventLoopTestsMixin.test_create_datagram_endpoint_sockc                 C   sf   |   ¡ }t|tjƒs&| ¡  |  d¡ |  d|j¡ | ¡  |  d|j¡ |  |j	¡ |  |j
¡ d S )Nz#loop is not a BaseSelectorEventLooprn   r   )r}   rb  r   ZBaseSelectorEventLoopr1   ZskipTestrž   Z_internal_fdsr²  Z_csockZ_ssockr?   r   r   r   Útest_internal_fds  s    
z%EventLoopTestsMixin.test_internal_fdsr   zDon't support pipes for Windowsc                    sö   t ˆjd‰t ¡ \}}t |dd¡‰ ‡ ‡‡fdd„}ˆj |ƒ ¡ t |d¡ t 	ˆj‡fdd„¡ ˆ 
d	ˆj¡ t |d
¡ t 	ˆj‡fdd„¡ ˆ 
ddgˆj¡ ˆ 
dˆj¡ t |¡ ˆj ˆj¡ ˆ 
g d¢ˆj¡ ˆ ˆj d¡¡ d S )Nri   ÚrbrÄ   c                  “   s^   ˆj  ‡fdd„ˆ ¡I d H \} }ˆ |ˆ¡ ˆ | ˆj¡ ˆ ddgˆj¡ ˆ dˆj¡ d S )Nc                      s   ˆ S r   r   r   rT  r   r   rÑ   !  rk   zEEventLoopTestsMixin.test_read_pipe.<locals>.connect.<locals>.<lambda>r8   rB   r   ©r'   Úconnect_read_piper  r9   rž   r:   r;   ©r²   Úp©ÚpipeobjrU  r*   r   r   rK    s    ÿz3EventLoopTestsMixin.test_read_pipe.<locals>.connectó   1c                      s
   ˆ j dkS râ   r‡  r   rT  r   r   rÑ   *  rk   z4EventLoopTestsMixin.test_read_pipe.<locals>.<lambda>rn   ó   2345c                      s
   ˆ j dkS ©Nr   r‡  r   rT  r   r   rÑ   .  rk   r8   rB   r   ©r8   rB   rM   rP   Úpipe)rb   r'   rî   rç  ÚioÚopenr&   rU   r   rØ   rž   r;   r:   r1   r>   r  r9   r  )r*   ÚrpipeÚwpiperK  r   rá  r   Útest_read_pipe  s$    

ÿz"EventLoopTestsMixin.test_read_pipec                    s°   |   ¡ ‰ tˆ d‰tˆ d‰t ¡ \}}t |dd¡‰t |dd¡‰‡ ‡‡‡‡fdd„}ˆ  |ƒ ¡\}}ˆ  ¡  |  	dt
|ƒ¡ |  	dt
|ƒ¡ ˆ ¡  ˆ ¡  d |_d |_d S )Nri   rÜ  rÄ   rÙ   c                  “   sD   ˆ   ‡fdd„ˆ¡I d H \} }ˆ  ‡fdd„ˆ¡I d H \}}| |fS )Nc                      s   ˆ S r   r   r   ©Ú
read_protor   r   rÑ   G  rk   zSEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connect.<locals>.<lambda>c                      s   ˆ S r   r   r   ©Úwrite_protor   r   rÑ   I  rk   )rÞ  Úconnect_write_pipe)Úread_transportr_  Úwrite_transport©r'   rî  ZrpipeobjZwpipeobjrð  r   r   rK  E  s    ÿÿzAEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connectré  )r}   rb   rd   rî   rç  rè  ré  r&   r1   rD  ÚreprZ_pipe)r*   rê  rë  rK  rò  ró  r   rô  r   Útest_unclosed_pipe_transport9  s    

z0EventLoopTestsMixin.test_unclosed_pipe_transportc                    s   t ˆjd‰t ¡ \}}t |dd¡‰ ‡ ‡‡fdd„}ˆj |ƒ ¡ t |d¡ t 	ˆj‡fdd„¡ ˆ 
d	ˆj¡ t |d
¡ t 	ˆj‡fdd„¡ ˆ 
ddgˆj¡ ˆ 
dˆj¡ t |¡ ˆj ¡  ˆj ˆj¡ ˆ 
g d¢ˆj¡ ˆ ˆj d¡¡ d S )Nri   rÜ  r   c                  “   s^   ˆj  ‡fdd„ˆ ¡I d H \} }ˆ |ˆ¡ ˆ | ˆj¡ ˆ ddgˆj¡ ˆ dˆj¡ d S )Nc                      s   ˆ S r   r   r   rT  r   r   rÑ   d  rk   zKEventLoopTestsMixin.test_read_pty_output.<locals>.connect.<locals>.<lambda>r8   rB   r   rÝ  rß  ©Zmaster_read_objrU  r*   r   r   rK  c  s    ÿz9EventLoopTestsMixin.test_read_pty_output.<locals>.connectrã  c                      s   ˆ j S r   r‡  r   rT  r   r   rÑ   n  rk   z:EventLoopTestsMixin.test_read_pty_output.<locals>.<lambda>rn   rä  c                      s
   ˆ j dkS rå  r‡  r   rT  r   r   rÑ   r  rk   r8   rB   r   ræ  rç  )rb   r'   rî   Úopenptyrè  ré  r&   rU   r   rØ   rž   r;   r:   r1   r9   r>   r  r  )r*   ÚmasterÚslaverK  r   r÷  r   Útest_read_pty_output[  s&    


ÿz(EventLoopTestsMixin.test_read_pty_outputc                    s6  t  ¡ \‰}t |dd¡}t| jd‰| j ‡fdd„|¡}| j |¡\}}|  |ˆ¡ |  |ˆj	¡ |  
dˆj¡ | d¡ tƒ ‰ ‡fdd	„‰t | j‡ ‡fd
d„¡ |  
dˆ ¡ | d¡ t | j‡ ‡fdd„¡ |  
dˆ ¡ |  
dˆj¡ t  ˆ¡ |  ˆj	 d¡¡ ˆj	 ¡  | j ˆj¡ |  
dˆj¡ d S )NÚwbrÄ   ri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   …  rk   z5EventLoopTestsMixin.test_write_pipe.<locals>.<lambda>rB   rã  c                    s   t  ˆ d¡}| |7 } t| ƒS rÃ   ©rî   rß   rI   ©rK   Úchunk)rê  r   r   rÎ   Ž  s    z3EventLoopTestsMixin.test_write_pipe.<locals>.readerc                      s   ˆˆ ƒdkS râ   r   r   ©rK   rÎ   r   r   rÑ   “  rk   rä  c                      s   ˆˆ ƒdkS rå  r   r   r   r   r   rÑ   —  rk   ó   12345rç  rP   )rî   rç  rè  ré  rd   r'   rñ  r&   r  r9   rž   r:   rU   rÖ   r   rØ   r1   r  r  r>   )r*   rë  râ  rK  r9   rà  r   )rK   rU  rÎ   rê  r   Útest_write_pipe~  s,    



z#EventLoopTestsMixin.test_write_pipec                    sÖ   t  ¡ \}}| d¡ t | ¡ dd¡}t| jd‰ | j ‡ fdd„|¡}| j 	|¡\}}|  
|ˆ ¡ |  
|ˆ j¡ |  dˆ j¡ | d¡ | j 	| j |d¡¡}|  d|¡ | ¡  | j 	ˆ j¡ |  d	ˆ j¡ d S )
NFrü  rÄ   ri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   ­  rk   zIEventLoopTestsMixin.test_write_pipe_disconnect_on_close.<locals>.<lambda>rB   rã  rP   )rÓ   rÔ   rÕ   rè  ré  Údetachrd   r'   rñ  r&   r  r9   rž   r:   rU   Ú	sock_recvr1   r>   )r*   ZrsockZwsockrâ  rK  r9   rà  rK   r   rT  r   Ú#test_write_pipe_disconnect_on_close¥  s    

z7EventLoopTestsMixin.test_write_pipe_disconnect_on_closer   rÒ   c                    sB  t  ¡ \‰}t |dd¡}t| jd‰| j ‡fdd„|¡}| j |¡\}}|  |ˆ¡ |  |ˆj	¡ |  
dˆj¡ | d¡ tƒ ‰ ‡fdd	„‰tj| j‡ ‡fd
d„tjd |  
dˆ ¡ | d¡ tj| j‡ ‡fdd„tjd |  
dˆ ¡ |  
dˆj¡ t  ˆ¡ |  ˆj	 d¡¡ ˆj	 ¡  | j ˆj¡ |  
dˆj¡ d S )Nrü  r   ri   c                      s   ˆ S r   r   r   rT  r   r   rÑ   Æ  rk   z4EventLoopTestsMixin.test_write_pty.<locals>.<lambda>rB   rã  c                    s   t  ˆ d¡}| |7 } t| ƒS rÃ   rý  rþ  ©rù  r   r   rÎ   Ï  s    z2EventLoopTestsMixin.test_write_pty.<locals>.readerc                      s   ˆˆ ƒdkS râ   r   r   r   r   r   rÑ   Ô  rk   ©Útimeouträ  c                      s   ˆˆ ƒdkS rå  r   r   r   r   r   rÑ   Ù  rk   r  rç  rP   )rî   rø  rè  ré  rd   r'   rñ  r&   r  r9   rž   r:   rU   rÖ   r   rØ   r	   ÚSHORT_TIMEOUTr1   r  r  r>   )r*   rú  Úslave_write_objrK  r9   rà  r   )rK   rù  rU  rÎ   r   Útest_write_pty¼  s4    
ÿ
ÿ

z"EventLoopTestsMixin.test_write_ptyc           
         sÂ  t  ¡ \‰}t  |¡}t |¡ t |dd¡}t| jd‰| j 	‡fdd„|¡}| j 
|¡\}}|  |ˆ¡ |  |ˆj¡ |  ddgˆj¡ |  dˆj¡ t |dd¡}t| jd‰| j ‡fd	d„|¡}| j 
|¡\}	}|  |ˆ¡ |  |	ˆj¡ |  dˆj¡ tƒ ‰ ‡fd
d„‰|	 d¡ tj| j‡ ‡fdd„tjd |  dˆ ¡ |  ddgˆj¡ |  dˆj¡ t  ˆd¡ tj| j‡fdd„tjd |  ddgˆj¡ |  dˆj¡ |  dˆj¡ |	 d¡ tj| j‡ ‡fdd„tjd |  dˆ ¡ |  ddgˆj¡ |  dˆj¡ t  ˆd¡ tj| j‡fdd„tjd |  ddgˆj¡ |  dˆj¡ |  dˆj¡ t  ˆ¡ | ¡  | j 
ˆj¡ |  g d¢ˆj¡ |	 ¡  | j 
ˆj¡ |  dˆj¡ d S )NrÜ  r   ri   c                      s   ˆ S r   r   r   rí  r   r   rÑ   ô  rk   z<EventLoopTestsMixin.test_bidirectional_pty.<locals>.<lambda>r8   rB   rü  c                      s   ˆ S r   r   r   rï  r   r   rÑ   ÿ  rk   c                    s   t  ˆ d¡}| |7 } t| ƒS rÃ   rý  rþ  r  r   r   rÎ     s    z:EventLoopTestsMixin.test_bidirectional_pty.<locals>.readerrã  c                      s   ˆˆ ƒdkS râ   r   r   r   r   r   rÑ     rk   r  ó   ac                      s
   ˆ j dkS râ   r‡  r   rí  r   r   rÑ     rk   rn   rä  c                      s   ˆˆ ƒdkS rå  r   r   r   r   r   rÑ     rk   r  s   bcdec                      s
   ˆ j dkS rå  r‡  r   rí  r   r   rÑ   "  rk   r   ræ  rP   )rî   rø  ÚdupÚttyZsetrawrè  ré  rb   r'   rÞ  r&   r  r9   rž   r:   r;   rd   rñ  rÖ   rU   r   rØ   r	   r	  r1   r>   )
r*   Z
read_slaveZwrite_slaveZslave_read_objZread_connectrò  rà  r
  Zwrite_connectró  r   )rK   rù  rî  rÎ   rð  r   Útest_bidirectional_ptyè  sz    

ÿÿ
ÿÿ
ÿÿ

ÿz*EventLoopTestsMixin.test_bidirectional_ptyc                    sæ   t  ¡ \}}| d¡ ˆj ˆj |d¡¡‰ tˆ dd ƒ}|d urLˆ |j¡ ‡ ‡fdd„}t	 
¡ }ˆj |ƒ ¡}ˆj ¡  t	 
¡ | }ˆ |d¡ ˆ | ¡ d¡ ˆ tjˆ j¡ |d urÆˆ |j¡ ˆj |¡ | ¡  | ¡  d S )NFrn   Úovc                  “   sZ   zHzˆj  ˆ j¡ ˆ I d H  W n tjy6   d} Y n0 d } W ˆj  ¡  nˆj  ¡  0 | S )NÚ	cancelled)r'   r¢   rÀ   r   ÚCancelledErrorr“   )r¹   ©r?  r*   r   r   Úmain;  s    
z:EventLoopTestsMixin.test_prompt_cancellation.<locals>.mainrŽ   r  )rÓ   rÔ   rÕ   r'   rr  r  Úgetattrr†   Úpendingr   Ú	monotonicr   Z
assertLessrž   Úresultr‹   r   r  rÁ   r{  r1   )r*   rÍ   rÙ   r  r  r°   r²   Úelapsedr   r  r   Útest_prompt_cancellation3  s&    

z,EventLoopTestsMixin.test_prompt_cancellationc                    sh   ‡ ‡fdd„}ˆj j‰ dˆj _|ˆj _‡fdd„}ˆj  |ƒ ¡ ˆ ˆj jdˆj jˆj jjjdœ¡ d S )Nc                      s   ˆj  jd7  _ˆ ƒ  d S râ   )r'   Ú_run_once_counterr   ©Zorig_run_oncer*   r   r   Ú	_run_onceW  s    z<EventLoopTestsMixin.test_timeout_rounding.<locals>._run_oncer   c                  “   sZ   ˆ j } t d¡I d H  t d¡I d H  t d¡I d H  t d¡I d H  t d¡I d H  d S )Nr÷   g-Cëâ6?gíµ ÷Æ°>g:Œ0âŽyE>g»½×Ùß|Û=)r'   r   r„   ri   r0   r   r   Úwait_  s    z7EventLoopTestsMixin.test_timeout_rounding.<locals>.waité   )Zclock_resolutionÚselector)	r'   r  r  r&   ZassertLessEqualZ_clock_resolutionÚ	_selectorrW   r3   )r*   r  r  r   r  r   Útest_timeout_roundingV  s    
ÿÿz)EventLoopTestsMixin.test_timeout_roundingc                 C   sx   |   ¡ }dd„ }t ¡ \}}|  |j¡ |  |j¡ | ||¡ | ||¡ | ¡  |  | |¡¡ |  | 	|¡¡ d S )Nc                   S   s   d S r   r   r   r   r   r   rÑ   r  rk   zCEventLoopTestsMixin.test_remove_fds_after_closing.<locals>.<lambda>)
r}   rÓ   rÔ   rf  r1   r×   rÝ   rÁ   rÈ   rÞ   ©r*   r'   r›   rÍ   rÙ   r   r   r   Útest_remove_fds_after_closingp  s    z1EventLoopTestsMixin.test_remove_fds_after_closingc                 C   s¬   |   ¡ }dd„ }t ¡ \}}|  |j¡ |  |j¡ | ¡  |  t¡ | ||¡ W d   ƒ n1 sh0    Y  |  t¡ | ||¡ W d   ƒ n1 sž0    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   rÑ   ~  rk   z@EventLoopTestsMixin.test_add_fds_after_closing.<locals>.<lambda>)	r}   rÓ   rÔ   rf  r1   r‹   rŒ   r×   rÝ   r#  r   r   r   Útest_add_fds_after_closing|  s    *z.EventLoopTestsMixin.test_add_fds_after_closingc                    sP   ‡ fdd„}|ˆ j ƒ}ˆ  t¡ ˆ j  |¡ W d   ƒ n1 sB0    Y  d S )Nc                 “   s   ˆ j  ¡  d S r   )r'   r1   ri   r0   r   r   Ú
close_loop‰  s    zEEventLoopTestsMixin.test_close_running_event_loop.<locals>.close_loop)r'   r‹   rŒ   r&   )r*   r&  ri  r   r0   r   Útest_close_running_event_loopˆ  s    
z1EventLoopTestsMixin.test_close_running_event_loopc                 C   sJ  | j  ¡  dd„ }dd„ }|ƒ }|  |j¡ |  t¡ | j  ¡  W d   ƒ n1 sV0    Y  |  t¡& | j  ¡ }| j  |¡ W d   ƒ n1 s–0    Y  |  t¡ | j  |¡ W d   ƒ n1 sÌ0    Y  |  t¡ | j  	|¡ W d   ƒ n1 s0    Y  |  t¡ | j  
d|¡ W d   ƒ n1 s>0    Y  |  t¡( | j  | j  ¡ d |¡ W d   ƒ n1 s‚0    Y  |  t¡ | j  |¡ W d   ƒ n1 sº0    Y  |  t¡  | j  tj|¡ W d   ƒ n1 sö0    Y  |  t¡* | j  d |¡ ¡ }t|ƒ W d   ƒ n1 s<0    Y  d S )Nc                   Ó   s   d S r   r   r   r   r   r   Útest“  s    z,EventLoopTestsMixin.test_close.<locals>.testc                   S   s   dS ©NFr   r   r   r   r   rÑ   –  rk   z0EventLoopTestsMixin.test_close.<locals>.<lambda>g      ð?g        )r'   r1   rf  r‹   rŒ   r   r<   r&   r¢   r¦   rœ   Úcall_atr   rr  rè   rë   ÚSIGTERMr·   r2   Únext)r*   r(  Úfuncri  ZfutÚitr   r   r   Ú
test_close  s2    
(
**,.8,0zEventLoopTestsMixin.test_close)T)TN)TN)NN)N)N)N)Yr3   r4   r5   r|   r‚   r   r’   r•   r    r£   r³   r´   rº   rÂ   rÚ   rà   rc  Ú
skipUnlessr+  rë   rô   rü   rÿ   r  r  r
   Zskip_unless_bind_unix_socketr  r  r!  r3  ÚskipIfr  r8  r;  r@  rF  r`  re  rj  r   r,  r  r  r„  r‰  rÓ   rŽ  r–  r˜  rš  r¡  r¢  r£  r§  r©  rµ  r·  r»  r½  r¾  rÃ  rÅ  ZIPV6_ENABLEDrÉ  rË  rÔ  rÕ  rÖ  rÚ  rÛ  r   r   rì  rö  rû  r  r  r	   Úrequires_mac_verr  r  r  r"  r$  r%  r'  r/  rY   r   r   rV   r   r{   ï   sò   		
+




ÿ
!  þ
 ÿ
%
	

6


$
	










(0
ÿ
 ÿ
 ÿ
!ÿ
%ÿ
ÿ
'ÿ
F#r{   c                   @   sž   e Z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kd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚSubprocessTestsMixinc                 C   s,   t jdkr|  |t¡ n|  tj |¡ d S ©Nr   )r   r   r  r   rž   rë   r+  ©r*   rs   r   r   r   Úcheck_terminated·  s    
z%SubprocessTestsMixin.check_terminatedc                 C   s,   t jdkr|  |t¡ n|  tj |¡ d S r4  )r   r   r  r   rž   rë   rá   r5  r   r   r   Úcheck_killed¾  s    
z!SubprocessTestsMixin.check_killedc                 C   sô   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ |  d|j¡ | d¡}| d¡ | j |jd  ¡ ¡ t ¡  | ¡  W d   ƒ n1 sº0    Y  | j |j¡ |  |j¡ |  d|jd ¡ d S )Núecho.pyrB   r   ó   Python The Winnerrn   )rî   r  r±   ÚdirnameÚ__file__r'   Úsubprocess_execr6  r7  rf   r   Ú
executabler&   r  r=   rž   r:   Úget_pipe_transportrU   ru   r  r   r.  r1   rp   r7  rs   rK   ©r*   ÚprogrK  ÚtransprU  Ústdinr   r   r   Útest_subprocess_execÅ  s"    þ


&z)SubprocessTestsMixin.test_subprocess_execc                 C   s6  t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ |  d|j¡ | d¡}| d¡ | j |jd  ¡ ¡ |jd  ¡  |  d|jd ¡ | d¡ | j |jd  ¡ ¡ |  d|jd ¡ t ¡  | ¡  W d   ƒ n1 s0    Y  | j |j¡ |  |j¡ d S )Nr8  rB   r   s   Python rn   s
   The Winnerr9  )rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   rž   r:   r>  rU   ru   r  ÚclearrK   r   r.  r1   rp   r7  rs   r?  r   r   r   Útest_subprocess_interactiveÙ  s*    þ



(z0SubprocessTestsMixin.test_subprocess_interactivec                 C   sÀ   | j  t t| j ¡d¡}| j  |¡\}}|  |t¡ | j  |j¡ | d¡ 	¡  | j  |j
¡ |  d|j¡ |  tdd„ |j ¡ D ƒƒ¡ |  |jd  d¡d¡ |  |jd d	¡ | 	¡  d S )
Nzecho Pythonr   c                 s   s   | ]}|  ¡ V  qd S r   )r>   )rg   r?  r   r   r   Ú	<genexpr>ÿ  rk   z=SubprocessTestsMixin.test_subprocess_shell.<locals>.<genexpr>rn   s   
s   Pythonro   rk   )r'   Úsubprocess_shellr6  r7  rf   r&   r  r=   r>  r1   rp   rž   rs   r†   Úallrr   ÚvaluesrK   Úrstrip©r*   rK  rA  rU  r   r   r   Útest_subprocess_shellô  s    þz*SubprocessTestsMixin.test_subprocess_shellc                 C   sd   | j jt t| j ¡dd d d d}| j  |¡\}}|  |t¡ | j  |j¡ |  d|j	¡ | 
¡  d S )Núexit 7©rB  ÚstdoutÚstderré   ©r'   rG  r6  r7  rf   r&   r  rp   rž   rs   r1   rK  r   r   r   Útest_subprocess_exitcode  s    þz-SubprocessTestsMixin.test_subprocess_exitcodec                 C   sš   | j jt t| j ¡dd d d d}| j  |¡\}}|  |t¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ | j  |j	¡ |  
d|j¡ |  | ¡ ¡ d S )NrM  rN  r   rn   ro   rQ  )r'   rG  r6  r7  rf   r&   r  r²  r>  rp   rž   rs   r1   rK  r   r   r   Ú"test_subprocess_close_after_finish  s    þz7SubprocessTestsMixin.test_subprocess_close_after_finishc                 C   sŠ   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | ¡  | j |j¡ |  |j¡ | ¡  d S ©Nr8  )rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   rï   rp   r7  rs   r1   ©r*   r@  rK  rA  rU  r   r   r   Útest_subprocess_kill  s    þz)SubprocessTestsMixin.test_subprocess_killc                 C   sŠ   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | ¡  | j |j¡ |  |j¡ | ¡  d S rU  )rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   Ú	terminaterp   r6  rs   r1   rV  r   r   r   Útest_subprocess_terminate,  s    þz.SubprocessTestsMixin.test_subprocess_terminater   zDon't have SIGHUPc              
   C   sÈ   t   t jt j¡}z¢tj tj t¡d¡}| j 	t
 t| j¡tj|¡}| j |¡\}}|  |t¡ | j |j¡ | t j¡ | j |j¡ |  t j |j¡ | ¡  W t   t j|¡ nt   t j|¡ 0 d S rU  )rë   ÚSIGHUPÚSIG_DFLrî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   Úsend_signalrp   rž   rs   r1   )r*   Zold_handlerr@  rK  rA  rU  r   r   r   Útest_subprocess_send_signal<  s    þ
z0SubprocessTestsMixin.test_subprocess_send_signalc                 C   sÈ   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | d¡}| d¡ | j |j¡ | ¡  |  d|jd ¡ |  |jd  d¡|jd ¡ |  d|j¡ d S )Núecho2.pyr   ó   testó   OUT:testrn   ro   s   ERR:test)rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   r>  rU   rp   r1   rž   rK   r†   r   rs   r?  r   r   r   Útest_subprocess_stderrT  s    þ

z+SubprocessTestsMixin.test_subprocess_stderrc                 C   sî   t j t j t¡d¡}| jjt t	| j¡t
j|tjd}| j |¡\}}|  |t	¡ | j |j¡ | d¡}|  | d¡¡ |  | d¡¡ | d¡ | j |j¡ |  |jd  d¡|jd ¡ |  d|jd ¡ | ¡  |  d|j¡ d S )	Nr^  )rP  r   rn   ro   r_  s   OUT:testERR:testrk   )rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  Ú
subprocessÚSTDOUTr&   r  r=   r>  r  r²  rU   rp   r†   rK   r   rž   r1   rs   r?  r   r   r   Ú)test_subprocess_stderr_redirect_to_stdouti  s&    
þ

ÿz>SubprocessTestsMixin.test_subprocess_stderr_redirect_to_stdoutc                 C   s\  t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | d¡}| d¡}| d¡ | j |jd  ¡ ¡ |  d|jd ¡ | ¡  | j |jd ¡ | d¡ | j |jd  ¡ ¡ t
jdkrú|  d	|jd ¡ n|  d
|jd ¡ t ¡  | ¡  W d   ƒ n1 s40    Y  | j |j¡ |  |j¡ d S )Nzecho3.pyr   rn   r_  r`  r†  ro   r   s   ERR:BrokenPipeErrors   ERR:OSError)rî   r  r±   r:  r;  r'   r<  r6  r7  rf   r   r=  r&   r  r=   r>  rU   ru   r  rž   rK   r1   rr   r   r   r.  rp   r7  rs   )r*   r@  rK  rA  rU  rB  rO  r   r   r   Ú#test_subprocess_close_client_stream  s0    þ





(z8SubprocessTestsMixin.test_subprocess_close_client_streamc                 C   sf   | j jt t| j ¡dd d d dd}| j  |¡\}}|  |t¡ | j  |j¡ |  d|j	¡ | 
¡  d S )NrM  T)rB  rO  rP  Ústart_new_sessionrQ  rR  rK  r   r   r   Ú"test_subprocess_wait_no_same_group¢  s    ýz7SubprocessTestsMixin.test_subprocess_wait_no_same_groupc                    sÄ   ‡ fdd„}ˆ   t¡" ˆ j |dd¡ W d   ƒ n1 s>0    Y  ˆ   t¡" ˆ j |dd¡ W d   ƒ n1 sz0    Y  ˆ   t¡" ˆ j |dd¡ W d   ƒ n1 s¶0    Y  d S )Nc                  ›   s"   ˆ j jtjdfi | ¤ŽI d H  d S ©NÚpwd)r'   r<  r   ÚSubprocessProtocol)rs  r0   r   r   rK  ¯  s    þþzGSubprocessTestsMixin.test_subprocess_exec_invalid_args.<locals>.connectT©Úuniversal_newlinesé   ©Úbufsize©Úshell©r‹   rê   r'   r&   ©r*   rK  r   r0   r   Ú!test_subprocess_exec_invalid_args®  s    00z6SubprocessTestsMixin.test_subprocess_exec_invalid_argsc                    s  d‡ fdd„	}ˆ   t¡$ ˆ j |ddgƒ¡ W d   ƒ n1 sB0    Y  ˆ   t¡" ˆ j |dd¡ W d   ƒ n1 s~0    Y  ˆ   t¡" ˆ j |dd¡ W d   ƒ n1 sº0    Y  ˆ   t¡" ˆ j |d	d
¡ W d   ƒ n1 sö0    Y  d S )Nc                 ›   s*   | sd} ˆ j jtj| fi |¤ŽI d H  d S rh  )r'   rG  r   rj  )Úcmdrs  r0   r   r   rK  ½  s    þþzHSubprocessTestsMixin.test_subprocess_shell_invalid_args.<locals>.connectZlsz-lTrk  rm  rn  Frp  )Nrr  rs  r   r0   r   Ú"test_subprocess_shell_invalid_args»  s    200z7SubprocessTestsMixin.test_subprocess_shell_invalid_argsN)r3   r4   r5   r6  r7  rC  rE  rL  rS  rT  rW  rY  rc  r1  r   r   r]  ra  rd  re  rg  rt  rv  r   r   r   r   r3  µ  s"   
!r3  c                   @   s   e Zd Zdd„ ZdS )ÚSelectEventLoopTestsc                 C   s   t  ¡ S r   )r   ÚSelectorEventLoopr0   r   r   r   r}   Ó  s    ú&SelectEventLoopTests.create_event_loopN©r3   r4   r5   r}   r   r   r   r   rw  Ð  s   rw  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚProactorEventLoopTestsc                 C   s   t  ¡ S r   )r   ZProactorEventLoopr0   r   r   r   r}   Ú  s    z(ProactorEventLoopTests.create_event_loopc                 C   s   t  d¡‚d S ©Nz(IocpEventLoop does not have add_reader()©rc  rd  r0   r   r   r   rÚ   Ý  s    z+ProactorEventLoopTests.test_reader_callbackc                 C   s   t  d¡‚d S r|  r}  r0   r   r   r   Útest_reader_callback_cancelà  s    z2ProactorEventLoopTests.test_reader_callback_cancelc                 C   s   t  d¡‚d S ©Nz(IocpEventLoop does not have add_writer()r}  r0   r   r   r   rà   ã  s    z+ProactorEventLoopTests.test_writer_callbackc                 C   s   t  d¡‚d S r  r}  r0   r   r   r   Útest_writer_callback_cancelæ  s    z2ProactorEventLoopTests.test_writer_callback_cancelc                 C   s   t  d¡‚d S r|  r}  r0   r   r   r   r$  é  s    z4ProactorEventLoopTests.test_remove_fds_after_closingN)	r3   r4   r5   r}   rÚ   r~  rà   r€  r$  r   r   r   r   r{  Ö  s   r{  c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚUnixEventLoopTestsMixinc                    s,   t ƒ  ¡  t ¡ }| | j¡ t |¡ d S r   )rT   r|   r   ÚSafeChildWatcherÚattach_loopr'   Úset_child_watcher©r*   ZwatcherrV   r   r   r|   ï  s    
zUnixEventLoopTestsMixin.setUpc                    s   t  d ¡ tƒ  ¡  d S r   )r   r„  rT   r‚   r0   rV   r   r   r‚   õ  s    
z UnixEventLoopTestsMixin.tearDown)r3   r4   r5   r|   r‚   rY   r   r   rV   r   r  î  s   r  ÚKqueueSelectorc                       s\   e Zd Zdd„ Ze dd¡e ej	 
d¡d¡‡ fdd„ƒƒZe dd¡‡ fd	d
„ƒZ‡  ZS )ÚKqueueEventLoopTestsc                 C   s   t  t ¡ ¡S r   )r   rx  Ú	selectorsr†  r0   r   r   r   r}   ÿ  s    ÿz&KqueueEventLoopTests.create_event_loopr   é	   Zopenbsdztest hangs on OpenBSDc                    s   t ƒ  ¡  d S r   )rT   rû  r0   rV   r   r   rû    s    z)KqueueEventLoopTests.test_read_pty_outputc                    s   t ƒ  ¡  d S r   )rT   r  r0   rV   r   r   r    s    z#KqueueEventLoopTests.test_write_pty)r3   r4   r5   r}   r	   r2  rc  r1  r   r   r   rû  r  rY   r   r   rV   r   r‡  û  s   
ÿ
r‡  ÚEpollSelectorc                   @   s   e Zd Zdd„ ZdS )ÚEPollEventLoopTestsc                 C   s   t  t ¡ ¡S r   )r   rx  rˆ  rŠ  r0   r   r   r   r}     s    z%EPollEventLoopTests.create_event_loopNrz  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   rx  rˆ  rŒ  r0   r   r   r   r}      s    z$PollEventLoopTests.create_event_loopNrz  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd„ ZdS )rw  c                 C   s   t  t ¡ ¡S r   )r   rx  rˆ  ÚSelectSelectorr0   r   r   r   r}   (  s    ry  Nrz  r   r   r   r   rw  $  s   c                  O   s   d S r   r   )r½   r•  r   r   r   Únoop,  s    r  c                       sh   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
 eejdƒd¡dd„ ƒZ‡  ZS )ÚHandleTestsc                    s"   t ƒ  ¡  t ¡ | _d| jj_d S r»   )rT   r|   r   rz  r'   Ú	get_debugÚreturn_valuer0   rV   r   r   r|   2  s    

zHandleTests.setUpc                 C   s`   dd„ }d}t  ||| j¡}|  |j|¡ |  |j|¡ |  | ¡ ¡ | ¡  |  	| ¡ ¡ d S )Nc                  W   s   | S r   r   r¼   r   r   r   r›   8  s    z)HandleTests.test_handle.<locals>.callbackr   )
r   ÚHandler'   r  Ú	_callbackÚ_argsrÁ   r  rÀ   r†   )r*   r›   r½   Úhr   r   r   Útest_handle7  s    zHandleTests.test_handlec                 C   s\   dd„ }t  ¡ | _t  ¡ | j_t |d| j¡}| ¡  | jj t 	d¡t j
||jdœ¡ d S )Nc                   S   s
   t ƒ ‚d S r   )rê   r   r   r   r   r›   E  s    z:HandleTests.test_callback_with_exception.<locals>.callbackr   zException in callback.*)rQ  r/  ÚhandleZsource_traceback)r   rz  r'   r«  r   r“  Z_runÚassert_called_withr   ZMockPatternÚANYÚ_source_traceback)r*   r›   r–  r   r   r   Útest_callback_with_exceptionD  s    
üz(HandleTests.test_callback_with_exceptionc                 C   s(   t  ¡ }t dd„ d| j¡}||d< d S )Nc                   S   s   d S r   r   r   r   r   r   rÑ   W  rk   z1HandleTests.test_handle_weakref.<locals>.<lambda>r   r–  )ÚweakrefÚWeakValueDictionaryr   r“  r'   )r*   Zwdr–  r   r   r   Útest_handle_weakrefU  s    zHandleTests.test_handle_weakrefc                 C   s¢  d| j j_t td| j ¡}t t¡\}}|  t	|ƒd||f ¡ | 
¡  |  t	|ƒd¡ |  t¡ t t¡}W d   ƒ n1 s‚0    Y  t |d| j ¡}|  t	|ƒd||f ¡ t tdd¡}t |d	| j ¡}d
t |¡|f }|  t	|ƒ|¡ tjtdd}t |d| j ¡}dt |¡|f }|  t	|ƒ|¡ tjdkržtj}t |¡}t |¡\}}t |d| j ¡}d}d| }d|t |¡|f }|  t	|ƒ|¡ d S )NFrm   z<Handle noop(1, 2) at %s:%s>z<Handle cancelled>r   z<Handle noop() at %s:%s>rn   ro   )rl   z%^<Handle noop\(1, 2\)\(3\) at %s:%s>$)Úx)ro   rl   z'^<Handle noop\(x=1\)\(2, 3\) at %s:%s>$)rl   é   z*<function HandleTests.test_handle_repr .*>z%functools.partialmethod\(%s, , \)\(\)z^<Handle %s at %s:%s>$)r'   r‘  r’  r   r“  r  r   Úget_function_sourcerž   rõ  rÀ   ZassertWarnsÚDeprecationWarningÚ	coroutiner6  r7  ÚreÚescapeZassertRegexr   ra  r  Útest_handle_reprÚpartialmethod)r*   r–  ÚfilenameÚlinenor”   ZregexÚmethodZcb_regexr   r   r   r§  Z  sV    

ÿÿ
ÿ(
ÿÿÿÿ
ÿzHandleTests.test_handle_reprc                 C   s¢   d| j j_t}t ¡ jd }t t	d| j ¡}t
 t	¡\}}|  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ d S )NTrn   rm   z-<Handle noop(1, 2) at %s:%s created at %s:%s>z7<Handle cancelled noop(1, 2) at %s:%s created at %s:%s>)r'   r‘  r’  r;  r   Ú	_getframeÚf_linenor   r“  r  r   r¢  rž   rõ  rÀ   ©r*   Zcreate_filenameZcreate_linenor–  r©  rª  r   r   r   Útest_handle_repr_debugŒ  s0    


ÿÿ
ÿþ
ÿþz"HandleTests.test_handle_repr_debugc                    s|   t  ¡  ¡ }| d¡ ˆ  |¡ ‡ fdd„}| t¡}||ƒ | t¡}||ƒ | dt¡}||ƒ | dt¡}||ƒ d S )NTc                    sB   t  d¡jd }ˆ  | jt¡ ˆ  | jd d d… t|df¡ d S )Nrn   ræ   rl   Útest_handle_source_traceback)r   r¬  r­  r  r›  Úlistrž   r;  )r–  rª  r0   r   r   Úcheck_source_traceback«  s    þÿzHHandleTests.test_handle_source_traceback.<locals>.check_source_tracebackr   )	r   Úget_event_loop_policyr$   Ú	set_debugr%   r¢   r  r¦   rœ   )r*   r'   r²  r–  r   r0   r   r°  ¦  s    

	

z(HandleTests.test_handle_source_tracebackÚ	CoroutinezNo collections.abc.Coroutinec                 C   sÂ   t ƒ }d|_|  t |¡¡ |  t |¡d¡ d|_|  t |¡d¡ d|_	|  t |¡d¡ d  |_|_|  t |¡d¡ t ƒ }d|_|  t |¡d	¡ t ƒ }d|_d |_
|  t |¡d¡ d S )
NZAAAzAAA()ZBBBzBBB()TzBBB() runningz%<CoroLike without __name__>() runningr)   z
CoroLike())r)   r3   r†   r   Ziscoroutinerž   r   Z_format_coroutiner5   Ú
cr_runningÚcr_code)r*   ri  r   r   r   Ú+test_coroutine_like_object_debug_formattingÃ  s&    ÿz7HandleTests.test_coroutine_like_object_debug_formatting)r3   r4   r5   r|   r—  rœ  rŸ  r§  r¯  r°  rc  r0  r+  ÚcollectionsÚabcr¸  rY   r   r   rV   r   r  0  s   2ÿr  c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )Ú
TimerTestsc                    s   t ƒ  ¡  t ¡ | _d S r   )rT   r|   r   rz  r'   r0   rV   r   r   r|   ç  s    
zTimerTests.setUpc                 C   s8   t  ¡ }t |dd„ dt ¡ ¡}|  t|ƒt|ƒ¡ d S )Nc                   S   s   dS r)  r   r   r   r   r   rÑ   í  rk   z&TimerTests.test_hash.<locals>.<lambda>r   )r   r  r   ÚTimerHandler   rz  rž   Úhash©r*   Úwhenr–  r   r   r   Ú	test_hashë  s
    ÿzTimerTests.test_hashc                 C   s4   t  ¡ }t |dd„ dt ¡ ¡}|  || ¡ ¡ d S )Nc                   S   s   dS r)  r   r   r   r   r   rÑ   ó  rk   z&TimerTests.test_when.<locals>.<lambda>r   )r   r  r   r¼  r   rz  rž   r¿  r¾  r   r   r   Ú	test_whenñ  s
    ÿzTimerTests.test_whenc                 C   sœ   dd„ }d}t  ¡ }t |||t ¡ ¡}|  |j|¡ |  |j|¡ |  	| 
¡ ¡ | ¡  |  | 
¡ ¡ |  |j¡ |  |j¡ |  ttjd ||| j¡ d S )Nc                  W   s   | S r   r   r¼   r   r   r   r›   ø  s    z'TimerTests.test_timer.<locals>.callback)rn   ro   rl   )r   r  r   r¼  r   rz  r  r”  r•  rÁ   r  rÀ   r†   r²  r‹   ÚAssertionErrorr'   )r*   r›   r½   r¿  r–  r   r   r   Ú
test_timer÷  s    
þzTimerTests.test_timerc                 C   sV   d| j j_t dtd| j ¡}t t¡}|  t	|ƒd| ¡ | 
¡  |  t	|ƒd¡ d S )NFé{   r   z&<TimerHandle when=123 noop() at %s:%s>z <TimerHandle cancelled when=123>)r'   r‘  r’  r   r¼  r  r   r¢  rž   rõ  rÀ   )r*   r–  Úsrcr   r   r   Útest_timer_repr	  s    


ÿ
ÿzTimerTests.test_timer_reprc                 C   s€   d| j j_t}t ¡ jd }t dt	d| j ¡}t
 t	¡\}}|  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ d S )NTrn   rÄ  r   z7<TimerHandle when=123 noop() at %s:%s created at %s:%s>zA<TimerHandle cancelled when=123 noop() at %s:%s created at %s:%s>)r'   r‘  r’  r;  r   r¬  r­  r   r¼  r  r   r¢  rž   rõ  rÀ   r®  r   r   r   Útest_timer_repr_debug	  s     


þÿ

þÿz TimerTests.test_timer_repr_debugc                 C   s:  dd„ }t  ¡ }t ||d| j¡}t ||d| j¡}|  ||k ¡ |  ||k ¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ | ¡  |  ||k¡ t ||d| j¡}t |d |d| j¡}|  ||k ¡ |  ||k ¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ t |d| j¡}|  	t
| |¡¡ |  	t
| |¡¡ |  t¡ |dk  W d   ƒ n1 sè0    Y  |  t¡ |dk W d   ƒ n1 s0    Y  |  t¡ |dk W d   ƒ n1 sP0    Y  |  t¡ |dk W d   ƒ n1 s„0    Y  |  |dk¡ |  |dk¡ |  |tk¡ |  |tk¡ |  |tk ¡ |  |tk¡ |  |tk¡ |  |tk¡ |  |tk ¡ |  |tk¡ |  |tk¡ |  |tk¡ d S )Nc                  W   s   | S r   r   r¼   r   r   r   r›   1	  s    z2TimerTests.test_timer_comparison.<locals>.callbackr   g      $@)r   r  r   r¼  r'   rÁ   r†   rÀ   r“  r  ÚNotImplementedÚ__eq__Ú__ne__r‹   rç   r   r   r   )r*   r›   r¿  Zh1Zh2Zh3r   r   r   Útest_timer_comparison0	  sf    ((((z TimerTests.test_timer_comparison)r3   r4   r5   r|   rÀ  rÁ  rÃ  rÆ  rÇ  rË  rY   r   r   rV   r   r»  å  s   r»  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAbstractEventLoopTestsc                 C   s   t  ¡ }t ¡ }|  t|j¡ |  t|jd ¡ |  t|j¡ |  t|j	¡ |  t|j
¡ |  t|j¡ |  t|jd ¡ |  t|jd d ¡ |  t|j||¡ |  t|jd ¡ |  t|j¡ |  t|jd ¡ |  t|j|¡ |  t|jd|¡ |  t|jd¡ |  t|jd|¡ |  t|jd¡ |  t|jd|¡ |  t|jd¡ |  t|jd¡ |  t|j|¡ |  t|j|¡ |  t|j|¡ |  t|j¡ |  t|j|¡ d S râ   )r   rz  r   ÚAbstractEventLoopr‹   ÚNotImplementedErrorr   r&   r“   r‡   r~   r1   rr  rœ   r*  r¢   r   r¦   Zset_default_executorr×   rÈ   rÝ   rÞ   rè   ré   Zset_exception_handlerZdefault_exception_handlerr«  r‘  r´  )r*   r?  r'   r   r   r   Útest_not_implementedq	  sš    ÿÿÿÿÿÿÿ
ÿ
ÿÿÿÿÿ
ÿÿ
ÿÿ
ÿÿÿÿÿÿÿÿz+AbstractEventLoopTests.test_not_implementedc                    s,   ‡ fdd„}t  ¡ }| |ƒ ¡ | ¡  d S )Nc                  “   s(  t  ¡ } t ¡ }ˆ  t¡" | | | ¡I d H  W d   ƒ n1 sB0    Y  ˆ  t¡" | dd¡I d H  W d   ƒ n1 s~0    Y  ˆ  t¡  | d¡I d H  W d   ƒ n1 s¸0    Y  ˆ  t¡  | 	| ¡I d H  W d   ƒ n1 sò0    Y  ˆ  t¡  | 
| ¡I d H  W d   ƒ n1 s.0    Y  ˆ  t¡  | | ¡I d H  W d   ƒ n1 sj0    Y  ˆ  t¡" | | d¡I d H  W d   ƒ n1 s¨0    Y  ˆ  t¡" | | d¡I d H  W d   ƒ n1 sæ0    Y  ˆ  t¡" | | d¡I d H  W d   ƒ n1 s$0    Y  ˆ  t¡" | | | ¡I d H  W d   ƒ n1 sb0    Y  ˆ  t¡  | | ¡I d H  W d   ƒ n1 sž0    Y  ˆ  t¡" | | | ¡I d H  W d   ƒ n1 sÜ0    Y  ˆ  t¡" | | | ¡I d H  W d   ƒ n1 s0    Y  ˆ  t¡& | | t jj¡I d H  W d   ƒ n1 s\0    Y  ˆ  t¡& | | t jj¡I d H  W d   ƒ n1 sž0    Y  ˆ  t¡$ | | t j¡I d H  W d   ƒ n1 sÞ0    Y  ˆ  t¡  | | ¡I d H  W d   ƒ n1 s0    Y  d S )Nr¼  é  )r¼  rÐ  r   )r   rz  r   rÍ  r‹   rÎ  r·   rq  rÑ  r  rV  rÐ  r  Zsock_recv_intoZsock_sendallZsock_connectZsock_acceptZsock_sendfileÚsendfilerÞ  Úsentinelrç  rñ  rG  r<  )r?  r'   r0   r   r   Úinner©	  sH    00..002222022664z@AbstractEventLoopTests.test_not_implemented_async.<locals>.inner)r   r$   r&   r1   )r*   rÓ  r'   r   r0   r   Útest_not_implemented_async§	  s    'z1AbstractEventLoopTests.test_not_implemented_asyncN)r3   r4   r5   rÏ  rÔ  r   r   r   r   rÌ  o	  s   6rÌ  c                   @   s^   e Zd Zdd„ Z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S )ÚPolicyTestsc                 C   sZ   t  ¡ }|  t|j¡ |  t|jtƒ ¡ |  t|j¡ |  t|j¡ |  t|j	tƒ ¡ d S r   )
r   ÚAbstractEventLoopPolicyr‹   rÎ  Úget_event_loopr%   r±  r$   Zget_child_watcherr„  ©r*   Úpolicyr   r   r   Útest_event_loop_policy×	  s    
ÿz"PolicyTests.test_event_loop_policyc                 C   sX   t  ¡ }|  |jj¡ | ¡ }|  |t j¡ |  |jj|¡ |  || ¡ ¡ | 	¡  d S r   )
r   ÚDefaultEventLoopPolicyr²  Ú_localZ_loopr×  r  rÍ  r  r1   ©r*   rÙ  r'   r   r   r   Útest_get_event_loopà	  s    zPolicyTests.test_get_event_loopc                 C   sZ   t  ¡ }tjj|d|jd"}| ¡ }| |¡ W d   ƒ n1 sD0    Y  | ¡  d S )Nr%   )Úwraps)	r   rÛ  r   r,  r±  r%   r×  r™  r1   )r*   rÙ  Zm_set_event_loopr'   r   r   r   Ú(test_get_event_loop_calls_set_event_loopë	  s    þ(z4PolicyTests.test_get_event_loop_calls_set_event_loopc                 C   s$   t  ¡ }| d ¡ |  t|j¡ d S r   )r   rÛ  r%   r‹   rŒ   r×  rØ  r   r   r   Ú"test_get_event_loop_after_set_noneû	  s    
z.PolicyTests.test_get_event_loop_after_set_nonez'asyncio.events.threading.current_threadc                    s,   ‡ fdd„}t j|d}| ¡  | ¡  d S )Nc                     s   t  ¡ } ˆ  t| j¡ d S r   )r   rÛ  r‹   rŒ   r×  )rÙ  r0   r   r   r?  
  s    z1PolicyTests.test_get_event_loop_thread.<locals>.frª   )r¬   r¯   r°   r±   )r*   Zm_current_threadr?  Úthr   r0   r   Útest_get_event_loop_thread 
  s    z&PolicyTests.test_get_event_loop_threadc                 C   s*   t  ¡ }| ¡ }|  |t j¡ | ¡  d S r   )r   rÛ  r$   r  rÍ  r1   rÝ  r   r   r   Útest_new_event_loop
  s    zPolicyTests.test_new_event_loopc                 C   sh   t  ¡ }| ¡ }|  t|jtƒ ¡ | ¡ }| |¡ |  || ¡ ¡ |  	|| ¡ ¡ | 
¡  | 
¡  d S r   )r   rÛ  r×  r‹   rÂ  r%   r±  r$   r  ÚassertIsNotr1   )r*   rÙ  Zold_loopr'   r   r   r   Útest_set_event_loop
  s    
zPolicyTests.test_set_event_loopc                 C   s*   t  ¡ }|  |t j¡ |  |t  ¡ ¡ d S r   )r   r³  r  rÖ  r  rØ  r   r   r   Útest_get_event_loop_policy
  s    z&PolicyTests.test_get_event_loop_policyc                 C   sL   |   ttjtƒ ¡ t ¡ }t ¡ }t |¡ |  |t ¡ ¡ |  ||¡ d S r   )	r‹   rÂ  r   r   r±  r³  rÛ  r  rå  )r*   Ú
old_policyrÙ  r   r   r   Útest_set_event_loop_policy$
  s    
ÿ
z&PolicyTests.test_set_event_loop_policyN)r3   r4   r5   rÚ  rÞ  rà  rá  r   r,  rã  rä  ræ  rç  ré  r   r   r   r   rÕ  Õ	  s   	

rÕ  c                       sR   e Zd ZdZdZdZdZ‡ fdd„Z‡ fdd„Ze	j
dkrBdd„ Zd	d
„ Z‡  ZS )ÚGetEventLoopTestsMixinNc                    sÌ   t j| _t j| _t j| _t j| _t	| ƒj
t _t	| ƒjt _t	| ƒjt _t	| ƒjt _t	| ƒj
t_t	| ƒjt_t	| ƒjt_t	| ƒjt_tƒ  ¡  t ¡ | _t | j¡ tjdkrÈt ¡ }| | j¡ t |¡ d S r4  )r   Ú_get_running_loopÚ_get_running_loop_savedÚ_set_running_loopÚ_set_running_loop_savedÚget_running_loopÚget_running_loop_savedr×  Úget_event_loop_savedr×  Ú_get_running_loop_implÚ_set_running_loop_implÚget_running_loop_implÚget_event_loop_implr   rT   r|   r$   r'   r%   r   r   r‚  rƒ  r„  r…  rV   r   r   r|   7
  s&    


zGetEventLoopTestsMixin.setUpc              	      sÒ   zvt jdkrt d ¡ tƒ  ¡  W | j ¡  t d ¡ | j	t
_| jt
_| jt
_| jt
_| j	t_| jt_| jt_| jt_nV| j ¡  t d ¡ | j	t
_| jt
_| jt
_| jt
_| j	t_| jt_| jt_| jt_0 d S r4  )r   r   r   r„  rT   r‚   r'   r1   r%   rì  r   rë  rî  rí  rð  rï  rñ  r×  r0   rV   r   r   r‚   Q
  s0    




õ

zGetEventLoopTestsMixin.tearDownr   c                    s.   t  ¡  ‡ fdd„}ˆ  ˆ j |ƒ ¡d¡ d S )Nc                  “   s*   t j ¡ } ˆ j | t¡I d H }|  ¡  |S r   )Ú
concurrentÚfuturesÚProcessPoolExecutorr'   r·   r(   Úshutdown)Úpoolr  r0   r   r   r  m
  s    
ÿ
zDGetEventLoopTestsMixin.test_get_event_loop_new_process.<locals>.mainr"   )r	   Z*skip_if_broken_multiprocessing_synchronizerž   r'   r&   )r*   r  r   r0   r   Útest_get_event_loop_new_processg
  s    þz6GetEventLoopTestsMixin.test_get_event_loop_new_processc              	      s&  G dd„ dt ƒ‰ G ‡ fdd„dtjƒ}t ¡ }z„t |ƒ ¡ t ¡ ‰ˆ ˆ ¡ t ¡  W d   ƒ n1 sn0    Y  t d ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 sª0    Y  ˆ 	t
d¡  ˆ t ¡ d ¡ W d   ƒ n1 sæ0    Y  ˆ t ¡ d ¡ ‡‡fdd„}ˆ |ƒ ¡ t ˆ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 sN0    Y  t d ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 sŒ0    Y  W t |¡ ˆd urÔˆ ¡  nt |¡ ˆd urÒˆ ¡  0 ˆ 	t
d¡  ˆ t ¡ d ¡ W d   ƒ n1 s0    Y  ˆ t ¡ d ¡ d S )Nc                   @   s   e Zd ZdS )zRGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.TestErrorN)r3   r4   r5   r   r   r   r   Ú	TestErrory
  s   rü  c                       s   e Zd Z‡ fdd„ZdS )zOGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.Policyc                    s   ˆ ‚d S r   r   r0   ©rü  r   r   r×  }
  s    z^GetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.Policy.get_event_loopN)r3   r4   r5   r×  r   rý  r   r   ÚPolicy|
  s   rþ  z
no runningc                   “   s4   ˆ  t ¡ ˆ ¡ ˆ  t ¡ ˆ ¡ ˆ  t ¡ ˆ ¡ d S r   )r  r   r×  rï  rë  r   )r'   r*   r   r   r-  
  s    zMGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.func)rM  r   rÛ  r³  r   r$   r‹   r×  r%   rg  rŒ   r  rï  rë  r&   r1   )r*   rþ  rè  r-  r   )rü  r'   r*   r   Ú(test_get_event_loop_returns_running_loopx
  s>    &
&.
(
*


þ


0z?GetEventLoopTestsMixin.test_get_event_loop_returns_running_loop)r3   r4   r5   rò  ró  rô  rõ  r|   r‚   r   r   rû  rÿ  rY   r   r   rV   r   rê  0
  s   
rê  c                   @   s$   e Zd ZejZejZejZ	ej
ZdS )ÚTestPyGetEventLoopN)r3   r4   r5   r   Z_py__get_running_looprò  Z_py__set_running_loopró  Z_py_get_running_looprô  Z_py_get_event_looprõ  r   r   r   r   r   ©
  s   r   c                   @   s$   e Zd ZejZejZejZ	ej
ZdS )ÚTestCGetEventLoopN)r3   r4   r5   r   Z_c__get_running_looprò  Z_c__set_running_loopró  Z_c_get_running_looprô  Z_c_get_event_looprõ  r   r   r   r   r  ·
  s   r  c                   @   s   e Zd Zdd„ ZdS )Ú
TestServerc                    sb   t  ¡ }|  |j¡ t|ƒ‰ | | ‡ fdd„dd¡¡}|  | ¡ |¡ | ¡  | | 	¡ ¡ d S )Nc                      s   ˆ S r   r   r   rT  r   r   rÑ   Å
  rk   z*TestServer.test_get_loop.<locals>.<lambda>r…  r   )
r   r$   rf  r1   rS   r&   rV  rž   Úget_loopÚwait_closed)r*   r'   r~  r   rT  r   Útest_get_loopÁ
  s    zTestServer.test_get_loopN)r3   r4   r5   r  r   r   r   r   r  ¿
  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestAbstractServerc                 C   s:   |   t¡ t ¡  ¡  W d   ƒ n1 s,0    Y  d S r   )r‹   rÎ  r   ÚAbstractServerr1   r0   r   r   r   r/  Í
  s    zTestAbstractServer.test_closec                 C   sT   t  ¡ }|  |j¡ |  t¡" | t ¡  	¡ ¡ W d   ƒ n1 sF0    Y  d S r   )
r   r$   rf  r1   r‹   rÎ  r&   r   r  r  r?   r   r   r   Útest_wait_closedÑ
  s    z#TestAbstractServer.test_wait_closedc                 C   s:   |   t¡ t ¡  ¡  W d   ƒ n1 s,0    Y  d S r   )r‹   rÎ  r   r  r  r0   r   r   r   r  Ø
  s    z TestAbstractServer.test_get_loopN)r3   r4   r5   r/  r  r  r   r   r   r   r  Ë
  s   r  Ú__main__)LÚ__doc__Úcollections.abcr¹  Úconcurrent.futuresrö  r6  rè  rî   r   r¥  rë   rÓ   r  ÚImportErrorrb  r   r¬   r   rB  rc  r   r  r  r   r   r   r   r   Ztest.test_asyncior   r   r(  r	   Ztest.supportr
   r   r   r   r   r    r(   r)   r  r6   rS   ZDatagramProtocolrZ   rb   ZBaseProtocolrd   rj  rf   r{   r3  ZTestCaserw  r{  rˆ  r  r+  r‡  r‹  r  r  r  r»  rÌ  rÕ  rê  r   Z_asyncior  r  r  r3   r  r   r   r   r   Ú<module>   sÐ   

	" )           Q  ÿþþþþþ 6 f[y
