o
    ‡eû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	   úOD:\Projects\ConvertPro\env\Lib\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)Z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ÚpsutilZCONN_LISTENZ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   r0   Úassert_open)r   r-   Úrestr   r.   r	   r	   r   r4   _   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   r1   )
r"   r#   r'   ÚPY3ÚassertEqualr   r   r)   ÚacceptÚassert_closed)r   r-   r5   r	   r	   r   r:   n   s   
"ÿzTest.assert_closedc                 C   sR   t   ¡ }z| t¡ tstjr| d¡ |  || ¡ ¡ W |S    | 	¡  d }‚ )Nr1   )
ÚsocketÚbindr   r   Ú	greentestÚLINUXÚlistenr4   r   Úclose)r   Úsr	   r	   r   Úmake_open_socket}   s   


üzTest.make_open_socket)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚPYPYr=   r>   r2   r'   r0   r4   r:   rB   Ú__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   )ÚClosingrB   r   r@   r:   ©r   ÚcloserrA   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   )rI   rB   r   Úmakefiler4   r@   r7   r:   ©r   rK   rA   r   Úfr	   r	   r   Útest_makefile1—   s   


"ðzTestSocket.test_makefile1c                 C   s–   t ƒ >}||  ¡ ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  |¡ |  ||¡ | ¡  |  ||¡ | ¡  |  ||¡ W d   ƒ d S 1 sDw   Y  d S r   )rI   rB   r   r4   rM   r@   r:   rN   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 )Nr1   ©Úbacklogc                      ó   ˆ   tˆf¡ d S r   ©Úconnectr   r	   ©Ú	connectorÚportr	   r   rV   ¿   ó   z.TestSocket.test_server_simple.<locals>.connect©Útarget)rI   r   r)   r;   Úrunning_taskÚ	threadingÚThreadr9   r   r4   r@   r:   )r   rK   ÚlistenerrV   Úclient_socketr   r	   rW   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 )Nr1   rR   c                      rT   r   rU   r	   rW   r	   r   rV   Ñ   rZ   z1TestSocket.test_server_makefile1.<locals>.connectr[   )rI   r   r)   r;   r]   r^   r_   r9   r   rM   r4   r@   r7   r:   ©r   rK   r`   rV   ra   r   rO   r	   rW   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 )Nr1   rR   c                      rT   r   rU   r	   rW   r	   r   rV   í   rZ   z1TestSocket.test_server_makefile2.<locals>.connectr[   )rI   r   r)   r;   r]   r^   r_   r9   r   rM   r4   r@   r:   rc   r	   rW   r   Útest_server_makefile2æ   s   
"íz TestSocket.test_server_makefile2N)	rC   rD   rE   rL   rP   rQ   rb   rd   re   r	   r	   r	   r   rH      s    rH   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   )	rV   r   ÚsslÚ
SSLContextÚwrap_socketÚwaitr;   Úerrorr@   )r   rX   rY   Úaccepted_eventr/   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)r^   ÚEventr_   rm   Údaemonrl   )r   rX   rY   rl   Ú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   )	rI   rB   r   rg   rh   ri   r4   r@   r:   rJ   r	   r	   r   rL     s   "ùzTestSSL.test_simple_closec                 C   s¦   t ƒ F}||  ¡ ƒ}|t ¡  |¡ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  ||¡ | ¡  |  ||¡ | ¡  | ¡  |  	||¡ W d   ƒ d S 1 sLw   Y  d S r   )
rI   rB   rg   rh   ri   r   r4   rM   r@   r:   )r   rK   Zraw_srA   r   rO   r	   r	   r   rP   %  s   "ôzTestSSL.test_makefile1c                 C   s¦   t ƒ F}||  ¡ ƒ}| ¡ }|t ¡  |¡ƒ}| ¡ }|  ||¡ || ¡ ƒ}|  ||¡ | ¡  |  ||¡ | ¡  |  	||¡ W d   ƒ d S 1 sLw   Y  d S r   )
rI   rB   r   rg   rh   ri   r4   rM   r@   r:   rN   r	   r	   r   rQ   4  s   "ózTestSSL.test_makefile2F©Úserver_sidec                C   s$   t  ¡ }|j||d |j||dS )N)ÚcertfileÚkeyfilerr   )rg   rh   Úload_cert_chainri   )r   r-   ru   rt   rs   Ú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 ©Nr1   rR   T)ru   rt   rs   )rI   r   r)   r;   rq   r]   r9   rl   Úsetrx   ÚCERTFILEr   r4   r@   r:   )r   rK   r`   rY   rX   rp   ra   r   r	   r	   r   rb   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 ry   )rI   r   r)   r;   rq   r]   r9   rl   rz   rx   r{   r   r4   rM   r@   r:   ©	r   rK   r`   rY   rX   rp   ra   r   rO   r	   r	   r   rd   ]  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 ry   )rI   r   r)   r;   rq   r]   rl   rz   r9   rx   r{   r   r4   rM   r@   r:   r|   r	   r	   r   re   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 )Nr1   rR   ©ru   rt   )r   r   r)   rx   r{   r;   rq   ÚstartÚ
CleaningUprl   rz   r4   rM   r@   r:   )	r   Úraw_listenerr   rY   r`   rX   rp   ra   rO   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 )
Nr1   rR   r}   c                    s\   z(|   tˆf¡ t ¡  | ¡}ˆ  ¡  | d¡ | tj	¡ | 
¡  W |  
¡  d S |  
¡  w )Ns   test_serverssl_makefile2)rV   r   rg   rh   ri   rj   ÚsendallÚshutdownr;   Ú	SHUT_RDWRr@   )rX   rA   ©rl   rY   r	   r   rV   ©  s   

z1TestSSL.test_serverssl_makefile2.<locals>.connectr[   TÚtest_serverssl_makefile2Ú )r   r)   rx   r{   r^   rn   r;   r_   ro   r~   r   rz   r   r4   rM   r8   Úreadr@   r   r,   ZCONN_CLOSE_WAITr   r:   )r   r€   r`   rV   rp   ra   r   rO   r	   r…   r   r†   £  s0   

