a 5êdgìHã@s¾ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl Z ddlZ ddlZddl mZ z ddlZWney¢dZYn0eedƒr¶ejZnejejdfdd„Zdd „ZGd d „d e jƒZGd d „d ƒZGdd„deƒZGdd„deƒZe  eedƒd¡Gdd„deeƒƒZe  eedƒd¡Gdd„deeƒƒZe  eedƒd¡Gdd„deeƒƒZ e  eedƒd¡Gd d!„d!eeƒƒZ!d"d#„Z"e#d$krºe"ƒdS)%éN)Úsupport)Ú socket_helper)Úsleep)Ú monotonicÚ socketpairc CsÆt |||¡¤}| tjdf¡| ¡t |||¡}zP| | ¡¡| ¡}| ¡\}}||krz||fWWdƒS| ¡qNWnt y¢| ¡‚Yn0Wdƒn1s¸0YdS)Nr) ÚsocketÚbindrZHOSTÚlistenÚconnectÚ getsocknameÚacceptÚcloseÚOSError)ÚfamilyÚtypeÚprotoÚlÚcZcaddrÚaÚaddr©rú//usr/local/lib/python3.9/test/test_selectors.pyrs  cCs*g}|D]\}}||@r| |j¡q|S©N)ÚappendÚfileobj)ÚreadyÚflagÚmatchÚkeyÚeventsrrrÚfind_ready_matching+s  r c@sìeZdZdd„Zdd„Zdd„Zdd„Ze e j d kd ¡d d „ƒZ d d„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Ze ejd!kd"¡d#d$„ƒZd%d&„Ze eed'ƒd(¡d)d*„ƒZe eed'ƒd(¡d+d,„ƒZd-S).ÚBaseSelectorTestCasecCs*tƒ\}}| |j¡| |j¡||fSr)rÚ addCleanupr )ÚselfÚrdÚwrrrrÚmake_socketpair5s   z$BaseSelectorTestCase.make_socketpaircCsÒ| ¡}| |j¡| ¡\}}| |tjd¡}| |tj¡|  |j |¡|  |j |  ¡¡|  |j tj¡|  |jd¡| t|jdd¡| t|jdtj¡| t|j|tj¡| t|j|  ¡tj¡dS)NÚdataré?Biöÿÿÿ)ÚSELECTORr"r r&ÚregisterÚ selectorsÚ EVENT_READZassertIsInstanceÚ SelectorKeyÚ assertEqualrÚfdÚfilenorr'Ú assertRaisesÚ ValueErrorÚKeyError©r#Úsr$r%rrrrÚ test_register;s  ÿz"BaseSelectorTestCase.test_registercCs\| ¡}| |j¡| ¡\}}| |tj¡| |¡| t |jd¡| t |j|¡dS©Nr() r)r"r r&r*r+r,Ú unregisterr1r3©r#r5r$r%rrrÚtest_unregisterUs   z$BaseSelectorTestCase.test_unregistercCsv| ¡}| |j¡| ¡\}}| ¡| ¡}}| |tj¡| |tj¡| ¡| ¡|  |¡|  |¡dSr) r)r"r r&r0r*r+r,Ú EVENT_WRITEr8)r#r5r$r%ÚrÚwrrrÚtest_unregister_after_fd_closeds   z3BaseSelectorTestCase.test_unregister_after_fd_closeÚposixzrequires posixcCs¾| ¡}| |j¡| ¡\}}| ¡| ¡}}| |tj¡| |tj¡| ¡\}}| ¡| ¡t   | ¡|¡t   | ¡|¡| t j|¡| t j|¡|  |¡|  |¡dSr) r)r"r r&r0r*r+r,r;ÚosÚdup2r8)r#r5r$r%r<r=Zrd2Zwr2rrrÚ(test_unregister_after_fd_close_and_reuseps    z=BaseSelectorTestCase.test_unregister_after_fd_close_and_reusecCsd| ¡}| |j¡| ¡\}}| |tj¡| |tj¡| ¡| ¡| |¡| |¡dSr) r)r"r r&r*r+r,r;r8r9rrrÚ"test_unregister_after_socket_close‚s   z7BaseSelectorTestCase.test_unregister_after_socket_closec Cs6| ¡}| |j¡| ¡\}}| |tj¡}| |tj¡}|  |j |j ¡|  ||  |¡¡|  |¡tƒ}tƒ}| |tj|¡}| |tj|¡}|  |j |j ¡|  |j|j¡|  ||  |¡¡|  |j|¡| t|jdtj¡tƒ}tj ¡|_tj ¡|_ | |tj|¡| |jj¡| |j j¡dSr7)r)r"r r&r*r+r,Úmodifyr;ZassertNotEqualrr.Úget_keyr8Úobjectr'r1r3ÚunittestÚmockÚMockÚ assertFalseZcalled) r#r5r$r%rZkey2Zd1Zd2Zd3rrrÚ test_modifys.     z BaseSelectorTestCase.test_modifyc Cs|jjdkrtj d¡}n>|jjdkr4tj d¡}n$|jjdkrNtj d¡}n | d¡‚|¬}tjjtd|j_ | ¡}|  |j ¡|  ¡\}}|  |tj¡| t|jƒd ¡| t¡|  |tj¡Wdƒn1sÞ0Y| t|jƒd ¡Wdƒn1s0YdS) NÚ EpollSelectorz%selectors.EpollSelector._selector_clsÚ PollSelectorz$selectors.PollSelector._selector_clsÚDevpollSelectorz'selectors.DevpollSelector._selector_clsÚ)Z side_effectér)r)Ú__name__rGrHÚpatchÚskipTestrIÚZeroDivisionErrorZ return_valuerDr"r r&r*r+r,r.ÚlenÚ_mapr1r;)r#rRÚmr5r$r%rrrÚtest_modify_unregister³s2 ÿ ÿ ÿ ÿ    ,z+BaseSelectorTestCase.test_modify_unregistercCs| ¡}| |j¡| ¡}| ¡\}}| |tj¡| |tj¡| ¡|  t |j |¡|  t |j |¡|  t |j |¡|  t |j |¡dSr)r)r"r Úget_mapr&r*r+r,r;r1Ú RuntimeErrorrEr3Ú __getitem__)r#r5Úmappingr$r%rrrÚ test_closeÎs  zBaseSelectorTestCase.test_closecCsV| ¡}| |j¡| ¡\}}| |tjd¡}| || |¡¡|  t |jd¡dS)Nr'r() r)r"r r&r*r+r,r.rEr1r3r4rrrÚ test_get_keyÞs   z!BaseSelectorTestCase.test_get_keycCs"| ¡}| |j¡| ¡\}}| ¡}| |¡| t|ƒd¡| t|ƒg¡|  |t j d¡}|  ||¡| |||¡| t|ƒd¡| t|ƒ|  ¡g¡| t| ¡ƒ|g¡| t¡|dWdƒn1sâ0Y| t¡||=Wdƒn1s0YdS)Nrr'rPr()r)r"r r&rYrJr.rUÚlistr*r+r,ZassertInr0Úvaluesr1r3Ú TypeError)r#r5r$r%ÚkeysrrrrÚ test_get_mapês"     & z!BaseSelectorTestCase.test_get_mapcCsž| ¡}| |j¡| ¡\}}| |tj¡| |tj¡}| ¡}|D]<\}}|  t |tj ƒ¡|  |¡|  |tjtjB@¡qH|  |tjfg|¡dSr)r)r"r r&r*r+r,r;ÚselectÚ assertTrueÚ isinstancer-rJr.)r#r5r$r%Zwr_keyÚresultrrrrrÚ test_selects     ÿ z BaseSelectorTestCase.test_selectcCs„| ¡}| |j¡| ¡\}}|,}| |tj¡| |tj¡Wdƒn1sV0Y| t |j |¡| t |j |¡dSr) r)r"r r&r*r+r,r;r1rZrE)r#r5r$r%ZselrrrÚtest_context_managers  ,z)BaseSelectorTestCase.test_context_managercCsF| ¡}| |j¡t|dƒrB| ¡}| t|tƒ¡| |d¡dS)Nr0r) r)r"r Úhasattrr0rerfÚintÚassertGreaterEqual)r#r5r/rrrÚ test_fileno"s   z BaseSelectorTestCase.test_filenocCsˆ| ¡}| |j¡d}d}t|ƒ}g}g}i}i}t|ƒD]P} | ¡\} } | | tj¡| | tj ¡|  | ¡|  | ¡| || <| || <q.InterruptSelectN)rQÚ __module__Ú __qualname__rrrrÚInterruptSelect‹srŠcsˆ‚dSrr©Úargs©rŠrrÚhandlerŽsz?BaseSelectorTestCase.test_select_interrupt_exc..handlerrPég@r)r)r"r r&Ú ExceptionÚsignalÚSIGALRMr‡r*r+r,r€r1rdr)r#r5r$r%rŽÚorig_alrm_handlerr‚rrrÚtest_select_interrupt_excƒs     (z.BaseSelectorTestCase.test_select_interrupt_excc Cs¤| ¡}| |j¡| ¡\}}t tjdd„¡}| tjtj|¡zNt d¡| |tj ¡t ƒ}|  |  d¡¡|  t ƒ|d¡Wt d¡n t d¡0dS)NcWsdSrrr‹rrrÚ©ózDBaseSelectorTestCase.test_select_interrupt_noraise..rPgø?gð?r)r)r"r r&r‘r’r‡r*r+r,r€rJrdrl)r#r5r$r%r“r‚rrrÚtest_select_interrupt_noraise¡s   z2BaseSelectorTestCase.test_select_interrupt_noraiseN)rQrˆr‰r&r6r:r>rGÚ skipUnlessr@ÚnamerBrCrKrXr]r^rcrhrirmryZskipIfÚsysÚplatformr|r†rjr‘r”r—rrrrr!3s:   &   5 ÿ  ÿ  ÿr!c@s,eZdZe dd¡e ed¡dd„ƒƒZdS)ÚScalableSelectorMixInroézTest needs resource modulec Cs’t tj¡\}}z6t tj||f¡| tjtj||f¡t|dƒ}Wnttfy`|}Yn0|d8}| ¡}| |j ¡t |dƒD]”}z|  ¡\}}Wntyº|  d¡Yn0z |  |tj¡|  |tj¡WqŠty}z&|jtjkr|  d¡‚WYd}~qŠd}~00qŠz | ¡} WnLtyx}z2|jtjkrbtjdkrb|  d¡‚WYd}~n d}~00| |dt| ƒ¡dS)Nié ézFD limit reachedÚdarwinz%Invalid argument error calling poll())ÚresourceZ getrlimitZ RLIMIT_NOFILEZ setrlimitr"Úminrr2r)r rpr&rSr*r+r,r;ÚerrnoÚENOSPCrdÚEINVALršr›r.rU) r#ZsoftZhardZNUM_FDSr5rwr$r%ÚeÚfdsrrrÚtest_above_fd_setsize½s> ÿ      z+ScalableSelectorMixIn.test_above_fd_setsizeN) rQrˆr‰rZrequires_mac_verrGr˜r¡r¨rrrrrœºs  rœc@seZdZejZdS)ÚDefaultSelectorTestCaseN)rQrˆr‰r+ÚDefaultSelectorr)rrrrr©ïsr©c@seZdZejZdS)ÚSelectSelectorTestCaseN)rQrˆr‰r+ÚSelectSelectorr)rrrrr«ôsr«rMz!Test needs selectors.PollSelectorc@seZdZeeddƒZdS)ÚPollSelectorTestCaserMN©rQrˆr‰Úgetattrr+r)rrrrr­ùsr­rLz"Test needs selectors.EpollSelectorc@s eZdZeeddƒZdd„ZdS)ÚEpollSelectorTestCaserLNc Cs | ¡}t ¡|}| t¡| |tj¡Wdƒn1s@0Y| t¡|  |¡Wdƒn1st0YWdƒn1s’0YdSr) r)ÚtempfileÚNamedTemporaryFiler1ÚIOErrorr*r+r,r3rE)r#r5ÚfrrrÚtest_register_files   , z(EpollSelectorTestCase.test_register_file)rQrˆr‰r¯r+r)rµrrrrr°s r°ÚKqueueSelectorz$Test needs selectors.KqueueSelector)c@s(eZdZeeddƒZdd„Zdd„ZdS)ÚKqueueSelectorTestCaser¶NcCs’| ¡}t ¡}| t¡}| |tj¡Wdƒn1s>0Y| |j j t j ¡| t ¡|  |¡Wdƒn1s„0YdSr)r)rZ make_bad_fdr1rr*r+r,r.Ú exceptionr£ÚEBADFr3rE)r#r5Zbad_fÚcmrrrÚtest_register_bad_fds , z+KqueueSelectorTestCase.test_register_bad_fdcCs^| ¡}| |j¡tƒ}| | d¡g¡tƒ}||}| d|koPdkn|¡dS)NrPr~r)r)r"r r€r.rdre)r#r5rƒr„r…rrrÚtest_empty_select_timeout#s z0KqueueSelectorTestCase.test_empty_select_timeout)rQrˆr‰r¯r+r)r»r¼rrrrr·s  r·rNz$Test needs selectors.DevpollSelectorc@seZdZeeddƒZdS)ÚDevpollSelectorTestCaserNNr®rrrrr½1sr½cCs&ttttttg}tj|Žt ¡dSr) r©r«r­r°r·r½rZ run_unittestÚ reap_children)ZtestsrrrÚ test_main9s þ r¿Ú__main__)$r£r@rqr+r‘rršÚtestrZ test.supportrr€rrGZ unittest.mockr±rr¡Ú ImportErrorrjrÚAF_INETÚ SOCK_STREAMr ZTestCaser!rœr©r«r˜r­r°r·r½r¿rQrrrrÚs^         5 ÿ ÿ ÿ ÿ