
    <eI                        d dl Z d dlZd dlZd dlZ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Zd dlZd dlZd dlmZ 	 d dlZn# e$ r dZY nw xY wej        sej        r ej        d           eed          rej        Znej        ej        d fd	Zd
 Z G d d          Z G d d          Z G d deej                  Z G d deej                  Z  ej!         eed          d           G d deeej                              Z" ej!         eed          d           G d deeej                              Z# ej!         eed          d           G d deeej                              Z$ ej!         eed          d            G d! d"eeej                              Z%d# Z&e'd$k    r ej(                     dS dS )%    N)support)	os_helper)socket_helper)sleep)	monotonicz,Cannot create socketpair on Emscripten/WASI.
socketpairc                 $   t          j         | ||          5 }|                    t          j        df           |                                 t          j         | ||          }	 |                    |                                           |                                }	 |                                \  }}||k    r||fcd d d            S |                                 B# t          $ r |                                  w xY w# 1 swxY w Y   d S )Nr   )
socketbindr   HOSTlistenconnectgetsocknameacceptcloseOSError)familytypeprotolccaddraaddrs           */usr/lib/python3.11/test/test_selectors.pyr   r      sD   ]64// 	1FFM&*+++HHJJJfdE22A		!--//***hhjjGAtu}} !t	 	 	 	 	 	 	 	 GGIII    				 	 	 	 	 	 	 	 	 	s+   AD$AC"C"" DDD	D	c                 X    g }| D ]$\  }}||z  r|                     |j                   %|S N)appendfileobj)readyflagmatchkeyeventss        r   find_ready_matchingr%   0   s@    E & &VD= 	&LL%%%L    c                      e Zd Zd Zd Zd Zd Z ej        e	j
        dk    d          d             Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z ej        ej        dk    d          d             Zd Z ej         eed          d          d             Z ej         eed          d          d             ZdS )BaseSelectorTestCasec                     t                      \  }}|                     |j                   |                     |j                   ||fS r   )r   
addCleanupr   )selfrdwrs      r   make_socketpairz$BaseSelectorTestCase.make_socketpair:   s@    B!!!!!!2vr&   c                    |                                  }|                     |j                   |                                 \  }}|                    |t
          j        d          }|                     |t
          j                   | 	                    |j
        |           | 	                    |j        |                                           | 	                    |j        t
          j                   | 	                    |j        d           |                     t           |j        dd           |                     t           |j        dt
          j                   |                     t"          |j        |t
          j                   |                     t"          |j        |                                t
          j                   d S )Ndatar   ?B i)SELECTORr*   r   r.   register	selectors
EVENT_READassertIsInstanceSelectorKeyassertEqualr   fdfilenor$   r0   assertRaises
ValueErrorKeyErrorr+   sr,   r-   r#   s        r   test_registerz"BaseSelectorTestCase.test_register@   sn   MMOO   %%''BjjY16::c9#8999b)))---Y%9:::6*** 	*aj!V<<< 	*aj#y7KLLL 	(AJI4HIII 	(AJ		#.	0 	0 	0 	0 	0r&   c                 ~   |                                  }|                     |j                   |                                 \  }}|                    |t
          j                   |                    |           |                     t          |j        d           |                     t          |j        |           d S Nr1   )
r2   r*   r   r.   r3   r4   r5   
unregisterr;   r=   r+   r?   r,   r-   s       r   test_unregisterz$BaseSelectorTestCase.test_unregisterZ   s    MMOO   %%''B	

2y+,,,	R 	(AL&999 	(AL"55555r&   c                    |                                  }|                     |j                   |                                 \  }}|                                |                                }}|                    |t          j                   |                    |t          j                   |                                 |                                 |	                    |           |	                    |           d S r   )
r2   r*   r   r.   r:   r3   r4   r5   EVENT_WRITErC   )r+   r?   r,   r-   rws         r   test_unregister_after_fd_closez3BaseSelectorTestCase.test_unregister_after_fd_closei   s    MMOO   %%''Byy{{BIIKK1	

1i*+++	

1i+,,,







	Q	Qr&   posixzrequires posixc                 N   |                                  }|                     |j                   |                                 \  }}|                                |                                }}|                    |t          j                   |                    |t          j                   |                                 \  }}|                                 |                                 t          j
        |                                |           t          j
        |                                |           |                     t          j        |           |                     t          j        |           |                    |           |                    |           d S r   )r2   r*   r   r.   r:   r3   r4   r5   rG   osdup2rC   )r+   r?   r,   r-   rH   rI   rd2wr2s           r   (test_unregister_after_fd_close_and_reusez=BaseSelectorTestCase.test_unregister_after_fd_close_and_reuseu   s0   MMOO   %%''Byy{{BIIKK1	

1i*+++	

1i+,,,''))S










a   


a   !$$$!$$$	Q	Qr&   c                    |                                  }|                     |j                   |                                 \  }}|                    |t
          j                   |                    |t
          j                   |                                 |                                 |                    |           |                    |           d S r   )	r2   r*   r   r.   r3   r4   r5   rG   rC   rD   s       r   "test_unregister_after_socket_closez7BaseSelectorTestCase.test_unregister_after_socket_close   s    MMOO   %%''B	

