o
    U˟iPL                     @   sz  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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re.  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	   g/var/www/apps/myagent/mysuperagent/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   D   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_closedJ   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_openS   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 )Nr   r4   )
r"   r#   r(   PY3assertEqualr   r   r*   acceptassert_closed)r   r0   r8   r	   r	   r   r=   l   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   3  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_socketC  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   H  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   t  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                    s0  t dd}| d | j|ttd}t  t t f fdd	}tj|d}d|_|	  d }t
|||R}   | }| || | }| || | | d   | | d	 |  trvtrvtjf| _| || |  | || W d    d S 1 sw   Y  d S )
Nr4   rU   r   c                    sd   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\   
read_eventr	   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     s4   

"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__)/
__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#   r   r   r-   ImportErrorTestCaser   skipOnAppVeyorrK   ri   objectrL   r   rF   mainr	   r	   r	   r   <module>   sL    fo WI