
    i'                     t   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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l
mZ  G d	 d
e	j        j        j                  Z ej        d           G d de	j        j        j                              Z ej         eed          d           ej        d           G d de	j        j        j                                          Z G d dej                  Z ej        d           G d dej                              Zedk    r ej                     dS dS )    N)contextmanager)patch)get_hub)osselect)socket)timingc                       e Zd Zd ZdS )
TestSelectc                 4    t          j         g g g |           d S Nr   )selftimeouts     D/usr/local/lib/python3.11/dist-packages/gevent/tests/test__select.pywaitzTestSelect.wait   s    b"b'*****    N)__name__
__module____qualname__r    r   r   r   r      s#        + + + + +r   r   zCant select on filesc                   x    e Zd Zd Z ej        ej                            d          d          d             Z	dS )TestSelectReadc                    t          j                    \  }}	 t          j        |gg g |           t          j        |           t          j        |           d S # t          j        |           t          j        |           w xY wr   )r   piper   close)r   r   rws       r   r   zTestSelectRead.wait   sn    wyy1	M1#r2w///HQKKKHQKKKKK HQKKKHQKKKKs   A *Bfreebsdz*skip because of a FreeBSD bug: kern/155606c                    t          t          d          5 }|                                }|                                 	 t	          j        |gg g d           |                     d           n<# t          $ r/}|                     |j        t          j	                   Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )Nrbr   zexception not raised)
open__file__filenor   r   failOSErrorassertEqualerrnoEBADF)r   fpfderrs       r   
test_errnozTestSelectRead.test_errno#   s    (D!! 		2RBHHJJJ2rdBA...
 		01111	  9 9 9  EK888888889		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2 		2s;   )B7 A.B7.
B'8%B"B7"B''B77B;>B;N)
r   r   r   r   unittestskipIfsysplatform
startswithr-   r   r   r   r   r      sh           X_S\,,Y77AC C2 2C C2 2 2r   r   pollz
Needs pollzCant poll on filesc                        e Zd Zd Zd Zd ZdS )TestPollReadc                    t          j                    \  }}	 t          j                    }|                    |t          j                   |                    |dz             |                    |           t          j        |           t          j        |           d S # |                    |           t          j        |           t          j        |           w xY w)Ni  )r   r   r   r3   registerPOLLIN
unregisterr   )r   r   r   r   r3   s        r   r   zTestPollRead.wait6   s     wyy1	;==DMM!V]+++IIgn%%%OOAHQKKKHQKKKKK OOAHQKKKHQKKKKs   AB" "?C!c                 n    t          j                    }|                     t          |j        d           d S )N   )r   r3   assertRaisesKeyErrorr9   )r   r3   s     r    test_unregister_never_registeredz-TestPollRead.test_unregister_never_registeredD   s/     {}}(DOQ77777r   c                    |                      d           t          t          d          5 }|                                }t	          j                    }|                    |t          j                   |                                 |                    d          }| 	                    ||t          j
        fg           d d d            d S # 1 swxY w Y   d S )Nzlibev >= 4.27 aborts the process if built with EV_VERIFY >= 2. For libuv, depending on whether the fileno is reused or not this either crashes or does nothing.r!   r   )skipTestr"   r#   r$   r   r3   r7   r8   r   r'   POLLNVAL)r   r*   r+   r3   results        r   test_poll_invalidzTestPollRead.test_poll_invalidK   s    3	4 	4 	4 (D!! 
	>RB;==DMM"fm,,, HHJJJYYq\\FVr6?&;%<===
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	> 
	>s   BCCCN)r   r   r   r   r>   rC   r   r   r   r5   r5   3   sA          8 8 8> > > > >r   r5   c                        e Zd Zd Zd Zd ZdS )TestSelectTypesc                     t          j                     }	 t          j        t          |                                          gg g d           |                                 d S # |                                 w xY w)NMbP?)r	   r   intr$   r   r   socks     r   test_intzTestSelectTypes.test_int^   s^    }	M3t{{}}--.B>>>JJLLLLLDJJLLLLs   7A" "A8c                     t          j                     fd}	 t          j         |            g g d                                            d S #                                  w xY w)Nc               3   R   K   t                                                     V  d S r   )rH   r$   )rJ   s   r   fileno_iterz2TestSelectTypes.test_iterable.<locals>.fileno_iterh   s)      dkkmm$$$$$$$r   rG   )r	   r   r   )r   rN   rJ   s     @r   test_iterablezTestSelectTypes.test_iterablee   sk    }	% 	% 	% 	% 	%	M++--R777JJLLLLLDJJLLLLs   A A&c                 h    d| _         |                     t          t          j        dgg g d           d S )NFhellorG   )switch_expectedr<   	TypeErrorr   r   s    r   test_stringzTestSelectTypes.test_stringp   s2    $)V]WIr2uMMMMMr   N)r   r   r   rK   rO   rU   r   r   r   rE   rE   \   sF          	 	 	N N N N Nr   rE   z*Things like os.close don't work on Windowsc                   L    e Zd ZdZd Zd Zd Zd Zd Ze	d             Z
