o
    ÑtPfûJ  ã                   @   sŠ  d dl mZ d dlZd dlmZ e ¡  d dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ ej ej e¡¡Zej ed¡Ze ¡ ZejZejZe Ze ZeZ ergeZ!ee!fZ ej"Z"d dlm#Z# zd dl$Z$W n e%y…   dZ$Y nw G d	d
„ d
ej&ƒZ'e (d¡G dd„ de'ƒƒZ)e (d¡G dd„ de'ƒƒZ*G dd„ de+ƒZ,G dd„ de,ƒZ-e.dkrÃe /¡  dS dS )é    )Úprint_functionN)Úmonkey)ÚDEFAULT_BIND_ADDR_TUPLE)ÚDEFAULT_CONNECT)Útcp_listenerz2_7_keycert.pem)Úget_open_filesc                       sp   e Zd ZdZ‡ fdd„Zdd„ Zeserej	rdd„ Z
ndd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚTest© c                    s   d| _ tt| ƒ ¡  d S ©Nr	   )Úextra_allowed_open_statesÚsuperr   ÚtearDown©Úself©Ú	__class__r	   ú`/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__makefile_ref.pyr   +   s   zTest.tearDownc              
   C   st   z|ƒ }W n, t y1 } z |jd tjkrW Y d }~d S tr,|jd dkr,W Y d }~d S ‚ d }~ww td||f ƒ‚)Nr   i6'  z"NOT RAISED EBADF: %r() returned %r)ÚOSErrorÚargsÚerrnoÚEBADFÚWINÚAssertionError)r   ÚfuncÚresultÚexr	   r	   r   Úassert_raises_EBADF/   s   
€úzTest.assert_raises_EBADFc                 C   s   d S ©Nr	   )r   Úfilenor	   r	   r   Ú__assert_fd_open<   s   zTest.__assert_fd_openc                 C   s4   t |tƒsJ ‚tƒ }||vrtd||d f ƒ‚d S )Nú%r is not open:
%sÚdata)Ú
isinstanceÚfd_typesr   r   ©r   r   Ú
open_filesr	   r	   r   r   F   s
   ÿc                 C   sP   t |tƒsJ t|ƒƒ‚|dksJ |ƒ‚tdd}||v r&td||d f ƒ‚d S )Nr   F)Úcount_closing_as_openz%r is not closed:
%sr!   )r"   r#   Úreprr   r   r$   r	   r	   r   Úassert_fd_closedL   s   
ÿzTest.assert_fd_closedc                 C   sh   t ƒ }| ¡ }|d D ]}t|dd ƒ|kr)|jtjtjf| j v s&J |jƒ‚ d S qtd||d f ƒ‚)Nr!   Úladdrr    )	r   ÚgetsocknameÚgetattrÚstatusÚpsutilÚCONN_LISTENÚCONN_ESTABLISHEDr   r   )r   Úsockr%   ÚsocknameÚxr	   r	   r   Ú_assert_sock_openU   s   "þzTest._assert_sock_openc                 G   sŽ   t |tƒr|  |¡ n'| ¡ }t |tƒsJ |ƒ‚| ¡ }t |tƒs%J |ƒ‚ts-|  |¡ n|  |¡ |rE| j|d g|dd … ¢R Ž  d S d S )Nr   é   )	r"   r#   Ú_Test__assert_fd_openr   r*   Útupler   r3   Úassert_open)r   r0   Úrestr   r1   r	   r	   r   r7   _   s   

"ÿzTest.assert_openc                 G   sz   t |tƒr|  |¡ ntr|  | ¡ d¡ n|  |j¡ |  |j¡ |  |j¡ |r;| j	|d g|dd … ¢R Ž  d S d S )Néÿÿÿÿr   r4   )
r"   r#   r(   ÚPY3ÚassertEqualr   r   r*   ÚacceptÚassert_closed)r   r0   r8   r	   r	   r   r=   n   s   
"ÿzTest.assert_closedc                 C   sR   t   ¡ }z| t¡ tstjr| d¡ |  || ¡ ¡ W |S    | 	¡  d }‚ )Nr4   )
ÚsocketÚbindr   r   Ú	greentestÚLINUXÚlistenr7   r   Úclose)r   Úsr	   r	   r   Úmake_open_socket}   s   


üzTest.make_open_socket)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚPYPYr@   rA   r5   r(   r3   r7   r=   rE   Ú__classcell__r	   r	   r   r   r   '   s    

	
r   z0This sometimes times out for no apparent reason.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 )Ú
TestSocketc                 C   sR   t ƒ }||  ¡ ƒ}| ¡ }| ¡  W d   ƒ n1 sw   Y  |  ||¡ d S r   )ÚClosingrE   r   rC   r=   ©r   ÚcloserrD   r   r	   r	   r   Útest_simple_close   s   
ýzTestSocket.test_simple_closec                 C   s¢   t ƒ D}||  ¡ ƒ}| ¡ }|| ¡ ƒ}|  ||¡ | ¡  tr'|  ||¡ n
|  |¡ |  |¡ | ¡  |  |¡ |  |¡ W d   ƒ d S 1 sJw   Y  d S r   )rL   rE   r   Úmakefiler7   rC   r:   r=   ©r   rN   rD   r   Úfr	   r	   r   Útest_makefile1—   s   


"ðzTestSocket.test_makefile1c                 C   s–   t ƒ >}||  ¡ ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  |¡ |  ||¡ | ¡  |  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sDw   Y  d S r   )rL   rE   r   r7   rP   rC   r=   rQ   r	   r	   r   Útest_makefile2ª   s   
"õzTestSocket.test_makefile2c                    s¢   t ƒ D}|tddƒ}| ¡ d ‰|t ¡ ƒ‰ ‡ ‡fdd„}| tj|d¡ | |¡}| ¡ }|  	||¡ | 
¡  |  |¡ W d   ƒ d S 1 sJw   Y  d S )Nr4   ©Úbacklogc                      ó   ˆ   tˆf¡ d S r   ©Úconnectr   r	   ©Ú	connectorÚportr	   r   rY   ¿   ó   z.TestSocket.test_server_simple.<locals>.connect©Útarget)rL   r   r*   r>   Úrunning_taskÚ	threadingÚThreadr<   r   r7   rC   r=   )r   rN   ÚlistenerrY   Úclient_socketr   r	   rZ   r   Útest_server_simple¸   s   
"ñzTestSocket.test_server_simplec                    sÞ   t ƒ b}|tddƒ}| ¡ d ‰|t ¡ ƒ‰ ‡ ‡fdd„}| tj|d¡ | |¡}| ¡ }|| 	¡ ƒ}|  
||¡ | ¡  trI|  
||¡ n
|  |¡ |  
|¡ | ¡  |  ||¡ W d   ƒ d S 1 shw   Y  d S )Nr4   rU   c                      rW   r   rX   r	   rZ   r	   r   rY   Ñ   r]   z1TestSocket.test_server_makefile1.<locals>.connectr^   )rL   r   r*   r>   r`   ra   rb   r<   r   rP   r7   rC   r:   r=   ©r   rN   rc   rY   rd   r   rR   r	   rZ   r   Útest_server_makefile1Ê   s$   


