
    dafN                        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ej(                  sej*                  r ej,                  d       eed      rej0                  Znej2                  ej4                  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jB                   eed      d       G d deeej<                               Z" ejB                   eed      d       G d deeej<                               Z# ejB                   eed      d       G d deeej<                               Z$ ejB                   eed      d        G d! d"eeej<                               Z%d# Z&e'd$k(  r ejP                          yy# e$ r dZY w xY w)%    N)support)	os_helper)socket_helper)sleep)	monotonicz,Cannot create socketpair on Emscripten/WASI.
socketpairc                    t        j                   | ||      5 }|j                  t        j                  df       |j	                          t        j                   | ||      }	 |j                  |j                                |j                         }	 |j                         \  }}||k(  r||fcd d d        S |j                          6# t        $ r |j                           w xY w# 1 sw Y   y xY w)Nr   )
socketbindr   HOSTlistenconnectgetsocknameacceptcloseOSError)familytypeprotolccaddraaddrs           ./root/Python-3.12.4/Lib/test/test_selectors.pyr   r      s    ]]64/ 	1FFM&&*+HHJfdE2A		!--/*hhjGAtu} !t	 	 GGI   		 	s%   A	C&"AC7CC##C&&C/c                 `    g }| D ]&  \  }}||z  s|j                  |j                         ( |S N)appendfileobj)readyflagmatchkeyeventss        r   find_ready_matchingr%   0   s8    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d Z ej.                  ej2                  dk(  d      d        Zd Z ej                   eed      d      d        Z ej                   eed      d      d        Zy)BaseSelectorTestCasec                     t               \  }}| j                  |j                         | j                  |j                         ||fS r   )r   
addCleanupr   )selfrdwrs      r   make_socketpairz$BaseSelectorTestCase.make_socketpair:   s6    B!!2vr&   c                    | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                  d      }| j                  |t
        j                         | j                  |j                  |       | j                  |j                  |j                                | j                  |j                  t
        j                         | j                  |j                  d       | j                  t         |j                  dd       | j                  t         |j                  dt
        j                         | j                  t"        |j                  |t
        j                         | j                  t"        |j                  |j                         t
        j                         y )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@   s<   MMO %%'BjjY116:c9#8#89b)-Y%9%9:6* 	*ajj!V< 	*ajj#y7K7KL 	(AJJI4H4HI 	(AJJ		#..	0r&   c                 f   | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                         |j                  |       | j                  t        |j                  d       | j                  t        |j                  |       y Nr1   )
r2   r*   r   r.   r3   r4   r5   
unregisterr;   r=   r+   r?   r,   r-   s       r   test_unregisterz$BaseSelectorTestCase.test_unregisterZ   s    MMO %%'B	

2y++,	R 	(ALL&9 	(ALL"5r&   c                    | j                         }| j                  |j                         | j                         \  }}|j	                         |j	                         }}|j                  |t        j                         |j                  |t        j                         |j                          |j                          |j                  |       |j                  |       y 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    MMO %%'Byy{BIIK1	

1i**+	

1i++,



	Q	Qr&   posixzrequires posixc                    | j                         }| j                  |j                         | j                         \  }}|j	                         |j	                         }}|j                  |t        j                         |j                  |t        j                         | j                         \  }}|j                          |j                          t        j                  |j	                         |       t        j                  |j	                         |       | j                  t        j                  |       | j                  t        j                  |       |j                  |       |j                  |       y 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   s    MMO %%'Byy{BIIK1	

1i**+	

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

a 


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

2y++,	

2y,,-



	R	Rr&   c                 D   | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                        }|j                  |t
        j                        }| j                  |j                  |j                         | j                  ||j                  |             |j                  |       t               }t               }|j	                  |t
        j                  |      }|j                  |t
        j                  |      }| j                  |j                  |j                         | j                  |j                  |j                         | j                  ||j                  |             | j                  |j                  |       | j!                  t"        |j                  dt
        j                         t               }t$        j&                  j)                         |_        t$        j&                  j)                         |_        |j                  |t
        j                  |       | j+                  |j                  j,                         | j+                  |j                  j,                         y 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   MMO %%'BjjY112 xxI112CJJ4qyy}-	R XXjjY1126xxI00"5T[[1CHHdii0qyy}-B' 	(AHHfi6J6JK X]]'')
}}))+	Y))2.**+,,-r&   c                    | j                   j                  dk(  r t        j                  j	                  d      }n| j                   j                  dk(  r t        j                  j	                  d      }nJ| j                   j                  dk(  r t        j                  j	                  d      }n| j                  d      |5 }t        j                  j                  t              |j                  _	        | j                         }| j                  |j                         | j                         \  }}|j                  |t        j                         | j!                  t#        |j$                        d	       | j'                  t              5  |j                  |t        j(                         d d d        | j!                  t#        |j$                        d
       d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)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   s|    ==!!_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 4Y2234S[!,
	- 
	-4 4
	- 
	-s%   ?CG.!G",-G."G+	'G..G7c                 H   | j                         }| j                  |j                         |j                         }| j	                         \  }}|j                  |t        j                         |j                  |t        j                         |j                          | j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       y 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    MMO ))+%%'B	

2y++,	

2y,,-		,		26,		26(G$7$7<(G$7$7<r&   c                 F   | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                  d      }| j                  ||j                  |             | j                  t        |j                  d       y )Nr0   r1   )r2   r*   r   r.   r3   r4   r5   r8   rW   r;   r=   r>   s        r   test_get_keyz!BaseSelectorTestCase.test_get_key   sw    MMO %%'BjjY116:aiim, 	(AIIv6r&   c                 T   | j                         }| j                  |j                         | j                         \  }}|j	                         }| j                  |       | j                  t        |      d       | j                  t        |      g        |j                  |t        j                  d      }| j                  ||       | j                  |||          | j                  t        |      d       | j                  t        |      |j                         g       | j                  t        |j                               |g       | j                  t               5  |d    d d d        | j                  t"              5  ||= d d d        y # 1 sw Y   +xY w# 1 sw Y   y xY w)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   sT   MMO %%'Byy{TA&dR(jjY116:b$d2h'TA&dbiik]3dkkm,se4 x( 	L	 y) 	R	 			 		 	s   "FFFF'c                 V   | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                         |j	                  |t
        j                        }|j                         }|D ]s  \  }}| j                  t        |t
        j                               | j                  |       | j                  |t
        j                  t
        j                  z   z         u | j                  |t
        j                  fg|       y 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    MMO %%'B	

2y++,B	 5 56! 	@KCOOJsI,A,ABCOOF#V	(<(<(1(=(=)> '? ? @	@ 	69#8#89:FCr&   c                 4   | j                         }| j                  |j                         | j                         \  }}|j	                  d       |j                  |t        j                  t        j                  z        }d\  }}|j                         }| j                  t        |      d       |D ]  \  }}	| j                  t        |t        j                               | j                  ||       | j!                  |	t        j                  t        j                  z   z         |	t        j                  z  r| j!                  |       d}|	t        j                  z  s| j!                  |       d} | j                  |       | j                  |       y )Ns   foo)FF   T)r2   r*   r   r.   sendr3   r4   r5   rG   r   assertLessEqualro   r   r   r7   r8   r\   )
r+   r?   sock1sock2my_key	seen_read
seen_writer   r#   r$   s
             r   test_select_read_writez+BaseSelectorTestCase.test_select_read_write  sR    MMO ++-u

6E9#7#7):O:O#OP ,	: 	S[!,! 
	"KCOOJsI,A,ABCS&)V	(<(<(1(=(=)> '? ? @	,,,  + 		---  ,!

	" 		"
#r&   c                    | j                         }| j                  |j                         | j                         \  }}|5 }|j	                  |t
        j                         |j	                  |t
        j                         d d d        | j                  t        |j                  |       | j                  t        |j                  |       y # 1 sw Y   LxY wr   )r2   r*   r   r.   r3   r4   r5   rG   r;   ru   rW   )r+   r?   r,   r-   sels        r   test_context_managerz)BaseSelectorTestCase.test_context_manager7  s    MMO %%'B 	4#LLY112LLY223	4 	,		26,		26	4 	4s   ACCc                     | j                         }| j                  |j                         t        |d      rB|j	                         }| j                  t        |t                     | j                  |d       y y )Nr:   r   )	r2   r*   r   hasattrr:   r   r   intassertGreaterEqual)r+   r?   r9   s      r   test_filenoz BaseSelectorTestCase.test_filenoD  sZ    MMO 1hBOOJr3/0##B*  r&   c                    | j                         }| j                  |j                         d}d}t        |      }g }g }i }i }t	        |      D ]  }	| j                         \  }
}|j                  |
t        j                         |j                  |t        j                         |j                  |
       |j                  |       |||
<   |
||<    g }|rR|j                         }t        |t        j                        }|s| j                  d       t        j                  |      }|j!                  |       t	        d      D ];  }	|j                         }t        |t        j                        }|r nt#        d       = | j                  d       | j%                  ||   g       |d   }
|
j'                  |      }| j%                  t        |      |       |j                  |       |j)                  ||
          |j)                  |
       |j+                  ||
          |rR| j%                  ||g|z         y )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choicer   r   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_selectorM  s   MMO !c({# 	A))+FBJJr9//0JJr9001NN2NN2CGCG	 HHJE/y7L7LMM 		89}-BGGCL2Y 
:
 3E4=4H4H!J  c

: 		89c"gY6q!B'''"CSXw/KKLLR!LLNN3r7#5 8 	u{23r&   win32z1select.select() cannot be used with empty fd setsc                     | j                         }| j                  |j                         | j                  |j	                  d      g        y )Nr   )timeout)r2   r*   r   r8   r   )r+   r?   s     r   test_empty_selectz&BaseSelectorTestCase.test_empty_select  s:    
 MMO !,b1r&   c                    | j                         }| j                  |j                         | j                         \  }}|j	                  |t
        j                         t               }| j                  dt        |j                  d                   | j                  dt        |j                  d                   | j                  t               |z
  d       |j                  |       |j	                  |t
        j                         t               }| j                  |j                  d             | j                  |j                  d             | j                  t               |z
  d       t               }| j                  |j                  d             t               }||z
  }| j                  d|cxk  xr dk  |       y c |       y )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_timeout  sL   MMO %%'B	

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

2y++,F!%"&
C(V!%V"Wr(S("-("-r&   alarmz%signal.alarm() required for this testc                    | j                         }| j                  |j                         | j                         \  }} G d dt              fd}t        j
                  t
        j                  |      }| j                  t
        j
                  t
        j                  |       	 t        j                  d       |j                  |t        j                         t               }| j                        5  |j                  d       d d d        | j                  t               |z
  d       t        j                  d       y # 1 sw Y   <xY w# t        j                  d       w xY w)Nc                       e Zd Zy)GBaseSelectorTestCase.test_select_interrupt_exc.<locals>.InterruptSelectN)rj   
__module____qualname__ r&   r   InterruptSelectr     s    r&   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     MMO %%'B	i 		" #MM&..'Bv~~7HI	LLOJJr9//0A""?3  OODFQJ,LLO 
 LLOs%   (AE 8E
%E E
E E(c                    | j                         }| j                  |j                         | j                         \  }}t	        j                  t        j
                  d       }| j                  t        j                  t        j
                  |       	 t	        j                  d       |j                  |t        j                         t               }| j                  |j                  d             | j                  t               |z
  d       t	        j                  d       y # t	        j                  d       w xY w)Nc                       y 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     MMO %%'B"MM&..:LMv~~7HI	LLOJJr9//0A QXXc]+##DFQJ4LLOFLLOs   A<D& &D=N) rj   r   r   r.   r@   rE   rJ   rY   
skipUnlessrM   namerQ   rS   rb   rr   rx   rz   r   r   r   r   r   r   skipIfsysplatformr   r   r   r   r   r   r   r&   r   r(   r(   8   s   046
 XG+-=> ?"	$.L-6= 
72D$$:7+34j X__S\\W,HJ2J2.4 X1@BB8 X1@BBr&   r(   c                       e Zd Z ej                  dd       ej                  ed       ej                  d      d                      Z	y)ScalableSelectorMixInr      zTest needs resource modulecpuc                 :   t        j                  t         j                        \  }}	 t        j                  t         j                  ||f       | j	                  t         j                  t         j                  ||f       t        |d      }|dz  }| j                         }| j	                  |j                         t        |dz        D ]W  }	 | j                         \  }}	 |j                  t        j                         |j                  t        j                          Y 	 |j'                         }	| j/                  |dz  t1        |	             y # t        t        f$ r |}Y w xY w# t        $ r | j                  d       Y w xY w# t        $ r4}|j"                  t"        j$                  k(  r| j                  d        d }~ww xY w# t        $ rG}|j"                  t"        j(                  k(  r$t*        j,                  dk(  r| j                  d        d }~ww xY w)Ni       r   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5d|DOOH..0F0F!4L*$&G
 	2MMO w!|$ 	A2--/B

2y334

2y445	&	((*C 	As3x0G $ 	G	  2 01	2  77ell* MM"45  	ww%,,&3<<8+CEF		sV   A#E E*!A F
$G
 E'&E'*FF
	G/GG
	HAHHN)
rj   r   r   r   requires_mac_verrY   r   r   requires_resourcer   r   r&   r   r   r     sS     Wb!$X#?@Wu%-1 & A %-1r&   r   c                   $    e Zd Zej                  Zy)DefaultSelectorTestCaseN)rj   r   r   r4   DefaultSelectorr2   r   r&   r   r   r     s    ((Hr&   r   c                   $    e Zd Zej                  Zy)SelectSelectorTestCaseN)rj   r   r   r4   SelectSelectorr2   r   r&   r   r   r     s    ''Hr&   r   re   z!Test needs selectors.PollSelectorc                        e Zd Z eedd      Zy)PollSelectorTestCasere   Nrj   r   r   getattrr4   r2   r   r&   r   r   r     s    
 y.$7Hr&   r   rd   z"Test needs selectors.EpollSelectorc                   &    e Zd Z eedd      Zd Zy)EpollSelectorTestCaserd   Nc                    | j                         }t        j                         5 }| j                  t              5  |j                  |t        j                         d d d        | j                  t              5  |j                  |       d d d        d d d        y # 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   y xY wr   )
r2   tempfileNamedTemporaryFiler;   IOErrorr3   r4   r5   r=   rW   )r+   r?   fs      r   test_register_filez(EpollSelectorTestCase.test_register_file+  s    MMO((* 	a""7+ 4

1i2234 ""8, 		!		 	4 4 		 	s:   B4!BB49B(B4B%	!B4(B1	-B44B=)rj   r   r   r   r4   r2   r  r   r&   r   r   r   $  s    
 y/48Hr&   r   KqueueSelectorz$Test needs selectors.KqueueSelector)c                   ,    e Zd Z eedd      Zd Zd Zy)KqueueSelectorTestCaser  Nc                    | j                         }t        j                         }| j                  t              5 }|j                  |t        j                         d d d        | j                  j                  j                  t        j                         | j                  t              5  |j                  |       d d d        y # 1 sw Y   mxY w# 1 sw Y   y xY w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=  s     MMO%%'w' 	42JJui223	4++U[[9x( 	IIe	 			4 	4	 	s   !C,CCCc                    | j                         }| j                  |j                         t               }| j	                  |j                  d      g        t               }||z
  }| j                  d|cxk  xr dk  |       y c |       y )Nri   r   r   )r2   r*   r   r   r8   r   r   )r+   r?   r   r   r   s        r   test_empty_select_timeoutz0KqueueSelectorTestCase.test_empty_select_timeoutI  sn     MMO V!b)V"Wr(S("-("-r&   )rj   r   r   r   r4   r2   r  r  r   r&   r   r  r  6  s    
 y"2D9H
.r&   r  rf   z$Test needs selectors.DevpollSelectorc                        e Zd Z eedd      Zy)DevpollSelectorTestCaserf   Nr   r   r&   r   r  r  W  s    
 y"3T:Hr&   r  c                  ,    t        j                          y r   )r   reap_childrenr   r&   r   tearDownModuler  _  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    	     
  " &     "
 GOO
(

J
KK 6< ""J ..v/A/A &a aH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HMMO c  Hs   G G G 