
    0hhO                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
JrJr  S SKJr  S SKrS SKrS SKrS SKJr   S SKr\R*                  (       d  \R,                  (       a  \R.                  " S5      e\" \S5      (       a  \R2                  rO\R4                  \R6                  S 4S jrS	 r " S
 S5      r " S S5      r " S S\\R>                  5      r  " S S\\R>                  5      r!\RD                  " \" \S5      S5       " S S\\\R>                  5      5       r#\RD                  " \" \S5      S5       " S S\\\R>                  5      5       r$\RD                  " \" \S5      S5       " S S\\\R>                  5      5       r%\RD                  " \" \S5      S5       " S  S!\\\R>                  5      5       r&S" r'\(S#:X  a  \RR                  " 5         gg! \ a    Sr GNf = f)$    N)support)is_apple	os_helpersocket_helper)sleep)	monotonicz,Cannot create socketpair on Emscripten/WASI.
socketpairc                    [         R                   " XU5       nUR                  [        R                  S45        UR	                  5         [         R                   " XU5      n UR                  UR                  5       5        UR                  5       n UR                  5       u  pgXu:X  a  XF4sS S S 5        $ UR                  5         M5  ! [         a    UR                  5         e f = f! , (       d  f       g = f)Nr   )
socketbindr   HOSTlistenconnectgetsocknameacceptcloseOSError)familytypeprotolccaddraaddrs           </opt/python-3.13.8/usr/lib/python3.13/test/test_selectors.pyr	   r	      s    ]]6/1FFM&&*+HHJfE2A		!--/*hhjGA} t 0/ GGI   	 0/s%   A	C&"A	C5CC##C&&
C4c                 l    / nU  H+  u  p4XA-  (       d  M  UR                  UR                  5        M-     U$ N)appendfileobj)readyflagmatchkeyeventss        r   find_ready_matchingr&   /   s1    E==LL%  L    c                      \ rS rSrS rS rS rS r\R                  " \
R                  S:H  S5      S 5       rS	 rS
 rS rS rS rS rS rS rS rS rS r\R0                  " \R4                  S:H  S5      S 5       rS r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       r Sr!g)BaseSelectorTestCase7   c                     [        5       u  pU R                  UR                  5        U R                  UR                  5        X4$ r   )r	   
addCleanupr   )selfrdwrs      r   make_socketpair$BaseSelectorTestCase.make_socketpair9   s2    !!vr'   c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  S5      nU R                  U[
        R                  5        U R                  UR                  U5        U R                  UR                  UR                  5       5        U R                  UR                  [
        R                  5        U R                  UR                  S5        U R                  [         UR                  SS5        U R                  [         UR                  S[
        R                  5        U R                  ["        UR                  U[
        R                  5        U R                  ["        UR                  UR                  5       [
        R                  5        g )Ndatar   ?B i)SELECTORr,   r   r0   register	selectors
EVENT_READassertIsInstanceSelectorKeyassertEqualr    fdfilenor%   r3   assertRaises
ValueErrorKeyErrorr-   sr.   r/   r$   s        r   test_register"BaseSelectorTestCase.test_register?   s:   MMO %%'jjY116:c9#8#89b)-Y%9%9:6* 	*ajj!V< 	*ajj#y7K7KL 	(AJJI4H4HI 	(AJJ		#..	0r'   c                 d   U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  5        UR                  U5        U R                  [        UR                  S5        U R                  [        UR                  U5        g Nr4   )
r5   r,   r   r0   r6   r7   r8   
unregisterr>   r@   r-   rB   r.   r/   s       r   test_unregister$BaseSelectorTestCase.test_unregisterY   s}    MMO %%'	

2y++,	R 	(ALL&9 	(ALL"5r'   c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  5       UR	                  5       pTUR                  U[        R                  5        UR                  U[        R                  5        UR                  5         UR                  5         UR                  U5        UR                  U5        g r   )
r5   r,   r   r0   r=   r6   r7   r8   EVENT_WRITErG   )r-   rB   r.   r/   rws         r   test_unregister_after_fd_close3BaseSelectorTestCase.test_unregister_after_fd_closeh   s    MMO %%'yy{BIIK1	

1i**+	

1i++,



	Q	Qr'   posixzrequires posixc                    U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  5       UR	                  5       pTUR                  U[        R                  5        UR                  U[        R                  5        U R                  5       u  pgUR                  5         UR                  5         [        R                  " UR	                  5       U5        [        R                  " UR	                  5       U5        U R                  [        R                  U5        U R                  [        R                  U5        UR                  U5        UR                  U5        g r   )r5   r,   r   r0   r=   r6   r7   r8   rL   osdup2rG   )r-   rB   r.   r/   rM   rN   rd2wr2s           r   (test_unregister_after_fd_close_and_reuse=BaseSelectorTestCase.test_unregister_after_fd_close_and_reuset   s    MMO %%'yy{BIIK1	

1i**+	

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

a 


a !$!$	Q	Qr'   c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  5        UR	                  U[
        R                  5        UR                  5         UR                  5         UR                  U5        UR                  U5        g r   )	r5   r,   r   r0   r6   r7   r8   rL   rG   rH   s       r   "test_unregister_after_socket_close7BaseSelectorTestCase.test_unregister_after_socket_close   s    MMO %%'	

2y++,	

2y,,-



	R	Rr'   c                 >   U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  5      nUR                  U[
        R                  5      nU R                  UR                  UR                  5        U R                  XQR                  U5      5        UR                  U5        [        5       n[        5       nUR	                  U[
        R                  U5      nUR                  U[
        R                  U5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  XQR                  U5      5        U R                  UR                  U5        U R!                  ["        UR                  S[
        R                  5        [        5       n[$        R&                  R)                  5       Ul        [$        R&                  R)                  5       Ul        UR                  U[
        R                  U5        U R+                  UR                  R,                  5        U R+                  UR                  R,                  5        g rF   )r5   r,   r   r0   r6   r7   r8   modifyrL   assertNotEqualr%   r;   get_keyrG   objectr3   r>   r@   unittestmockMockassertFalsecalled)	r-   rB   r.   r/   r$   key2d1d2d3s	            r   test_modify BaseSelectorTestCase.test_modify   s   MMO %%'jjY112 xxI112CJJ4yy}-	R XXjjY1126xxI00"5T[[1CHHdii0yy}-B' 	(AHHfi6J6JK X]]'')
}}))+	Y))2.**+,,-r'   c                    U R                   R                  S:X  a   [        R                  R	                  S5      nOU R                   R                  S:X  a   [        R                  R	                  S5      nOKU R                   R                  S:X  a   [        R                  R	                  S5      nOU R                  S5      eU n[        R                  R                  [        S9UR                  l	        U R                  5       nU R                  UR                  5        U R                  5       u  pEUR                  U[        R                  5        U R!                  [#        UR$                  5      S	5        U R'                  [        5         UR                  U[        R(                  5        S S S 5        U R!                  [#        UR$                  5      S
5        S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = f)NEpollSelectorz%selectors.EpollSelector._selector_clsPollSelectorz$selectors.PollSelector._selector_clsDevpollSelectorz'selectors.DevpollSelector._selector_cls )side_effect   r   )r5   __name__ra   rb   patchskipTestrc   ZeroDivisionErrorreturn_valuer]   r,   r   r0   r6   r7   r8   r;   len_mapr>   rL   )r-   rt   mrB   r.   r/   s         r   test_modify_unregister+BaseSelectorTestCase.test_modify_unregister   sh    ==!!_4MM''79E]]##~5MM''68E]]##'88MM''9;E --##a$,MM$6$6- %7 %/ANN!AOOAGG$))+FBJJr9//0S[!,""#45Y223 6S[!, U 65 Us%   CG2
!G!+-G2!
G/	+G22
H c                    U R                  5       nU R                  UR                  5        UR                  5       nU R	                  5       u  p4UR                  U[        R                  5        UR                  U[        R                  5        UR                  5         U R                  [        UR                  U5        U R                  [        UR                  U5        U R                  [        UR                  U5        U R                  [        UR                  U5        U R                  UR                  U5      S 5        U R                  UR                  U5      S 5        g r   )r5   r,   r   get_mapr0   r6   r7   r8   rL   r>   RuntimeErrorr_   r@   __getitem__r;   get)r-   rB   mappingr.   r/   s        r   
test_closeBaseSelectorTestCase.test_close   s    MMO ))+%%'	

2y++,	

2y,,-		,		26,		26(G$7$7<(G$7$7<R$/R$/r'   c                 B   U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  S5      nU R                  XAR                  U5      5        U R                  [        UR                  S5        g )Nr3   r4   )r5   r,   r   r0   r6   r7   r8   r;   r_   r>   r@   rA   s        r   test_get_key!BaseSelectorTestCase.test_get_key   ss    MMO %%'jjY116:iim, 	(AIIv6r'   c                 8   U R                  5       nU R                  UR                  5        U R                  5       u  p#[	        5       nUR                  5       nU R                  U5        U R                  [        U5      S5        U R                  [        U5      / 5        U R                  UR                  U5      S 5        U R                  UR                  X$5      U5        UR                  U[        R                  S5      nU R                  X%5        U R                  XeR                  U5      5        U R                  XeU   5        U R                  [        U5      S5        U R                  [        U5      UR                  5       /5        U R                  [        UR!                  5       5      U/5        U R#                  [$        5         US     S S S 5        U R#                  [&        5         XR	 S S S 5        g ! , (       d  f       N/= f! , (       d  f       g = f)Nr   r3   rr   r4   )r5   r,   r   r0   r`   r~   rd   r;   rx   listr   r6   r7   r8   assertInr=   valuesr>   r@   	TypeError)r-   rB   r.   r/   sentinelkeysr$   s          r   test_get_map!BaseSelectorTestCase.test_get_map   s   MMO %%'8yy{TA&dR("t,"/:jjY116:bhhrl+2h'TA&dbiik]3dkkm,se4 x(L ) y) *)	 )( *)s   G:.H:
H
Hc                 V   U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  5        UR	                  U[
        R                  5      nUR                  5       nU Hs  u  pgU R                  [        U[
        R                  5      5        U R                  U5        U R                  U[
        R                  [
        R                  -  ) -  5        Mu     U R                  U[
        R                  4/U5        g r   )r5   r,   r   r0   r6   r7   r8   rL   select
assertTrue
isinstancer:   rd   r;   )r-   rB   r.   r/   wr_keyresultr$   r%   s           r   test_select BaseSelectorTestCase.test_select  s    MMO %%'	

2y++,B	 5 56!KCOOJsI,A,ABCOOF#V	(<(<(1(=(=)> '? ? @ " 	69#8#89:FCr'   c                 F   U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  S5        UR                  U[        R                  [        R                  -  5      nSu  pVUR                  5       nU R                  [        U5      S5        U H  u  pU R                  [        U[        R                  5      5        U R                  X5        U R!                  U	[        R                  [        R                  -  ) -  5        U	[        R                  -  (       a  U R!                  U5        SnU	[        R                  -  (       d  M  U R!                  U5        SnM     U R                  U5        U R                  U5        g )Ns   foo)FF   T)r5   r,   r   r0   sendr6   r7   r8   rL   r   assertLessEqualrx   r   r   r:   r;   rd   )
r-   rB   sock1sock2my_key	seen_read
seen_writer   r$   r%   s
             r   test_select_read_write+BaseSelectorTestCase.test_select_read_write  sH    MMO ++-

6E9#7#7):O:O#OP ,	 	S[!,!KCOOJsI,A,ABCS)V	(<(<(1(=(=)> '? ? @	,,,  + 		----  ,!
 " 		"
#r'   c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#U nUR	                  U[
        R                  5        UR	                  U[
        R                  5        S S S 5        U R                  [        UR                  U5        U R                  [        UR                  U5        g ! , (       d  f       NQ= fr   )r5   r,   r   r0   r6   r7   r8   rL   r>   r   r_   )r-   rB   r.   r/   sels        r   test_context_manager)BaseSelectorTestCase.test_context_manager<  s    MMO %%'#LLY112LLY223  	,		26,		26 Qs    AC
Cc                     U R                  5       nU R                  UR                  5        [        US5      (       aB  UR	                  5       nU R                  [        U[        5      5        U R                  US5        g g )Nr=   r   )	r5   r,   r   hasattrr=   r   r   intassertGreaterEqual)r-   rB   r<   s      r   test_fileno BaseSelectorTestCase.test_filenoI  s]    MMO 1hBOOJr3/0##B*  r'   c                    U R                  5       nU R                  UR                  5        SnSn[        U5      n/ n/ n0 n0 n[	        U5       H  n	U R                  5       u  pUR                  U
[        R                  5        UR                  U[        R                  5        UR                  U
5        UR                  U5        XU
'   XU'   M     / nU(       Gab  UR                  5       n[        U[        R                  5      nU(       d  U R                  S5        [        R                  " U5      nUR!                  U5        [	        S5       HA  n	UR                  5       n[        U[        R                  5      nU(       a    O [#        S5        MC     U R                  S5        U R%                  X   /W5        US   n
U
R'                  U5      nU R%                  [        U5      U5        UR                  U5        UR)                  Xz   5        UR)                  U
5        UR+                  Xz   5        U(       a  GMb  U R%                  X/U-  5        g )N   s    This is a test.zno sockets ready for writing
   g?zno sockets ready for readingr   )r5   r,   r   rx   ranger0   r6   r7   r8   rL   r   r   r&   failrandomchoicer   r   r;   recvrG   remove)r-   rB   NUM_SOCKETSMSGMSG_LENreaderswritersr2ww2rir.   r/   bufsr!   ready_writersready_readersbufs                    r   test_selector"BaseSelectorTestCase.test_selectorR  s   MMO !c({#A))+FBJJr9//0JJr9001NN2NN2GG $ HHJE/y7L7LMM 		89}-BGGCL2Y
 3E4=4H4H!J  c
  		89cgY6q!B'''"CSXw/KKLL!LLNN37#5 g8 	u{23r'   win32z1select.select() cannot be used with empty fd setsc                     U R                  5       nU R                  UR                  5        U R                  UR	                  SS9/ 5        g )Nr   )timeout)r5   r,   r   r;   r   )r-   rB   s     r   test_empty_select&BaseSelectorTestCase.test_empty_select  s:    
 MMO !,b1r'   c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#UR	                  U[
        R                  5        [        5       nU R                  S[        UR                  S5      5      5        U R                  S[        UR                  S5      5      5        U R                  [        5       U-
  S5        UR                  U5        UR	                  U[
        R                  5        [        5       nU R                  UR                  S5      5        U R                  UR                  S5      5        U R                  [        5       U-
  S5        [        5       nU R                  UR                  S5      5        [        5       nXe-
  nU R                  SUs=:*  =(       a    S:*  Os  U5        g )Nrr   r   g      ?皙?       @)r5   r,   r   r0   r6   r7   rL   timer;   rx   r   
assertLessrG   r8   rd   r   )r-   rB   r.   r/   tt0t1dts           r   test_timeout!BaseSelectorTestCase.test_timeout  sC   MMO %%'	

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

2y++,F!%"&
C(V!%VWr((S("-r'   alarmz%signal.alarm() required for this testc                   ^ U R                  5       nU R                  UR                  5        U R                  5       u  p# " S S[        5      mU4S jn[
        R
                  " [
        R                  U5      nU R                  [
        R
                  [
        R                  U5         [
        R                  " S5        UR                  U[        R                  5        [        5       nU R                  T5         UR                  S5        S S S 5        U R                  [        5       U-
  S5        [
        R                  " S5        g ! , (       d  f       NB= f! [
        R                  " S5        f = f)Nc                       \ rS rSrSrg)GBaseSelectorTestCase.test_select_interrupt_exc.<locals>.InterruptSelecti   N)rs   
__module____qualname____firstlineno____static_attributes__r   r'   r   InterruptSelectr     s    r'   r   c                     > Ter   r   )argsr   s    r   handler?BaseSelectorTestCase.test_select_interrupt_exc.<locals>.handler  s	    !!r'   rr      g      @r   )r5   r,   r   r0   	ExceptionsignalSIGALRMr   r6   r7   r8   r   r>   r   r   )r-   rB   r.   r/   r   orig_alrm_handlerr   r   s          @r   test_select_interrupt_exc.BaseSelectorTestCase.test_select_interrupt_exc  s     MMO %%'	i 		" #MM&..'Bv~~7HI	LLOJJr9//0A""?3 4 OODFQJ,LLO 43
 LLOs%   )AE :E%E 
EE E1c                    U R                  5       nU R                  UR                  5        U R                  5       u  p#[        R                  " [        R
                  S 5      nU R                  [        R                  [        R
                  U5         [        R                  " S5        UR                  U[        R                  5        [        5       nU R                  UR                  S5      5        U R                  [        5       U-
  S5        [        R                  " S5        g ! [        R                  " S5        f = f)Nc                      g r   r   )r   s    r   <lambda>DBaseSelectorTestCase.test_select_interrupt_noraise.<locals>.<lambda>  s    r'   rr   g      ?g      ?r   )r5   r,   r   r0   r   r   r   r6   r7   r8   r   rd   r   r   )r-   rB   r.   r/   r   r   s         r   test_select_interrupt_noraise2BaseSelectorTestCase.test_select_interrupt_noraise  s     MMO %%'"MM&..:LMv~~7HI	LLOJJr9//0A QXXc]+##DFQJ4LLOFLLOs   A=D( (E r   N)"rs   r   r   r   r0   rC   rI   rO   ra   
skipUnlessrS   namerW   rZ   rj   r{   r   r   r   r   r   r   r   r   skipIfsysplatformr   r   r   r   r   r   r   r   r'   r   r)   r)   7   s   046
 G+-=> ?"	$.L-60$
7:D$$:7+34j __S\\W,HJ2J2.4 1@BB8 1@BBr'   r)   c                       \ rS rSr\R
                  " SS5      \R                  " \S5      \R                  " S5      S 5       5       5       r
Srg)	ScalableSelectorMixIni  r      zTest needs resource modulecpuc                 6   [         R                  " [         R                  5      u  p [         R                  " [         R                  X"45        U R	                  [         R                  [         R                  X45        [        US5      nUS-  nU R                  5       nU R	                  UR                  5        [        US-  5       HW  n U R                  5       u  pg UR                  W[        R                  5        UR                  W[        R                   5        MY      UR'                  5       n	U R-                  US-  [/        U	5      5        g ! [        [        4 a    Un Nf = f! [         a    U R                  S5         Nf = f! [         a5  nUR"                  ["        R$                  :X  a  U R                  S5        e S nAff = f! [         a@  nUR"                  ["        R(                  :X  a  [*        (       a  U R                  S5        e S nAff = f)Ni       r   zFD limit reachedz%Invalid argument error calling poll())resource	getrlimitRLIMIT_NOFILE	setrlimitr,   minr   r?   r5   r   r   r0   ru   r6   r7   r8   rL   errnoENOSPCr   EINVALr   r;   rx   )
r-   softhardNUM_FDSrB   r   r.   r/   efdss
             r   test_above_fd_setsize+ScalableSelectorMixIn.test_above_fd_setsize  s    ''(>(>?
	x55|DOOH..0F0F!L*$&G
 	2MMO w!|$A2--/

2y334

2y445 %&	((*C 	As3x0G $ 	G	  2 01	2  77ell* MM"45  	ww%,,&88EF		sU   A"E E+A F$G E('E(+F	F	
G0GG
H;HHr   N)rs   r   r   r   r   requires_mac_verra   r   r   requires_resourcer	  r   r   r'   r   r   r     sM     b!$#?@u%-1 & A %-1r'   r   c                   ,    \ rS rSr\R
                  rSrg)DefaultSelectorTestCasei  r   N)rs   r   r   r   r7   DefaultSelectorr5   r   r   r'   r   r  r    s    ((Hr'   r  c                   ,    \ rS rSr\R
                  rSrg)SelectSelectorTestCasei  r   N)rs   r   r   r   r7   SelectSelectorr5   r   r   r'   r   r  r    s    ''Hr'   r  rn   z!Test needs selectors.PollSelectorc                   (    \ rS rSr\" \SS5      rSrg)PollSelectorTestCasei!  rn   Nr   rs   r   r   r   getattrr7   r5   r   r   r'   r   r  r  !  s    
 y.$7Hr'   r  rm   z"Test needs selectors.EpollSelectorc                   .    \ rS rSr\" \SS5      rS rSrg)EpollSelectorTestCasei)  rm   Nc                    U R                  5       n[        R                  " 5        nU R                  [        5         UR                  U[        R                  5        S S S 5        U R                  [        5         UR                  U5        S S S 5        S S S 5        g ! , (       d  f       NF= f! , (       d  f       N(= f! , (       d  f       g = fr   )
r5   tempfileNamedTemporaryFiler>   IOErrorr6   r7   r8   r@   r_   )r-   rB   fs      r   test_register_file(EpollSelectorTestCase.test_register_file0  s    MMO((*a""7+

1i223 , ""8,		! -	 +*++ -,	 +*s:   B?!BB?:B.B?
B+	'B?.
B<	8B??
Cr   )	rs   r   r   r   r  r7   r5   r  r   r   r'   r   r  r  )  s    
 y/48Hr'   r  KqueueSelectorz$Test needs selectors.KqueueSelector)c                   4    \ rS rSr\" \SS5      rS rS rSr	g)KqueueSelectorTestCasei;  r   Nc                    U R                  5       n[        R                  " 5       nU R                  [        5       nUR                  U[        R                  5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        5         UR                  U5        S S S 5        g ! , (       d  f       Nr= f! , (       d  f       g = fr   )r5   r   make_bad_fdr>   r   r6   r7   r8   r;   	exceptionr  EBADFr@   r_   )r-   rB   bad_fcms       r   test_register_bad_fd+KqueueSelectorTestCase.test_register_bad_fdB  s     MMO%%'w'2JJui223 (++U[[9x(IIe )(	 (' )(s   !C-C
C
C'c                    U R                  5       nU R                  UR                  5        [        5       nU R	                  UR                  S5      / 5        [        5       nX2-
  nU R                  SUs=:*  =(       a    S:*  Os  U5        g )Nrr   r   r   )r5   r,   r   r   r;   r   r   )r-   rB   r   r   r   s        r   test_empty_select_timeout0KqueueSelectorTestCase.test_empty_select_timeoutN  sg     MMO V!b)VWr((S("-r'   r   )
rs   r   r   r   r  r7   r5   r)  r,  r   r   r'   r   r"  r"  ;  s    
 y"2D9H
.r'   r"  ro   z$Test needs selectors.DevpollSelectorc                   (    \ rS rSr\" \SS5      rSrg)DevpollSelectorTestCasei\  ro   Nr   r  r   r'   r   r/  r/  \  s    
 y"3T:Hr'   r/  c                  .    [         R                  " 5         g r   )r   reap_childrenr   r'   r   tearDownModuler2  d  s    r'   __main__)*r  rS   r   r7   r   r   r   testr   test.supportr   r   r   r   r   ra   unittest.mockr  r   r   ImportErroris_emscriptenis_wasiSkipTestr   r	   AF_INETSOCK_STREAMr&   r)   r   TestCaser  r  r   r  r  r"  r/  r2  rs   mainr   r'   r   <module>r?     s    	     
  ; ;     "
 GOO


J
KK 6<  ""J ..v/A/A &g gT31 31l)2H4E4E )
(183D3D (
 
WY78:8/1F#,,8:8 
WY89;02G$--;  
WY(89;=.13H%...=.> 
WY(9:;=;24I&//;=; zMMO o  Hs   G$ $G0/G0