"çz TestSocket.test_server_makefile1c                    sÄ   t ƒ U}|tddƒ}| ¡ d ‰|t ¡ ƒ‰ ‡ ‡fdd„}| tj|d¡ | |¡}| ¡ }|| 	¡ ƒ}|  
||¡ | ¡  |  
||¡ | ¡  |  ||¡ W d   ƒ d S 1 s[w   Y  d S )Nr4   rU   c                      rW   r   rX   r	   rZ   r	   r   rY   í   r]   z1TestSocket.test_server_makefile2.<locals>.connectr^   )rL   r   r*   r>   r`   ra   rb   r<   r   rP   r7   rC   r=   rf   r	   rZ   r   Útest_server_makefile2æ   s   
"íz TestSocket.test_server_makefile2N)	rF   rG   rH   rO   rS   rT   re   rg   rh   r	   r	   r	   r   rK      s    rK   c                   @   sj   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dd„ ZdS )ÚTestSSLc                 C   sL   |  t|f¡ zt ¡  |¡}| ¡  W n tjy   Y d S w | ¡  d S r   )	rY   r   ÚsslÚ
SSLContextÚwrap_socketÚwaitr>   ÚerrorrC   )r   r[   r\   Úaccepted_eventr2   r	   r	   r   Ú_ssl_connect_task   s   ûzTestSSL._ssl_connect_taskc                 C   s.   t  ¡ }t j| j|||fd}d|_||_|S )N)r_   r   T)ra   ÚEventrb   rp   Údaemonro   )r   r[   r\   ro   Útr	   r	   r   Ú_make_ssl_connect_task  s   ÿzTestSSL._make_ssl_connect_taskc                 C   sz   t ƒ 0}||  ¡ ƒ}| ¡ }|t ¡  |¡ƒ}| ¡ }|  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 s6w   Y  d S r   )	rL   rE   r   rj   rk   rl   r7   rC   r=   rM   r	   r	   r   rO     s   "ùzTestSSL.test_simple_closec                 C   s¦   t ƒ F}||  ¡ ƒ}|t ¡  |¡ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  ||¡ | ¡  |  ||¡ | ¡  | ¡  |  	||¡ W d   ƒ d S 1 sLw   Y  d S r   )
rL   rE   rj   rk   rl   r   r7   rP   rC   r=   )r   rN   Úraw_srD   r   rR   r	   r	   r   rS   %  s   "ôzTestSSL.test_makefile1c                 C   s¦   t ƒ F}||  ¡ ƒ}| ¡ }|t ¡  |¡ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  ||¡ | ¡  |  ||¡ | ¡  |  	||¡ W d   ƒ d S 1 sLw   Y  d S r   )
rL   rE   r   rj   rk   rl   r7   rP   rC   r=   rQ   r	   r	   r   rT   4  s   "ózTestSSL.test_makefile2F©Úserver_sidec                C   s$   t  ¡ }|j||d |j||dS )N)ÚcertfileÚkeyfilerv   )rj   rk   Úload_cert_chainrl   )r   r0   ry   rx   rw   Úcontextr	   r	   r   Ú_wrap_socketD  s   zTestSSL._wrap_socketc                 C   sº   t ƒ P}|tddƒ}| ¡ d }|t ¡ ƒ}|  ||¡}| |¡ | |¡}|j ¡  || j	|t
t
ddƒ}| ¡ }|  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sVw   Y  d S ©Nr4   rU   T)ry   rx   rw   )rL   r   r*   r>   rt   r`   r<   ro   Úsetr|   ÚCERTFILEr   r7   rC   r=   )r   rN   rc   r\   r[   rs   rd   r   r	   r	   r   re   I  s$   



ÿÿ"ïzTestSSL.test_server_simplec           	      C   sâ   t ƒ d}|tddƒ}| ¡ d }|t ¡ ƒ}|  ||¡}| |¡ | |¡}|j ¡  || j	|t
t
ddƒ}| ¡ }|  ||¡ | ¡ }|  ||¡ | ¡  |  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sjw   Y  d S r}   )rL   r   r*   r>   rt   r`   r<   ro   r~   r|   r   r   r7   rP   rC   r=   ©	r   rN   rc   r\   r[   rs   rd   r   rR   r	   r	   r   rg   ]  s,   



ÿÿ"ëzTestSSL.test_server_makefile1c           	      C   sâ   t ƒ d}|tddƒ}| ¡ d }|t ¡ ƒ}|  ||¡}| |¡ |j ¡  | |¡}|| j	|t
t
ddƒ}| ¡ }|  ||¡ | ¡ }|  ||¡ | ¡  |  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sjw   Y  d S r}   )rL   r   r*   r>   rt   r`   ro   r~   r<   r|   r   r   r7   rP   rC   r=   r€   r	   r	   r   rh   u  s,   



