
    i                        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	 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j         eed          d           G d de                      Zedk    r ej                     dS dS )    N)backdoor)socketDEFAULT_BIND_ADDR_TUPLE)DEFAULT_CONNECTc                 B   d}t          |t                    sJ |                    |          sF|                     d          }|st	          d|d|          ||z  }|                    |          Ft          |t
                    r|n|                    d          S )N       zConnection ended before z. Data read:
zutf-8)
isinstancebytesendswithrecvAssertionErrorstrdecode)connpostfixreadresults       F/usr/local/lib/python3.11/dist-packages/gevent/tests/test__backdoor.py
read_untilr      s    Dgu%%%%%mmG$$ 1 	a .QXQXQXZ^Z^!_```	 mmG$$  dC((B44dkk'.B.BBr	   c                     |                                  5 }|                                cd d d            S # 1 swxY w Y   d S N)makefilereadline)r   fs     r   r   r      s|    	 Azz||                 s   6::c                       e Zd ZdZdS )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                 V    d | _          t          t          |           j        |i | d S r   )r(   superr&   __init__)selfargskwargs	__class__s      r   r+   zSocketWithBanner.__init__#   s3    .%%.??????r	   c                 @    t           j                             |           S r   )r   	__enter__r,   s    r   r1   zSocketWithBanner.__enter__'   s    }&&t,,,r	   c                 F    t           j                             | |||          S r   )r   __exit__)r,   tvtbs       r   r4   zSocketWithBanner.__exit__*   s    }%%dAq"555r	   )r    r!   r"   	__slots__r+   r1   r4   __classcell__r/   s   @r   r&   r&       s`        I@ @ @ @ @- - -6 6 6 6 6 6 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 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                 |    t          j                     t          t          |                                            d S r   )geventsleepr*   r<   tearDownr,   r/   s    r   rA   zTest.tearDown;   s0    dD""$$$$$r	   c                     t           S r   r   r2   s    r   _server_listen_argumentzTest._server_listen_argument?   s    &&r	   c                 |    t          j        |                                 g|R i |}|                                 |S r   )r   BackdoorServerrD   start)r,   r-   r.   servers       r   _make_and_start_serverzTest._make_and_start_serverB   sA    ()E)E)G)GY$YYYRXYYr	   c                      t           |j        ffS r   )r   server_portr,   rH   s     r   _connection_argumentszTest._connection_argumentsG   s     &"4577r	   c                     dS )Nr$   r$   r2   s    r   _socket_argumentszTest._socket_argumentsJ   s    rr	   c                     t          |                                  }	  |j        |                     |            |                     |          }n#  |                                  xY w||_        |S r   )r&   rO   connectrM   _wait_for_promptcloser(   )r,   rH   r   r(   s       r   _create_connectionzTest._create_connectionM   st    !7!7!9!9:	DL$44V<<==**400FF	JJLLLs   2A A'c                 "    t          |d          S )N   >>> )r   )r,   r   s     r   rR   zTest._wait_for_promptZ   s    $(((r	   	   quit()
)c                     |                     |           t          |          }|                     |d           |                                 d S )N )sendallr   assertEqualrS   )r,   r   cmdlines       r   _closezTest._close]   sF    S~~r"""

r	   zcSometimes fails to get the right answers; https://travis-ci.org/github/gevent/gevent/jobs/692184822c                                                       5  fdfdt          d          D             }	 t          j        |d          }t          j        |d           n# t          j        |d           w xY w                     t          |          t          |          |           d d d            d S # 1 swxY w Y   d S )Nc                  B                                  5 } |                     d           t          |           }                    |                                dt          |                                         |            d d d            d S # 1 swxY w Y   d S )Ns   2+2
4)rT   rZ   r   r[   stripreprr^   )r   r]   r,   rH   s     r   rQ   z Test.test_multi.<locals>.connecti   s    ,,V44 &LL,,,#D>>D$$TZZ\\3T

CCCKK%%%	& & & & & & & & & & & & & & & & & &s   A0BBBc                 D    g | ]}t                                         S r$   )r   spawn).0_rQ   s     r   
<listcomp>z#Test.test_multi.<locals>.<listcomp>p   s'    EEEaN((11EEEr	   r=   T)raise_errorF)rI   ranger?   joinallr[   len)r,   jobsdonerQ   rH   s   `  @@r   
test_multizTest.test_multic   s*   
 ((** 	9f& & & & & & FEEE599EEED8~d===t77777t77777SYYD		4888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s(   "CA(C(B  4CCCc                     |                                  5 }|                     |          5 }|                     |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   rI   rT   r^   r,   rH   r   s      r   	test_quitzTest.test_quitx   s    ((** 	"f((00 "DD!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s4   A%AA%A	A%A	A%%A),A)c                     |                                  5 }|                     |          5 }|                     |d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Ns   import sys; sys.exit(0)
rq   rr   s      r   test_sys_exitzTest.test_sys_exit}   s   ((** 	Bf((00 BDD"@AAAB B B B B B B B B B B B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs4   A&AA&A	A&A	A&&A*-A*c                 P   d}|                      |          5 }|                     |          5 }|j        }|                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |d t          |                   ||           d S )NzWelcome stranger!r'   )rI   rT   r(   r^   r[   rl   )r,   expected_bannerrH   r   r(   s        r   test_bannerzTest.test_banner   s"   -(((@@ 	"F((00 "DD!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
 	 5_!5!5 56PPPPPs4   A/AA/A	A/A	 A//A36A3c                 |   |                                  5 }|                     |          5 }|                    d           t          |d          }|                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          |          dd|z             d S )Ns   locals()["__builtins__"]
rV   i,  zlocals() unusable: %s...)msg)rI   rT   rZ   r   r^   
assertLessrl   )r,   rH   r   responses       r   test_builtinszTest.test_builtins   s:   ((** 	"f((00 "D<===%dG44D!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	MM3*X5 	 	7 	7 	7 	7 	7s4   B	;A2&B	2A6	6B	9A6	:B		BBc                    ddl m ddl m fd}|                     d|i          5 }|                     |          5 }|                    d           |                     |          }|                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    dd	          }| 	                    d
|           d S )Nr   )Empty)Queuec                                  } t          d           	 |                     dd           n# $ r t          d           Y nw xY wt          d           t          j        d           t          d           d S )Nzswitching out, then throwing inTg?)blocktimeoutz	Got Emptyzswitching outzswitched in)printgetr?   r@   )qr   r   s    r   badz!Test.test_switch_exc.<locals>.bad   s    A3444#D#.... # # #k"""""#/"""L-     s   4 A
Ar   )localss   bad()
z

