o
    HXîhI  ã                   @   sâ  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 zd dlZW n eyW   dZY nw eedƒraejZn
ejejd fdd„Zd	d
„ ZG dd„ dƒZG dd„ dƒZG dd„ deejƒZG dd„ deejƒZe eedƒd¡G dd„ deeejƒƒZe eedƒd¡G dd„ deeejƒƒZ e eedƒd¡G dd„ deeejƒƒZ!e eedƒd ¡G d!d"„ d"eeejƒƒZ"d#d$„ Z#e$d%krïe %¡  dS dS )&é    N)Úsupport)Ú	os_helper)Úsocket_helper)Úsleep)Ú	monotonicÚ
socketpairc              	   C   s²   t   | ||¡H}| tjdf¡ | ¡  t   | ||¡}z'| | ¡ ¡ | ¡ }	 | ¡ \}}||kr>||fW W  d   ƒ S | ¡  q( t	yN   | ¡  ‚ w 1 sRw   Y  d S )Nr   )
ÚsocketÚbindr   ZHOSTÚlistenÚconnectÚgetsocknameÚacceptÚcloseÚOSError)ÚfamilyÚtypeÚprotoÚlÚcZcaddrÚaÚaddr© r   ú=/opt/python-3.10.19/usr/lib/python3.10/test/test_selectors.pyr      s&   õûþóc                 C   s*   g }| D ]\}}||@ r|  |j¡ q|S ©N)ÚappendÚfileobj)ÚreadyÚflagÚmatchÚkeyÚeventsr   r   r   Úfind_ready_matching,   s   €r!   c                   @   sì   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	j
d	kd
¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Ze ejd!kd"¡d#d$„ ƒZd%d&„ Ze eed'ƒd(¡d)d*„ ƒZe eed'ƒd(¡d+d,„ ƒZd-S ).ÚBaseSelectorTestCasec                 C   s*   t ƒ \}}|  |j¡ |  |j¡ ||fS r   )r   Ú
addCleanupr   )ÚselfÚrdÚwrr   r   r   Úmake_socketpair6   s   
z$BaseSelectorTestCase.make_socketpairc                 C   sÒ   |   ¡ }|  |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_READZassertIsInstanceÚSelectorKeyÚassertEqualr   ÚfdÚfilenor    r(   ÚassertRaisesÚ
ValueErrorÚKeyError©r$   Úsr%   r&   r   r   r   r   Útest_register<   s   ÿz"BaseSelectorTestCase.test_registerc                 C   s\   |   ¡ }|  |j¡ |  ¡ \}}| |tj¡ | |¡ |  t	|jd¡ |  t	|j|¡ d S ©Nr)   )
r*   r#   r   r'   r+   r,   r-   Ú
unregisterr2   r4   ©r$   r6   r%   r&   r   r   r   Útest_unregisterV   s   
z$BaseSelectorTestCase.test_unregisterc                 C   sv   |   ¡ }|  |j¡ |  ¡ \}}| ¡ | ¡ }}| |tj¡ | |tj¡ | ¡  | ¡  | 	|¡ | 	|¡ d S r   )
r*   r#   r   r'   r1   r+   r,   r-   ÚEVENT_WRITEr9   )r$   r6   r%   r&   ÚrÚwr   r   r   Útest_unregister_after_fd_closee   s   
z3BaseSelectorTestCase.test_unregister_after_fd_closeÚposixzrequires posixc                 C   s¾   |   ¡ }|  |j¡ |  ¡ \}}| ¡ | ¡ }}| |tj¡ | |tj¡ |  ¡ \}}| ¡  | ¡  t	 
| ¡ |¡ t	 
| ¡ |¡ |  t	j|¡ |  t	j|¡ | |¡ | |¡ d S r   )r*   r#   r   r'   r1   r+   r,   r-   r<   ÚosÚdup2r9   )r$   r6   r%   r&   r=   r>   Zrd2Zwr2r   r   r   Ú(test_unregister_after_fd_close_and_reuseq   s   
z=BaseSelectorTestCase.test_unregister_after_fd_close_and_reusec                 C   sd   |   ¡ }|  |j¡ |  ¡ \}}| |tj¡ | |tj¡ | ¡  | ¡  | |¡ | |¡ d S r   )	r*   r#   r   r'   r+   r,   r-   r<   r9   r:   r   r   r   Ú"test_unregister_after_socket_closeƒ   s   
z7BaseSelectorTestCase.test_unregister_after_socket_closec           	      C   s6  |   ¡ }|  |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 r8   )r*   r#   r   r'   r+   r,   r-   Úmodifyr<   ZassertNotEqualr    r/   Úget_keyr9   Úobjectr(   r2   r4   ÚunittestÚmockÚMockÚassertFalseZcalled)	r$   r6   r%   r&   r   Zkey2Zd1Zd2Zd3r   r   r   Útest_modifyŽ   s.   
z BaseSelectorTestCase.test_modifyc              	   C   s  | j jdkrtj d¡}n| j jdkrtj d¡}n| j jdkr'tj d¡}n|  d¡‚|W}tjjtd|j_	|   ¡ }|  
|j¡ |  ¡ \}}| |tj¡ |  t|jƒd	¡ |  t¡ | 	|tj¡ W d   ƒ n1 sow   Y  |  t|jƒd
¡ W d   ƒ d S 1 sˆw   Y  d S )NÚEpollSelectorz%selectors.EpollSelector._selector_clsÚPollSelectorz$selectors.PollSelector._selector_clsÚDevpollSelectorz'selectors.DevpollSelector._selector_clsÚ )Zside_effecté   r   )r*   Ú__name__rH   rI   ÚpatchÚskipTestrJ   ÚZeroDivisionErrorZreturn_valuerE   r#   r   r'   r+   r,   r-   r/   ÚlenÚ_mapr2   r<   )r$   rS   Úmr6   r%   r&   r   r   r   Útest_modify_unregister´   s6   ÿÿÿ

