
    iK                        d dl mZmZmZ d dlZd dlmZ d dlZd dlmZ d dlmZm	Z	 d dlm
Z d dlmZ d dlmZ d d	lmZ  G d
 dej                  Z ej         eed          d           G d de                      Z ej         eed          d           G d dej                              Zedk    r ej                     dS dS )    )print_functionabsolute_importdivisionNpipe)os)Greenletjoinall)testing)mock)six)skipOnLibuvOnPyPyOnWinc                       e Zd Zej        Zd Z eej	                  Z
 eej                  Z ed          d             Zej        d         dk     rd Zej        dd         d	k    rd
 ZdS dS )	TestOS_tpc                     t                      S Nr   selfs    @/usr/local/lib/python3.11/dist-packages/gevent/tests/test__os.pyr   zTestOS_tp.pipe   s    vv    zSometimes times outc                    	
                                   \  d
d} ||          dgdg		
 fd}
 fd}t          |          }|                                 t          |          }|                    d           t	          ||g                                d         
                                d         	d                    d S )Ni@B s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   c                      d         k    rSd         z
  } dxx                              d t          | d                             z  cc<   d         k    Qd S d S Nr   i   )writemin)	bytesleftbufbyteswrittennbytesr   ws    r   producez/TestOS_tp._test_if_pipe_blocks.<locals>.produce&   sv    q/V++"\!_4	Q4::a5Jc)T6J6J5J1K#L#LL q/V++++++r   c                      d         k    rXd         z
  } dxx         t                              t          | d                              z  cc<   d         k    Vd S d S r   )lenreadr   )r   	bytesreadr   rr   s    r   consumez/TestOS_tp._test_if_pipe_blocks.<locals>.consume+   ss    A,&(("Yq\1	!DIIaY1E1E$F$F G GG A,&((((((r      )r   r	   startstart_laterr
   assertEqual)r   buffer_classblockr!   r'   producerconsumerr   r%   r   r   r&   r    s   `      @@@@@@r   _test_if_pipe_blockszTestOS_tp._test_if_pipe_blocks   s:   yy{{1l5!!C	s	M 	M 	M 	M 	M 	M 	M 	M 	M
	H 	H 	H 	H 	H 	H 	H 	H
 G$$G$$Q 	8$%%%1v...1|A77777r   r      c                 N    |                      t          j        j                   d S r   )r0   r   builtinsbufferr   s    r   test_if_pipe_blocks_bufferz$TestOS_tp.test_if_pipe_blocks_buffer=   s!    %%cl&9:::::r   N   )r6      c                 N    |                      t          j        j                   d S r   )r0   r   r3   
memoryviewr   s    r   test_if_pipe_blocks_memoryviewz(TestOS_tp.test_if_pipe_blocks_memoryviewB   s!    %%cl&=>>>>>r   )__name__
__module____qualname__	greentestLARGE_TIMEOUT__timeout__r   staticmethodr   tp_readr$   tp_writer   r   r0   sysversion_infor5   r:    r   r   r   r      s        )K   <
##DL%%E1228 8 328> Q	; 	; 	; v%%	? 	? 	? 	? 	? &%r   r   make_nonblockingzOnly on POSIXc                       e Zd Zd Zd Z fdZd Zd Zd Zd Z	 e
j        d           e
j        d	          d
                         Z e
