o
    Ð­jÒ<  ã                   @   sœ  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG d	d
„ d
ejed�Zdd„ Zejdd„ ƒZd*dd„ZG dd„ dƒZG dd„ deƒZ G dd„ deƒZ!dd„ Z"e"ƒ Z"G dd„ dƒZ#G dd„ dej$ƒZ%G dd „ d e%ƒZ&G d!d"„ d"e%ƒZ'd#d$„ Z(d+d&d'„Z)ejd(d)„ ƒZ*dS ),z8Test utilities. Don't use outside of the uvloop project.é    Nc                   @   ó   e Zd Zdd„ ZdS )ÚMockPatternc                 C   s   t t t| ƒ|tj¡ƒS ©N)ÚboolÚreÚsearchÚstrÚS)ÚselfÚother© r   úM/var/www/html/CropPilot/venv/lib/python3.10/site-packages/uvloop/_testbase.pyÚ__eq__   s   zMockPattern.__eq__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      ó    r   c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚTestCaseDictc                    s   t ƒ  ¡  || _d S r   )ÚsuperÚ__init__Úname©r
   r   ©Ú	__class__r   r   r      s   

zTestCaseDict.__init__c                    s.   || j v rtd | j|¡ƒ‚tƒ  ||¡ d S )Nzduplicate test {}.{})ÚdataÚRuntimeErrorÚformatr   r   Ú__setitem__)r
   ÚkeyÚvaluer   r   r   r   #   s
   
ÿzTestCaseDict.__setitem__)r   r   r   r   r   Ú__classcell__r   r   r   r   r      s    r   c                       s(   e Zd Zedd„ ƒZ‡ fdd„Z‡  ZS )ÚBaseTestCaseMetac                 C   ó   t |ƒS r   )r   )Úmclsr   Úbasesr   r   r   Ú__prepare__,   s   zBaseTestCaseMeta.__prepare__c                    sT   |D ]}|  d¡s
q|D ]}t||ƒrtd |||j¡ƒ‚qq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   r   r   r)   0   s   

ÿþÿÿzBaseTestCaseMeta.__new__)r   r   r   Úclassmethodr%   r)   r    r   r   r   r   r!   *   s    
r!   c                   @   s°   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddœdd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zejdddddœdd„Zejdfdd„Zd d!„ Zd"d#„ Zejd$d%„ ƒZd&d'„ ZdS )(ÚBaseTestCasec                 C   ó   t ‚r   ©ÚNotImplementedError©r
   r   r   r   Únew_loop@   ó   zBaseTestCase.new_loopc                 C   r0   r   r1   r3   r   r   r   Ú
new_policyC   r5   zBaseTestCase.new_policyc                 C   r"   r   )r   )r
   r   r   r   r   Úmock_patternF   ó   zBaseTestCase.mock_patternc              	   Ã   s@   �t |tjƒs	d S z
| ¡ I d H  W d S  ttfy   Y d S w r   )Ú
isinstanceÚasyncioÚStreamWriterÚwait_closedÚBrokenPipeErrorÚConnectionError)r
   Úobjr   r   r   r<   I   s   €ÿzBaseTestCase.wait_closedc                 C   s   t | jƒj d¡S )Nzasyncio.)ÚtypeÚloopr   r'   r3   r   r   r   Úis_asyncio_loopQ   ó   zBaseTestCase.is_asyncio_loopg{®Gáz„?)Údelayc                C   s   | j  t |¡¡ d S r   )rA   Úrun_until_completer:   Úsleep)r
   rD   r   r   r   Úrun_loop_brieflyT   ó   zBaseTestCase.run_loop_brieflyc                 C   s   | j  |¡ | j |¡ d S r   )Ú#_BaseTestCase__unhandled_exceptionsÚappendrA   Údefault_exception_handler)r
   rA   Úcontextr   r   r   Úloop_exception_handlerW   s   z#BaseTestCase.loop_exception_handlerc                 C   sB   |   ¡ | _t |  ¡ ¡ t | j¡ d| _| j | j¡ g | _	d S )NT)
