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)NÚINITIALr)Ú 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@||_|jdksJ|jƒ‚d|_|jr2|j d¡| d¡dS)Nr Ú CONNECTEDs%GET / HTTP/1.0 Host: example.com )r r r Ú set_resultÚwrite)rr rrrÚconnection_mades  zMyProto.connection_madecCs*|jdksJ|jƒ‚|jt|ƒ7_dS)Nr)r r Úlen)rÚdatarrrÚ data_received"szMyProto.data_receivedcCs|jdksJ|jƒ‚d|_dS)NrÚEOF)r ©rrrrÚ eof_received&szMyProto.eof_receivedcCs0|jdvsJ|jƒ‚d|_|jr,|j d¡dS)N)rrZCLOSED)r rr)rÚexcrrrÚconnection_lost*szMyProto.connection_lost)N) Ú__name__Ú __module__Ú __qualname__r rrrrrrrrrrrs 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‚dS©N)Ú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/r0) r2rr5r6r7r8r;Ú memoryviewr:r=r>r?)rr@rArÚbufr rrrÚ_basetest_sock_recv_intohs" ÿ ÿ ÿÿ"z+BaseSockTestsMixin._basetest_sock_recv_intocCsTt ¡8}t ¡}| ||¡t ¡}| ||¡Wdƒn1sF0YdSr$)r+Úrun_test_serverÚsocketrBrE©rr@rArrrÚ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.r0) r2rr6r7ÚasyncioÚ create_taskr9ÚsleepÚcancelr8r>r?)rr@rAÚ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|IdHdSrJ)r2rr6r7r;rCrKrLr:rMrNr8r>r?)rr@rArrDrOr 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órT)rr9Ústrip)ÚrvrD©rZserverrrÚrecv_allÃs z?BaseSockTestsMixin._basetest_sock_send_racing..recv_allsworld)ÚbindÚlistenÚ setsockoptrGÚ SOL_SOCKETÚ SO_SNDBUFr2rKrLrr6Ú getsocknamerMÚacceptr3ÚBlockingIOErrorÚsendÚintr8rNÚshutdownÚSHUT_WRr>Úendswith)rÚlistenerrArOÚsizer\rrr[rÚ_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) NrRFrrSzMax retries reachedé€Úwinerrori&')r]rbr2rKrLrr6rMrNr^ÚrangeÚConnectionRefusedErrorÚOSErrorÚgetattrZskipTest)rrjrAÚaddrrOZ 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+rFrGrr5rKÚwait_forrPrQrl)rr@rArjrrrÚtest_sock_client_racingùs"   ÿ$  ÿB   ÿz*BaseSockTestsMixin.test_sock_client_racingc Csxt ¡}t ¡}|P|,|j t | ||¡d¡¡Wdƒn1sL0YWdƒn1sj0YdSrw)rGrr5rKryrv)rrjrArrrÚ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 0123456789rxsPOST /loop HTTP/1.0 sContent-Length: %d s r0s éÿÿÿÿrUr)rGr2rr6r8rKrLr9r>r?ÚfindÚindexrrÚbytesrÚ assertEqualr=) rr7rAÚ DATA_SIZEÚchunkrOrÚheadersrkÚcheckerÚexpectedrrrÚ_basetest_huge_contentsB  ÿþÿ      z)BaseSockTestsMixin._basetest_huge_contentcCs@t ¡$}|j | |j¡¡Wdƒn1s20YdSr$)r+rFrr5r‡r7©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| ¡dSr|)rGr2rr6r8rKrLr;rCr:r€r>r?r~rrrrrr=)rr7rAr‚rƒrOÚarrayrDr rr„rkr…r†rrrÚ_basetest_huge_content_recvintoAsL  ÿþÿ       z2BaseSockTestsMixin._basetest_huge_content_recvintocCs@t ¡$}|j | |j¡¡Wdƒn1s20YdSr$)r+rFrr5r‹r7rˆrrrÚtest_huge_content_recvintoss  ÿz-BaseSockTestsMixin.test_huge_content_recvintocCs\t ¡@}t tj¡}| ||¡t tj¡}| ||¡Wdƒn1sN0YdSr$)r+Zrun_test_unix_serverrGÚAF_UNIXrBrErHrrrÚ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)NrRF) rGr]rbr=r2r3rprr5r6)rr7ÚsrArrrÚtest_sock_client_fail€s     ÿ"z(BaseSockTestsMixin.test_sock_client_failcCs¨t ¡}| d¡| d¡| d¡t ¡}| | ¡¡|j |¡}|j |¡\}}|  |  ¡d¡|  || ¡¡|  |  ¡| ¡¡|  ¡|  ¡|  ¡dS)NFrRrSr) rGr2r]r^Úconnectrbrr<r5rÚ gettimeoutÚ getpeernamer=)rrjÚclientÚfÚconnrsrrrÚ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)NFrRrSgš™™™™™¹?)rGr2r]r^rbrKryrr<r3Ú TimeoutErrorr5r=r6rp)rrjZsockaddrr•r”rrrÚtest_cancel_sock_accept¢s   *  *z*BaseSockTestsMixin.test_cancel_sock_acceptc s&t ¡}d}ˆj ˆjj|jdtjiŽ¡}|D]Z\}}}}}z4tj|||d}| d¡ˆj ˆj  ||¡¡Wnt y†Yq20qšq2dsšJdƒ‚ˆjj ‡fdd„|d} ˆj | ¡\} } ˆ  | t j¡ˆ  | t j¡ˆj | j¡ˆ | jd¡|  ¡Wdƒn1s0YdS) NÚtype)ÚfamilyršÚprotoFzCan not create socket.cs tˆjdS)N)r)rrrrrrÚÉrXz@BaseSockTestsMixin.test_create_connection_sock..)rAr)r+rFrr5Ú getaddrinfor7rGÚ SOCK_STREAMr2r6Ú BaseExceptionÚcreate_connectionZassertIsInstancerKZ TransportÚProtocolrZ assertGreaterr r=) rr@rAZinfosr›ršrœZcnamer7r•ÚtrZprrrrÚtest_create_connection_sockµs: ÿÿÿ  ÿ   ÿz.BaseSockTestsMixin.test_create_connection_sock)r r!r"r&r(r-rBrErIrPrQrlrvrzr{r‡r‰r‹rŒrZskip_unless_bind_unix_socketrŽrr—r™r¤Ú __classcell__rrr)rr#1s,  $7,2 r#Úwin32c@seZdZdd„ZdS)ÚSelectEventLoopTestscCst ¡Sr$)rKÚSelectorEventLooprrrrr&×sú&SelectEventLoopTests.create_event_loopN©r r!r"r&rrrrr§Ôsr§c@seZdZdd„ZdS)ÚProactorEventLoopTestscCst ¡Sr$)rKZProactorEventLooprrrrr&Ýsz(ProactorEventLoopTests.create_event_loopNrªrrrrr«Úsr«ÚKqueueSelectorc@seZdZdd„ZdS)ÚKqueueEventLoopTestscCst t ¡¡Sr$)rKr¨Ú selectorsr¬rrrrr&çsÿz&KqueueEventLoopTests.create_event_loopNrªrrrrr­äsr­Ú EpollSelectorc@seZdZdd„ZdS)ÚEPollEventLoopTestscCst t ¡¡Sr$)rKr¨r®r¯rrrrr&ïsz%EPollEventLoopTests.create_event_loopNrªrrrrr°ìsr°Ú PollSelectorc@seZdZdd„ZdS)ÚPollEventLoopTestscCst t ¡¡Sr$)rKr¨r®r±rrrrr&ösz$PollEventLoopTests.create_event_loopNrªrrrrr²ósr²c@seZdZdd„ZdS)r§cCst t ¡¡Sr$)rKr¨r®ÚSelectSelectorrrrrr&ýsr©Nrªrrrrr§ús)rGÚtimerKÚsysZunittestrÚ itertoolsrrZtest.test_asynciorr+ÚtestrZ test.supportrr¢rr#ÚplatformZTestCaser§r«r®Úhasattrr­r°r²rrrrÚsJ    #$  ÿ ÿ  ÿ  ÿ  ÿ ÿ