Ë
    ìO´jÒ<  ã                   ó>  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZ G d„ de«      Z G d„ dej*                  «      Z G d„ de«      Z G d	„ d
ej2                  e¬«      Zd„ Zej8                  d„ «       Zd!d„Z G d„ d«      Z G d„ de«      Z  G d„ de«      Z!d„ Z" e"«       Z" G d„ d«      Z# G d„ dejH                  «      Z% G d„ de%«      Z& G d„ de%«      Z'd„ Z(d"d„Z)ej8                  d „ «       Z*y)#z8Test utilities. Don't use outside of the uvloop project.é    Nc                   ó   — e Zd Zd„ Zy)ÚMockPatternc                 óp   — t        t        j                  t        | «      |t        j                  «      «      S ©N)ÚboolÚreÚsearchÚstrÚS)ÚselfÚothers     úg/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/uvloop/_testbase.pyÚ__eq__zMockPattern.__eq__   s"   € Ü”B—I‘Iœc $›i¨´·±Ó5Ó6Ð6ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r      s   „ ó7r   r   c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚTestCaseDictc                 ó0   •— t         ‰| �  «        || _        y r   )ÚsuperÚ__init__Úname)r   r   Ú	__class__s     €r   r   zTestCaseDict.__init__   s   ø€ Ü‰ÑÔØˆ�	r   c                 óŒ   •— || j                   v r%t        dj                  | j                  |«      «      ‚t        ‰| �  ||«       y )Nzduplicate test {}.{})ÚdataÚRuntimeErrorÚformatr   r   Ú__setitem__)r   ÚkeyÚvaluer   s      €r   r    zTestCaseDict.__setitem__#   sB   ø€ Ø�$—)‘)ÑÜÐ5×<Ñ<Ø—	‘	˜3ó  ó !ð !ä‰Ñ˜C Õ'r   )r   r   r   r   r    Ú__classcell__©r   s   @r   r   r      s   ø„ ô÷(ð (r   r   c                   ó.   ‡ — e Zd Zed„ «       Zˆ fd„Zˆ xZS )ÚBaseTestCaseMetac                 ó   — t        |«      S r   )r   )Úmclsr   Úbasess      r   Ú__prepare__zBaseTestCaseMeta.__prepare__,   s   € ä˜DÓ!Ð!r   c           	      óÞ   •— |D ]M  }|j                  d«      sŒ|D ]4  }t        ||«      sŒt        dj                  |||j                  «      «      ‚ ŒO t
        ‰| �  | ||t        |«      «      S )NÚtest_z6duplicate test {}.{} (also defined in {} parent class))Ú
startswithÚhasattrr   r   r   r   Ú__new__Údict)r(   r   r)   ÚdctÚ	test_nameÚbaser   s         €r   r/   zBaseTestCaseMeta.__new__0   s~   ø€ Øò 	=ˆIØ×'Ñ'¨Ô0ØØò =�Ü˜4 Õ+Ü&ð(ß(.©Ø  )¨T¯]©]ó)<ó=ð =ñ=ð	=ô ‰w‰˜t T¨5´$°s³)Ó<Ð<r   )r   r   r   Úclassmethodr*   r/   r#   r$   s   @r   r&   r&   *   s   ø„ àñ"ó ð"÷=ð =r   r&   c                   óÌ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zddœd„Zd	„ Z	d
„ Z
d„ Zd„ Zej                  dddddœd„Zej                  dfd„Zd„ Zd„ Zej(                  d„ «       Zd„ Zy)ÚBaseTestCasec                 ó   — t         ‚r   ©ÚNotImplementedError©r   s    r   Únew_loopzBaseTestCase.new_loop@   ó   € Ü!Ð!r   c                 ó   — t         ‚r   r8   r:   s    r   Ú
new_policyzBaseTestCase.new_policyC   r<   r   c                 ó   — t        |«      S r   )r   )r   r
   s     r   Úmock_patternzBaseTestCase.mock_patternF   s   € Ü˜3ÓÐr   c              ƒ   ó¢   K  — t        |t        j                  «      sy 	 |j                  «       ƒ d {  –—†  y 7 Œ# t        t
        f$ r Y y w xY w­wr   )Ú