r4   rA   r:   Úset_event_loop_policyr6   Úset_event_loopÚ"_check_unclosed_resources_in_debugÚset_exception_handlerrM   rI   r3   r   r   r   ÚsetUp[   s   

zBaseTestCase.setUpc              	   C   sœ  | j  ¡  | jrtdƒ t | j¡ |  d¡ d S | jsd S t ¡  t ¡  t ¡  t	| j ddƒr¿t ¡  t ¡  t ¡  |  
| j j| j jd¡ |  
| j jdd¡ |  
| j jdd¡ |  
| j jdd	¡ | j j ¡ D ]%\}}| jd
|d�� |  
|dd |¡¡ W d   ƒ n1 s‰w   Y  qi| j j ¡ D ])\}}| jd|d�� |  
|| j j| d |¡¡ W d   ƒ n1 s¹w   Y  q•t d ¡ t d ¡ d | _ d S )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 {})rA   ÚcloserI   ÚprintÚpprintÚfailrP   Ú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_closedr:   rO   rN   )r
   Úh_nameÚh_cntr   r   r   ÚtearDownd   sn   

ýþþþÿþþ€ÿþþ€


zBaseTestCase.tearDownc                 C   s
   d| _ d S ©NF)rP   r3   r   r   r   Úskip_unclosed_handles_check�   ó   
z(BaseTestCase.skip_unclosed_handles_checkNé   é   é
   )ÚfamilyÚaddrÚtimeoutÚbacklogÚmax_clientsc          
   
   C   sÌ   |d u r#|t jkr!t ¡ �}|j}W d   ƒ n1 sw   Y  nd}t   |t j¡}|d u r2tdƒ‚|dkr:tdƒ‚| |¡ z| |¡ | 	|¡ W n t
y] }	 z| ¡  |	‚d }	~	ww t| ||||ƒS )N)z	127.0.0.1r   útimeout is requiredr   ú#only blocking sockets are supported)ÚsocketÚAF_UNIXÚtempfileÚNamedTemporaryFiler   ÚSOCK_STREAMr   Ú
settimeoutÚbindÚlistenÚOSErrorrU   ÚTestThreadedServer)
r
   Úserver_progrp   rq   rr   rs   rt   ÚtmpÚsockÚexr   r   r   Ú
tcp_server    s0   

ÿ€

€þ
ÿzBaseTestCase.tcp_serverc                 C   sF   t   |t j¡}|d u rtdƒ‚|dkrtdƒ‚| |¡ t| |||ƒS )Nru   r   rv   )rw   r{   r   r|   ÚTestThreadedClient)r
   Úclient_progrp   rr   rƒ   r   r   r   Ú
tcp_clientÀ   s   
ÿzBaseTestCase.tcp_clientc                 O   ó   | j |dtji|¤ŽS ©Nrp   )r…   rw   rx   ©r
   ÚargsÚkwargsr   r   r   Úunix_serverÏ   rH   zBaseTestCase.unix_serverc                 O   r‰   rŠ   )rˆ   rw   rx   r‹   r   r   r   Úunix_clientÒ   rH   zBaseTestCase.unix_clientc                 c   sœ   � t  ¡ �?}tj |d¡}z|V  W zt |¡ W n ty"   Y nw zt |¡ W w  ty3   Y w w W d   ƒ d S W d   ƒ d S 1 sGw   Y  d S )Nrƒ   )ry   ÚTemporaryDirectoryÚosÚpathÚjoinÚunlinkr   )r
   ÚtdÚfnr   r   r   Úunix_sock_nameÕ   s&   €
ÿþÿÿú"øzBaseTestCase.unix_sock_namec              	   C   s(   z| j  ¡  W |  |¡ d S |  |¡ w r   )rA   ÚstoprX   ©r
   r„   r   r   r   Ú_abort_socket_testá   s   zBaseTestCase._abort_socket_test)r   r   r   r4   r6   r7   r<   rB   rG   rM   rR   ri   rk   rw   ÚAF_INETr…   rˆ   rŽ   r�   Ú