2y+,,,	

2y,---







	R	Rr&   c                 N   |                                  }|                     |j                   |                                 \  }}|                    |t
          j                  }|                    |t
          j                  }| 	                    |j
        |j
                   |                     ||                    |                     |                    |           t                      }t                      }|                    |t
          j        |          }|                    |t
          j        |          }|                     |j
        |j
                   | 	                    |j        |j                   |                     ||                    |                     |                     |j        |           |                     t"          |j        dt
          j                   t                      }t$          j                                        |_        t$          j                                        |_        |                    |t
          j        |           |                     |j        j                   |                     |j        j                   d S rB   )r2   r*   r   r.   r3   r4   r5   modifyrG   assertNotEqualr$   r8   get_keyrC   objectr0   r;   r=   unittestmockMockassertFalsecalled)	r+   r?   r,   r-   r#   key2d1d2d3s	            r   test_modifyz BaseSelectorTestCase.test_modify   s	   MMOO   %%''BjjY122 xxI122CJ444qyy}}---	R XXXXjjY1266xxI0"55T[111CHdi000qyy}}---B''' 	(AHfi6JKKK XX]''))
}))++	Y)2...*+++,-----r&   c                    | j         j        dk    r t          j                            d          }nu| j         j        dk    r t          j                            d          }nE| j         j        dk    r t          j                            d          }n|                     d          |5 }t          j                            t                    |j        _	        |                                  }| 
                    |j                   |                                 \  }}|                    |t          j                   |                     t#          |j                  d	           |                     t                    5  |	                    |t          j                   d d d            n# 1 swxY w Y   |                     t#          |j                  d
           d d d            d S # 1 swxY w Y   d S )NEpollSelectorz%selectors.EpollSelector._selector_clsPollSelectorz$selectors.PollSelector._selector_clsDevpollSelectorz'selectors.DevpollSelector._selector_cls )side_effect   r   )r2   __name__rY   rZ   patchskipTestr[   ZeroDivisionErrorreturn_valuerU   r*   r   r.   r3   r4   r5   r8   len_mapr;   rG   )r+   rk   mr?   r,   r-   s         r   test_modify_unregisterz+BaseSelectorTestCase.test_modify_unregister   s2    =!_44M''79 9EE]#~55M''68 8EE]#'888M''9; ;EE --### 
	-a$,M$6$6- %7 %/ %/AN!AOOAG$$$))++FBJJr9/000S[[!,,,""#455 4 4Y23334 4 4 4 4 4 4 4 4 4 4 4 4 4 4S[[!,,,
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	- 
	-s7   (CG,?!F, G,,F0	0G,3F0	4+G,,G03G0c                 h   |                                  }|                     |j                   |                                }|                                 \  }}|                    |t          j                   |                    |t          j                   |                                 | 	                    t          |j        |           | 	                    t          |j        |           | 	                    t          |j        |           | 	                    t          |j        |           d S r   )r2   r*   r   get_mapr.   r3   r4   r5   rG   r;   RuntimeErrorrW   r=   __getitem__)r+   r?   mappingr,   r-   s        r   
test_closezBaseSelectorTestCase.test_close   s    MMOO   ))++%%''B	

2y+,,,	

2y,---				,	2666,	2666(G$7<<<(G$7<<<<<r&   c                 f   |                                  }|                     |j                   |                                 \  }}|                    |t
          j        d          }|                     ||                    |                     | 	                    t          |j        d           d S )Nr0   r1   )r2   r*   r   r.   r3   r4   r5   r8   rW   r;   r=   r>   s        r   test_get_keyz!BaseSelectorTestCase.test_get_key   s    MMOO   %%''BjjY16::aiimm,,, 	(AIv66666r&   c                    |                                  }|                     |j                   |                                 \  }}|                                }|                     |           |                     t          |          d           |                     t          |          g            |	                    |t          j        d          }|                     ||           |                     |||                    |                     t          |          d           |                     t          |          |                                g           |                     t          |                                          |g           |                     t                     5  |d          d d d            n# 1 swxY w Y   |                     t"                    5  ||= d d d            d S # 1 swxY w Y   d S )Nr   r0   ri   r1   )r2   r*   r   r.   rt   r\   r8   ro   listr3   r4   r5   assertInr:   valuesr;   r=   	TypeError)r+   r?   r,   r-   keysr#   s         r   test_get_mapz!BaseSelectorTestCase.test_get_map   s6   MMOO   %%''Byy{{TA&&&dR(((jjY16::b$d2h'''TA&&&dbiikk]333dkkmm,,se444 x(( 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 y)) 	 	R	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   1	GG
