a ze\g@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZe jredeedZGdddZGd d d ZGd d d ZGd ddZddZddZGdddejZGdddejZGdddejZGdddejZe eeddGdddejZ!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/d0d0e'ejZ+e eed1d2Gd3d4d4e'ejZ,Gd5d6d6e)ejZ-e eed1d2Gd7d8d8e)ejZ.Gd9d:d:e*ejZ/e eed1d2Gd;d<dN)support) socket_helper)BytesIOztest is not helpful for PGOAF_UNIXc@s$eZdZddZddZddZdS) dummysocketcCs d|_dSNFclosedselfr F/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_asyncore.py__init__szdummysocket.__init__cCs d|_dSNTrr r r r closeszdummysocket.closecCsdS)N*r r r r r filenoszdummysocket.filenoN)__name__ __module__ __qualname__rrrr r r r rsrc@seZdZddZddZdS) dummychannelcCs t|_dSN)rsocketr r r r r!szdummychannel.__init__cCs|jdSr)rrr r r r r$szdummychannel.closeN)rrrrrr r r r r src@s(eZdZddZddZeZeZeZdS) exitingdummycCsdSrr r r r r r(szexitingdummy.__init__cCs tdSr)asyncoreExitNowr r r r handle_read_event+szexitingdummy.handle_read_eventN)rrrrrhandle_write_event handle_closehandle_expt_eventr r r r r's rc@s0eZdZddZddZeZeZeZddZdS) crashingdummycCs d|_dSr error_handledr r r r r3szcrashingdummy.__init__cCs tdSr 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 Cszz||\}}Wntjy.Yn0d}t}|dkrt|dkrt|gggd\}}} |r|d8}|d} || ddd| vrqt d q<| W| | n| | 0dS) Nrg@皙?  {Gz?) listenacceptrtimeouttime monotonicselectrecvwritereplacesleeprset) evtbufZservconnaddrnstartrwedatar r r capture_serverAs*    rCcCs6tr(|jtjkr(t|t||n ||dS)z9Helper function to bind a socket according to its family.N) HAS_UNIX_SOCKETSfamilyrrrunlinkrZbind_unix_socketbind)sockr<r r r bind_af_awareZs rIc@sNeZdZddZeeeddddZddZ d d Z d d Z d dZ dS)HelperFunctionTestscCst}|tjtj||tjtj||tjtj|t}t|||j dt}t|||j dt}t|||j ddSr) r assertRaisesrrreadr5 _exceptionr assertEqualr")r tr1tr2r r r test_readwriteexces   z%HelperFunctionTests.test_readwriteexcpollselect.poll requiredc Csd}tjdftjdftjdftjdftjdftjdff}Gddd}|D]\}}|}|t||dt |||D]}|t||||kqzt }| t j t j ||t} || jdt | ||| jd qJdS) N)rLexptr5r r"rLrTr5r c@s<eZdZddZddZddZddZd d Zd d Zd S)z3HelperFunctionTests.test_readwrite..testobjcSs"d|_d|_d|_d|_d|_dSr)rLr5r rTr"r r r r rs z.testobj.__init__cSs d|_dSr)rLr r r r rszEHelperFunctionTests.test_readwrite..testobj.handle_read_eventcSs d|_dSr)r5r r r r rszFHelperFunctionTests.test_readwrite..testobj.handle_write_eventcSs d|_dSrrr r r r rsz@HelperFunctionTests.test_readwrite..testobj.handle_closecSs d|_dSr)rTr r r r rszEHelperFunctionTests.test_readwrite..testobj.handle_expt_eventcSs d|_dSrr!r r r r r%sz@HelperFunctionTests.test_readwrite..testobj.handle_errorNr&r r r r testobjs rUFT)r3POLLINPOLLPRIPOLLOUTPOLLERRPOLLHUPPOLLNVALrNgetattrrZ readwriterrKrr r") r Z attributesexpectedrUflagZ expectedattrZtobjattrrOrPr r r test_readwrites*    z"HelperFunctionTests.test_readwritecCs|ddSrcloseall_checkr r r r test_closeallsz!HelperFunctionTests.test_closeallcCs|ddSrrar r r r test_closeall_defaultsz)HelperFunctionTests.test_closeall_defaultcCsg}i}tdD],}t}||||jjd|||<q|r|tj}z |t_tWtj|}t_qtj|}t_0n t||t |d|D]}||jjdqdS)Nr*FrT) rangerappendrNrr r socket_map close_alllen)r Z usedefaultlZtestmapicZ socketmapr r r rbs"    " z"HelperFunctionTests.closeall_checkc Csz tdWn"t\}}}t}Yn 0|d|\\}}}}} } |tj |dd||d||||| ||| d|||fdS)NI don't like spam!zExpected exceptionztest_asyncore.pytest_compact_tracebackz [%s|%s|%s]) r$sysexc_inforZcompact_tracebackfailrNospathsplit) r Zreal_tZreal_vZreal_tbr?ffunctionlinetvinfor r r ros     z*HelperFunctionTests.test_compact_tracebackN) rrrrQunittest skipUnlesshasattrr3r`rcrdrbror r r r rJds ;rJc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)DispatcherTestscCsdSrr r r r r setUpszDispatcherTests.setUpcCs tdSrrrhr r r r tearDownszDispatcherTests.tearDowncCs,t}||d||ddSr)r dispatcherrNreadablewritabler dr r r test_basicszDispatcherTests.test_basiccCs$t}|t|dt|dS)Nz)rrrNrepridrr r r test_reprszDispatcherTests.test_reprcCstt}d}d}t$}||||Wdn1sB0Y|}||d|d|gdS)NzLovely spam! Wonderful spam!rmzlog: %s)rrrZcaptured_stderrloggetvalue splitlinesrN)r rl1l2stderrlinesr r r test_logs  ( zDispatcherTests.test_logcCst}d}d}d}t2}||d||||dWdn1sT0Y|}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)rrrcaptured_stdoutZlog_inforrrN)r rrrl3stdoutrr]r r r test_log_info s   * zDispatcherTests.test_log_infocCszt}d|_t0}||||Wdn1sL0Y| }gd}| ||dS)Nr )z*warning: unhandled incoming priority eventzwarning: unhandled read eventzwarning: unhandled write eventz warning: unhandled connect event) rrZignore_log_typesrr handle_expt handle_read handle_writehandle_connectrrrN)r rrrr]r r r test_unhandleds & zDispatcherTests.test_unhandledcCsFttj}ttdr*||ttjtd}||dkdS)Nstrerrorrn) rZ _strerrorerrnoEPERMr~rsrNr assertTrue)r errr r r test_strerror.s    zDispatcherTests.test_strerrorN) rrrrrrrrrrrr r r r rs rc@seZdZddZddZdS)dispatcherwithsend_noreadcCsdSrr r r r r r8sz"dispatcherwithsend_noread.readablecCsdSrr r r r r r;sz(dispatcherwithsend_noread.handle_connectN)rrrrrr r r r r7src@s*eZdZddZddZejddZdS)DispatcherWithSendTestscCsdSrr r r r r r@szDispatcherWithSendTests.setUpcCs tdSrrr r r r rCsz DispatcherWithSendTests.tearDownc Cst}t}|dt|}t}|||f}tjt|d}| zt dd}t }| |tj|ft d|||||dd} |jr| dkrt| d 8} q||||d Wt|n t|0dS) N)targetargs皙?s$Suppose there isn't a 16-ton weight?r(r+irr)) threadingEventr settimeoutrZ bind_portrThreadrCr>r1r7r create_socketconnectHOSTsendZ out_bufferrrRwaitrNrr join_thread) r r9rHportZcaprryrBrr=r r r test_sendFs2         z!DispatcherWithSendTests.test_sendN)rrrrrr reap_threadsrr r r r r?sr file_wrapperzasyncore.file_wrapper requiredc@sVeZdZddZddZddZddZee e d d d d Z d dZ ddZ dS)FileWrapperTestcCsBd|_ttjd}||jWdn1s40YdS)NsIt's not dead, it's sleeping!wb)ropenrTESTFNr5)r filer r r rqszFileWrapperTest.setUpcCsttjdSr)rrFrr r r r rvszFileWrapperTest.tearDowncCsttjtj}t|}t|||j ||| || | dd| | dd||t|j ddS)N s It's not deads, it'sr))rsrrrO_RDONLYrrrZassertNotEqualfdrrNr4rLrKOSError)r rr@r r r test_recvys  zFileWrapperTest.test_recvcCsd}d}ttjtjtjB}t|}t|| || ||ttjd*}| | |j ||Wdn1s0YdS)Ns Come again?sI want to buy some cheese.rb)rsrrrO_WRONLYO_APPENDrrrr5rrNrLr)r Zd1Zd2rr@rr r r rs    zFileWrapperTest.test_sendfile_dispatcherz!asyncore.file_dispatcher requiredcsdttjtj}gGfdddtj}||}t|tjdddd| d |j dS)NcseZdZfddZdS)z7FileWrapperTest.test_dispatcher..FileDispatchercs|ddS)N)rfr4r rBr r rszCFileWrapperTest.test_dispatcher..FileDispatcher.handle_readNrrrrr rr r FileDispatchersrr-Trr0use_pollcountr,) rsrrrrrrrlooprNjoinr)r rrsr rr test_dispatchers zFileWrapperTest.test_dispatchercCsbttjtj}t|}t|tdt fd}t Wdn1sT0YdS)Nr) rsrrrrrrrZcheck_warningsResourceWarning gc_collectr rrvr r r test_resource_warnings   z%FileWrapperTest.test_resource_warningcCs|ttjtj}t|}t|t|j| t |Wdn1sX0Y| |jd|dS)Nrn) rsrrrrrrrrrKrrNrr r r test_close_twices    &z FileWrapperTest.test_close_twiceN)rrrrrrrr|r}r~rrrrr r r r rns    rc@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)BaseTestHandlerNcCstj||d|_dSr)rrrr^)r rHr r r rszBaseTestHandler.__init__cCs tddS)Nz'handle_accept not supposed to be calledr#r r r r handle_acceptszBaseTestHandler.handle_acceptcCs tddS)Nz)handle_accepted not supposed to be calledr#r r r r handle_acceptedszBaseTestHandler.handle_acceptedcCs tddS)Nz(handle_connect not supposed to be calledr#r r r r rszBaseTestHandler.handle_connectcCs tddS)Nz%handle_expt not supposed to be calledr#r r r r rszBaseTestHandler.handle_exptcCs tddS)Nz&handle_close not supposed to be calledr#r r r r rszBaseTestHandler.handle_closecCsdSrr r r r r r%szBaseTestHandler.handle_error)N) rrrrrrrrrr%r r r r rs rc@s8eZdZdZefddZeddZddZdd Z d S) BaseServerzYA server which listens on an address and dispatches the connection to a handler. cCs>tj||||t|j||d||_dSN) rrrrset_reuse_addrrIrr.handler)r rEr<rr r r rs     zBaseServer.__init__cCs |jSr)r getsocknamer r r r addressszBaseServer.addresscCs||dSr)rr rHr<r r r rszBaseServer.handle_acceptedcCsdSrr r r r r r%szBaseServer.handle_errorN) rrr__doc__rrpropertyrrr%r r r r rs   rc@seZdZddZddZdS) BaseClientcCs"t|||||dSr)rrrr)r rErr r r rs  zBaseClient.__init__cCsdSrr r r r r rszBaseClient.handle_connectN)rrrrrr r r r rsrc@seZdZddZd%ddZddZdd Zd d Zd d ZddZ ddZ ddZ e ejddddZddZddZddZddZd d!Zejd"d#Zd$S)& BaseTestAPIcCstjdddS)NT)Z ignore_allrr r r r rszBaseTestAPI.tearDownrcCs\t|d}d}tjrN|dkrNtjdd|jd|jr:dS|d8}t|q|ddS)Ndrr-r))r0rrz flag not set) floatrrgrrr^r1r7rr)r instancer0rr r r loop_waiting_for_flags  z!BaseTestAPI.loop_waiting_for_flagcCs:Gdddt}t|j|j}||j|j}||dS)Nc@seZdZddZdS)z3BaseTestAPI.test_handle_connect..TestClientcSs d|_dSrr^r r r r rszBBaseTestAPI.test_handle_connect..TestClient.handle_connectN)rrrrr r r r TestClientsrrrrEr<rrr rserverclientr r r test_handle_connectszBaseTestAPI.test_handle_connectcCs:Gdddt}||j|j}t|j|j}||dS)Nc@seZdZddZddZdS)z4BaseTestAPI.test_handle_accept..TestListenercSs:t|||t|j||d|j|_dSrrrrrIrr.rrr rEr<r r r rs     z=BaseTestAPI.test_handle_accept..TestListener.__init__cSs d|_dSrrr r r r rszBBaseTestAPI.test_handle_accept..TestListener.handle_acceptN)rrrrrr r r r TestListenersrrrEr<rrrr rrrr r r test_handle_accepts zBaseTestAPI.test_handle_acceptcCs:Gdddt}||j|j}t|j|j}||dS)Nc@s$eZdZddZddZddZdS)z6BaseTestAPI.test_handle_accepted..TestListenercSs:t|||t|j||d|j|_dSrrrr r r r&s     z?BaseTestAPI.test_handle_accepted..TestListener.__init__cSstj|dSr)rrrr r r r r-szDBaseTestAPI.test_handle_accepted..TestListener.handle_acceptcSs|d|_dSr)rr^rr r r r0szFBaseTestAPI.test_handle_accepted..TestListener.handle_acceptedN)rrrrrrr r r r r$srrrr r r test_handle_accepted!sz BaseTestAPI.test_handle_acceptedcCsLGdddt}Gdddt}t|j|j|}||j|j}||dS)Nc@seZdZddZdS)z0BaseTestAPI.test_handle_read..TestClientcSs d|_dSrrr r r r r=sz.TestClient.handle_readNrr r r r r<src@seZdZddZdS)z1BaseTestAPI.test_handle_read..TestHandlercSst|||ddS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rrrr r;r r r rAs z:BaseTestAPI.test_handle_read..TestHandler.__init__Nrrrrr r r r TestHandler@srrrrrEr<rrr rrrrr r r test_handle_read9s zBaseTestAPI.test_handle_readcCs:Gdddt}t|j|j}||j|j}||dS)Nc@seZdZddZdS)z1BaseTestAPI.test_handle_write..TestClientcSs d|_dSrrr r r r rMsz>BaseTestAPI.test_handle_write..TestClient.handle_writeN)rrrrr r r r rLsrrrr r r test_handle_writeIszBaseTestAPI.test_handle_writecCsLGdddt}Gdddt}t|j|j|}||j|j}||dS)Nc@seZdZddZddZdS)z1BaseTestAPI.test_handle_close..TestClientcSs|ddS)N)r4r r r r rZsz=BaseTestAPI.test_handle_close..TestClient.handle_readcSsd|_|dSrr^rr r r r r_sz>BaseTestAPI.test_handle_close..TestClient.handle_closeN)rrrrrr r r r rXsrc@seZdZddZdS)z2BaseTestAPI.test_handle_close..TestHandlercSst|||dSr)rrrrr r r rds z;BaseTestAPI.test_handle_close..TestHandler.__init__Nrr r r r rcsrrrr r r test_handle_closeTs  zBaseTestAPI.test_handle_closecsXdGfdddt}Gfdddt}t|j|j|}||j|j}||dS)Nscs(eZdZfddZddZddZdS)zCBaseTestAPI.test_handle_close_after_conn_broken..TestClientcs|dSr)rr rr r rtszPBaseTestAPI.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)rrrrrrr rr r rrs rcs eZdZfddZddZdS)zDBaseTestAPI.test_handle_close_after_conn_broken..TestHandlercs|t|dSr)r4rirr rr r rszPBaseTestAPI.test_handle_close_after_conn_broken..TestHandler.handle_readcSsdSrr r r r r rszMBaseTestAPI.test_handle_close_after_conn_broken..TestHandler.writableN)rrrrrr rr r rs rrrr rr #test_handle_close_after_conn_brokenls   z/BaseTestAPI.test_handle_close_after_conn_brokenZsunosz OOB support is broken on SolariscCstr|jtjkr|dtjdkr4|jr4|dGdddt}Gdddt }t |j|j |}||j|j }| |dS)N"Not applicable to AF_UNIX sockets.darwinz(poll may fail on macOS; see issue #28087c@seZdZddZdS)z0BaseTestAPI.test_handle_expt..TestClientcSs|jdtjd|_dS)NrT)rr4MSG_OOBr^r r r r rsz.TestClient.handle_exptN)rrrrr r r r rsrc@seZdZddZdS)z1BaseTestAPI.test_handle_expt..TestHandlercSs*t|||jttddtjdS)Nzlatin-1)rrrrbyteschrrrr r r rs z:BaseTestAPI.test_handle_expt..TestHandler.__init__Nrr r r r rsr)rDrErrskipTestrpplatformrrrrr<rrrr r r test_handle_expts  zBaseTestAPI.test_handle_exptcCs:Gdddt}t|j|j}||j|j}||dS)Nc@seZdZddZddZdS)z1BaseTestAPI.test_handle_error..TestClientcSs dddS)Ng?rr r r r r rsz>BaseTestAPI.test_handle_error..TestClient.handle_writecSs,d|_zWntyYn 0tddS)NTzexception not raised)r^ZeroDivisionErrorr$r r r r r%s  z>BaseTestAPI.test_handle_error..TestClient.handle_errorN)rrrrr%r r r r rsrrrr r r test_handle_errors zBaseTestAPI.test_handle_errorcCst|j|j}t|j|j}||j||j||jt j d|j dd||j||j||j||j| ||j||j||j||j| ||j||jdS)Nr-rr) rrEr<rr assertFalseZ connectedrZ acceptingrrrr)r rrr r r test_connection_attributess$            z&BaseTestAPI.test_connection_attributescCs^t}||j||jjtj||jj|j||jd| |j dS)Nr) rrrrErNrtype SOCK_STREAM gettimeoutrget_inheritable)r rr r r test_create_sockets  zBaseTestAPI.test_create_socketcCstr|jtjkr|dt}||j||j | d|j d}t}||j| t |j|j d|fdS)Nrrr)r)rDrErrr rrrrGr<r.rrKr)r s1rs2r r r test_binds     zBaseTestAPI.test_bindc Cstr|jtjkr|dt|j}z|tjtjdWntyZt dYnb0t t|j}| |jtjtj|j||j|||jtjtjWdn1s0YdS)Nrr)z+SO_REUSEADDR not supported on this platform)rDrErrr  setsockopt SOL_SOCKET SO_REUSEADDRrr|skiprrr getsockoptrrrr)r rHrr r r test_set_reuse_addrs"    zBaseTestAPI.test_set_reuse_addrc Cs|jtjttdtfvr$|dt|j|j}tj ddd}| zt|jtj Z}| d| tjtjtddd z||jWntyYn0Wdn1s0YWt|n t|0dS) NAF_INET6z%test specific to AF_INET and AF_INET6cSstjdddS)Nr(r)r0r)rrr r r r  sz0BaseTestAPI.test_quick_connect..)rriir)r)rErAF_INETr\objectr rr<rrr>rrrr SO_LINGERstructpackrrrrr)r rryrr r r test_quick_connects      &zBaseTestAPI.test_quick_connectN)r)rrrrrrrrrrrrr|ZskipIfrpr  startswithr rrrrrrrr'r r r r rs(     rc@seZdZejZejdfZdS)TestAPI_UseIPv4SocketsrN) rrrrr"rErrr<r r r r r)sr)zIPv6 support requiredc@seZdZejZejdfZdS)TestAPI_UseIPv6SocketsrN) rrrrrrErZHOSTv6r<r r r r r*sr*zUnix sockets requiredc@s$eZdZerejZejZ ddZ dS)TestAPI_UseUnixSocketscCst|jt|dSr)rrFr<rrr r r r r(s zTestAPI_UseUnixSockets.tearDownN) rrrrDrrrErrr<rr r r r r+"sr+c@seZdZdZdS)TestAPI_UseIPv4SelectFNrrrrr 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|r3rsrrpr1rr%rtestrZ test.supportriorZPGOZSkipTestr~rDrrrr rCrIZTestCaserJrZdispatcher_with_sendrrr}rrrrrrr)Z IPV6_ENABLEDr*r+r,r.r/r0r1r2rmainr r r r sh         H/ G (