isinstanceÚasyncioÚStreamWriterÚwait_closedÚBrokenPipeErrorÚConnectionError)r   Úobjs     r   rE   zBaseTestCase.wait_closedI   sD   è ø€ Ü˜#œw×3Ñ3Ô4Øð	Ø—/‘/Ó#×#Ò#ùÜ¤Ð1ò 	Ùð	üs1   ‚AŸ: ²8³: ·A¸: ºAÁ	AÁAÁAc                 ó^   — t        | j                  «      j                  j                  d«      S )Nzasyncio.)ÚtypeÚloopr   r-   r:   s    r   Úis_asyncio_loopzBaseTestCase.is_asyncio_loopQ   s!   € Ü�D—I‘I‹×)Ñ)×4Ñ4°ZÓ@Ð@r   g{®Gáz„?)Údelayc                ó`   — | j                   j                  t        j                  |«      «       y r   )rK   Úrun_until_completerC   Úsleep)r   rM   s     r   Úrun_loop_brieflyzBaseTestCase.run_loop_brieflyT   s   € Ø�	‰	×$Ñ$¤W§]¡]°5Ó%9Õ:r   c                 óp   — | j                   j                  |«       | j                  j                  |«       y r   )Ú#_BaseTestCase__unhandled_exceptionsÚappendrK   Údefault_exception_handler)r   rK   Úcontexts      r   Úloop_exception_handlerz#BaseTestCase.loop_exception_handlerW   s(   € Ø×#Ñ#×*Ñ*¨7Ô3Ø�	‰	×+Ñ+¨GÕ4r   c                 ó  — | j                  «       | _        t        j                  | j	                  «       «       t        j
                  | j                  «       d| _        | j                  j                  | j                  «       g | _	        y )NT)
r;   rK   rC   Úset_event_loop_policyr>   Úset_event_loopÚ"_check_unclosed_resources_in_debugÚset_exception_handlerrW   rS   r:   s    r   ÚsetUpzBaseTestCase.setUp[   s^   € Ø—M‘M“OˆŒ	Ü×%Ñ% d§o¡oÓ&7Ô8Ü×Ñ˜tŸy™yÔ)Ø26ˆÔ/à�	‰	×'Ñ'¨×(CÑ(CÔDØ&(ˆÕ#r   c           	      óÌ  — | j                   j                  «        | j                  r<t        d«       t	        j                  | j                  «       | j                  d«       y | j                  sy t        j                  «        t        j                  «        t        j                  «        t        | j                   dd«      �r×t        j                  «        t        j                  «        t        j                  «        | j                  | j                   j                  | j                   j                  d«       | j                  | j                   j                  dd«       | j                  | j                   j                  dd«       | j                  | j                   j                  dd	«       | j                   j                   j#                  «       D ]C  \  }}| j%                  d
|¬«      5  | j                  |ddj'                  |«      «       d d d «       ŒE | j                   j(                  j#                  «       D ]Z  \  }}| j%                  d|¬«      5  | j                  || j                   j*                  |   dj'                  |«      «       d d d «       Œ\ t-        j.                  d «       t-        j0                  d «       d | _         y # 1 sw Y   �ŒxY w# 1 sw Y   Œ¥xY w)Nz2Unexpected calls to loop.call_exception_handler():z1unexpected calls to loop.call_exception_handler()Ú	_debug_ccFz&not all uv_handle_t handles were freedr   z&not all callbacks (call_soon) are GCedz-not all timer callbacks (call_later) are GCedz&not all stream write contexts are GCedzAlive handle after test)Úhandle_namezalive {} after testzTotal/closed handlesztotal != closed for {})rK   ÚcloserS   ÚprintÚpprintÚfailr[   ÚgcÚcollectÚgetattrÚassertEqualÚ_debug_uv_handles_totalÚ_debug_uv_handles_freedÚ_debug_cb_handles_countÚ_debug_cb_timer_handles_countÚ_debug_stream_write_ctx_cntÚ_debug_handles_currentÚitemsÚsubTestr   Ú_debug_handles_totalÚ_debug_handles_closedrC   rZ   rY   )r   Úh_nameÚh_cnts      r   ÚtearDownzBaseTestCase.tearDownd   sZ  € Ø�	‰	�‰Ôà×&Ò&ÜÐFÔGÜ�M‰M˜$×5Ñ5Ô6Ø�I‰IÐIÔJØà×6Ò6Øô 	�
‰
ŒÜ
�
‰
ŒÜ
�
‰
Œä�4—9‘9˜k¨5Õ1Ü�J‰JŒLÜ�J‰JŒLÜ�J‰JŒLà×ÑØ—	‘	×1Ñ1Ø—	‘	×1Ñ1Ø8ô:ð
 ×ÑØ—	‘	×1Ñ1°1Ø8ô:ð ×ÑØ—	‘	×7Ñ7¸Ø?ôAð ×ÑØ—	‘	×5Ñ5°qØ8ô:ð "&§¡×!AÑ!A×!GÑ!GÓ!Iò >‘�˜Ø—\‘\Ð";Ø.4ð "ó 6ñ >à×$Ñ$Ø˜qØ-×4Ñ4°VÓ<ô>÷>ð >ð>ð "&§¡×!?Ñ!?×!EÑ!EÓ!Gò A‘�˜Ø—\‘\Ð"8Ø.4ð "ó 6ñ Aà×$Ñ$Ø˜tŸy™y×>Ñ>¸vÑFØ0×7Ñ7¸Ó?ôA÷Að AðAô 	×Ñ˜tÔ$Ü×%Ñ% dÔ+Øˆ�	÷>ñ >ú÷Að Aús   Ç-#KÉ:KËK	ËK#	c                 ó   — d| _         y ©NF)r[   r:   s    r   Úskip_unclosed_handles_checkz(BaseTestCase.skip_unclosed_handles_check�   s
   € Ø27ˆÕ/r   Né   é   é
   )ÚfamilyÚaddrÚtimeoutÚbacklogÚmax_clientsc                óê  — |€?|t         j                  k(  r*t        j                  «       5 }|j                  }d d d «       nd}t        j                   |t         j
                  «      }|€t        d«      ‚|dk  rt        d«      ‚|j                  |«       	 |j                  |«       |j                  |«       t        | ||||«      S # 1 sw Y   Œ�xY w# t        $ r}	|j                  «        |	‚d }	~	ww xY w)N)z	127.0.0.1r   útimeout is requiredr   ú#only blocking sockets are supported)ÚsocketÚAF_UNIXÚtempfileÚNamedTemporaryFiler   ÚSOCK_STREAMr   Ú