G
+G<<H H c                 r   |                                  }|                     |j                   |                                 \  }}|                    |t
          j                   |                    |t
          j                  }|                                }|D ]w\  }}| 	                    t          |t
          j                             | 	                    |           |                     |t
          j        t
          j        z   z             x|                     |t
          j        fg|           d S r   )r2   r*   r   r.   r3   r4   r5   rG   select
assertTrue
isinstancer7   r\   r8   )r+   r?   r,   r-   wr_keyresultr#   r$   s           r   test_selectz BaseSelectorTestCase.test_select  s   MMOO   %%''B	

2y+,,,B	 566! 	@ 	@KCOOJsI,ABBCCCOOF###V	(<(1(=)> '? ? @ @ @ @ 	69#89:FCCCCCr&   c                    |                                  }|                     |j                   |                                 \  }}|5 }|                    |t
          j                   |                    |t
          j                   d d d            n# 1 swxY w Y   |                     t          |j
        |           |                     t          |j
        |           d S r   )r2   r*   r   r.   r3   r4   r5   rG   r;   ru   rW   )r+   r?   r,   r-   sels        r   test_context_managerz)BaseSelectorTestCase.test_context_manager  s    MMOO   %%''B 	4#LLY1222LLY2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	,	2666,	266666s   ABBBc                 *   |                                  }|                     |j                   t          |d          rT|                                }|                     t          |t                               |                     |d           d S d S )Nr:   r   )	r2   r*   r   hasattrr:   r   r   intassertGreaterEqual)r+   r?   r9   s      r   test_filenoz BaseSelectorTestCase.test_fileno'  s    MMOO   1h 	+BOOJr3//000##B*****	+ 	+r&   c                 <   |                                  }|                     |j                   d}d}t          |          }g }g }i }i }t	          |          D ]}	|                                 \  }
}|                    |
t          j                   |                    |t          j	                   |
                    |
           |
                    |           |||
<   |
||<   g }|r|                                }t          |t          j	                  }|s|                     d           t          j        |          }|                    |           t	          d          D ]C}	|                                }t          |t          j                  }|r n%t#          d           D|                     d           |                     ||         g|           |d         }
|
                    |          }|                     t          |          |           |
                    |           |                    ||
                    |                    |
           |                    ||
                    ||                     ||g|z             d S )N   s    This is a test.zno sockets ready for writing
   g?zno sockets ready for readingr   )r2   r*   r   ro   ranger.   r3   r4   r5   rG   r   r   r%   failrandomchoicesendr   r8   recvrC   remove)r+   r?   NUM_SOCKETSMSGMSG_LENreaderswritersr2ww2rir,   r-   bufsr    ready_writersready_readersbufs                    r   test_selectorz"BaseSelectorTestCase.test_selector0  s   MMOO   !c(({## 	 	A))++FBJJr9/000JJr90111NN2NN2CGCGG 	$HHJJE/y7LMMM  :		8999}--BGGCLLL2YY 
: 
:

 3E4=4H!J !J  E c



		8999c"gY666q!B'''""CSXXw///KKLLR!!!LLNN3r7###5  	$8 	u{233333r&   win32z1select.select() cannot be used with empty fd setsc                     |                                  }|                     |j                   |                     |                    d          g            d S )Nr   )timeout)r2   r*   r   r8   r   )r+   r?   s     r   test_empty_selectz&BaseSelectorTestCase.test_empty_selecte  sO    
 MMOO   !,,b11111r&   c                 X   |                                  }|                     |j                   |                                 \  }}|                    |t
          j                   t                      }|                     dt          |
                    d                               |                     dt          |
                    d                               |                     t                      |z
  d           |                    |           |                    |t
          j                   t                      }|                     |
                    d                     |                     |
                    d                     |                     t                      |z
  d           t                      }|                     |
                    d                     t                      }||z
  }|                     d|cxk    odk    nc |           d S )Nri   r   g      ?皙?       @)r2   r*   r   r.   r3   r4   rG   timer8   ro   r   