ÿÿ"öz+BaseSelectorTestCase.test_modify_unregisterc                 C   s   |   ¡ }|  |j¡ | ¡ }|  ¡ \}}| |tj¡ | |tj¡ | ¡  |  	t
|j|¡ |  	t
|j|¡ |  	t|j|¡ |  	t|j|¡ d S r   )r*   r#   r   Úget_mapr'   r+   r,   r-   r<   r2   ÚRuntimeErrorrF   r4   Ú__getitem__)r$   r6   Úmappingr%   r&   r   r   r   Ú
test_closeÏ   s   zBaseSelectorTestCase.test_closec                 C   sV   |   ¡ }|  |j¡ |  ¡ \}}| |tjd¡}|  || |¡¡ |  	t
|jd¡ d S )Nr(   r)   )r*   r#   r   r'   r+   r,   r-   r/   rF   r2   r4   r5   r   r   r   Útest_get_keyß   s   z!BaseSelectorTestCase.test_get_keyc                 C   s"  |   ¡ }|  |j¡ |  ¡ \}}| ¡ }|  |¡ |  t|ƒd¡ |  t|ƒg ¡ | 	|t
jd¡}|  ||¡ |  ||| ¡ |  t|ƒd¡ |  t|ƒ| ¡ g¡ |  t| ¡ ƒ|g¡ |  t¡ |d  W d   ƒ n1 sqw   Y  |  t¡ ||= W d   ƒ d S 1 sŠw   Y  d S )Nr   r(   rQ   r)   )r*   r#   r   r'   rZ   rK   r/   rV   Úlistr+   r,   r-   ZassertInr1   Úvaluesr2   r4   Ú	TypeError)r$   r6   r%   r&   Úkeysr   r   r   r   Útest_get_mapë   s&   

ÿ"ÿz!BaseSelectorTestCase.test_get_mapc                 C   sž   |   ¡ }|  |j¡ |  ¡ \}}| |tj¡ | |tj¡}| ¡ }|D ]\}}|  	t
|tjƒ¡ |  	|¡ |  |tjtjB  @ ¡ q$|  |tjfg|¡ d S r   )r*   r#   r   r'   r+   r,   r-   r<   ÚselectÚ
assertTrueÚ
isinstancer.   rK   r/   )r$   r6   r%   r&   Zwr_keyÚresultr   r    r   r   r   Útest_select  s   

ÿz BaseSelectorTestCase.test_selectc                 C   s„   |   ¡ }|  |j¡ |  ¡ \}}|}| |tj¡ | |tj¡ W d   ƒ n1 s+w   Y  |  t	|j
|¡ |  t	|j
|¡ d S r   )r*   r#   r   r'   r+   r,   r-   r<   r2   r[   rF   )r$   r6   r%   r&   Zselr   r   r   Útest_context_manager  s   þz)BaseSelectorTestCase.test_context_managerc                 C   sJ   |   ¡ }|  |j¡ t|dƒr#| ¡ }|  t|tƒ¡ |  |d¡ d S d S )Nr1   r   )	r*   r#   r   Úhasattrr1   rf   rg   ÚintÚassertGreaterEqual)r$   r6   r0   r   r   r   Útest_fileno#  s   
ýz BaseSelectorTestCase.test_filenoc                 C   s†  |   ¡ }|  |j¡ d}d}t|ƒ}g }g }i }i }t|ƒD ](}	|  ¡ \}
}| |
tj¡ | |tj	¡ | 
|
¡ | 
|¡ |||
< |
||< qg }|r¸| ¡ }t|tj	ƒ}|s\|  d¡ t |¡}| |¡ tdƒD ]}	| ¡ }t|tjƒ}|rz n
tdƒ qj|  d¡ |  || g|¡ |d }
|
 |¡}|  t|ƒ|¡ | 