d Zd	S )
TestPossibleCrashesa  
    Tests for the crashes and unexpected exceptions
    that happen when we try to use or create (depending on
    loop implementation) a IO watcher for a closed/invalid file descriptor.

    See https://github.com/gevent/gevent/issues/2100
    See test__selectors.py
    c                 @   t          j                     }|                     |j                   t          j        |j                   t          j        t          dd          5  t          j        |gddt          j	                   d d d            d S # 1 swxY w Y   d S N_original_selectr   r   r   return_valuer   )
r	   
addCleanupr   geventspawnPatchobjectr   r
   SMALLEST_RELIABLE_DELAYrI   s     r   #test_closing_object_while_selectingz7TestPossibleCrashes.test_closing_object_while_selecting   s    6 }
###TZ    \&"4<PPP 	J 	JM4&"b&*HIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   ##BBBc                 R    	 |                                  d S # t          $ r Y d S w xY wr   )r   r&   rI   s     r   _close_invalid_sockz'TestPossibleCrashes._close_invalid_sock   s:    	JJLLLLL 	 	 	DD	    
&&c                 R    	 t          j        |           d S # t          $ r Y d S w xY wr   )r   r   r&   )r   r+   s     r   _close_invalid_fdz%TestPossibleCrashes._close_invalid_fd   s:    	HRLLLLL 	 	 	DD	rg   c                 h   t          j                     }|                     | j        |           t          j        | j        |                                           t          j        t          dd          5  t          j	        |gddt          j                   d d d            d S # 1 swxY w Y   d S rY   )r	   r^   rf   r_   r`   ri   r$   ra   rb   r   r
   rc   rI   s     r   test_closing_fd_while_selectingz3TestPossibleCrashes.test_closing_fd_while_selecting   s     }0$777T+T[[]];;;\&"4<PPP 	J 	JM4&"b&*HIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   7#B''B+.B+c                    t          j                     }|                     | j        |           t          j        |                                           t          j        t          dd          5  | 	                                5  t          j        |gddt          j                   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 rY   )r	   r^   rf   r   r   r$   ra   rb   r   _check_os_error_on_libuvr
   rc   rI   s     r    test_closing_fd_before_selectingz4TestPossibleCrashes.test_closing_fd_before_selecting   sa   ( }0$777
\&"4<PPP 	N 	N..00 N Ntfb"f.LMMMN N N N N N N N N N N N N N N	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns6   1C#B5)C5B9	9C<B9	=CCCc              #      K   	 d V  d S # t           $ r= |                     dt          t                      j                  j                   Y d S w xY w)Nzgevent.libuv)r&   assertIntyper   loopr   rT   s    r   rm   z,TestPossibleCrashes._check_os_error_on_libuv   sf      	LEEEEE 	L 	L 	LMM.$wyy~*>*>*IKKKKKK	Ls   
 AAAc                    t          j                     }|                     |j                   |                                }t	          j        |j                   t          j                    }|                    |t          j	                   t          j        t          dd          5  d }|                                 5  |                    t          j                  }d d d            n# 1 swxY w Y   |m|                     t!          |          dk               d |D             \  \  }}|                     ||           |                     |t          j	                   d }|                                 5  |                    t          j                  }d d d            n# 1 swxY w Y   |=|\  \  }}|                     ||           |                     |t          j                   d d d            d S # 1 swxY w Y   d S )NrZ   r[   r\      c                 >    g | ]}|d          t           j        k    |S )rt   )r   r8   ).0xs     r   
<listcomp>zITestPossibleCrashes.test_closing_object_while_polling.<locals>.<listcomp>   s(     T T Tqadfm>S>S>S>S>Sr   )r	   r^   r   r$   r_   r`   r   r3   r7   r8   ra   rb   rm   r
   rc   
assertTruelenr'   rA   )r   rJ   orig_filenopollerfds_and_eventsr+   events          r   !test_closing_object_while_pollingz5TestPossibleCrashes.test_closing_object_while_polling   s    }
###kkmmTZ    fm,,,\&"4<PPP 	9 	9!N..00 M M!'V-K!L!LM M M M M M M M M M M M M M M )N 3 3q 8999 T TN T T T"e  [111  666!N..00 M M!'V-K!L!LM M M M M M M M M M M M M M M ) ."e  [111  888'	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s\   *H  C-!H -C1	1H 4C1	5BH = F)H )F-	-H 0F-	1AH  HHN)r   r   r   __doc__rd   rf   ri   rk   rn   r   rm   r   r   r   r   rW   rW   u   s         $J $J $JL    J J JN N N8 L L ^L!9 !9 !9 !9 !9r   rW   __main__)r(   r0   r.   
contextlibr   unittest.mockr   ra   gevent.corer_   gevent.testingtesting	greentestr   r   r   r	   r
   AbstractGenericWaitTestCaser   skipOnWindowsr   
skipUnlesshasattrr5   TestCaserE   rW   r   mainr   r   r   <module>r      sa    



  % % % % % % ( ( ( ( ( (     " " " " " "                         ! ! ! ! ! !+ + + + +&B + + + /002 2 2 2 2V^*F 2 2 1026 WWVV,,l;;-..%> %> %> %> %>6>(D %> %> /. <;%>NN N N N Ni( N N N2 EFFR9 R9 R9 R9 R9), R9 R9 GFR9h zIN r   