assertLessrC   r5   r\   r   )r+   r?   r,   r-   tt0t1dts           r   test_timeoutz!BaseSelectorTestCase.test_timeoutn  s   MMOO   %%''B	

2y,---FFC,,---C--...
C(((	R	

2y+,,,FF!%%%"&&&
C(((VV!%%%VV"Wr((((S(((("-----r&   alarmz%signal.alarm() required for this testc                    |                                  }|                     |j                   |                                 \  }} G d dt                    fd}t          j        t
          j        |          }|                     t
          j        t
          j        |           	 t          j        d           |                    |t          j
                   t                      }|                               5  |                    d           d d d            n# 1 swxY w Y   |                     t                      |z
  d           t          j        d           d S # t          j        d           w xY w)Nc                       e Zd ZdS )GBaseSelectorTestCase.test_select_interrupt_exc.<locals>.InterruptSelectN)rj   
__module____qualname__ r&   r   InterruptSelectr     s        Dr&   r   c                      r   r   )argsr   s    r   handlerz?BaseSelectorTestCase.test_select_interrupt_exc.<locals>.handler  s	    !!r&   ri      g      @r   )r2   r*   r   r.   	ExceptionsignalSIGALRMr   r3   r4   r5   r   r;   r   r   )r+   r?   r,   r-   r   orig_alrm_handlerr   r   s          @r   test_select_interrupt_excz.BaseSelectorTestCase.test_select_interrupt_exc  s    MMOO   %%''B	 	 	 	 	i 	 	 		" 	" 	" 	" 	" #M&.'BBv~7HIII	LOOOJJr9/000A""?33                 OODFFQJ,,,LOOOOOFLOOOOs1   *AE) D#E) #D''E) *D'+(E) )E?c                    |                                  }|                     |j                   |                                 \  }}t	          j        t          j        d           }|                     t          j        t          j        |           	 t	          j        d           |                    |t          j	                   t                      }|                     |                    d                     |                     t                      |z
  d           t	          j        d           d S # t	          j        d           w xY w)Nc                      d S r   r   )r   s    r   <lambda>zDBaseSelectorTestCase.test_select_interrupt_noraise.<locals>.<lambda>  s     r&   ri   g      ?g      ?r   )r2   r*   r   r.   r   r   r   r3   r4   r5   r   r\   r   r   )r+   r?   r,   r-   r   r   s         r   test_select_interrupt_noraisez2BaseSelectorTestCase.test_select_interrupt_noraise  s     MMOO   %%''B"M&.:L:LMMv~7HIII	LOOOJJr9/000A QXXc]]+++##DFFQJ444LOOOOOFLOOOOs   BD7 7EN)rj   r   r   r.   r@   rE   rJ   rY   
skipUnlessrM   namerQ   rS   rb   rr   rx   rz   r   r   r   r   r   skipIfsysplatformr   r   r   r   r   r   r   r&   r   r(   r(   8   s         0 0 046 6 6
 
 
 XG+-=>>  ?>"	 	 	$. $. $.L- - -6= = = 
7 
7 
7  2D D D$7 7 7+ + +34 34 34j X_S\W,HJ J2 2J J2. . .4 X11@B B B B8 X11@B B B B  r&   r(   c                   p    e Zd Z ej        dd           ej        ed          d                         ZdS )ScalableSelectorMixInr      zTest needs resource modulec                 T   t          j        t           j                  \  }}	 t          j        t           j        ||f           |                     t           j        t           j        ||f           t          |d          }n# t          t          f$ r |}Y nw xY w|dz  }|                                 }|                     |j	                   t          |dz            D ]}	 |                                 \  }}n%# t          $ r |                     d           Y nw xY w	 |                    |t          j                   |                    |t          j                   # t          $ r0}|j        t"          j        k    r|                     d            d }~ww xY w	 |                                }	nM# t          $ r@}|j        t"          j        k    r%t*          j        dk    r|                     d            d }~ww xY w|                     |dz  t1          |	                     d S )Ni          zFD limit reacheddarwinz%Invalid argument error calling poll())resource	getrlimitRLIMIT_NOFILE	setrlimitr*   minr   r<   r2   r   r   r.   rl   r3   r4   r5   rG   errnoENOSPCr   EINVALr   r   r8   ro   )
r+   softhardNUM_FDSr?   r   r,   r-   efdss
             r   test_above_fd_setsizez+ScalableSelectorMixIn.test_above_fd_setsize  s<    '(>??
