
    <|h                     B   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 Zd	 Z G d
 dej                        Z G d dej                        Z ej"                  d       G d dej$                               Zedk(  r ej*                          yy)    )print_function)absolute_importN)socket)backdoor)DEFAULT_BIND_ADDR_TUPLE)DEFAULT_CONNECTc                    d}t        |t              sJ |j                  |      s;| j                  d      }|st	        d|d|      ||z  }|j                  |      s;t        |t
              r|S |j                  d      S )N       zConnection ended before z. Data read:
zutf-8)
isinstancebytesendswithrecvAssertionErrorstrdecode)connpostfixreadresults       Z/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__backdoor.py
read_untilr      s{    Dgu%%%mmG$1 QXZ^!_``	 mmG$ dC(4Bdkk'.BBr
   c                 n    | j                         5 }|j                         cd d d        S # 1 sw Y   y xY wN)makefilereadline)r   fs     r   r   r      s+    	 Azz|  s   +4c                       e Zd ZdZy)WorkerGreenlet   N)__name__
__module____qualname__spawning_stack_limit r
   r   r   r      s    r
   r   c                   .     e Zd ZdZ fdZd Zd Z xZS )SocketWithBannerbannerc                 :    d | _         t        t        |   |i | y r   )r)   superr'   __init__)selfargskwargs	__class__s      r   r,   zSocketWithBanner.__init__#   s    .??r
   c                 @    t         j                   j                  |       S r   )r   	__enter__)r-   s    r   r2   zSocketWithBanner.__enter__'   s    }}&&t,,r
   c                 F    t         j                   j                  | |||      S r   )r   __exit__)r-   tvtbs       r   r4   zSocketWithBanner.__exit__*   s    }}%%dAq"55r
   )r!   r"   r#   	__slots__r,   r2   r4   __classcell__r0   s   @r   r'   r'       s    I@-6r
   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                        e Zd ZdZ fdZd Zd Zd ZddZ e	j                  d      d        Zd	 Zd
 Zd Zd Zd Z xZS )Test
   c                 R    t        j                          t        t        |           y r   )geventsleepr+   r<   tearDown)r-   r0   s    r   rA   zTest.tearDown;   s    dD"$r
   c                 `    t        j                  t        g|i |}|j                          |S r   )r   BackdoorServerr   start)r-   r.   r/   servers       r   _make_and_start_serverzTest._make_and_start_server?   s+    (()@R4R6Rr
   c                     t               }|j                  t        |j                  f       	 | j	                  |      }||_        |S #  |j                           xY wr   )r'   connectr   server_port_wait_for_promptcloser)   )r-   rE   r   r)   s       r   _create_connectionzTest._create_connectionD   sW    !ov'9'9:;	**40F
 	JJLs   A Ac                     t        |d      S )N   >>> )r   )r-   r   s     r   rJ   zTest._wait_for_promptP   s    $((r
   c                     |j                  |       t        |      }| j                  |d       |j                          y )N )sendallr   assertEqualrK   )r-   r   cmdlines       r   _closezTest._closeS   s0    S~r"

r
   zcSometimes fails to get the right answers; https://travis-ci.org/github/gevent/gevent/jobs/692184822c                      j                         5  fd}t        d      D cg c]  }t        j                  |       }}	 t	        j
                  |d      }t	        j
                  |d        j                  t        |      t        |      |       d d d        y c c}w # t	        j
                  |d       w xY w# 1 sw Y   y xY w)Nc                      j                        5 } | j                  d       t        |       }j                  |j	                         dt        |             j                  |        d d d        y # 1 sw Y   y xY w)Ns   2+2
4)rL   rQ   r   rR   stripreprrU   )r   rT   r-   rE   s     r   rH   z Test.test_multi.<locals>.connect_   se    ,,V4 &LL,#D>D$$TZZ\3T
CKK%	& & &s   AA44A=r=   T)raise_errorF)rF   ranger   spawnr?   joinallrR   len)r-   rH   _jobsdonerE   s   `    @r   
test_multizTest.test_multiY   s    
 ((* 	9f& <A9EaN((1EDE8~~d=t7SYD	48	9 	9 F t7	9 	9s4   CB"CB'<C"C'C  CCc                     | j                         5 }| j                  |      5 }| j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   rF   rL   rU   r-   rE   r   s      r   	test_quitzTest.test_quitn   s[    ((* 	"f((0 "DD!"	" 	"" "	" 	"s!   AAAA	AAc                     | j                         5 }| j                  |      5 }| j                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns   import sys; sys.exit(0)
re   rf   s      r   test_sys_exitzTest.test_sys_exits   sg    ((* 	Bf((0 BDD"@AB	B 	BB B	B 	Bs!   AAAA	AAc                    d}| j                  |      5 }| j                  |      5 }|j                  }| j                  |       d d d        d d d        | j	                  d t        |       ||       y # 1 sw Y   1xY w# 1 sw Y   5xY w)NzWelcome stranger!r(   )rF   rL   r)   rU   rR   r_   )r-   expected_bannerrE   r   r)   s        r   test_bannerzTest.test_bannerx   s    -(((@ 	"F((0 "DD!"	"
 	 5_!56P	" "	" 	"s"   BA5B5A>	:BB
c                 6   | j                         5 }| j                  |      5 }|j                  d       t        |d      }| j	                  |       d d d        d d d        | j                  t              dd|z         y # 1 sw Y   2xY w# 1 sw Y   6xY w)Ns   locals()["__builtins__"]
rN   i,  zlocals() unusable: %s...)msg)rF   rL   rQ   r   rU   
assertLessr_   )r-   rE   r   responses       r   test_builtinszTest.test_builtins   s    ((* 	"f((0 "D<=%dG4D!"	" 	M3*X5 	 	7" "	" 	"s"   B/BBB	BBc                 p   ddl mm fd}| j                  d|i      5 }| j	                  |      5 }|j                  d       | j                  |      }| j                  |       d d d        d d d        j                  dd      }| j                  d	|       y # 1 sw Y   6xY w# 1 sw Y   :xY w)
Nr   )QueueEmptyc                              } t        d       	 | j                  dd       t        d       t        j                  d       t        d       y # $ r t        d       Y >w xY w)Nzswitching out, then throwing inTg?)blocktimeoutz	Got Emptyzswitching outzswitched in)printgetr?   r@   )qrt   rs   s    r   badz!Test.test_switch_exc.<locals>.bad   s_    A34#D#. /"LL- 	  #k"#s   A A'&A'r{   )localss   bad()
z

zHswitching out, then throwing in
Got Empty
switching out
switched in
>>> )
gevent.queuers   rt   rF   rL   rQ   rJ   rU   replacerR   )r-   r{   rE   r   rp   rt   rs   s        @@r   test_switch_exczTest.test_switch_exc   s    -		! (((= 	"((0 "D\*006D!"	" ##FD1Z	" "	" 	"s"   B,4B +B, B)	%B,,B5)s	   quit()
))r!   r"   r#   __timeout__rA   rF   rL   rJ   rU   	greentestskipOnMacOnCIrc   rg   ri   rl   rq   r   r9   r:   s   @r   r<   r<   .   se     K%

) Y	D9	9""
B
Q	7r
   r<   __main__)
__future__r   r   r?   r   r   gevent.testingtestingr   gevent.testing.paramsr   r   r   r   Greenletr   r'   skipOnAppVeyorTestCaser<   r!   mainr%   r
   r   <module>r      s    % &    " 9 1
C
V__ 6v}} 6 m9 mm` zINN r
   