contextlibÚcontextmanagerr—   rš   r   r   r   r   r/   >   s2    	9û!
þ
r/   )Ú	metaclassc                 C   s4   t j t j t j | ¡d|¡¡}t j |¡sJ ‚|S )NÚcerts)r‘   r’   Úabspathr“   ÚdirnameÚisfile)Útest_file_nameÚcert_file_nameÚfullnamer   r   r   Ú_cert_fullnameè   s
   ÿr¦   c               	   c   sR   � G dd„ dt jƒ} t  d¡}| ƒ }| |¡ zd V  W | |¡ d S | |¡ w )Nc                   @   r   )z)silence_long_exec_warning.<locals>.Filterc                 S   s   |j  d¡o|j  d¡ S )NÚ	ExecutingÚseconds)Úmsgr'   Úendswith)r
   Úrecordr   r   r   Úfilteró   s   
ÿz0silence_long_exec_warning.<locals>.Filter.filterN)r   r   r   r¬   r   r   r   r   ÚFilterò   r   r­   r:   )Úloggingr­   Ú	getLoggerÚ	addFilterÚremoveFilter)r­   Úloggerr¬   r   r   r   Úsilence_long_exec_warningï   s   €

r³   éPÃ  c              
   C   s„   t | | d ƒD ]6}t ¡ }|�& z	| d|f¡ W n tjy)   Y W d   ƒ qw |W  d   ƒ   S 1 s8w   Y  qtdƒ‚)Niô  Ú zcould not find a free port)Úrangerw   r}   Úerrorr   )Ú
start_fromÚportrƒ   r   r   r   Úfind_free_port   s   ü&úrº   c                   @   s2   e Zd Zd
dd„Zddœdd„Zejdd	„ ƒZdS )ÚSSLTestCaseNc                 C   s\   t tdƒrt tj¡}nt tdƒrt tj¡}nt tj¡}| jtjO  _| ||¡ |S )NÚPROTOCOL_TLS_SERVERÚPROTOCOL_TLS)	r(   ÚsslÚ
SSLContextr¼   r½   ÚPROTOCOL_SSLv23ÚoptionsÚOP_NO_SSLv2Úload_cert_chain)r
   ÚcertfileÚkeyfileÚ
sslcontextr   r   r   Ú_create_server_ssl_context  s   

z&SSLTestCase._create_server_ssl_contextT)Údisable_verifyc                C   s   t  ¡ }d|_|rt j|_|S rj   )r¾   Úcreate_default_contextÚcheck_hostnameÚ	CERT_NONEÚverify_mode)r
   rÈ   rÆ   r   r   r   Ú_create_client_ssl_context  s
   z&SSLTestCase._create_client_ssl_contextc              	   c   sD   � t  d¡}t  d¡}| |¡ zd V  W | |¡ d S | |¡ w )Nr:   zhas no effect when using ssl)r®   r¯   r­   r°   r±   )r
   r²   r¬   r   r   r   Ú_silence_eof_received_warning!  s   €


z)SSLTestCase._silence_eof_received_warningr   )r   r   r   rÇ   rÍ   rœ   r�   rÎ   r   r   r   r   r»     s
    
r»   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
UVTestCaseÚuvloopc                 C   ó   t  ¡ S r   )rÐ   Únew_event_loopr3   r   r   r   r4   1  r8   zUVTestCase.new_loopc                 C   rÑ   r   )rÐ   ÚEventLoopPolicyr3   r   r   r   r6   4  r8   zUVTestCase.new_policyN)r   r   r   Úimplementationr4   r6   r   r   r   r   rÏ   -  s    rÏ   c                       s<   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Z‡  ZS )
ÚAIOTestCaser:   c                    s:   t ƒ  ¡  tjdk rt ¡ }| | j¡ t |¡ d S d S ©N)é   é   )	r   rR   ÚsysÚversion_infor:   ÚSafeChildWatcherÚattach_looprA   Úset_child_watcher)r
   Úwatcherr   r   r   rR   <  s   