d	x5d|DDDOOH.0F!4L* * *$&&GG$ 	 	 	GGG	 	2MMOO   w!|$$ 	 	A2--//BB 2 2 2 011111	2

2y3444

2y45555   7el** MM"4555	((**CC 	 	 	w%,&&3<8+C+CEFFF		
 	As3xx00000sU   AB BB#C;;DD!A E""
F,+FF F5 5
G??;G::G?N)	rj   r   r   r   requires_mac_verrY   r   r   r   r   r&   r   r   r     s[         Wb!$$X#?@@-1 -1 A@ %$-1 -1 -1r&   r   c                       e Zd Zej        ZdS )DefaultSelectorTestCaseN)rj   r   r   r4   DefaultSelectorr2   r   r&   r   r   r     s        (HHHr&   r   c                       e Zd Zej        ZdS )SelectSelectorTestCaseN)rj   r   r   r4   SelectSelectorr2   r   r&   r   r   r     s        'HHHr&   r   re   z!Test needs selectors.PollSelectorc                   (    e Zd Z eedd          ZdS )PollSelectorTestCasere   Nrj   r   r   getattrr4   r2   r   r&   r   r   r     s#        
 wy.$77HHHr&   r   rd   z"Test needs selectors.EpollSelectorc                   .    e Zd Z eedd          Zd ZdS )EpollSelectorTestCaserd   Nc                    |                                  }t          j                    5 }|                     t                    5  |                    |t          j                   d d d            n# 1 swxY w Y   |                     t                    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   )
r2   tempfileNamedTemporaryFiler;   IOErrorr3   r4   r5   r=   rW   )r+   r?   fs      r   test_register_filez(EpollSelectorTestCase.test_register_file  sy   MMOO(** 	a""7++ 4 4

1i23334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ""8,,  		!              		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sY   C!A0$C0A4	4C7A4	8CB7+C7B;	;C>B;	?CCC)rj   r   r   r   r4   r2   r   r   r&   r   r   r     s8        
 wy/488H    r&   r   KqueueSelectorz$Test needs selectors.KqueueSelector)c                   4    e Zd Z eedd          Zd Zd ZdS )KqueueSelectorTestCaser   Nc                    |                                  }t          j                    }|                     t                    5 }|                    |t          j                   d d d            n# 1 swxY w Y   |                     |j	        j
        t          j                   |                     t                    5  |                    |           d d d            d S # 1 swxY w Y   d S r   )r2   r   make_bad_fdr;   r   r3   r4   r5   r8   	exceptionr   EBADFr=   rW   )r+   r?   bad_fcms       r   test_register_bad_fdz+KqueueSelectorTestCase.test_register_bad_fd  sC    MMOO%''w'' 	42JJui2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4+U[999x(( 	 	IIe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   !A//A36A3>C!!C%(C%c                 >   |                                  }|                     |j                   t                      }|                     |                    d          g            t                      }||z
  }|                     d|cxk    odk    nc |           d S )Nri   r   r   )r2   r*   r   r   r8   r   r   )r+   r?   r   r   r   s        r   test_empty_select_timeoutz0KqueueSelectorTestCase.test_empty_select_timeout+  s     MMOO   VV!b)))VV"Wr((((S(((("-----r&   )rj   r   r   r   r4   r2   r  r  r   r&   r   r   r     sH        
 wy"2D99H
 
 
. . . . .r&   r   rf   z$Test needs selectors.DevpollSelectorc                   (    e Zd Z eedd          ZdS )DevpollSelectorTestCaserf   Nr   r   r&   r   r  r  9  s$        
 wy"3T::HHHr&   r  c                  ,    t          j                     d S r   )r   reap_childrenr   r&   r   tearDownModuler	  A  s    r&   __main__))r   rM   r   r4   r   r
   r   testr   test.supportr   r   r   r   rY   unittest.mockr   r   r   ImportErroris_emscriptenis_wasiSkipTestr   r   AF_INETSOCK_STREAMr%   r(   r   TestCaser   r   r   r   r   r   r  r	  rj   mainr   r&   r   <module>r     s    				        



       " " " " " " & & & & & &             " " " " " "OOOO   HHH  LGO L
(
J
K
KK 76<   "JJ .v/A    &  D D D D D D D DN21 21 21 21 21 21 21 21j) ) ) ) )2H4E ) ) )
( ( ( ( (183D ( ( (
 WWY778: :8 8 8 8 8/1F#,8 8: :8 WWY889; ;    02G$- ; ;  WWY(899;= =. . . . .13H%.. .= =.> WWY(9::;= =; ; ; ; ;24I&/; ;= =;   zHMOOOOO s   A AA