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)NINITIALr) transportstatenbytes create_future connecteddone bytearraydata close_after)selflooprr r r __init__s  zMySendfileProto.__init__cCs6||_|jdksJ|jd|_|jr2|jddS)Nr CONNECTED)rrr set_resultrrr r r connection_made&s zMySendfileProto.connection_madecCs|jdksJ|jd|_dS)NrEOF)rrr r r eof_received-szMySendfileProto.eof_receivedcCs0|jdvsJ|jd|_|jr,|jddS)N)rrZCLOSED)rrrrexcr r r connection_lost1szMySendfileProto.connection_lostcs^|jdksJ|j|jt|7_|j|t||jrZ|j|jkrZ|j dS)Nr) rrlenrextendsuper data_receivedrrcloserr __class__r r r(7s   zMySendfileProto.data_received)Nr) __name__ __module__ __qualname__rrr!r$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)r3rrr r r rIszMyProto.connection_madecCs|j|dSr)rr&r*r r r r(MszMyProto.data_receivedcCsd|_|jddSr6)r4r5rr"r r r r$PszMyProto.connection_lostcs|jIdHdSr)r5r r r r wait_closedTszMyProto.wait_closedN)r-r.r/rrr(r$r7r r r r r1@s r1csdeZdZddZdZddZefddZefdd Zfd d Z fd d Z ddZ Z S) SendfileBasesSendfileBaseDatai cCstdSr)NotImplementedErrorr r r r create_event_loop`szSendfileBase.create_event_loopcsFttjd}||jWdn1s.0YtdS)Nwb)openrTESTFNwriteDATAr' setUpClass)clsfpr+r r rAcs*zSendfileBase.setUpClasscsttjtdSr)runlinkr>r' tearDownClassrBr+r r rEis zSendfileBase.tearDownClasscs@ttjd|_||jj||_||jt dS)Nrb) r=rr>file addCleanupr)r;rZset_event_loopr'setUpr r+r r rJns   zSendfileBase.setUpcs4|jst|j|ttdSr) rZ is_closed test_utilsZ run_brieflyZ doCleanupsr gc_collectr'tearDownr r+r r rMus   zSendfileBase.tearDowncCs |j|Sr)rrun_until_complete)rcoror r r run_loop~szSendfileBase.run_loop) r-r.r/r@BUF_SIZEr; classmethodrArErJrMrPr0r r r+r r8Xs  r8csteZdZefddZefddZdddZdd Zdd d Zd dZ ddZ ddZ ddZ ddZ ZS)SockSendfileMixincstj|_dt_tdS)Ni@)r!SENDFILE_FALLBACK_READBUFFER_SIZE_SockSendfileMixin__old_bufsizer'rArFr+r r rAszSockSendfileMixin.setUpClasscs|jt_tdSr)rUrrTr'rErFr+r r rEszSockSendfileMixin.tearDownClassTcCs.ttjtj}|d|r*||j|Sr2)socketAF_INET SOCK_STREAM setblockingrIr))rcleanupsockr r r make_sockets   zSockSendfileMixin.make_socketcCs|tjtj|jdSr) setsockoptrV SOL_SOCKET SO_RCVBUFrQ)rr[r r r reduce_receive_buffer_sizesz,SockSendfileMixin.reduce_receive_buffer_sizeNcCs.|tjtj|j|dur*|j|jddS)N)high)r]rVr^ SO_SNDBUFrQZset_write_buffer_limits)rr[rr r r reduce_send_buffer_sizesz)SockSendfileMixin.reduce_send_buffer_sizecstjt}jdd}|tj|fjjfdd|d |}j |d|f |fdd} ||fS) NF)rZcsSrr r )protor r z8SockSendfileMixin.prepare_socksendfile..)r[z 127.0.0.1cs<jdur"jdSr)rr)rPr7r rdrserverr r rZs   z7SockSendfileMixin.prepare_socksendfile..cleanup) r1rrfind_unused_portr\bindHOSTrP create_serverr`Z sock_connectrcrI)rportsrv_sockr[rZr rgr prepare_socksendfiles       z&SockSendfileMixin.prepare_socksendfilecCsv|\}}||j||j}|||||t|j ||j |j ||j t|j dSr) rorPr sock_sendfilerHr)r7 assertEqualr%r@rtellrr[rdretr r r test_sock_sendfile_successs z,SockSendfileMixin.test_sock_sendfile_successcCsv|\}}||j||jdd}|||||j|j dd||j d||ddS)Nii ) rorPrrprHr)r7rqrr@rrrsr 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) rotempfile TemporaryFilerPrrpr)r7rqrHrr)rr[rdfrtr 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_sendr9) rorPrZ sock_sendallrprHr)r7rqr%r@rrr)rbufr[rdrtZexpectedr r r (test_sock_sendfile_mix_with_regular_sends z:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send)T)N)r-r.r/rRrArEr\r`rcrorurwr{r}r0r r r+r rSs     rSc@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 rerfz0SendfileMixin.prepare_sendfile..)r[ssl)rcsSrr r ) cli_protor r rerf)r[rserver_hostname)rcsFjjjjdSr)rr)rPrr7r rrrhrr r rZs     z/SendfileMixin.prepare_sendfile..cleanup)rrir rrskipTestrKZsimple_server_sslcontextZsimple_client_sslcontextrVrWrXrjrkrPrlr`connectcreate_connectionrcrI) rrrrmZsrv_ctxZcli_ctxrnrZcli_socktrprrZr 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)rPrZcreate_datagram_endpointr ZDatagramProtocolrVrWassertRaisesRegex RuntimeErrorsendfilerHrqrrr))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 dSrrrPrrrrHr)rrqr%r@rrrrrrrrtr 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_nativerZtransprHoffsetcountr r r sendfile_native;s zCSendfileMixin.test_sendfile_force_fallback..sendfile_native)rrrrPrrrHr)rrqr%r@rrrr)rrrrrtr r r 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||||Srrrr r r rQs zMSendfileMixin.test_sendfile_force_unsupported_native..sendfile_nativerFfallbackr)sysplatform isinstancerr ProactorEventLooprrrrZSendfileNotAvailableErrorrPrrrHr)rrqrrr)rrrrr r r &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)NTrrrr r r test_sendfile_sslcs  zSendfileMixin.test_sendfile_sslcCs|\}}|j|td(||j|j|jWdn1sP0Y||j | |j d| |j ddS)Nz is closingr) rrr)rrrPrrrHrrqrrrrrrr 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?rPrrrHr)rrqr%r@rrrrrrZPREFIXZSUFFIXrtr 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)NrvdL rrPrrrrHr)rrqrrr@rrrr r r test_sendfile_partials    z#SendfileMixin.test_sendfile_partialcCs|jdd\}}||j|j|jdd}|j||j||d||j d||j |j dd||j ddS)NTrrvrrrrr 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@rPrrrrHr)rrqrrrrrr 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@rPrrrrHrrqrrrrrr 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 assertRaisesConnectionErrorrPrrrrHr assertTruerr%r@rr 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||||Srrrr r r rs zcSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving..sendfile_nativerr)rrrrrrPrrrHrrrr%r@rr)rrrrr r r .corozsendfile is in progresssdata) rrrZ create_taskrPrrrr?rqr%r@)rrrOtrtr rr !test_sendfile_prevents_bare_writes   * z/SendfileMixin.test_sendfile_prevents_bare_writecCsht}dd|j_tjj|_|t d*|j |j j |dddWdn1sZ0YdS)NcSsdSr2r r r r r rerfzPSendfileMixin.test_sendfile_no_fallback_for_fallback_transport..zfallback is disabledFr) rZMockrZ side_effectrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrrrNrrr 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 SelectorEventLoopr r r r r; s&SelectEventLoopTests.create_event_loopNr-r.r/r;r r r r rsrc@seZdZddZdS)ProactorEventLoopTestscCstSr)r rr r r r r;sz(ProactorEventLoopTests.create_event_loopNrr r r r rsrKqueueSelectorc@seZdZddZdS)KqueueEventLoopTestscCsttSr)r r selectorsrr r r r r;sz&KqueueEventLoopTests.create_event_loopNrr r r r rsr EpollSelectorc@seZdZddZdS)EPollEventLoopTestscCsttSr)r rrrr r r r r;#sz%EPollEventLoopTests.create_event_loopNrr r r r r sr PollSelectorc@seZdZddZdS)PollEventLoopTestscCsttSr)r rrrr r r r r;*sz$PollEventLoopTests.create_event_loopNrr r r r r'src@seZdZddZdS)rcCsttSr)r rrSelectSelectorr r r r r;1srNrr r r r r.s)$__doc__r rrVrrxrrrrtestrZ test.supportrZtest.test_asynciorrKr ImportErrorr Protocolr r1r8rSr~rrZTestCaserrrrrrrr r r r s`         &*m