ýzAIOTestCase.setUpc                    s"   t jdk r
t d ¡ tƒ  ¡  d S rÖ   )rÙ   rÚ   r:   rÝ   r   ri   r3   r   r   r   ri   D  s   

zAIOTestCase.tearDownc                 C   rÑ   r   )r:   rÒ   r3   r   r   r   r4   I  r8   zAIOTestCase.new_loopc                 C   rÑ   r   )r:   ÚDefaultEventLoopPolicyr3   r   r   r   r6   L  r8   zAIOTestCase.new_policy)	r   r   r   rÔ   rR   ri   r4   r6   r    r   r   r   r   rÕ   8  s    rÕ   c               	   C   sh   t   t j¡} | �" z|  d¡ W n ty    Y W d   ƒ dS w 	 W d   ƒ dS 1 s-w   Y  d S )N)z::1r   FT)rw   ÚAF_INET6r}   r   )Úserver_sockr   r   r   Úhas_IPv6P  s   ü$úrâ   c                   @   s>   e Zd Zdd„ Zdd„ Zddddœd	d
„Zdd„ Zdd„ ZdS )ÚTestSocketWrapperc                 C   s
   || _ d S r   )Ú_TestSocketWrapper__sock©r
   rƒ   r   r   r   r   e  rl   zTestSocketWrapper.__init__c                 C   sF   d}t |ƒ|k r!|  |t |ƒ ¡}|dkrt‚||7 }t |ƒ|k s|S )Nó    )ÚlenÚrecvÚConnectionAbortedError)r
   ÚnÚbufr   r   r   r   Úrecv_allh  s   üzTestSocketWrapper.recv_allFNT©Úserver_sideÚserver_hostnameÚdo_handshake_on_connectc                C   sD   t |tjƒsJ ‚|j| j|||d�}|r| ¡  | j ¡  || _d S )Nrí   )r9   r¾   r¿   Úwrap_socketrä   Údo_handshakerU   )r
   Ússl_contextrî   rï   rð   Ússl_sockr   r   r   Ústarttlsq  s   ý

zTestSocketWrapper.starttlsc                 C   s   t | j|ƒS r   )r[   rä   r   r   r   r   Ú__getattr__ƒ  ó   zTestSocketWrapper.__getattr__c                 C   s   d  t| ƒj| j¡S )Nz	<{} {!r}>)r   r@   r   rä   r3   r   r   r   Ú__repr__†  s   zTestSocketWrapper.__repr__)r   r   r   r   rì   rõ   rö   rø   r   r   r   r   rã   c  s    
ýrã   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSocketThreadc                 C   s   d| _ |  ¡  d S rj   )Ú_activer“   r3   r   r   r   r˜   Œ  s   zSocketThread.stopc                 C   s   |   ¡  | S r   )Ústartr3   r   r   r   Ú	__enter__�  s   zSocketThread.__enter__c                 G   s   |   ¡  d S r   )r˜   )r
   Úexcr   r   r   Ú__exit__”  r÷   zSocketThread.__exit__N)r   r   r   r˜   rü   rþ   r   r   r   r   rù   Š  s    rù   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r†   c                 C   s:   t j | d d d¡ d| _|| _|| _d| _|| _|| _d S )Nztest-clientT)	Ú	threadingÚThreadr   ÚdaemonÚ_timeoutÚ_sockrú   Ú_progÚ_test)r
   Útestrƒ   Úprogrr   r   r   r   r   š  s   
zTestThreadedClient.__init__c              
   C   s\   z|   t| jƒ¡ W d S  ttfy   ‚  ty- } z| j |¡ W Y d }~d S d }~ww r   )r  rã   r  ÚKeyboardInterruptÚ
SystemExitÚBaseExceptionr  rš   r™   r   r   r   Úrun¤  s   €ÿzTestThreadedClient.runN)r   r   r   r   r  r   r   r   r   r†   ˜  s    
r†   c                       sH   e Zd Zdd„ Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	‡  Z
S )r€   c                 C   sh   t j | d d d¡ d| _d| _d| _|| _|| _|| _d| _	|| _
t ¡ \| _| _| j d¡ || _d S )Nztest-serverTr   F)rÿ   r   r   r  Ú_clientsÚ_finished_clientsÚ_max_clientsr  r  rú   r  rw   Ú
socketpairÚ_s1Ú_s2Úsetblockingr  )r
   r  rƒ   r  rr   rt   r   r   r   r   ¯  s   