|¡ | ||
 ¡ | |
¡ | ||
 ¡ |sK|  ||g| ¡ d S )Né   s    This is a test.zno sockets ready for writingé
   gš™™™™™¹?zno sockets ready for readingr   )r*   r#   r   rV   Úranger'   r+   r,   r-   r<   r   re   r!   ZfailÚrandomÚchoiceÚsendr   r/   Úrecvr9   Úremove)r$   r6   ZNUM_SOCKETSZMSGZMSG_LENÚreadersZwritersZr2wZw2rÚir%   r&   Zbufsr   Zready_writersZready_readersÚbufr   r   r   Útest_selector,  sX   





ÿ




æz"BaseSelectorTestCase.test_selectorÚwin32z1select.select() cannot be used with empty fd setsc                 C   s,   |   ¡ }|  |j¡ |  |jddg ¡ d S )Nr   )Útimeout)r*   r#   r   r/   re   )r$   r6   r   r   r   Útest_empty_selecta  s   z&BaseSelectorTestCase.test_empty_selectc                 C   s
  |   ¡ }|  |j¡ |  ¡ \}}| |tj¡ tƒ }|  dt	| 
d¡ƒ¡ |  dt	| 
d¡ƒ¡ |  tƒ | d¡ | |¡ | |tj¡ tƒ }|  | 
d¡¡ |  | 
d¡¡ |  tƒ | d¡ tƒ }|  | 
d¡¡ tƒ }|| }|  d|  ko~dkn  |¡ d S )NrQ   r   éÿÿÿÿg      à?çš™™™™™é?ç       @)r*   r#   r   r'   r+   r,   r<   Útimer/   rV   re   Ú
assertLessr9   r-   rK   rf   )r$   r6   r%   r&   ÚtÚt0Út1Údtr   r   r   Útest_timeoutj  s&   
$z!BaseSelectorTestCase.test_timeoutÚalarmz%signal.alarm() required for this testc              	      sÞ   |   ¡ }|  |j¡ |  ¡ \}}G dd„ dtƒ‰ ‡ fdd„}t tj|¡}|  tjtj|¡ z:t d¡ | |t	j
¡ tƒ }|  ˆ ¡ | d¡ W d   ƒ n1 sSw   Y  |  tƒ | d¡ W t d¡ d S t d¡ w )	Nc                   @   s   e Zd ZdS )zGBaseSelectorTestCase.test_select_interrupt_exc.<locals>.InterruptSelectN)rR   Ú
__module__Ú__qualname__r   r   r   r   ÚInterruptSelectŒ  s    r‹   c                     s   ˆ ‚r   r   ©Úargs©r‹   r   r   Úhandler  s   z?BaseSelectorTestCase.test_select_interrupt_exc.<locals>.handlerrQ   é   g      @r   )r*   r#   r   r'   Ú	ExceptionÚsignalÚSIGALRMrˆ   r+   r,   r-   r   r2   re   r‚   )r$   r6   r%   r&   r   Úorig_alrm_handlerrƒ   r   rŽ   r   Útest_select_interrupt_exc„  s    
ÿz.BaseSelectorTestCase.test_select_interrupt_excc              	   C   s¢   |   ¡ }|  |j¡ |  ¡ \}}t tjdd„ ¡}|  tjtj|¡ z(t d¡ | |tj	¡ t
ƒ }|  | d¡¡ |  t
ƒ | d¡ W t d¡ d S t d¡ w )Nc                  W   s   d S r   r   rŒ   r   r   r   Ú<lambda>ª  s    zDBaseSelectorTestCase.test_select_interrupt_noraise.<locals>.<lambda>rQ   g      ø?g      ð?r   )r*   r#   r   r'   r’   r“   rˆ   r+   r,   r-   r   rK   re   rm   )r$   r6   r%   r&   r”   rƒ   r   r   r   Útest_select_interrupt_noraise¢  s   
z2BaseSelectorTestCase.test_select_interrupt_noraiseN)rR   r‰   rŠ   r'   r7   r;   r?   rH   Ú
skipUnlessrA   ÚnamerC   rD   rL   rY   r^   r_   rd   ri   rj   rn   rz   ZskipIfÚsysÚplatformr}   r‡   rk   r’   r•   r—   r   r   r   r   r"   4   s<    
&	5ÿ
ÿ
ÿr"   c                   @   s,   e Zd Ze dd¡e ed¡dd„ ƒƒZdS )ÚScalableSelectorMixInrp   é   zTest needs resource modulec           
      C   sn  t  t j¡\}}zt  t j||f¡ |  t jt j||f¡ t|dƒ}W n ttfy0   |}Y nw |d8 }|  ¡ }|  |j	¡ t