zHswitching out, then throwing in
Got Empty
switching out
switched in
>>> )
gevent.queuer   r   rI   rT   rZ   rR   r^   replacer[   )r,   r   rH   r   r|   r   r   s        @@r   test_switch_exczTest.test_switch_exc   s   &&&&&&&&&&&&		! 		! 		! 		! 		! 		! (((== 	"((00 "D\***0066D!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ##FD11Z	 	 	 	 	s6   B&A BB&B	B&B	B&&B*-B*)rW   )r    r!   r"   __timeout__rA   rD   rI   rM   rO   rT   rR   r^   	greentestskipOnMacOnCIro   rs   ru   rx   r}   r   r9   r:   s   @r   r<   r<   .   s1        K% % % % %' ' '  
8 8 8    ) ) )    Y	D 9 9	 9"" " "
B B B
Q Q Q	7 	7 	7      r	   r<   AF_UNIXzNeeds AF_UNIX supportc                   :     e Zd Z fdZ fdZd Zd Zd Z xZS )TestUnixSocketc                 x    t                                                       t          j                    | _        d S r   )r*   setUptempfilemktempunix_socket_pathrB   s    r   r   zTestUnixSocket.setUp   s*     ( 1 1r	   c                     t           j                            | j                  rt          j        | j                   t                                                       d S r   )ospathexistsr   unlinkr*   rA   rB   s    r   rA   zTestUnixSocket.tearDown   sK    7>>$/00 	-Id+,,,r	   c                 N   t          j         t           j        t           j                  }	 |                    | j                   |                    t           j                   n@# t          $ r3}|                                 t          d| j         d|           d }~ww xY w|S )NzFailed to bind Unix socket at z: )
r   r   SOCK_STREAMbindr   listen	SOMAXCONN	ExceptionrS   RuntimeError)r,   listenerexs      r   rD   z&TestUnixSocket._server_listen_argument   s    =1CDD	_MM$/000OOF,---- 	_ 	_ 	_NN]@U]]Y[]]^^^	_ s   9A% %
B"/.BB"c                     | j         fS r   )r   rL   s     r   rM   z$TestUnixSocket._connection_arguments   s    %''r	   c                 2    t           j        t           j        fS r   )r   r   r   r2   s    r   rO   z TestUnixSocket._socket_arguments   s     233r	   )	r    r!   r"   r   rA   rD   rM   rO   r9   r:   s   @r   r   r      s~        
2 2 2 2 2
    	 	 	( ( (4 4 4 4 4 4 4r	   r   __main__)r   r   r?   gevent.testingtestingr   r   r   gevent.testing.paramsr   r   r   r   Greenletr   r&   skipOnAppVeyorTestCaser<   
skipUnlesshasattrr   r    mainr$   r	   r   <module>r      s   				   " " " " " "             9 9 9 9 9 9 1 1 1 1 1 1
C 
C 
C  
    V_   6 6 6 6 6v} 6 6 6  x x x x x9 x x xt GFI 4 4 4 4 4T 4 4	 4: zIN r	   