"ðz TestSSL.test_serverssl_makefile2N)rC   rD   rE   rm   rq   rL   rP   rQ   rx   rb   rd   re   r   r†   r	   r	   r	   r   rf   ý   s    
rf   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 )rI   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   )r9   rŠ   )r   r`   ra   Z_addrr	   r	   r   r9   Ó  s   
zClosing.acceptc                 C   s    |   ¡ }t|ƒdkr|d S | S )Nr1   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   r@   Ú	Exceptionr‰   )r   rp   ÚvÚtbr’   r	   r	   r   Ú__exit__÷  s*   

€ÿýÿÿý
zClosing.__exit__N)rC   rD   rE   rŽ   r9   r“   ÚPY2ÚCPYTHONrŠ   r   Ú__call__r]   r¡   r	   r	   r	   r   rI   Ë  s    
rI   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‹   r`   )r   r‹   r`   Zother_socketsr   r	   r   rŽ     s   
zCleaningUp.__init__c                 C   s   |   | j¡S r   )r9   r`   r   r	   r	   r   r“     s   zCleaningUp.__enter__c                 C   s&   zt  | |||¡ W d | _d S d | _w r   )rI   r¡   r`   )r   rp   rŸ   r    r	   r	   r   r¡     s   zCleaningUp.__exit__)rC   rD   rE   rŽ   r“   r¡   rG   r	   r	   r   r   r     s    r   Ú__main__)0Ú
__future__r   ÚosZgeventr   Z	patch_allr;   rg   r^   r   r•   Zgevent.testingÚtestingr=   Zgevent.testing.paramsr   r   Zgevent.testing.socketsr   ÚpathÚdirnameÚabspathÚ__file__r   r{   ÚgetpidÚpidr7   rF   r£   r¢   Úintr#   Úlongr   r   r,   ÚImportErrorZTestCaser   ZskipOnAppVeyorrH   rf   ÚobjectrI   r   rC   Úmainr	   r	   r	   r   Ú<module>   sR    ÿfo NIÿ