settimeoutÚbindÚlistenÚOSErrorra   ÚTestThreadedServer)
r   Úserver_progr|   r}   r~   r   r€   ÚtmpÚsockÚexs
             r   Ú
tcp_serverzBaseTestCase.tcp_server    sè   € ð ˆ<ØœŸ™Ò'Ü×0Ñ0Ó2ð $°cØŸ8™8�D÷$ð $ð (�ä�}‰}˜V¤V×%7Ñ%7Ó8ˆàˆ?ÜÐ4Ó5Ð5Ø�aŠ<ÜÐDÓEÐEØ�‰˜Ô ð	Ø�I‰I�dŒOØ�K‰K˜Ô ô
 "Ø�$˜ W¨kó;ð 	;÷)$ð $ûô  ò 	Ø�J‰JŒLØˆHûð	ús#   ªCÂ"C ÃCÃ	C2ÃC-Ã-C2c                 óÂ   — t        j                   |t         j                  «      }|€t        d«      ‚|dk  rt        d«      ‚|j                  |«       t	        | |||«      S )Nr‚   r   rƒ   )r„   rˆ   r   r‰   ÚTestThreadedClient)r   Úclient_progr|   r~   r�   s        r   Ú
tcp_clientzBaseTestCase.tcp_clientÀ   s`   € ô �}‰}˜V¤V×%7Ñ%7Ó8ˆàˆ?ÜÐ4Ó5Ð5Ø�aŠ<ÜÐDÓEÐEØ�‰˜Ô ä!Ø�$˜ Wó.ð 	.r   c                 óF   —  | j                   |dt        j                  i|¤ŽS ©Nr|   )r’   r„   r…   ©r   ÚargsÚkwargss      r   Úunix_serverzBaseTestCase.unix_serverÏ   ó!   € Øˆt�‰ ÐF¬V¯^©^ÐF¸vÑFÐFr   c                 óF   —  | j                   |dt        j                  i|¤ŽS r˜   )r–   r„   r…   r™   s      r   Úunix_clientzBaseTestCase.unix_clientÒ   r�   r   c              #   óF  K  — t        j                  «       5 }t        j                  j	                  |d«      }	 |–— 	 t        j
                  |«       d d d «       y # t        $ r Y Œw xY w# 	 t        j
                  |«       w # t        $ r Y w w xY wxY w# 1 sw Y   y xY w­w)Nr�   )r†   ÚTemporaryDirectoryÚosÚpathÚjoinÚunlinkrŒ   )r   ÚtdÚfns      r   Úunix_sock_namezBaseTestCase.unix_sock_nameÕ   s‘   è ø€ ä×(Ñ(Ó*ð 	¨bÜ—‘—‘˜b &Ó)ˆBðØ’ðÜ—I‘I˜b”M÷	ð 	øô ò ÙðûðÜ—I‘I˜b•MøÜò Ùðý÷	ð 	üsn   ‚B!—!B¹A+¾AÁ	B!Á	A(Á%BÁ'A(Á(BÁ+BÁ-BÂBÂ	B	ÂBÂB	ÂBÂBÂBÂB!c                 óˆ   — 	 | j                   j                  «        | j                  |«       y # | j                  |«       w xY wr   )rK   Ústoprd   ©r   r‘   s     r   Ú_abort_socket_testzBaseTestCase._abort_socket_testá   s,   € ð	Ø�I‰I�N‰NÔà�I‰I�b�MøˆD�I‰I�b�Mús	   ‚. ®A)r   r   r   r;   r>   r@   rE   rL   rQ   rW   r]   ru   rx   r„   ÚAF_INETr’   r–   rœ   rŸ   Ú
contextlibÚcontextmanagerr¨   r¬   r   r   r   r6   r6   >   s’   „ ò"ò"ò òòAð )-ô ;ò5ò)ò7òr8ð !Ÿ.™.ØØØØ!ô;ðB !Ÿ.™.Øó.òGòGð ×Ññ	ó ð	ór   r6   )Ú	metaclassc                 óþ   — t         j                  j                  t         j                  j                  t         j                  j	                  | «      d|«      «      }t         j                  j                  |«      sJ ‚|S )NÚcerts)r¢   r£   Úabspathr¤   ÚdirnameÚisfile)Útest_file_nameÚcert_file_nameÚfullnames      r   Ú_cert_fullnamer¹   è   sT   € Ü�w‰w�‰œrŸw™wŸ|™|Ü
�‰�‰˜Ó'¨°.ó Bó C€Hä�7‰7�>‰>˜(Ô#Ð#Ð#Ø€Or   c               #   óð   K  —  G d„ dt         j                  «      } t        j                  d«      } | «       }|j                  |«       	 d –— |j	                  |«       y # |j	                  |«       w xY w­w)Nc                   ó   — e Zd Zd„ Zy)ú)silence_long_exec_warning.<locals>.Filterc                 ót   — |j                   j                  d«      xr |j                   j                  d«       S )NÚ	ExecutingÚseconds)Úmsgr-   Úendswith)r   Úrecords     r   Úfilterz0silence_long_exec_warning.<locals>.Filter.filteró   s5   € ØŸ
™
×-Ñ-¨kÓ:ò 7ØŸ
™
×+Ñ+¨IÓ6ð8ð 8r   N)r   r   r   rÃ   r   r   r   ÚFilterr¼   ò   s   „ ó	8r   rÄ   rC   )ÚloggingrÄ   Ú	getLoggerÚ	addFilterÚremoveFilter)rÄ   ÚloggerrÃ   s      r   Úsilence_long_exec_warningrÊ   ï   sa   è ø€ ô8”—‘ô 8ô
 ×Ñ˜yÓ)€FÙ‹X€FØ
×Ñ�VÔð$Ûà×Ñ˜FÕ#øˆ×Ñ˜FÕ#üs   ‚AA6Á
A  ÁA6Á A3Á3A6c                 ó  — t        | | dz   «      D ]9  }t        j                  «       }|5  	 |j                  d|f«       |cd d d «       c S  t	        d«      ‚# t        j                  $ r Y d d d «       Œdw xY w# 1 sw Y   ŒqxY w)Niô  Ú zcould not find a free port)Úranger„   rŠ   Úerrorr   )Ú
start_fromÚportr�   s      r   Úfind_free_portrÑ      s�   € Ü�j *¨sÑ"2Ó3ò ˆÜ�}‰}‹ˆØñ 	ðØ—	‘	˜2˜t˜*Ô%ð ÷	ó 	ðô Ð3Ó
4Ð4øô	 —<‘<ò Ø÷		ð 	ðú÷	ð 	ús-   ©A8«A¾A8ÁA5Á*A8Á4A5Á5A8Á8B	c                   óD   — e Zd Zdd„Zddœd„Zej                  d„ «       Zy)ÚSSLTestCaseNc                 ó†  — t        t        d«      r$t        j                  t        j                  «      }nWt        t        d«      r$t        j                  t        j                  «      }n#t        j                  t        j
                  «      }|xj                  t        j                  z  c_        |j                  ||«       |S )NÚPROTOCOL_TLS_SERVERÚPROTOCOL_TLS)	r.   ÚsslÚ
SSLContextrÕ   rÖ   ÚPROTOCOL_SSLv23ÚoptionsÚOP_NO_SSLv2Úload_cert_chain)r   ÚcertfileÚkeyfileÚ
sslcontexts       r   Ú_create_server_ssl_contextz&SSLTestCase._create_server_ssl_context  s~   € Ü”3Ð-Ô.ÜŸ™¬×(?Ñ(?Ó@‰JÜ”S˜.Ô)ÜŸ™¬×(8Ñ(8Ó9‰JäŸ™¬×(;Ñ(;Ó<ˆJØ×ÒœcŸo™oÑ-ÕØ×"Ñ" 8¨WÔ5ØÐr   T)Údisable_verifyc                ój   — t        j                  «       }d|_        |rt         j                  |_        |S rw   )r×   Úcreate_default_contextÚcheck_hostnameÚ	CERT_NONEÚverify_mode)r   rá   rß   s      r   Ú_create_client_ssl_contextz&SSLTestCase._create_client_ssl_context  s-   € Ü×/Ñ/Ó1ˆ
Ø$)ˆ
Ô!ÙÜ%(§]¡]ˆJÔ"ØÐr   c              #   óÚ   K  — t        j                  d«      }t        j                  d«      }|j                  |«       	 d –— |j	                  |«       y # |j	                  |«       w xY w­w)NrC   zhas no effect when using ssl)rÅ   rÆ   rÄ   rÇ   rÈ   )r   rÉ   rÃ   s      r   Ú_silence_eof_received_warningz)SSLTestCase._silence_eof_received_warning!  sY   è ø€ ô ×"Ñ" 9Ó-ˆÜ—‘Ð >Ó?ˆØ×Ñ˜Ô ð	(Ûà×Ñ Õ'øˆF×Ñ Õ'üs   ‚<A+¿A ÁA+ÁA(Á(A+r   )r   r   r   rà   rç   r®   r¯   ré   r   r   r   rÓ   rÓ     s,   „ ó	ð <@ô ð ×Ññ(ó ñ(r   rÓ   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
UVTestCaseÚuvloopc                 ó*   — t        j                  «       S r   )rì   Únew_event_loopr:   s    r   r;   zUVTestCase.new_loop1  s   € Ü×$Ñ$Ó&Ð&r   c                 ó*   — t        j                  «       S r   )rì   ÚEventLoopPolicyr:   s    r   r>   zUVTestCase.new_policy4  s   € Ü×%Ñ%Ó'Ð'r   N)r   r   r   Úimplementationr;   r>   r   r   r   rë   rë   -  s   „ à€Nò'ó(r   rë   c                   ó8   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚAIOTestCaserC   c                 óÒ   •— t         ‰| �  «        t        j                  dk  rEt	        j
                  «       }|j                  | j                  «       t	        j                  |«       y y ©N)é   é   )	r   r]   ÚsysÚversion_inforC   ÚSafeChildWatcherÚattach_looprK   Úset_child_watcher)r   Úwatcherr   s     €r   r]   zAIOTestCase.setUp<  sM   ø€ Ü‰‰Œä×Ñ˜gÒ%Ü×.Ñ.Ó0ˆGØ×Ñ §	¡	Ô*Ü×%Ñ% gÕ.ð &r   c                 ór   •— t         j                  dk  rt        j                  d «       t        ‰| �  «        y rõ   )rø   rù   rC   rü   r   ru   ©r   r   s    €r   ru   zAIOTestCase.tearDownD  s*   ø€ Ü×Ñ˜gÒ%Ü×%Ñ% dÔ+Ü‰ÑÕr   c                 ó*   — t        j                  «       S r   )rC   rî   r:   s    r   r;   zAIOTestCase.new_loopI  s   € Ü×%Ñ%Ó'Ð'r   c                 ó*   — t        j                  «       S r   )rC   ÚDefaultEventLoopPolicyr:   s    r   r>   zAIOTestCase.new_policyL  s   € Ü×-Ñ-Ó/Ð/r   )	r   r   r   rñ   r]   ru   r;   r>   r#   r$   s   @r   ró   ró   8  s   ø„ à€Nô/ôò
(ö0r   ró   c                  óÌ   — t        j                   t         j                  «      } | 5  	 | j                  d«       	 d d d «       y# t        $ r Y d d d «       yw xY w# 1 sw Y   y xY w)N)z::1r   TF)r„   ÚAF_INET6rŠ   rŒ   )Úserver_socks    r   Úhas_IPv6r  P  sg   € Ü—-‘-¤§¡Ó0€KØ	ñ ð	Ø×Ñ˜ZÔ(ð ÷ð øô ò 	Ø÷	ð ð	ú÷ð ús-   ¦A¨A¹AÁ	AÁAÁAÁAÁA#c                   ó4   — e Zd Zd„ Zd„ Zddddœd„Zd„ Zd	„ Zy)
ÚTestSocketWrapperc                 ó   — || _         y r   )Ú_TestSocketWrapper__sock©r   r�   s     r   r   zTestSocketWrapper.__init__e  s	   € Øˆ�r   c                 óž   — d}t        |«      |k  r<| j                  |t        |«      z
  «      }|dk(  rt        ‚||z  }t        |«      |k  rŒ<|S )Nr   )ÚlenÚrecvÚConnectionAbortedError)r   ÚnÚbufr   s       r   Úrecv_allzTestSocketWrapper.recv_allh  sR   € ØˆÜ�#‹h˜ŠlØ—9‘9˜Q¤ S£™\Ó*ˆDØ�sŠ{Ü,Ð,Ø�4‰KˆCô	 �#‹h˜‹lð
 ˆ
r   FNT©Úserver_sideÚserver_hostnameÚdo_handshake_on_connectc                óà   — t        |t        j                  «      sJ ‚|j                  | j                  |||¬«      }|r|j                  «        | j                  j                  «        || _        y )Nr  )rB   r×   rØ   Úwrap_socketr
  Údo_handshakera   )r   Ússl_contextr  r  r  Ússl_socks         r   ÚstarttlszTestSocketWrapper.starttlsq  sd   € ô
 ˜+¤s§~¡~Ô6Ð6Ð6à×*Ñ*Ø�K‰K [Ø+Ø$;ð +ó =ˆñ
 Ø×!Ñ!Ô#à�‰×ÑÔØˆ�r   c                 ó.   — t        | j                  |«      S r   )rg   r
  )r   r   s     r   Ú__getattr__zTestSocketWrapper.__getattr__ƒ  s   € Ü�t—{‘{ DÓ)Ð)r   c                 ó`   — dj                  t        | «      j                  | j                  «      S )Nz	<{} {!r}>)r   rJ   r   r
  r:   s    r   Ú__repr__zTestSocketWrapper.__repr__†  s#   € Ø×!Ñ!¤$ t£*×"5Ñ"5°t·{±{ÓCÐCr   )r   r   r   r   r  r  r  r   r   r   r   r  r  c  s'   „ òòð #Ø!%Ø)-ôò$*óDr   r  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSocketThreadc                 ó2   — d| _         | j                  «        y rw   )Ú_activer¤   r:   s    r   rª   zSocketThread.stopŒ  s   € ØˆŒØ�	‰	�r   c                 ó&   — | j                  «        | S r   )Ústartr:   s    r   Ú	__enter__zSocketThread.__enter__�  s   € Ø�
‰
ŒØˆr   c                 ó$   — | j                  «        y r   )rª   )r   Úexcs     r   Ú__exit__zSocketThread.__exit__”  s   € Ø�	‰	�r   N)r   r   r   rª   r'  r*  r   r   r   r"  r"  Š  s   „ òòór   r"  c                   ó   — e Zd Zd„ Zd„ Zy)r”   c                 óœ   — t         j                  j                  | d d d«       d| _        || _        || _        d| _        || _        || _        y )Nztest-clientT)	Ú	threadingÚThreadr   ÚdaemonÚ_timeoutÚ_sockr$  Ú_progÚ_test)r   Útestr�   Úprogr~   s        r   r   zTestThreadedClient.__init__š  sF   € Ü×Ñ×!Ñ! $¨¨d°MÔBØˆŒàˆŒØˆŒ
ØˆŒØˆŒ
Øˆ�
r   c                 óÎ   — 	 | j                  t        | j                  «      «       y # t        t        f$ r ‚ t
        $ r%}| j                  j                  |«       Y d }~y d }~ww xY wr   )r2  r  r1  ÚKeyboardInterruptÚ
SystemExitÚBaseExceptionr3  r¬   r«   s     r   ÚrunzTestThreadedClient.run¤  sR   € ð	.Ø�J‰JÔ(¨¯©Ó4Õ5øÜ!¤:Ð.ò 	ØÜò 	.Ø�J‰J×)Ñ)¨"×-Ñ-ûð	.ús   ‚$' §A$¿AÁA$N)r   r   r   r   r:  r   r   r   r”   r”   ˜  s   „ òó.r   r”   c                   óF   ‡ — e Zd Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zed„ «       Z	ˆ xZ
S )r�   c                 ó>  — t         j                  j                  | d d d«       d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t        j                  «       \  | _        | _        | j                  j                  d«       || _        y )Nztest-serverTr   F)r-  r.  r   r/  Ú_clientsÚ_finished_clientsÚ_max_clientsr0  r1  r$  r2  r„   Ú
socketpairÚ_s1Ú_s2Úsetblockingr3  )r   r4  r�   r5  r~   r€   s         r   r   zTestThreadedServer.__init__¯  s†   € Ü×Ñ×!Ñ! $¨¨d°MÔBØˆŒàˆŒØ!"ˆÔØ'ˆÔØˆŒØˆŒ
ØˆŒàˆŒ
ä#×.Ñ.Ó0ÑˆŒ�$”(Ø�‰×Ñ˜UÔ#àˆ�
r   c                 óò   •— 	 | j                   r9| j                   j                  «       dk7  r	 | j                   j                  d«       t        ‰| �  «        y # t        $ r Y Œw xY w# t        ‰| �  «        w xY w)Néÿÿÿÿs   stop)rB  ÚfilenoÚsendrŒ   r   rª   rÿ   s    €r   rª   zTestThreadedServer.stopÁ  sa   ø€ ð	Ø�xŠx˜DŸH™HŸO™OÓ-°Ò3ðØ—H‘H—M‘M 'Ô*ô ‰G‰L�Nøô ò Ùðûô ‰G‰L�Nús(   ƒ)A& ­A Á	A#Á A& Á"A#Á#A& Á&A6c                 óx  — 	 | j                   5  | j                   j                  d«       | j                  «        d d d «       | j                  j	                  «        | j
                  j	                  «        y # 1 sw Y   Œ>xY w# | j                  j	                  «        | j
                  j	                  «        w xY w)Nr   )r1  rC  Ú_runrA  ra   rB  r:   s    r   r:  zTestThreadedServer.runË  s{   € ð	Ø—‘ñ Ø—
‘
×&Ñ& qÔ)Ø—	‘	”÷ð �H‰H�N‰NÔØ�H‰H�N‰NÕ÷ð ûð �H‰H�N‰NÔØ�H‰H�N‰NÕús!   ‚B Ž,A7ºB Á7B Á<B Â6B9c                 ó   — | j                   rì| j                  | j                  k\  ry t        j                  | j                  | j
                  gg g | j                  «      \  }}}| j
                  |v ry | j                  |v rk	 | j                  j                  «       \  }}| xj                  dz  c_        |j                  | j                  «       	 |5  | j                  |«       d d d «       | j                   rŒëy y # 1 sw Y   ŒxY w# t        t        f$ r ‚ t        $ r.}d| _         	 ‚ # | j                  j                  |«       w xY wd }~ww xY w# t        $ r Y �ŒZt         j"                  $ r | j                   sY y ‚ w xY w)Nrz   F)r$  r=  r?  Úselectr1  rA  r0  Úacceptr‰   Ú_handle_clientr7  r8  r9  r3  r¬   ÚBlockingIOErrorr„   r~   )r   ÚrÚwÚxÚconnr}   r‘   s          r   rI  zTestThreadedServer._runÔ  sC  € Ø�lŠlØ�}‰} × 1Ñ 1Ò1Øä—m‘mØ—‘˜TŸX™XÐ&¨¨B°·±ó?‰GˆAˆq�!ð �x‰x˜1‰}Øà�z‰z˜Q‰ð>Ø!%§¡×!2Ñ!2Ó!4‘J�D˜$ð —M’M QÑ&•MØ—O‘O D§M¡MÔ2ð