ÿÿ"êzTestSSL.test_server_makefile2c           	      C   sØ   t dd}| ¡ }| ¡ d }| j|ttd}t ¡ }|  ||¡}| ¡  t||||ƒ6}|j	 
¡  | ¡ }|  ||¡ | ¡ }|  ||¡ | ¡  |  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sew   Y  d S )Nr4   rU   ©ry   rx   )r   r   r*   r|   r   r>   rt   ÚstartÚ
CleaningUpro   r~   r7   rP   rC   r=   )	r   Úraw_listenerr   r\   rc   r[   rs   rd   rR   r	   r	   r   Útest_serverssl_makefile1Ž  s$   

"÷z TestSSL.test_serverssl_makefile1c                    s  t dd}| ¡ d ‰| j|ttd}t ¡ ‰ t ¡ f‡ ‡fdd„	}tj|d}d|_| 	¡  d }t
|||ƒN}ˆ  ¡  | ¡ }|  ||¡ | ¡ }|  ||¡ |  | ¡ d¡ |  | ¡ d	¡ | ¡  trmtrmtjf| _|  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sˆw   Y  d S )
Nr4   rU   r   c                    s\   z(|   tˆf¡ t ¡  | ¡}ˆ  ¡  | d¡ | tj	¡ | 
¡  W |  
¡  d S |  
¡  w )Ns   test_serverssl_makefile2)rY   r   rj   rk   rl   rm   ÚsendallÚshutdownr>   Ú	SHUT_RDWRrC   )r[   rD   ©ro   r\   r	   r   rY   ©  s   

z1TestSSL.test_serverssl_makefile2.<locals>.connectr^   TÚtest_serverssl_makefile2Ú )r   r*   r|   r   ra   rq   r>   rb   rr   r‚   rƒ   r~   r   r7   rP   r;   ÚreadrC   r   r-   ÚCONN_CLOSE_WAITr   r=   )r   r„   rc   rY   rs   rd   r   rR   r	   r‰   r   rŠ   £  s0   