zTestThreadedServer.__init__c                    s†   z<| j r| j  ¡ dkr%z| j  d¡ W n ty   Y nw W tƒ  ¡  d S W tƒ  ¡  d S W tƒ  ¡  d S W tƒ  ¡  d S tƒ  ¡  w )Néÿÿÿÿs   stop)r  ÚfilenoÚsendr   r   r˜   r3   r   r   r   r˜   Á  s   ÿýúüþzTestThreadedServer.stopc                 C   s†   z7| j � | j  d¡ |  ¡  W d   ƒ n1 sw   Y  W | j ¡  | j ¡  d S W | j ¡  | j ¡  d S | j ¡  | j ¡  w )Nr   )r  r  Ú_runr  rU   r  r3   r   r   r   r  Ë  s   
þ
û

ÿzTestThreadedServer.runc                 C   s.  | j r•| j| jkrd S t | j| jgg g | j¡\}}}| j|v r"d S | j|v r�z	| j ¡ \}}W n ty9   Y q  t	j
yG   | j sFY d S ‚ w |  jd7  _| | j¡ z|� |  |¡ W d   ƒ n1 shw   Y  W n! ttfyx   ‚  ty� } zd| _ z‚ | j |¡ w d }~ww | j sd S d S )Nrn   F)rú   r  r  Úselectr  r  r  ÚacceptÚBlockingIOErrorrw   rr   r|   Ú_handle_clientr  r	  r
  r  rš   )r
   ÚrÚwÚxÚconnrq   r„   r   r   r   r  Ô  sF   
ÿ

üÿ€€ûäzTestThreadedServer._runc                 C   s   |   t|ƒ¡ d S r   )r  rã   rå   r   r   r   r  ø  rC   z!TestThreadedServer._handle_clientc                 C   s
   | j  ¡ S r   )r  Úgetsocknamer3   r   r   r   rq   û  s   
zTestThreadedServer.addr)r   r   r   r   r˜   r  r  r  Úpropertyrq   r    r   r   r   r   r€   ­  s    
	$r€   c                 C   sB   dd„ }|ƒ }|   |¡}d|_z|  |¡ W | ¡  d S | ¡  w )Nc                   Ó   s   �d S r   r   r   r   r   r   Úonce  s   €zrun_briefly.<locals>.onceF)Úcreate_taskÚ_log_destroy_pendingrE   rU   )rA   r!  ÚgenÚtr   r   r   Úrun_briefly  s   
r&  é   c                 C   sX   t   ¡ | }|ƒ s*|d ur|t   ¡  }|dkrtj ¡ ‚|  tj d¡¡ |ƒ r	d S d S )Nr   gü©ñÒMbP?)Útimer:   ÚfuturesÚTimeoutErrorrE   ÚtasksrF   )rA   Úpredrr   Údeadliner   r   r   Ú	run_until  s   
ûr.  c               	   c   sL   � t jjj} zt jj tjd ¡ dV  W t jj | ¡ dS t jj | ¡ w )zrContext manager to disable asyncio logger.

    For example, it can be used to ignore warnings in debug mode.
    rn   N)r:   Úlogr²   ÚlevelÚsetLevelr®   ÚCRITICAL)Ú	old_levelr   r   r   Údisable_logger  s   €
"r4  )r´   )r'  )+Ú__doc__r:   Úasyncio.eventsÚcollectionsrœ   rY   r®   r‘   rW   r   r  rw   r¾   rÙ   ry   rÿ   r(  ÚunittestrÐ   r   r   ÚUserDictr   r@   r!   ÚTestCaser/   r¦   r�   r³   rº   r»   rÏ   rÕ   râ   rã   r   rù   r†   r€   r&  r.  r4  r   r   r   r   Ú<module>   sR     +

 'X