>Ø!ñ 6Ø ×/Ñ/°Ô5÷6ð1 �l�l÷06ð 6ûä-¬zÐ:ò ØÜ(ò >Ø',˜œð>Ø!øà ŸJ™J×9Ñ9¸"Õ=þð>ûô 'ò ÚÜ—~‘~ò ØŸ<š<Ùàð	úsZ   ÂE ÃD ÃC:Ã#D Ã:DÃ?D ÄEÄEÄ&D'Ä'EÅEÅEÅ	E=ÅE=Å;E=c                 ó8   — | j                  t        |«      «       y r   )r2  r  r  s     r   rM  z!TestThreadedServer._handle_clientø  s   € Ø�
‰
Ô$ TÓ*Õ+r   c                 ó6   — | j                   j                  «       S r   )r1  Úgetsocknamer:   s    r   r}   zTestThreadedServer.addrû  s   € à�z‰z×%Ñ%Ó'Ð'r   )r   r   r   r   rª   r:  rI  rM  Úpropertyr}   r#   r$   s   @r   r�   r�   ­  s1   ø„ òô$òò">òH,ð ñ(ó ô(r   r�   c                 ó¶   — d„ } |«       }| j                  |«      }d|_        	 | j                  |«       |j                  «        y # |j                  «        w xY w)Nc               “   ó   K  — y ­wr   r   r   r   r   Úoncezrun_briefly.<locals>.once  s	   è ø€ Øùs   ‚F)Úcreate_taskÚ_log_destroy_pendingrO   ra   )rK   rY  ÚgenÚts       r   Úrun_brieflyr^    sN   € òá
‹&€CØ×Ñ˜Ó€Að #€AÔðØ×Ñ Ô"à�	‰	�øˆ�	‰	�ús   ¤A ÁAc                 ó&  — t        j                   «       |z   } |«       ss|�:|t        j                   «       z
  }|dk  rt        j                  j                  «       ‚| j	                  t        j
                  j                  d«      «        |«       sŒry y )Nr   gü©ñÒMbP?)ÚtimerC   ÚfuturesÚTimeoutErrorrO   ÚtasksrP   )rK   Úpredr~   Údeadlines       r   Ú	run_untilrf    sk   € Ü�y‰y‹{˜WÑ$€HÙŒfØÐØ¤§¡£Ñ,ˆGØ˜!Š|Ü—o‘o×2Ñ2Ó4Ð4Ø×Ñ¤§¡× 3Ñ 3°EÓ :Ô;ñ �fr   c               #   ó€  K  — t         j                  j                  j                  } 	 t         j                  j                  j	                  t
        j                  dz   «       d–— t         j                  j                  j	                  | «       y# t         j                  j                  j	                  | «       w xY w­w)zrContext manager to disable asyncio logger.

    For example, it can be used to ignore warnings in debug mode.
    rz   N)rC   ÚlogrÉ   ÚlevelÚsetLevelrÅ   ÚCRITICAL)Ú	old_levels    r   Údisable_loggerrm    sx   è ø€ ô —‘×"Ñ"×(Ñ(€Ið/Ü�‰×Ñ×#Ñ#¤G×$4Ñ$4°qÑ$8Ô9Ûä�‰×Ñ×#Ñ# IÕ.øŒ�‰×Ñ×#Ñ# IÕ.üs   ‚%B>¨>B Á&*B>Â+B;Â;B>)iPÃ  )é   )+Ú__doc__rC   Úasyncio.eventsÚcollectionsr®   re   rÅ   r¢   rc   r   rK  r„   r×   rø   r†   r-  r`  Úunittestrì   r
   r   ÚUserDictr   rJ   r&   ÚTestCaser6   r¹   r¯   rÊ   rÑ   rÓ   rë   ró   r  r  r.  r"  r”   r�   r^  rf  rm  r   r   r   ú<module>ru     s5  ðÙ >ó Û Û Û Û 	Û Û 	Û Û 	Û Û Û 
Û 
Û Û Û Û Û ô7�#ô 7ô

(�;×'Ñ'ô 
(ô=�tô =ô(g�8×$Ñ$Ð0@õ gòTð ×Ññ$ó ð$ó 
5÷(ñ (ô@(�ô (ô0�,ô 0ò0ñ ‹:€÷$Dñ $DôN�9×#Ñ#ô ô.˜ô .ô*P(˜ô P(òpó<ð ×Ññ
/ó ñ
/r   