a 8êdgwGã@s:ddlZddlZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z ddlmZGdd„dejƒZGd d „d ƒZejd kr¼Gd d „d ee jƒZGdd„dee jƒZnzddlZeedƒrâGdd„dee jƒZeedƒrGdd„dee jƒZeedƒr"Gdd„dee jƒZGdd „d ee jƒZdS)éN)Úproactor_events)ÚcycleÚislice)Úutils)Úsupport)Ú socket_helperc@s>eZdZdZdZd dd„Zdd„Zdd„Zdd „Zd d „Z dS) ÚMyProtoNcCs2d|_d|_d|_|dur.| ¡|_| ¡|_dS)NZINITIALr)Ú transportÚstateÚnbytesZ create_futureÚ connectedÚdone)ÚselfÚloop©rú@/usr/local/lib/python3.9/test/test_asyncio/test_sock_lowlevel.pyÚ__init__s  zMyProto.__init__cCs,||_d|_|jr|j d¡| d¡dS)NZ CONNECTEDs%GET / HTTP/1.0 Host: example.com )r r r Ú set_resultÚwrite)rr rrrÚconnection_mades  zMyProto.connection_madecCs|jt|ƒ7_dS©N)r Úlen)rÚdatarrrÚ data_received"szMyProto.data_receivedcCs d|_dS)NZEOF)r ©rrrrÚ eof_received&szMyProto.eof_receivedcCsd|_|jr|j d¡dS)NZCLOSED)r r r)rÚexcrrrÚconnection_lost*szMyProto.connection_lost)N) Ú__name__Ú __module__Ú __qualname__r r rrrrrrrrrrs rcsÆeZdZdd„Z‡fdd„Z‡fdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zejd!d"„ƒZd#d$„Zd%d&„Zd'd(„Zd)d*„Z‡ZS)+ÚBaseSockTestsMixincCst‚dSr)ÚNotImplementedErrorrrrrÚcreate_event_loop3sz$BaseSockTestsMixin.create_event_loopcs$| ¡|_| |j¡tƒ ¡dSr)r#rZset_event_loopÚsuperÚsetUpr©Ú __class__rrr%6s  zBaseSockTestsMixin.setUpcs4|j ¡st |j¡| ¡t ¡tƒ ¡dSr) rZ is_closedÚ test_utilsZ run_brieflyZ doCleanupsrÚ gc_collectr$ÚtearDownrr&rrr*;s   zBaseSockTestsMixin.tearDowncCsìt|jtjƒsl|j d¡| d¡| t¡(|j |j  ||j ¡¡Wdƒn1s^0Y| t¡&|j |j  |d¡¡Wdƒn1sž0Y| t¡&|j |j  |d¡¡Wdƒn1sÞ0Y| t¡(|j |j  |tƒ¡¡Wdƒn1s"0Y| t¡$|j |j |¡¡Wdƒn1sb0Y| d¡|j |j  ||j ¡¡|j |j  |d¡¡|j |j  |d¡¡}|j |j  |d¡¡| ¡| | d¡¡dS)NTóGET / HTTP/1.0 éFóHTTP/1.0 200 OK)Ú isinstancerrZBaseProactorEventLoopZ set_debugÚ setblockingÚ assertRaisesÚ ValueErrorÚrun_until_completeÚ sock_connectÚaddressÚ sock_sendallÚ sock_recvÚsock_recv_intoÚ bytearrayÚ sock_acceptÚcloseÚ assertTrueÚ startswith)rÚhttpdÚsockrrrrÚ_basetest_sock_client_opsDsL   ÿ"  ÿ"  ÿ" ÿ$  ÿ$ ÿ ÿ ÿ ÿz,BaseSockTestsMixin._basetest_sock_client_opsc CsÀ| d¡|j |j ||j¡¡|j |j |d¡¡tdƒ}t|ƒL}|j |j ||dd…¡¡}|j |j |||d…¡¡Wdƒn1sš0Y|  ¡|  |  d¡¡dS)NFr+r,r-) r/rr2r3r4r5r8Ú memoryviewr7r:r;r<)rr=r>rÚbufr rrrÚ_basetest_sock_recv_intohs" ÿ ÿ ÿÿ"z+BaseSockTestsMixin._basetest_sock_recv_intocCsTt ¡8}t ¡}| ||¡t ¡}| ||¡Wdƒn1sF0YdSr)r(Úrun_test_serverÚsocketr?rB©rr=r>rrrÚtest_sock_client_opsys   z'BaseSockTestsMixin.test_sock_client_opscÃsœ| d¡|j ||j¡IdHt |j |d¡¡}t d¡IdH| ¡t |j  |d¡¡|j |d¡IdH}|j |d¡IdH|  |  d¡¡dS©NFr,rr+r-) r/rr3r4ÚasyncioÚ create_taskr6ÚsleepÚcancelr5r;r<)rr=r>ÚtaskrrrrÚ_basetest_sock_recv_racing€s  ÿz-BaseSockTestsMixin._basetest_sock_recv_racingc Ãsî| d¡|j ||j¡IdHtdƒ}t|ƒ }t |j ||dd…¡¡}t  d¡IdH|  ¡t |j  |d¡¡}|j ||dd…¡IdH}|j |||d…¡IdH|  |  d¡¡Wdƒn1sÖ0Y|IdHdSrG)r/rr3r4r8r@rHrIr7rJrKr5r;r<)rr=r>rrArLr rrrÚ_basetest_sock_recv_into_racings   ÿ ÿ.z2BaseSockTestsMixin._basetest_sock_recv_into_racingc ƒsv| d¡| d¡| tjtjd¡| d¡t ˆj   ||  ¡¡¡}t  d¡IdH|  ¡d‰ˆ d¡ˆî|IdHd}|dkrÒˆ t¡ | d|¡q–Wdƒn1sº0Yt|d ƒ}q‚t ˆj  |d ¡¡}t  d¡IdH| ¡‡‡fd d „}t |ƒ¡}ˆj  |d ¡IdH| tj¡|IdH}ˆ | d ¡¡Wdƒn1sh0YdS)N©z 127.0.0.1rér,Fré éó éshelloc“s2d}ˆj ˆd¡IdH}|s |S|| ¡7}qdS)NórQ)rr6Ústrip)ÚrvrA©rZserverrrÚrecv_allÃs z?BaseSockTestsMixin._basetest_sock_send_racing..recv_allsworld)ÚbindÚlistenÚ setsockoptrDÚ SOL_SOCKETÚ SO_SNDBUFr/rHrIrr3Ú getsocknamerJÚacceptr0ÚBlockingIOErrorÚsendÚintr5rKÚshutdownÚSHUT_WRr;Úendswith)rÚlistenerr>rLÚsizerYrrrXrÚ_basetest_sock_send_racing¤s8   ÿ    . ÿ   z-BaseSockTestsMixin._basetest_sock_send_racingc Ãsþ| d¡| ¡}| d¡t |j ||¡¡}t d¡IdH| ¡|  d¡d}t dƒD]}z|j ||¡IdHWnlt y¢}z|}WYd}~q^d}~0t yæ}z.|}t |ddƒdkrÒWYd}~qðWYd}~q^d}~00dSq^| |¡dS) NrOFrrPzMax retries reachedé€Úwinerrori&')rZr_r/rHrIrr3rJrKr[ÚrangeÚConnectionRefusedErrorÚOSErrorÚgetattrZskipTest)rrgr>ÚaddrrLZ skip_reasonÚiÚerrrÚ_basetest_sock_connect_racingÛs&    $z0BaseSockTestsMixin._basetest_sock_connect_racingc Cs4t ¡ }t ¡}|,|j t | ||¡d¡¡Wdƒn1sH0Yt ¡}|,|j t | ||¡d¡¡Wdƒn1s0YWdƒn1s®0Yt ¡}t ¡}|R|,|j t |  ||¡d¡¡Wdƒn1s0YWdƒn1s&0YdS©Né ) r(rCrDrr2rHÚwait_forrMrNri)rr=r>rgrrrÚtest_sock_client_racingùs"   ÿ$  ÿB   ÿz*BaseSockTestsMixin.test_sock_client_racingc Csxt ¡}t ¡}|P|,|j t | ||¡d¡¡Wdƒn1sL0YWdƒn1sj0YdSrt)rDrr2rHrvrs)rrgr>rrrÚtest_sock_client_connect_racing s    ÿz2BaseSockTestsMixin.test_sock_client_connect_racingc Ãs€t ¡}| d¡d}d|d}|j ||¡IdH|j |dd|d¡IdHt |j ||¡¡}|j ||¡IdH}| |  d¡¡|  d ¡d kr¶||j ||¡IdH7}qŽ|d|  d ¡d …}|t |ƒd…}|}t dƒ} tt| t |ƒƒƒ} | || ¡|t |ƒ8}|j ||¡IdH}|s0q^tt| t |ƒƒƒ} | || ¡|t |ƒ8}q| |d ¡|IdH| ¡dS© NFi@Bs 0123456789rusPOST /loop HTTP/1.0 sContent-Length: %d s r-s éÿÿÿÿrRr)rDr/rr3r5rHrIr6r;r<ÚfindÚindexrrÚbytesrÚ assertEqualr:) rr4r>Ú DATA_SIZEÚchunkrLrÚheadersrhÚcheckerÚexpectedrrrÚ_basetest_huge_contentsB  ÿþÿ      z)BaseSockTestsMixin._basetest_huge_contentcCs@t ¡$}|j | |j¡¡Wdƒn1s20YdSr)r(rCrr2r„r4©rr=rrrÚtest_huge_content<s  ÿz$BaseSockTestsMixin.test_huge_contentcÃs¸t ¡}| d¡d}d|d}|j ||¡IdH|j |dd|d¡IdHt |j ||¡¡}t|ƒ}t|ƒ}|j  ||¡IdH}t |d|…ƒ} |  |   d¡¡|   d ¡d krâ|j  ||¡IdH}t |d|…ƒ} q®| d|  d ¡d …} | t| ƒd…} |} tdƒ} t t| t| ƒƒƒ} | | | ¡| t| ƒ8} |j  ||¡IdH}|d|…} | shq–t t| t| ƒƒƒ} | | | ¡| t| ƒ8} q>| | d ¡|IdH| ¡dSry)rDr/rr3r5rHrIr8r@r7r}r;r<r{r|rrrr~r:)rr4r>rr€rLÚarrayrAr rrrhr‚rƒrrrÚ_basetest_huge_content_recvintoAsL  ÿþÿ       z2BaseSockTestsMixin._basetest_huge_content_recvintocCs@t ¡$}|j | |j¡¡Wdƒn1s20YdSr)r(rCrr2rˆr4r…rrrÚtest_huge_content_recvintoss  ÿz-BaseSockTestsMixin.test_huge_content_recvintocCs\t ¡@}t tj¡}| ||¡t tj¡}| ||¡Wdƒn1sN0YdSr)r(Zrun_test_unix_serverrDÚAF_UNIXr?rBrErrrÚtest_unix_sock_client_opsxs     z,BaseSockTestsMixin.test_unix_sock_client_opscCs”d}z&t ¡}| d¡| ¡}W| ¡n | ¡0t ¡}| d¡| t¡&|j |j  ||¡¡Wdƒn1s~0Y| ¡dS)NrOF) rDrZr_r:r/r0rmrr2r3)rr4Úsr>rrrÚtest_sock_client_fail€s     ÿ"z(BaseSockTestsMixin.test_sock_client_failcCs¨t ¡}| d¡| d¡| d¡t ¡}| | ¡¡|j |¡}|j |¡\}}|  |  ¡d¡|  || ¡¡|  |  ¡| ¡¡|  ¡|  ¡|  ¡dS)NFrOrPr) rDr/rZr[Úconnectr_rr9r2r~Ú gettimeoutÚ getpeernamer:)rrgÚclientÚfÚconnrprrrÚtest_sock_accept‘s    z#BaseSockTestsMixin.test_sock_acceptcCsät ¡}| d¡| d¡| d¡| ¡}t |j |¡d¡}|  tj ¡|j  |¡Wdƒn1sp0Y|  ¡t ¡}| d¡|j  ||¡}|  t¡|j  |¡Wdƒn1sÎ0Y|  ¡dS)NFrOrPgš™™™™™¹?)rDr/rZr[r_rHrvrr9r0Ú TimeoutErrorr2r:r3rm)rrgZsockaddrr’r‘rrrÚtest_cancel_sock_accept¢s   *  *z*BaseSockTestsMixin.test_cancel_sock_acceptc st ¡ú}d}ˆj ˆjj|jdtjiŽ¡}|D]Z\}}}}}z4tj|||d}| d¡ˆj ˆj  ||¡¡Wnt y„Yq00qŒq0ˆjj ‡fdd„|d} ˆj | ¡\} } ˆ  | t j¡ˆ  | t j¡ˆj | j¡ˆ | jd¡|  ¡Wdƒn1s 0YdS)NÚtype)Úfamilyr—ÚprotoFcs tˆjdS)N)r)rrrrrrÚÉrUz@BaseSockTestsMixin.test_create_connection_sock..)r>r)r(rCrr2Ú getaddrinfor4rDÚ SOCK_STREAMr/r3Ú BaseExceptionÚcreate_connectionZassertIsInstancerHZ TransportÚProtocolr Z assertGreaterr r:) rr=r>Zinfosr˜r—r™Zcnamer4r’ÚtrZprrrrÚtest_create_connection_sockµs8 ÿÿÿ  ÿ  ÿz.BaseSockTestsMixin.test_create_connection_sock)rrr r#r%r*r?rBrFrMrNrirsrwrxr„r†rˆr‰rZskip_unless_bind_unix_socketr‹rr”r–r¡Ú __classcell__rrr&rr!1s,  $7,2 r!Úwin32c@seZdZdd„ZdS)ÚSelectEventLoopTestscCst ¡Sr)rHÚSelectorEventLooprrrrr#×sú&SelectEventLoopTests.create_event_loopN©rrr r#rrrrr¤Ôsr¤c@seZdZdd„ZdS)ÚProactorEventLoopTestscCst ¡Sr)rHZProactorEventLooprrrrr#Ýsz(ProactorEventLoopTests.create_event_loopNr§rrrrr¨Úsr¨ÚKqueueSelectorc@seZdZdd„ZdS)ÚKqueueEventLoopTestscCst t ¡¡Sr)rHr¥Ú selectorsr©rrrrr#çsÿz&KqueueEventLoopTests.create_event_loopNr§rrrrrªäsrªÚ EpollSelectorc@seZdZdd„ZdS)ÚEPollEventLoopTestscCst t ¡¡Sr)rHr¥r«r¬rrrrr#ïsz%EPollEventLoopTests.create_event_loopNr§rrrrr­ìsr­Ú PollSelectorc@seZdZdd„ZdS)ÚPollEventLoopTestscCst t ¡¡Sr)rHr¥r«r®rrrrr#ösz$PollEventLoopTests.create_event_loopNr§rrrrr¯ósr¯c@seZdZdd„ZdS)r¤cCst t ¡¡Sr)rHr¥r«ÚSelectSelectorrrrrr#ýsr¦Nr§rrrrr¤ús)rDÚtimerHÚsysZunittestrÚ itertoolsrrZtest.test_asynciorr(ÚtestrZ test.supportrrŸrr!ÚplatformZTestCaser¤r¨r«Úhasattrrªr­r¯rrrrÚsJ    #$  ÿ ÿ  ÿ  ÿ  ÿ ÿ