j        d           e
j        d	          d                         Z e
j        d           e
j        d          d                         Z e
j        d           e
j        d          d                         Z xZS )	TestOS_nbc                 ,    t          j        ||          S r   )r   nb_readr   fdcounts      r   r$   zTestOS_nb.readJ   s    z"e$$$r   c                 ,    t          j        ||          S r   )r   nb_writerL   s      r   r   zTestOS_nb.writeM   s    {2u%%%r   c                     t          t          |                                           \  }}t          j        |           t          j        |           ||fS r   )superrI   r   r   rG   )r   r&   r    	__class__s      r   r   zTestOS_nb.pipeP   sM    Y%%**,,1
A
A!tr   c                 B    dd l }t                      }|j        |_         |S )Nr   )errnoOSErrorEINTR)r   rU   ignored_oserrors      r   _make_ignored_oserrorzTestOS_nb._make_ignored_oserrorV   s$    !)) %r   c                     |                                  |j        }|j        j        }|                     ||           |j        }|j                                          d S r   )assert_called_once_withreturn_valueloopioclose)r   mock_get_hubrM   eventhubr^   s         r   _check_hub_event_closedz!TestOS_nb._check_hub_event_closed]   s\    ,,...'X[
""2u---++-----r   c                     |                                  dg|_        d} |||          }|                     |d           |                     |||           d S )N*   d   )rY   side_effectr+   rc   )r   nb_funcnb_argmock_ior`   ra   rM   results           r   _test_event_closed_on_normal_ioz)TestOS_nb._test_event_closed_on_normal_iof   se    #99;;R@V$$$$$$$\2u=====r   c                    |                                  t                      g|_        d}|                     t                    5   |||           d d d            n# 1 swxY w Y   |                     |||           d S )Nrf   )rY   
ValueErrorrg   assertRaisesrc   )r   rh   ri   rj   r`   ra   rM   s          r   _test_event_closed_on_io_errorz(TestOS_nb._test_event_closed_on_io_errorp   s    #99;;Z\\Jz** 	  	 GB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	$$\2u=====s   AA!$A!zgevent.os.get_hubzgevent.os._writec                 L    |                      t          j        d||d           d S N   bufr6   )rl   r   rP   r   
mock_writer`   s      r   test_event_closed_on_writez$TestOS_nb.test_event_closed_on_write{   s4     	,,R[&-7-.	0 	0 	0 	0 	0r   c                 L    |                      t          j        d||d           d S rr   )rp   r   rP   rt   s      r    test_event_closed_on_write_errorz*TestOS_nb.test_event_closed_on_write_error   s4     	++BK,6,-	/ 	/ 	/ 	/ 	/r   zgevent.os._readc                 L    |                      t          j        d||d           d S Nrs   r(   )rl   r   rK   r   	mock_readr`   s      r   test_event_closed_on_readz#TestOS_nb.test_event_closed_on_read   s4     	,,RZ-6-.	0 	0 	0 	0 	0r   c                 L    |                      t          j        d||d           d S rz   )rp   r   rK   r{   s      r   test_event_closed_on_read_errorz)TestOS_nb.test_event_closed_on_read_error   s4     	++BJ,5|,-	/ 	/ 	/ 	/ 	/r   )r;   r<   r=   r$   r   r   rY   rc   rl   rp   r   patchrv   rx   r}   r   __classcell__)rS   s   @r   rI   rI   F   s       % % %& & &      . . .> > >	> 	> 	> TZ#$$TZ"##0 0 $# %$0
 TZ#$$TZ"##/ / $# %$/
 TZ#$$TZ!""0 0 #" %$0
 TZ#$$TZ!""/ / #" %$/ / / / /r   rI   fork_and_watchc                   .    e Zd Zej        Zd Zd Zd ZdS )TestForkAndWatchc                     t          j                    }|r+t          j        dd           t          j        d           d S t	          j        d           t          j        d           d S )Nr   r6   )r   r   waitpid_reap_childrengeventsleep_exit)r   pids     r   test_waitpid_allz!TestForkAndWatch.test_waitpid_all   sc    !! 		Jr1 a     LOOO HQKKKKKr   c                 T    |                      t          t          j        dd           d S )Nr   ro   rV   r   r   r   s    r   test_waitpid_wrong_negz'TestForkAndWatch.test_waitpid_wrong_neg   s$    '2:r155555r   c                 T    |                      t          t          j        dd           d S )Nr(   r   r   r   s    r   test_waitpid_wrong_posz'TestForkAndWatch.test_waitpid_wrong_pos   s$    '2:q!44444r   N)	r;   r<   r=   r>   r?   r@   r   r   r   rF   r   r   r   r      sK         )K  6 6 65 5 5 5 5r   r   __main__)
__future__r   r   r   rD   r   r   r   r	   r
   r   r>   gevent.testingr   r   gevent.testing.skippingr   TestCaser   
skipUnlesshasattrrI   r   r;   mainrF   r   r   <module>r      s   @ @ @ @ @ @ @ @ @ @ 



              $ $ $ $ $ $ $ $ ' ' ' ' ' '             : : : : : :2? 2? 2? 2? 2?	" 2? 2? 2?j ggb"455%' 'M/ M/ M/ M/ M/	 M/ M/' 'M/` ggb"233%' '5 5 5 5 5y) 5 5' '52 zIN r   