"ðz TestSSL.test_serverssl_makefile2N)rF   rG   rH   rp   rt   rO   rS   rT   r|   re   rg   rh   r…   rŠ   r	   r	   r	   r   ri   ý   s    
ri   c                   @   sb   e Zd Zdd„ Zdd„ Zdd„ Zererdd„ Zd	d
„ Z	ndd
„ Z	dd„ ZeZ
dd„ Zdd„ ZdS )rL   c                 G   s$   g | _ |D ]}|  |¡ qd | _d S r   )Ú_objectsÚclosingÚtask)r   ÚinitÚir	   r	   r   Ú__init__Í  s   
zClosing.__init__c                 C   s   |  ¡ \}}|  |¡S r   )r<   r   )r   rc   rd   Ú_addrr	   r	   r   r<   Ó  s   
zClosing.acceptc                 C   s    |   ¡ }t|ƒdkr|d S | S )Nr4   r   )ÚobjectsÚlen©r   Úor	   r	   r   Ú	__enter__×  s   zClosing.__enter__c                 C   s   | j  t |¡¡ |S r   )rŽ   ÚappendÚweakrefÚrefr—   r	   r	   r   r   à  s   zClosing.closingc                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]
}|ƒ d ur|ƒ ‘qS r   r	   )Ú.0Úrr	   r	   r   Ú
<listcomp>ä  s    z#Closing.objects.<locals>.<listcomp>)rŽ   r   r	   r	   r   r•   ã  s   zClosing.objectsc                 C   s   t t| jƒƒS r   )ÚlistÚreversedrŽ   r   r	   r	   r   r•   ç  s   c                 C   s   | j  |¡ |S r   )rŽ   rš   r—   r	   r	   r   r   ë  s   c                 C   s$   | j d u sJ ‚|| _ | j  ¡  | j S r   )r   r‚   )r   Úthreadr	   r	   r   r`   ñ  s   
zClosing.running_taskc                 C   sŠ   z%| j d ur| j  ¡  W d | _ |  ¡ D ]}z| ¡  W q ty$   Y qw nd | _ |  ¡ D ]}z| ¡  W q- ty>   Y q-w w d| _d S r
   )r   Újoinr•   rC   Ú	ExceptionrŽ   )r   rs   ÚvÚtbr˜   r	   r	   r   Ú__exit__÷  s*   

€ÿýÿÿý
zClosing.__exit__N)rF   rG   rH   r“   r<   r™   ÚPY2ÚCPYTHONr   r•   Ú__call__r`   r§   r	   r	   r	   r   rL   Ë  s    
rL   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )rƒ   c                    s(   t t| ƒj|g|¢R Ž  || _|| _d S r   )r   rƒ   r“   r   rc   )r   r   rc   Úother_socketsr   r	   r   r“     s   
zCleaningUp.__init__c                 C   s   |   | j¡S r   )r<   rc   r   r	   r	   r   r™     s   zCleaningUp.__enter__c                 C   s&   zt  | |||¡ W d | _d S d | _w r   )rL   r§   rc   )r   rs   r¥   r¦   r	   r	   r   r§     s   zCleaningUp.__exit__)rF   rG   rH   r“   r™   r§   rJ   r	   r	   r   r   rƒ     s    rƒ   Ú__main__)0Ú
__future__r   ÚosÚgeventr   Ú	patch_allr>   rj   ra   r   r›   Úgevent.testingÚtestingr@   Úgevent.testing.paramsr   r   Úgevent.testing.socketsr   ÚpathÚdirnameÚabspathÚ__file__r£   r   ÚgetpidÚpidr:   rI   r©   r¨   Úintr#   Úlongr   r   r-   ÚImportErrorÚTestCaser   ÚskipOnAppVeyorrK   ri   ÚobjectrL   rƒ   rF   Úmainr	   r	   r	   r   Ú<module>   sR    ÿfo NIÿ