o
    tPfK                     @   s   d dl mZ d dl m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
 d dl	mZ dd	 Zd
d ZG dd dejZG dd dejZedG dd dejZedkr`e  dS dS )    )print_function)absolute_importN)socket)backdoor)DEFAULT_BIND_ADDR_TUPLE)DEFAULT_CONNECTc                 C   sd   d}t |ts	J ||s&| d}|std||f ||7 }||rt |tr-|S |dS )N       z)Connection ended before %r. Data read:
%rzutf-8)
isinstancebytesendswithrecvAssertionErrorstrdecode)connpostfixreadresult r   \/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__backdoor.py
read_until   s   


r   c                 C   s4   |   }| W  d    S 1 sw   Y  d S N)makefilereadline)r   fr   r   r   r      s   
$r   c                   @   s   e Zd ZdZdS )WorkerGreenlet   N)__name__
__module____qualname__spawning_stack_limitr   r   r   r   r      s    r   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )SocketWithBannerbannerc                    s    d | _ tt| j|i | d S r   )r$   superr"   __init__)selfargskwargs	__class__r   r   r&   #   s   zSocketWithBanner.__init__c                 C   s   t j | S r   )r   	__enter__r'   r   r   r   r,   '   s   zSocketWithBanner.__enter__c                 C   s   t j | |||S r   )r   __exit__)r'   tvtbr   r   r   r.   *   s   zSocketWithBanner.__exit__)r   r   r    	__slots__r&   r,   r.   __classcell__r   r   r*   r   r"       s
    r"   a  With the update to libev 4.31 and potentially closing sockets in the background, alternate tests started hanging on appveyor. Something like .E.E.E. See https://ci.appveyor.com/project/denik/gevent/build/job/n9fynkoyt2bvk8b5 It's not clear why, but presumably a socket isn't getting closed and a watcher is tied to the wrong file descriptor. I haven't been able to reproduce. If it were a systemic problem I'd expect to see more failures, so it is probably specific to resource management in this test.c                       s   e Zd ZdZ fddZdd Zdd Zdd	 ZdddZe	
de	ddd Zdd Zdd Zdd Zdd Zdd Z  ZS )Test
   c                    s   t   tt|   d S r   )geventsleepr%   r4   tearDownr-   r*   r   r   r8   ;   s   zTest.tearDownc                 O   s$   t jtg|R i |}|  |S r   )r   BackdoorServerr   start)r'   r(   r)   serverr   r   r   _make_and_start_server?   s   zTest._make_and_start_serverc                 C   s@   t  }|t|jf z| |}W n   |   ||_|S r   )r"   connectr   server_port_wait_for_promptcloser$   )r'   r;   r   r$   r   r   r   _create_connectionD   s   zTest._create_connectionc                 C   s
   t |dS )N   >>> )r   )r'   r   r   r   r   r?   P   s   
zTest._wait_for_prompt	   quit()
)c                 C   s*   | | t|}| |d |  d S )N )sendallr   assertEqualr@   )r'   r   cmdliner   r   r   _closeS   s   
zTest._closezcSometimes fails to get the right answers; https://travis-ci.org/github/gevent/gevent/jobs/692184822z9segfaults; See https://github.com/gevent/gevent/pull/1156c                    s     ?fdd  fddtdD }ztj|dd}W tj|dd ntj|dd w t|t|| W d    d S 1 sFw   Y  d S )	Nc                     sb     "} | d t| } | dt|  |  W d    d S 1 s*w   Y  d S )Ns   2+2
4)rA   rE   r   rF   stripreprrI   )r   rH   )r'   r;   r   r   r=   b   s   
"z Test.test_multi.<locals>.connectc                    s   g | ]}t  qS r   )r   spawn).0_)r=   r   r   
<listcomp>i   s    z#Test.test_multi.<locals>.<listcomp>r5   T)raise_errorF)r<   ranger6   joinallrF   len)r'   jobsdoner   )r=   r'   r;   r   
test_multiY   s   
 "zTest.test_multic              	   C   sr   |   +}| |}| | W d    n1 sw   Y  W d    d S W d    d S 1 s2w   Y  d S r   r<   rA   rI   r'   r;   r   r   r   r   	test_quitq   s   
"zTest.test_quitc              	   C   st   |   ,}| |}| |d W d    n1 sw   Y  W d    d S W d    d S 1 s3w   Y  d S )Ns   import sys; sys.exit(0)
rX   rY   r   r   r   test_sys_exitv   s   
"zTest.test_sys_exitc              	   C   s   d}| j |d%}| |}|j}| | W d    n1 s!w   Y  W d    n1 s0w   Y  | |d t| || d S )NzWelcome stranger!r#   )r<   rA   r$   rI   rF   rT   )r'   expected_bannerr;   r   r$   r   r   r   test_banner{   s   zTest.test_bannerc              	   C   s   |   ,}| |}|d t|d}| | W d    n1 s$w   Y  W d    n1 s3w   Y  | jt|dd| d d S )Ns   locals()["__builtins__"]
rB   i,  zlocals() unusable: %s...)msg)r<   rA   rE   r   rI   
assertLessrT   )r'   r;   r   responser   r   r   test_builtins   s   



zTest.test_builtinsc              	      s   ddl mm   fdd}| jd|id,}| |}|d | |}| | W d    n1 s7w   Y  W d    n1 sFw   Y  |dd	}| 	d
| d S )Nr   )QueueEmptyc                     sZ    } t d z	| jddd W n  y   t d Y nw t d td t d d S )Nzswitching out, then throwing inTg?)blocktimeoutz	Got Emptyzswitching outzswitched in)printgetr6   r7   )qrc   rb   r   r   bad   s   
z!Test.test_switch_exc.<locals>.badrj   )localss   bad()
z

zHswitching out, then throwing in
Got Empty
switching out
switched in
>>> )
gevent.queuerb   rc   r<   rA   rE   r?   rI   replacerF   )r'   rj   r;   r   r`   r   ri   r   test_switch_exc   s   

zTest.test_switch_exc)rC   )r   r   r    __timeout__r8   r<   rA   r?   rI   	greentestskipOnMacOnCIskipOnLibuvOnTravisOnCPython27rW   rZ   r[   r]   ra   ro   r3   r   r   r*   r   r4   .   s&    

r4   __main__)
__future__r   r   r6   r   r   gevent.testingtestingrq   gevent.testing.paramsr   r   r   r   Greenletr   r"   skipOnAppVeyorTestCaser4   r   mainr   r   r   r   <module>   s&    	s