
    i                        d dl 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          Z G d deej	                  Z
 ej        d	           G d
 dej	                              Zedk    r ej                     dS dS )    N)socket)	selectors)timingc                   6    e Zd Zedd            ZdZd Zd ZdS )SelectorTestMixin   c                     |                      |          }|D ]4\  }}|                    | |j        |           t          j                     5d S Ntimeout)selectdatafileobjgeventsleep)selr   eventskeymasks        G/usr/local/lib/python3.11/dist-packages/gevent/tests/test__selectors.pyrun_selector_oncez#SelectorTestMixin.run_selector_once   sY     G,, 	 	ICHHS#+t,,,LNNNN	 	    Tc                     |                     d          }|r|                    |           | j        r+|                    |           |                                 d S d S )Nd   )recvsendunregister_after_send
unregisterclose)selfselectorconn_eventsr   s        r    read_from_ready_socket_and_replyz2SelectorTestMixin.read_from_ready_socket_and_reply   sd    yy~~ 	IIdOOO % 	%%%JJLLLLL	 	r   c                    t          j                    \  }}d }	 |                    |t          j        | j                   t          j        | j        |          }d}|	                    |           |
                    d          }|                     ||           |                                 |                                 |                                 ||                    d           nY# |                                 |                                 |                                 ||                    d           w w xY w|                     |d uo|                                           d S )Ns   abcdef2   
   )r   
socketpairregisterr   
EVENT_READr$   r   spawnr   r   r   assertEqualr   join
assertTrueready)r    r   serverclientgletDATAr   s          r   _check_selectorz!SelectorTestMixin._check_selector"   s:   *,,	LL!5t7\]]]< 6<<DDKK;;r??DT4(((IIKKKLLNNNLLNNN		"	 IIKKKLLNNNLLNNN		"  D(9TZZ\\:::::s   BC0 0AEN)r   )__name__
__module____qualname__staticmethodr   r   r$   r4    r   r   r   r      sX           \ !  ; ; ; ; ;r   r   c                       e Zd Zd Zd ZdS )GeventSelectorTestc                     t          j                    5 }|                     |           d d d            d S # 1 swxY w Y   d S N)r   GeventSelectorr4   )r    r   s     r   test_select_using_socketpairz/GeventSelectorTest.test_select_using_socketpair8   s    %'' 	&3  %%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   7;;c                    	 t           j        }n# t          $ r d }Y nw xY wd t          d          D             }	 t	          j                    }t	          j                    }t          |          D ]\  }}|\  }}|                    |t          j        | j	                   |                    |t          j        |           t          |                              d          }	|                    |	           t          j                     |                     ||d         d         j        |k    rdnd           d}
|                    d          D ]a\  }}t          |j                                      d          }|j                            d          }	|                     |	|           |
d	z  }
b|                     |
t-          |                     |                                 |                                 |D ]}|D ]}|                                 d S # |                                 |                                 |D ]}|D ]}|                                 w xY w)
Nc                 4    g | ]}t          j                    S r9   )r   r(   ).0_s     r   
<listcomp>z?GeventSelectorTest.test_select_many_sockets.<locals>.<listcomp>C   s!    888"$$888r   r'   asciir   r   r   r&      )r   AF_UNIXAttributeErrorranger   r>   	enumerater)   r*   r$   strencoder   r   idler   familyr   r   r   r   r,   lenr   )r    rH   pairs
server_sel
client_selipairr0   r1   r   foundr   rC   expectedss                  r   test_select_many_socketsz+GeventSelectorTest.test_select_many_sockets=   s   	nGG 	 	 	GGG	 98eBii888&	"133J"133J$U++ " "4!%##FI,@$($IK K K##FI,@!DDD1vv}}W--D!!!! KMMM""#Ahqk0G;; # D D D E$++A+66  Qsx==//88{''++  x000
UCJJ///    AGGIIII      AGGIIIIs    FH! !AI)N)r5   r6   r7   r?   rY   r9   r   r   r;   r;   5   s2        & & &
. . . . .r   r;   z*Things like os.close don't work on Windowsc                   *    e Zd ZdZd Zd Z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__select.py
    c                 n   t          j                     }|                     |j                   t          j        |j                   t          j                    }|                    |t
          j                   |5  |	                    t          j                   d d d            d S # 1 swxY w Y   d S r
   )r   
addCleanupr   r   r+   r   r>   r)   r*   r   r   SMALLEST_RELIABLE_DELAY)r    sockr   s      r   #test_closing_object_while_selectingz7TestPossibleCrashes.test_closing_object_while_selectingy   s    }
###TZ   &((T9/000  	? 	?JJv=J>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   <!B**B.1B.c                 R    	 |                                  d S # t          $ r Y d S w xY wr=   )r   OSError)r    r_   s     r   _close_invalid_sockz'TestPossibleCrashes._close_invalid_sock   s:    	JJLLLLL 	 	 	DD	s    
&&c                    ddl m} t          j                    }|                     | j        |           t          j        |j        |                                           t          j	                    }|
                    |t          j                   |5  |                    t          j                   d d d            d S # 1 swxY w Y   d S )Nr   )osr   )r   re   r   r]   rc   r+   r   filenor   r>   r)   r*   r   r   r^   r    re   r_   r   s       r   test_closing_fd_while_selectingz3TestPossibleCrashes.test_closing_fd_while_selecting   s     	}0$777RXt{{}}---&((T9/000 	? 	?JJv=J>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   !CCCc                    dd l }t          j                    }|                     | j        |           |                    |                                           t          j                    }|                     t          d          5  |
                    |t          j                   d d d            d S # 1 swxY w Y   d S )Nr   zInvalid file)re   r   r]   rc   r   rf   r   r>   assertRaisesRegex
ValueErrorr)   r*   rg   s       r    test_closing_fd_before_selectingz4TestPossibleCrashes.test_closing_fd_before_selecting   s    			}0$777
&((##J?? 	5 	5LLy3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   !B66B:=B:N)r5   r6   r7   __doc__r`   rc   rh   rl   r9   r   r   r[   r[   n   sZ         ? ? ?  ? ? ?5 5 5 5 5r   r[   __main__)r   r   r   gevent.testingtesting	greentestr   objectr   TestCaser;   skipOnWindowsr[   r5   mainr9   r   r   <module>rv      s*                " " " " " " ! ! ! ! ! !'; '; '; '; '; '; '; ';T6 6 6 6 6*"+6 6 6r EFF75 75 75 75 75), 75 75 GF75v zIN r   