a 4êdg\gã@s’ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZe jr„e d¡‚eedƒZGdd„dƒZGd d „d ƒZGd d „d ƒZGd d„dƒZdd„Zdd„ZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZe  eedƒd¡Gdd„dejƒƒZ!Gdd „d ej"ƒZ#Gd!d"„d"ej"ƒZ$Gd#d$„d$e#ƒZ%Gd%d&„d&ƒZ&Gd'd(„d(e&ƒZ'e  e j(d)¡Gd*d+„d+e&ƒƒZ)e  ed,¡Gd-d.„d.e&ƒƒZ*Gd/d0„d0e'ejƒZ+e  eed1ƒd2¡Gd3d4„d4e'ejƒƒZ,Gd5d6„d6e)ejƒZ-e  eed1ƒd2¡Gd7d8„d8e)ejƒƒZ.Gd9d:„d:e*ejƒZ/e  eed1ƒd2¡Gd;d<„déN)Úsupport)Ú socket_helper)ÚBytesIOztest is not helpful for PGOÚAF_UNIXc@s$eZdZdd„Zdd„Zdd„ZdS)Ú dummysocketcCs d|_dS©NF©Úclosed©Úself©r ú./usr/local/lib/python3.9/test/test_asyncore.pyÚ__init__szdummysocket.__init__cCs d|_dS©NTrr r r r Úcloseszdummysocket.closecCsdS)Né*r r r r r Úfilenoszdummysocket.filenoN)Ú__name__Ú __module__Ú __qualname__rrrr r r r rsrc@seZdZdd„Zdd„ZdS)Ú dummychannelcCs tƒ|_dS©N)rÚsocketr r r r r!szdummychannel.__init__cCs|j ¡dSr)rrr r r r r$szdummychannel.closeN)rrrrrr r r r r src@s(eZdZdd„Zdd„ZeZeZeZdS)Ú exitingdummycCsdSrr r r r r r(szexitingdummy.__init__cCs t ¡‚dSr)ÚasyncoreÚExitNowr r r r Úhandle_read_event+szexitingdummy.handle_read_eventN)rrrrrÚhandle_write_eventÚ handle_closeÚhandle_expt_eventr r r r r's rc@s0eZdZdd„Zdd„ZeZeZeZdd„ZdS)Ú crashingdummycCs d|_dSr©Ú error_handledr r r r r3szcrashingdummy.__init__cCs tƒ‚dSr©Ú Exceptionr r r r r6szcrashingdummy.handle_read_eventcCs d|_dSrr!r r r r Ú handle_error=szcrashingdummy.handle_errorN© rrrrrrrrr%r r r r r 2s r c CsÜzÄz| ¡| ¡\}}Wntjy.Yn„0d}t ¡}|dkrªt ¡|dkrªt |gggd¡\}}} |rž|d8}| d¡} | |   dd¡¡d| vržqªt  d ¡q<|  ¡W|  ¡|  ¡n|  ¡|  ¡0dS) NéÈrg@çš™™™™™¹?éé ó óç{®Gáz„?) ÚlistenÚacceptrÚtimeoutÚtimeÚ monotonicÚselectÚrecvÚwriteÚreplaceÚsleeprÚset) ÚevtÚbufZservÚconnÚaddrÚnÚstartÚrÚwÚeÚdatar r r Úcapture_serverAs*    ÿrCcCs6tr(|jtjkr(t |¡t ||¡n | |¡dS)z9Helper function to bind a socket according to its family.N) ÚHAS_UNIX_SOCKETSÚfamilyrrrÚunlinkrZbind_unix_socketÚbind)Úsockr<r r r Ú bind_af_awareZs rIc@sNeZdZdd„Ze eedƒd¡dd„ƒZdd„Z d d „Z d d „Z d d„Z dS)ÚHelperFunctionTestscCsštƒ}| tjtj|¡| tjtj|¡| tjtj|¡tƒ}t |¡| |j d¡tƒ}t |¡| |j d¡tƒ}t |¡| |j d¡dSr) rÚ assertRaisesrrÚreadr5Ú _exceptionr Ú assertEqualr")r Útr1Útr2r r r Útest_readwriteexces   z%HelperFunctionTests.test_readwriteexcÚpollúselect.poll requiredc Csäd}tjdftjdftjdftjdftjdftjdff}Gdd„dƒ}|D]”\}}|ƒ}| t||ƒd¡t   ||¡|D]}| t||ƒ||k¡qzt ƒ}|  t j t j ||¡tƒ} | | jd¡t   | |¡| | jd ¡qJdS) N)rLÚexptr5r r"rLrTr5r c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)z3HelperFunctionTests.test_readwrite..testobjcSs"d|_d|_d|_d|_d|_dSr)rLr5r rTr"r r r r r’s z.testobj.__init__cSs d|_dSr)rLr r r r r™szEHelperFunctionTests.test_readwrite..testobj.handle_read_eventcSs d|_dSr)r5r r r r rœszFHelperFunctionTests.test_readwrite..testobj.handle_write_eventcSs d|_dSrrr r r r rŸsz@HelperFunctionTests.test_readwrite..testobj.handle_closecSs d|_dSr)rTr r r r r¢szEHelperFunctionTests.test_readwrite..testobj.handle_expt_eventcSs d|_dSrr!r r r r r%¥sz@HelperFunctionTests.test_readwrite..testobj.handle_errorNr&r r r r Útestobj‘s rUFT)r3ÚPOLLINÚPOLLPRIÚPOLLOUTÚPOLLERRÚPOLLHUPÚPOLLNVALrNÚgetattrrZ readwriterrKrr r") r Z attributesÚexpectedrUÚflagZ expectedattrZtobjÚattrrOrPr r r Útest_readwrite‚s*ú    z"HelperFunctionTests.test_readwritecCs| d¡dSr©Úcloseall_checkr r r r Ú test_closeall¾sz!HelperFunctionTests.test_closeallcCs| d¡dSrrar r r r Útest_closeall_defaultÁsz)HelperFunctionTests.test_closeall_defaultcCs´g}i}tdƒD],}tƒ}| |¡| |jjd¡|||<q|r|tj}z |t_t ¡Wtj|}t_q†tj|}t_0n t |¡| t |ƒd¡|D]}| |jjd¡qšdS)Nr*FrT) ÚrangerÚappendrNrr rÚ socket_mapÚ close_allÚlen)r Z usedefaultÚlZtestmapÚiÚcZ socketmapr r r rbÄs"    " z"HelperFunctionTests.closeall_checkc Cs¢z tdƒ‚Wn"t ¡\}}}t ¡}Yn 0| d¡|\\}}}}} } | tj  |¡dd¡| |d¡| ||¡| | |¡| | d|||f¡dS)NúI don't like spam!zExpected exceptionéÿÿÿÿztest_asyncore.pyÚtest_compact_tracebackz [%s|%s|%s]) r$ÚsysÚexc_inforZcompact_tracebackÚfailrNÚosÚpathÚsplit) r Zreal_tZreal_vZreal_tbr?ÚfÚfunctionÚlineÚtÚvÚinfor r r roÞs     z*HelperFunctionTests.test_compact_tracebackN) rrrrQÚunittestÚ skipUnlessÚhasattrr3r`rcrdrbror r r r rJds ;rJc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚDispatcherTestscCsdSrr r r r r ÚsetUpðszDispatcherTests.setUpcCs t ¡dSr©rrhr r r r ÚtearDownószDispatcherTests.tearDowncCs,t ¡}| | ¡d¡| | ¡d¡dSr)rÚ dispatcherrNÚreadableÚwritable©r Údr r r Ú test_basicöszDispatcherTests.test_basiccCs$t ¡}| t|ƒdt|ƒ¡dS)Nz)rrƒrNÚreprÚidr†r r r Ú test_reprûszDispatcherTests.test_reprcCstt ¡}d}d}t ¡$}| |¡| |¡Wdƒn1sB0Y| ¡ ¡}| |d|d|g¡dS)NzLovely spam! Wonderful spam!rmzlog: %s)rrƒrZcaptured_stderrÚlogÚgetvalueÚ splitlinesrN)r r‡Úl1Úl2ÚstderrÚlinesr r r Útest_logÿs  ( zDispatcherTests.test_logcCst ¡}d}d}d}t ¡2}| |d¡| |¡| |d¡Wdƒn1sT0Y| ¡ ¡}d|d|d|g}| ||¡dS) Nz#Have you got anything without spam?z.Why can't she have egg bacon spam and sausage?zTHAT'S got spam in it!ZEGGSZSPAMzEGGS: %szinfo: %szSPAM: %s)rrƒrÚcaptured_stdoutZlog_inforrŽrN)r r‡rrÚl3Ústdoutr’r]r r r Ú test_log_info s   * zDispatcherTests.test_log_infocCszt ¡}d|_t ¡0}| ¡| ¡| ¡| ¡Wdƒn1sL0Y|  ¡  ¡}gd¢}|  ||¡dS)Nr )z*warning: unhandled incoming priority eventzwarning: unhandled read eventzwarning: unhandled write eventz warning: unhandled connect event) rrƒZignore_log_typesrr”Ú handle_exptÚ handle_readÚ handle_writeÚhandle_connectrrŽrN)r r‡r–r’r]r r r Útest_unhandleds & zDispatcherTests.test_unhandledcCsFt tj¡}ttdƒr*| |t tj¡¡t d¡}| |dk¡dS)NÚstrerrorrnÚ) rZ _strerrorÚerrnoÚEPERMr~rsrNrÚ assertTrue)r Úerrr r r Ú test_strerror.s    zDispatcherTests.test_strerrorN) rrrr€r‚rˆr‹r“r—rœr£r r r r rïs rc@seZdZdd„Zdd„ZdS)Údispatcherwithsend_noreadcCsdSrr r r r r r„8sz"dispatcherwithsend_noread.readablecCsdSrr r r r r r›;sz(dispatcherwithsend_noread.handle_connectN)rrrr„r›r r r r r¤7sr¤c@s*eZdZdd„Zdd„Zejdd„ƒZdS)ÚDispatcherWithSendTestscCsdSrr r r r r r€@szDispatcherWithSendTests.setUpcCs t ¡dSrrr r r r r‚Csz DispatcherWithSendTests.tearDownc Csþt ¡}t ¡}| d¡t |¡}tƒ}|||f}tjt|d}|  ¡z¢t   d¡d}t ƒ}|  ¡| tj|f¡t   d¡| |¡| |¡| d¡d} |jrÄ| dkrÄt ¡| d 8} q¤| ¡| | ¡|d ¡Wt |¡n t |¡0dS) Né)ÚtargetÚargsçš™™™™™É?s$Suppose there isn't a 16-ton weight?r(r+ièrr)é)Ú threadingÚEventrÚ settimeoutrZ bind_portrÚThreadrCr>r1r7r¤Ú create_socketÚconnectÚHOSTÚsendZ out_bufferrrRÚwaitrNrrÚ join_thread) r r9rHÚportZcapr¨ryrBr‡r=r r r Ú test_sendFs2         z!DispatcherWithSendTests.test_sendN)rrrr€r‚rÚ reap_threadsr¶r r r r r¥?sr¥Ú file_wrapperzasyncore.file_wrapper requiredc@sVeZdZdd„Zdd„Zdd„Zdd„Ze e e d ƒd ¡d d „ƒZ d d„Z dd„Z dS)ÚFileWrapperTestcCsBd|_ttjdƒ}| |j¡Wdƒn1s40YdS)NsIt's not dead, it's sleeping!Úwb)r‡ÚopenrÚTESTFNr5)r Úfiler r r r€qszFileWrapperTest.setUpcCst tj¡dSr)rrFr¼r r r r r‚vszFileWrapperTest.tearDowncCs‚t tjtj¡}t |¡}t |¡| |j |¡| |  ¡|¡|  |  d¡d¡|  |  d¡d¡| ¡| t|j d¡dS)Né s It's not deadés, it'sr))rsr»rr¼ÚO_RDONLYrr¸rZassertNotEqualÚfdrrNr4rLrKÚOSError)r rÁr@r r r Ú test_recvys  zFileWrapperTest.test_recvcCs˜d}d}t tjtjtjB¡}t |¡}t |¡|  |¡|  |¡| ¡ttjdƒ*}|  |  ¡|j ||¡Wdƒn1sŠ0YdS)Ns Come again?sI want to buy some cheese.Úrb)rsr»rr¼ÚO_WRONLYÚO_APPENDrr¸rr5r²rNrLr‡)r Zd1Zd2rÁr@r½r r r r¶…s    zFileWrapperTest.test_sendÚfile_dispatcherz!asyncore.file_dispatcher requiredcsdt tjtj¡}g‰G‡fdd„dtjƒ}||ƒ}t |¡tjdddd|  d  ˆ¡|j ¡dS)NcseZdZ‡fdd„ZdS)z7FileWrapperTest.test_dispatcher..FileDispatchercsˆ | d¡¡dS)Né)rfr4r ©rBr r r™˜szCFileWrapperTest.test_dispatcher..FileDispatcher.handle_readN©rrrr™r rÉr r ÚFileDispatcher—srËr-Trª©r0Úuse_pollÚcountr,) rsr»rr¼rÀrrÇrÚlooprNÚjoinr‡)r rÁrËÚsr rÉr Útest_dispatcher’s zFileWrapperTest.test_dispatchercCsbt tjtj¡}t |¡}t |¡t dt f¡d}t  ¡Wdƒn1sT0YdS)Nrž) rsr»rr¼rÀrr¸rZcheck_warningsÚResourceWarningÚ gc_collect©r rÁrvr r r Útest_resource_warningŸs   z%FileWrapperTest.test_resource_warningcCs|t tjtj¡}t |¡}t |¡t |j¡|  t ¡| ¡Wdƒn1sX0Y|  |jd¡| ¡dS)Nrn) rsr»rr¼rÀrr¸rrÁrKrÂrNrÕr r r Útest_close_twice©s    &z FileWrapperTest.test_close_twiceN)rrrr€r‚rÃr¶r|r}r~rrÒrÖr×r r r r r¹ns  ÿ  r¹c@sFeZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dS)ÚBaseTestHandlerNcCstj ||¡d|_dSr)rrƒrr^)r rHr r r r¹szBaseTestHandler.__init__cCs tdƒ‚dS)Nz'handle_accept not supposed to be calledr#r r r r Ú handle_accept½szBaseTestHandler.handle_acceptcCs tdƒ‚dS)Nz)handle_accepted not supposed to be calledr#r r r r Úhandle_acceptedÀszBaseTestHandler.handle_acceptedcCs tdƒ‚dS)Nz(handle_connect not supposed to be calledr#r r r r r›ÃszBaseTestHandler.handle_connectcCs tdƒ‚dS)Nz%handle_expt not supposed to be calledr#r r r r r˜ÆszBaseTestHandler.handle_exptcCs tdƒ‚dS)Nz&handle_close not supposed to be calledr#r r r r rÉszBaseTestHandler.handle_closecCs‚dSrr r r r r r%ÌszBaseTestHandler.handle_error)N) rrrrrÙrÚr›r˜rr%r r r r rØ·s rØc@s8eZdZdZefdd„Zedd„ƒZdd„Zdd „Z d S) Ú BaseServerzYA server which listens on an address and dispatches the connection to a handler. cCs>tj |¡| |¡| ¡t|j|ƒ| d¡||_dS©Né) rrƒrr¯Úset_reuse_addrrIrr.Úhandler)r rEr<rßr r r rÕs     zBaseServer.__init__cCs |j ¡Sr)rÚ getsocknamer r r r ÚaddressÝszBaseServer.addresscCs| |¡dSr)rß©r rHr<r r r rÚászBaseServer.handle_acceptedcCs‚dSrr r r r r r%äszBaseServer.handle_errorN) rrrÚ__doc__rØrÚpropertyrárÚr%r r r r rÛÐs   rÛc@seZdZdd„Zdd„ZdS)Ú BaseClientcCs"t |¡| |¡| |¡dSr)rØrr¯r°)r rErár r r rês  zBaseClient.__init__cCsdSrr r r r r r›ïszBaseClient.handle_connectN)rrrrr›r r r r råèsråc@s¨eZdZdd„Zd%dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z e   ej d¡d¡dd„ƒZdd„Zdd„Zdd„Zdd„Zd d!„Zejd"d#„ƒZd$S)&Ú BaseTestAPIcCstjdddS)NT)Z ignore_allrr r r r r‚õszBaseTestAPI.tearDownrÝcCs\t|ƒd}d}tjrN|dkrNtjdd|jd|jr:dS|d8}t |¡q| d¡dS)Nédrr-r))r0rÎrÍz flag not set) ÚfloatrrgrÏrÍr^r1r7rr)r Úinstancer0rÎr r r Úloop_waiting_for_flagøs  z!BaseTestAPI.loop_waiting_for_flagcCs:Gdd„dtƒ}t|j|jƒ}||j|jƒ}| |¡dS)Nc@seZdZdd„ZdS)z3BaseTestAPI.test_handle_connect..TestClientcSs d|_dSr©r^r r r r r›szBBaseTestAPI.test_handle_connect..TestClient.handle_connectN)rrrr›r r r r Ú TestClientsrì©rårÛrEr<rárê©r rìÚserverÚclientr r r Útest_handle_connectszBaseTestAPI.test_handle_connectcCs:Gdd„dtƒ}||j|jƒ}t|j|jƒ}| |¡dS)Nc@seZdZdd„Zdd„ZdS)z4BaseTestAPI.test_handle_accept..TestListenercSs:t |¡| |¡t|j|ƒ| d¡|j ¡|_dSrÜ©rØrr¯rIrr.ràrá©r rEr<r r r rs     z=BaseTestAPI.test_handle_accept..TestListener.__init__cSs d|_dSrrër r r r rÙszBBaseTestAPI.test_handle_accept..TestListener.handle_acceptN)rrrrrÙr r r r Ú TestListenersrô©rØrEr<rårárê©r rôrïrðr r r Útest_handle_accepts zBaseTestAPI.test_handle_acceptcCs:Gdd„dtƒ}||j|jƒ}t|j|jƒ}| |¡dS)Nc@s$eZdZdd„Zdd„Zdd„ZdS)z6BaseTestAPI.test_handle_accepted..TestListenercSs:t |¡| |¡t|j|ƒ| d¡|j ¡|_dSrÜròrór r r r&s     z?BaseTestAPI.test_handle_accepted..TestListener.__init__cSstj |¡dSr)rrƒrÙr r r r rÙ-szDBaseTestAPI.test_handle_accepted..TestListener.handle_acceptcSs| ¡d|_dSr)rr^râr r r rÚ0szFBaseTestAPI.test_handle_accepted..TestListener.handle_acceptedN)rrrrrÙrÚr r r r rô$srôrõrör r r Útest_handle_accepted!sz BaseTestAPI.test_handle_acceptedcCsLGdd„dtƒ}Gdd„dtƒ}t|j|j|ƒ}||j|jƒ}| |¡dS)Nc@seZdZdd„ZdS)z0BaseTestAPI.test_handle_read..TestClientcSs d|_dSrrër r r r r™=sz.TestClient.handle_readNrÊr r r r rì<srìc@seZdZdd„ZdS)z1BaseTestAPI.test_handle_read..TestHandlercSst ||¡| d¡dS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rØrr²©r r;r r r rAs z:BaseTestAPI.test_handle_read..TestHandler.__init__N©rrrrr r r r Ú TestHandler@srû©rårØrÛrEr<rárê©r rìrûrïrðr r r Útest_handle_read9s zBaseTestAPI.test_handle_readcCs:Gdd„dtƒ}t|j|jƒ}||j|jƒ}| |¡dS)Nc@seZdZdd„ZdS)z1BaseTestAPI.test_handle_write..TestClientcSs d|_dSrrër r r r ršMsz>BaseTestAPI.test_handle_write..TestClient.handle_writeN)rrrršr r r r rìLsrìrírîr r r Útest_handle_writeIszBaseTestAPI.test_handle_writecCsLGdd„dtƒ}Gdd„dtƒ}t|j|j|ƒ}||j|jƒ}| |¡dS)Nc@seZdZdd„Zdd„ZdS)z1BaseTestAPI.test_handle_close..TestClientcSs| d¡dS)Né)r4r r r r r™Zsz=BaseTestAPI.test_handle_close..TestClient.handle_readcSsd|_| ¡dSr©r^rr r r r r_sz>BaseTestAPI.test_handle_close..TestClient.handle_closeN)rrrr™rr r r r rìXsrìc@seZdZdd„ZdS)z2BaseTestAPI.test_handle_close..TestHandlercSst ||¡| ¡dSr)rØrrrùr r r rds z;BaseTestAPI.test_handle_close..TestHandler.__init__Nrúr r r r rûcsrûrürýr r r Útest_handle_closeTs  zBaseTestAPI.test_handle_closecsXd‰G‡fdd„dtƒ}G‡fdd„dtƒ}t|j|j|ƒ}||j|jƒ}| |¡dS)Ns€cs(eZdZ‡fdd„Zdd„Zdd„ZdS)zCBaseTestAPI.test_handle_close_after_conn_broken..TestClientcs| ˆ¡dSr)r²r rÉr r rštszPBaseTestAPI.test_handle_close_after_conn_broken..TestClient.handle_writecSsd|_| ¡dSrrr r r r rwszPBaseTestAPI.test_handle_close_after_conn_broken..TestClient.handle_closecSsd|_| ¡dSrrr r r r r˜{szOBaseTestAPI.test_handle_close_after_conn_broken..TestClient.handle_exptN)rrrršrr˜r rÉr r rìrs rìcs eZdZ‡fdd„Zdd„ZdS)zDBaseTestAPI.test_handle_close_after_conn_broken..TestHandlercs| tˆƒ¡| ¡dSr)r4rirr rÉr r r™szPBaseTestAPI.test_handle_close_after_conn_broken..TestHandler.handle_readcSsdSrr r r r r r……szMBaseTestAPI.test_handle_close_after_conn_broken..TestHandler.writableN)rrrr™r…r rÉr r rûs rûrürýr rÉr Ú#test_handle_close_after_conn_brokenls   z/BaseTestAPI.test_handle_close_after_conn_brokenZsunosz OOB support is broken on SolariscCs€tr|jtjkr| d¡tjdkr4|jr4| d¡Gdd„dtƒ}Gdd„dt ƒ}t |j|j |ƒ}||j|j ƒ}|  |¡dS)Nú"Not applicable to AF_UNIX sockets.Údarwinz(poll may fail on macOS; see issue #28087c@seZdZdd„ZdS)z0BaseTestAPI.test_handle_expt..TestClientcSs|j dtj¡d|_dS)NrT)rr4ÚMSG_OOBr^r r r r r˜™sz.TestClient.handle_exptN)rrrr˜r r r r rì˜srìc@seZdZdd„ZdS)z1BaseTestAPI.test_handle_expt..TestHandlercSs*t ||¡|j ttdƒdƒtj¡dS)Néôzlatin-1)rØrrr²ÚbytesÚchrrrùr r r ržs z:BaseTestAPI.test_handle_expt..TestHandler.__init__Nrúr r r r rûsrû)rDrErrÚskipTestrpÚplatformrÍrårØrÛr<rárêrýr r r Útest_handle_exptŒs  zBaseTestAPI.test_handle_exptcCs:Gdd„dtƒ}t|j|jƒ}||j|jƒ}| |¡dS)Nc@seZdZdd„Zdd„ZdS)z1BaseTestAPI.test_handle_error..TestClientcSs dddS)Ngð?rr r r r r rš©sz>BaseTestAPI.test_handle_error..TestClient.handle_writecSs,d|_z‚WntyYn 0tdƒ‚dS)NTzexception not raised)r^ÚZeroDivisionErrorr$r r r r r%«s  z>BaseTestAPI.test_handle_error..TestClient.handle_errorN)rrrršr%r r r r rì¨srìrírîr r r Útest_handle_error¦s zBaseTestAPI.test_handle_errorcCsÞt|j|jƒ}t|j|jƒ}| |j¡| |j¡| |j¡t j d|j dd| |j¡| |j¡| |j¡| |j¡|  ¡| |j¡| |j¡| |j¡| |j¡|  ¡| |j¡| |j¡dS)Nr-rçrÌ) rÛrEr<råráÚ assertFalseZ connectedr¡Z acceptingrrÏrÍr)r rïrðr r r Útest_connection_attributes¸s$            z&BaseTestAPI.test_connection_attributescCs^t ¡}| |j¡| |jjtj¡| |jj|j¡| |j ¡d¡|  |j  ¡¡dS)Nr) rrƒr¯rErNrÚtypeÚ SOCK_STREAMÚ gettimeoutrÚget_inheritable)r rÑr r r Útest_create_socketÖs  zBaseTestAPI.test_create_socketcCs„tr|jtjkr| d¡t ¡}| |j¡| |j ¡|  d¡|j  ¡d}t ¡}| |j¡|  t |j|j d|f¡dS)NrrÝr)r)rDrErrr rrƒr¯rGr<r.ràrKrÂ)r Ús1rµÚs2r r r Ú test_bindÞs     zBaseTestAPI.test_bindc CsÞtr|jtjkr| d¡t |j¡¤}z| tjtjd¡WntyZt   d¡Ynb0t   t |j¡¡}|  |j tjtj¡¡|j ¡| |j¡| ¡| |j tjtj¡¡Wdƒn1sÐ0YdS)Nrr)z+SO_REUSEADDR not supported on this platform)rDrErrr Ú setsockoptÚ SOL_SOCKETÚ SO_REUSEADDRrÂr|ÚskiprrƒrÚ getsockoptrr¯rÞr¡)r rHrÑr r r Útest_set_reuse_addrìs"  ÿ  ÿzBaseTestAPI.test_set_reuse_addrc Csä|jtjttdtƒƒfvr$| d¡t|j|jƒ}tj dd„d}|  ¡zˆt |jtj ¡Z}|  d¡|  tjtjt ddd ¡¡z| |j¡Wnty¦Yn0Wdƒn1s¼0YWt |¡n t |¡0dS) NÚAF_INET6z%test specific to AF_INET and AF_INET6cSstjdddS)Nr(rÝ)r0rÎ)rrÏr r r r Ú sÿz0BaseTestAPI.test_quick_connect..)r§r©Úiir)r)rErÚAF_INETr\Úobjectr rÛr<r«r®r>rr­rrÚ SO_LINGERÚstructÚpackr°rárÂrr´)r rïryrÑr r r Útest_quick_connects     ÿ &zBaseTestAPI.test_quick_connectN)rÝ)rrrr‚rêrñr÷rørþrÿrrr|ZskipIfrpr Ú startswithr rrrrrrr·r'r r r r ræós(    ÿ ræc@seZdZejZejdfZdS)ÚTestAPI_UseIPv4SocketsrN) rrrrr"rErr±r<r r r r r)sr)zIPv6 support requiredc@seZdZejZejdfZdS)ÚTestAPI_UseIPv6SocketsrN) rrrrrrErZHOSTv6r<r r r r r*sr*zUnix sockets requiredc@s$eZdZerejZejZ dd„Z dS)ÚTestAPI_UseUnixSocketscCst |j¡t |¡dSr)rrFr<rær‚r r r r r‚(s zTestAPI_UseUnixSockets.tearDownN) rrrrDrrrErr¼r<r‚r r r r r+"sr+c@seZdZdZdS)ÚTestAPI_UseIPv4SelectFN©rrrrÍr r r r r,,sr,rRrSc@seZdZdZdS)ÚTestAPI_UseIPv4PollTNr-r r r r r./sr.c@seZdZdZdS)ÚTestAPI_UseIPv6SelectFNr-r r r r r/3sr/c@seZdZdZdS)ÚTestAPI_UseIPv6PollTNr-r r r r r06sr0c@seZdZdZdS)ÚTestAPI_UseUnixSocketsSelectFNr-r r r r r1:sr1c@seZdZdZdS)ÚTestAPI_UseUnixSocketsPollTNr-r r r r r2=sr2Ú__main__)3rr|r3rsrrpr1rŸr%r«ÚtestrZ test.supportrÚiorZPGOZSkipTestr~rDrrrr rCrIZTestCaserJrZdispatcher_with_sendr¤r¥r}r¹rƒrØrÛrårær)Z IPV6_ENABLEDr*r+r,r.r/r0r1r2rÚmainr r r r Úsh         H/ ÿG (