a  zeVP@sdZddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZz ddlZWneydZYn0d d ZGd d d ejZGd ddejZGdddZGdddeZGdddeZGdddeeZejdkrBGdddeejZGdddeejZn|ddlZe edrjGdddeejZ!e edrGd d!d!eejZ"e ed"rGd#d$d$eejZ#Gd%ddeejZdS)&z!Tests for sendfile functionality.N) base_events) constants)mock)support) socket_helper)utilscCstddSN)asyncioZset_event_loop_policyr r S/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_asyncio/test_sendfile.pytearDownModulesr cs>eZdZd ddZddZddZd d Zfd d ZZS)MySendfileProtoNrcCs@d|_d|_d|_|dur.||_||_t|_||_dS)NZINITIALr) transportstatenbytes create_future connecteddone bytearraydata close_after)selflooprr r r __init__s  zMySendfileProto.__init__cCs"||_d|_|jr|jddS)NZ CONNECTED)rrr set_resultrrr r r connection_made&szMySendfileProto.connection_madecCs d|_dS)NZEOF)rrr r r eof_received-szMySendfileProto.eof_receivedcCsd|_|jr|jddS)NZCLOSED)rrrrexcr r r connection_lost1szMySendfileProto.connection_lostcsJ|jt|7_|j|t||jrF|j|jkrF|jdSr) rlenrextendsuper data_receivedrrcloserr __class__r r r%7s   zMySendfileProto.data_received)Nr) __name__ __module__ __qualname__rrrr!r% __classcell__r r r(r r s  r c@s4eZdZddZddZddZddZd d Zd S) MyProtocCs(d|_d|_t|_||_d|_dSNF)startedclosedrrrfutr)rrr r r rBs  zMyProto.__init__cCsd|_||_dSNT)r0rrr r r rIszMyProto.connection_madecCs|j|dSr)rr#r'r r r r%MszMyProto.data_receivedcCsd|_|jddSr3)r1r2rrr r r r!PszMyProto.connection_lostcs|jIdHdSr)r2rr r r wait_closedTszMyProto.wait_closedN)r*r+r,rrr%r!r4r r r r r.@s r.csdeZdZddZdZddZefddZefdd Zfd d Z fd d Z ddZ Z S) SendfileBasesSendfileBaseDatai cCstdSr)NotImplementedErrorrr r r create_event_loop`szSendfileBase.create_event_loopcsFttjd}||jWdn1s.0YtdS)Nwb)openrTESTFNwriteDATAr$ setUpClass)clsfpr(r r r>cs*zSendfileBase.setUpClasscsttjtdSr)runlinkr;r$ tearDownClassr?r(r r rBis zSendfileBase.tearDownClasscs@ttjd|_||jj||_||jt dS)Nrb) r:rr;file addCleanupr&r8rZset_event_loopr$setUprr(r r rGns   zSendfileBase.setUpcs4|jst|j|ttdSr) rZ is_closed test_utilsZ run_brieflyZ doCleanupsr gc_collectr$tearDownrr(r r rJus   zSendfileBase.tearDowncCs |j|Sr)rrun_until_complete)rcoror r r run_loop~szSendfileBase.run_loop) r*r+r,r=BUF_SIZEr8 classmethodr>rBrGrJrMr-r r r(r r5Xs  r5csteZdZefddZefddZdddZdd Zdd d Zd dZ ddZ ddZ ddZ ddZ ZS)SockSendfileMixincstj|_dt_tdS)Ni@)r!SENDFILE_FALLBACK_READBUFFER_SIZE_SockSendfileMixin__old_bufsizer$r>rCr(r r r>szSockSendfileMixin.setUpClasscs|jt_tdSr)rRrrQr$rBrCr(r r rBszSockSendfileMixin.tearDownClassTcCs.ttjtj}|d|r*||j|Sr/)socketAF_INET SOCK_STREAM setblockingrFr&)rcleanupsockr r r make_sockets   zSockSendfileMixin.make_socketcCs|tjtj|jdSr) setsockoptrS SOL_SOCKET SO_RCVBUFrN)rrXr r r reduce_receive_buffer_sizesz,SockSendfileMixin.reduce_receive_buffer_sizeNcCs.|tjtj|j|dur*|j|jddS)N)high)rZrSr[ SO_SNDBUFrNZset_write_buffer_limits)rrXrr r r reduce_send_buffer_sizesz)SockSendfileMixin.reduce_send_buffer_sizecstjt}jdd}|tj|fjjfdd|d |}j |d|f |fdd} ||fS) NF)rWcsSrr r )protor r z8SockSendfileMixin.prepare_socksendfile..)rXz 127.0.0.1cs<jdur"jdSr)rr&rMr4r rarserverr r rWs   z7SockSendfileMixin.prepare_socksendfile..cleanup) r.rrfind_unused_portrYbindHOSTrM create_serverr]Z sock_connectr`rF)rportsrv_sockrXrWr rdr prepare_socksendfiles       z&SockSendfileMixin.prepare_socksendfilecCsv|\}}||j||j}|||||t|j ||j |j ||j t|j dSr) rlrMr sock_sendfilerEr&r4 assertEqualr"r=rtellrrXraretr r r test_sock_sendfile_successs z,SockSendfileMixin.test_sock_sendfile_successcCsv|\}}||j||jdd}|||||j|j dd||j d||ddS)Nii ) rlrMrrmrEr&r4rnrr=rorpr r r (test_sock_sendfile_with_offset_and_counts z:SockSendfileMixin.test_sock_sendfile_with_offset_and_countc Cs|\}}t(}||j||dd}Wdn1sB0Y|||||d||j ddS)Nr) rltempfile TemporaryFilerMrrmr&r4rnrEro)rrXrafrqr r r test_sock_sendfile_zero_sizes  $ z.SockSendfileMixin.test_sock_sendfile_zero_sizecCsdd}|\}}||j||||j||j}||j|||||||t |j ||j |}||j |||j t |j dS)Nsmix_regular_sendr6) rlrMrZ sock_sendallrmrEr&r4rnr"r=rro)rbufrXrarqZexpectedr r r (test_sock_sendfile_mix_with_regular_sends z:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send)T)N)r*r+r,rOr>rBrYr]r`rlrrrtrxrzr-r r r(r rPs     rPc@seZdZdddddZeejdkddd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZeejd d!d"d#Zd$d%Zeeed& d'd(d)Zd*d+Zd,S)- SendfileMixinFris_sslrc s t}tj|d|r:ts(dt}t}nd}d}t t j t j }| tj |fjjfdd||d||rtj }nd}t t j t j }|tj |ftjdjjfdd|||d\} } j|| d fd d } | fS) N)rrz No ssl modulecsSrr r ) srv_protor r rbrcz0SendfileMixin.prepare_sendfile..)rXssl)rcsSrr r ) cli_protor r rbrc)rXrserver_hostname)rcsFjjjjdSr)rr&rMrr4r rrrer~r r rWs     z/SendfileMixin.prepare_sendfile..cleanup)rrfr rrskipTestrHZsimple_server_sslcontextZsimple_client_sslcontextrSrTrUrgrhrMrir]connectcreate_connectionr`rF) rr}rrjZsrv_ctxZcli_ctxrkrZcli_socktrprrWr rr prepare_sendfiles>         zSendfileMixin.prepare_sendfilewin32zUDP sockets are not supportedcCs||jjtjtjd\}}z`|td&||j ||j Wdn1sX0Y| d|j W| n | 0dS)N)family not supportedr)rMrZcreate_datagram_endpointr ZDatagramProtocolrSrTassertRaisesRegex RuntimeErrorsendfilerErnror&)rrrr r r test_sendfile_not_supporteds"z)SendfileMixin.test_sendfile_not_supportedcCs|\}}||j|j|j}|j||j||t |j ||j t |j ||j |j ||j t |j dSrrrMrrrrEr&rrnr"r=rrrorr~rrqr r r test_sendfile-s   zSendfileMixin.test_sendfilecs\}}fdd}|j_j|jj}|j|j |t j  |j t j  |j j  jt j dS)Ncstjj||||SrrZ BaseEventLoop_sendfile_nativerZtransprEoffsetcountrr r sendfile_native;s zCSendfileMixin.test_sendfile_force_fallback..sendfile_native)rrrrMrrrEr&rrnr"r=rrro)rr~rrrqr rr test_sendfile_force_fallback8s    z*SendfileMixin.test_sendfile_force_fallbackcstjdkr"tjtjr"d\}}fdd}|j_ tj d, jj |j jddWdn1s0Y|j  |j|jdjddS) NrzFails on proactor event loopcstjj||||Srrrrr r rQs zMSendfileMixin.test_sendfile_force_unsupported_native..sendfile_nativerFfallbackr)sysplatform isinstancerr ProactorEventLooprrrrZSendfileNotAvailableErrorrMrrrEr&rrnrro)rr~rrr rr &test_sendfile_force_unsupported_nativeKs$    "  z4SendfileMixin.test_sendfile_force_unsupported_nativecCs|jdd\}}||j|j|j}|j||j||t |j ||j t |j ||j |j ||j t |j dS)NTr}rrr r r test_sendfile_sslcs  zSendfileMixin.test_sendfile_sslcCs|\}}|j|td(||j|j|jWdn1sP0Y||j | |j d| |j ddS)Nz is closingr) rrr&rrrMrrrErrnrrorr~rr r r test_sendfile_for_closing_transpns  6 z.SendfileMixin.test_sendfile_for_closing_transpcCs|\}}dd}dd}|j|||j|j|j}|j||j||j| |t |j | |j ||j || |j t |j dS)NsPREFIX__s--SUFFIXrrr<rMrrrEr&rrnr"r=rrorr~rZPREFIXZSUFFIXrqr r r test_sendfile_pre_and_post_dataws     z-SendfileMixin.test_sendfile_pre_and_post_datacCs|jdd\}}dd}dd}|j|||j|j|j}|j||j||j| |t |j | |j ||j || |j t |j dS)NTrszxcvbnmrs 0987654321rrr r r #test_sendfile_ssl_pre_and_post_datas    z1SendfileMixin.test_sendfile_ssl_pre_and_post_datacCs|\}}||j|j|jdd}|j||j||d||j d||j |j dd||j ddS)NrsdL rrMrrrrEr&rrnrrr=rorr r r test_sendfile_partials    z#SendfileMixin.test_sendfile_partialcCs|jdd\}}||j|j|jdd}|j||j||d||j d||j |j dd||j ddS)NTrrsrrrrr r r test_sendfile_ssl_partials   z'SendfileMixin.test_sendfile_ssl_partialcCs|jt|jd\}}||j|j|j}|j||j | |t|j| |j t|j| |j |j| |j t|jdS)Nr)rr"r=rMrrrrEr&rrnrrrorr r r (test_sendfile_close_peer_after_receivings   z6SendfileMixin.test_sendfile_close_peer_after_receivingcCs|jdt|jd\}}||j|j|j}||j| |t|j| |j t|j| |j |j| |j t|jdS)NTr|) rr"r=rMrrrrErrnrrrorr r r ,test_sendfile_ssl_close_peer_after_receivings  z:SendfileMixin.test_sendfile_ssl_close_peer_after_receivingZsunoszDoesn't work on SolariscCs|jdd\}}|t(||j|j|jWdn1sH0Y||j| d|j ko|t |j kn|j | d|j kot |j kn|j | |jdS)Nrr)r assertRaisesConnectionErrorrMrrrrEr assertTruerr"r=ro is_closingrr r r 3test_sendfile_close_peer_in_the_middle_of_receivings " "&zASendfileMixin.test_sendfile_close_peer_in_the_middle_of_receivingcsfdd}|j_jdd\}}t(j|jjWdn1s\0Y|j  d|j kot j kn|j  djkot j knjdS)Ncstjj||||Srrrrr r rs zcSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving..sendfile_nativerr)rrrrrrMrrrErrrr"r=ro)rrr~rr rr .corozsendfile is in progresssdata) rrrZ create_taskrMrrrr<rnr"r=)rr~rLtrqr rr !test_sendfile_prevents_bare_writes   * z/SendfileMixin.test_sendfile_prevents_bare_writecCsht}dd|j_tjj|_|t d*|j |j j |dddWdn1sZ0YdS)NcSsdSr/r r r r r rbrczPSendfileMixin.test_sendfile_no_fallback_for_fallback_transport..zfallback is disabledFr) rZMockrZ side_effectrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrrrKrrr r r 0test_sendfile_no_fallback_for_fallback_transports  z>SendfileMixin.test_sendfile_no_fallback_for_fallback_transportN)r*r+r,runittestZskipIfrrrrrrrrrrrrrr startswithrrhasattrosrrr r r r r{s0+         r{c@s eZdZdS)SendfileTestsBaseN)r*r+r,r r r r rsrrc@seZdZddZdS)SelectEventLoopTestscCstSr)r SelectorEventLooprr r r r8 s&SelectEventLoopTests.create_event_loopNr*r+r,r8r r r r rsrc@seZdZddZdS)ProactorEventLoopTestscCstSr)r rrr r r r8sz(ProactorEventLoopTests.create_event_loopNrr r r r rsrKqueueSelectorc@seZdZddZdS)KqueueEventLoopTestscCsttSr)r r selectorsrrr r r r8sz&KqueueEventLoopTests.create_event_loopNrr r r r rsr EpollSelectorc@seZdZddZdS)EPollEventLoopTestscCsttSr)r rrrrr r r r8#sz%EPollEventLoopTests.create_event_loopNrr r r r r sr PollSelectorc@seZdZddZdS)PollEventLoopTestscCsttSr)r rrrrr r r r8*sz$PollEventLoopTests.create_event_loopNrr r r r r'src@seZdZddZdS)rcCsttSr)r rrSelectSelectorrr r r r81srNrr r r r r.s)$__doc__r rrSrrurrrrtestrZ test.supportrZtest.test_asynciorrHr ImportErrorr Protocolr r.r5rPr{rrZTestCaserrrrrrrr r r r s`         &*m