|d ƒD ]A}z|  ¡ \}}W n ty]   |  d¡ Y nw z| |tj¡ | |tj¡ W qE ty† } z|jtjkr|  d¡ ‚ d }~ww z| ¡ }	W n tyª } z|jtjkr¥tjdkr¥|  d¡ ‚ d }~ww |  |d t|	ƒ¡ d S )Ni   é    é   zFD limit reachedÚdarwinz%Invalid argument error calling poll())ÚresourceZ	getrlimitZRLIMIT_NOFILEZ	setrlimitr#   Úminr   r3   r*   r   rq   r'   rT   r+   r,   r-   r<   ÚerrnoÚENOSPCre   ÚEINVALrš   r›   r/   rV   )
r$   ZsoftZhardZNUM_FDSr6   rx   r%   r&   ÚeÚfdsr   r   r   Útest_above_fd_setsize¾  sJ   ÿÿü
€û
€üz+ScalableSelectorMixIn.test_above_fd_setsizeN)	rR   r‰   rŠ   r   Zrequires_mac_verrH   r˜   r¡   r¨   r   r   r   r   rœ   »  s    

rœ   c                   @   ó   e Zd ZejZdS )ÚDefaultSelectorTestCaseN)rR   r‰   rŠ   r,   ÚDefaultSelectorr*   r   r   r   r   rª   ð  ó    
rª   c                   @   r©   )ÚSelectSelectorTestCaseN)rR   r‰   rŠ   r,   ÚSelectSelectorr*   r   r   r   r   r­   õ  r¬   r­   rN   z!Test needs selectors.PollSelectorc                   @   ó   e Zd ZeeddƒZdS )ÚPollSelectorTestCaserN   N©rR   r‰   rŠ   Úgetattrr,   r*   r   r   r   r   r°   ú  ó    r°   rM   z"Test needs selectors.EpollSelectorc                   @   s    e Zd ZeeddƒZdd„ ZdS )ÚEpollSelectorTestCaserM   Nc              	   C   s²   |   ¡ }t ¡ G}|  t¡ | |tj¡ W d   ƒ n1 s w   Y  |  t¡ | 	|¡ W d   ƒ n1 s:w   Y  W d   ƒ d S W d   ƒ d S 1 sRw   Y  d S r   )
r*   ÚtempfileÚNamedTemporaryFiler2   ÚIOErrorr+   r,   r-   r4   rF   )r$   r6   Úfr   r   r   Útest_register_file	  s   
ÿÿü"üz(EpollSelectorTestCase.test_register_file)rR   r‰   rŠ   r²   r,   r*   r¹   r   r   r   r   r´     s    r´   ÚKqueueSelectorz$Test needs selectors.KqueueSelector)c                   @   s(   e Zd ZeeddƒZdd„ Zdd„ ZdS )ÚKqueueSelectorTestCaserº   Nc                 C   s”   |   ¡ }t ¡ }|  t¡}| |tj¡ W d   ƒ n1 sw   Y  |  |j	j
t
j¡ |  t¡ | |¡ W d   ƒ d S 1 sCw   Y  d S r   )r*   r   Zmake_bad_fdr2   r   r+   r,   r-   r/   Ú	exceptionr£   ÚEBADFr4   rF   )r$   r6   Zbad_fÚcmr   r   r   Útest_register_bad_fd  s   ÿ"ÿz+KqueueSelectorTestCase.test_register_bad_fdc                 C   s^   |   ¡ }|  |j¡ tƒ }|  | d¡g ¡ tƒ }|| }|  d|  ko(dkn  |¡ d S )NrQ   r   r€   )r*   r#   r   r   r/   re   rf   )r$   r6   r„   r…   r†   r   r   r   Útest_empty_select_timeout'  s   $z0KqueueSelectorTestCase.test_empty_select_timeout)rR   r‰   rŠ   r²   r,   r*   r¿   rÀ   r   r   r   r   r»     s    r»   rO   z$Test needs selectors.DevpollSelectorc                   @   r¯   )ÚDevpollSelectorTestCaserO   Nr±   r   r   r   r   rÁ   5  r³   rÁ   c                   C   s   t  ¡  d S r   )r   Úreap_childrenr   r   r   r   ÚtearDownModule=  s   rÃ   Ú__main__)&r£   rA   rr   r,   r’   r   rš   Útestr   Ztest.supportr   r   r   r   rH   Zunittest.mockrµ   r   r¡   ÚImportErrorrk   r   ÚAF_INETÚSOCK_STREAMr!   r"   rœ   ZTestCaserª   r­   r˜   r°   r´   r»   rÁ   rÃ   rR   Úmainr   r   r   r   Ú<module>   sv    ÿ
   
5ÿÿÿÿÿÿÿÿÿ