idS rdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddl mZddlmZmZmZmZmZmZmZmZmZddlmZddlmZddlmZmZdd l m!Z!ddl"Z"dd l#m$Z$m%Z%d d l&m'Z'm(Z(d d l m)Z)d dl*m+Z+d dl,m-Z-d dl.m/Z/m0Z0d dl1m2Z2m3Z3d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>erddl?m@Z@ndZ@e/rddlmAZBnddlCmBZBejDdko ejEdkZFejGfdeHdejIdejfdZJdeHdeKdejIdejfdZLdeKfdZMGd d!e ZNGd"d#eNZOGd$d%eNZPGd&d'ZQGd(d)eBZRd*ed+ed,edefd-ZSegejTfZUejVejWd.fd/eUd0eXdeejTfd1ZYejWfd/eUdejTfd2ZZdKd3ejTd0eXddfd4Z[dej\fd5Z]dLd6ee@dej^fd7Z_ dLe0e2d d d.de0e0e0e0dd8d9d: d;eHded?e2d@eXdAedBedCedDedEed6ee@dFeKd3ede8fdGZ`e0e0fdHedIedefdJZadS)MzUtilities shared by tests.N)ABCabstractmethod) TracebackType) TYPE_CHECKINGAnyCallableIteratorListOptionalTypeUnioncast)mock)Signal) CIMultiDictCIMultiDictProxy)URL)_RequestContextManager_WSRequestContextManager) ClientSessionhdrs)AbstractCookieJar)ClientResponse)ClientWebSocketResponse)PY_38sentinel) HttpVersionRawRequestMessage) Application AppRunner BaseRunnerRequestServer ServerRunnerSockSiteUrlMappingMatchInfo)_RequestHandler) SSLContext)IsolatedAsyncioTestCase)TestCaseposixcygwinhostfamilyreturnc$t|d|S)Nr)get_port_socket)r.r/s G/opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp/test_utils.pyget_unused_port_socketr4As 4F + ++portctj|tj}tr+|tjtjd|||f|S)Nr)socket SOCK_STREAM REUSE_ADDRESS setsockopt SOL_SOCKET SO_REUSEADDRbind)r.r6r/ss r3r2r2GsZ  ff011A@ V&(;Q???FFD$< Hr5c tjtjtj5}|dt t |dcdddS#1swxYwYdS)z1Return a port that is unused on the current host.) 127.0.0.1rrN)r8AF_INETr9r>rint getsockname)r?s r3 unused_portrETs v~v'9 : :-a    C+,,------------------sAA99A=A=ceZdZdZeddddeddeeefde e j dede e d e d eee ejgejfd ed dfd Z dde e j d ed dfdZed ed efdZded efdZed e fdZed e fdZed efdZddZddZde e e!de e!de e"d dfdZ#ddZ$de e e!de e!de e"d dfdZ%dS) BaseTestServerFNrA)schemeloopr.r6skip_url_assertssocket_factoryrHrIr.r6rJrKkwargsr0c ||_d|_d|_||_||_d|_||_||_||_dS)NF) _looprunner_rootr.r6_closedrHrJrK)selfrHrIr.r6rJrKrLs r3__init__zBaseTestServer.__init__^sK ,0 $(     0,r5cK|jrdS||_|dd|_|jd i|d{V|_|jd{V|jsd|_ tj|j j }n#t$rd}YnwxYw|dkr tj n tj}||j |j|}|dd\|_ |_t#|j||j}|d{V|j}|j}|dd|_|jt,ur|jrd} nd } | |_t/|jd |j d |j|_dS) Nsslr)sock ssl_contextrhttpshttpz://:)rOrNpop_ssl _make_runnersetupr6 ipaddress ip_addressr.version ValueErrorr8AF_INET6rBrKrDr&start_serversocketsrHrrrP) rRrIrLrer/_socksiteserverrjrHs r3 start_serverzBaseTestServer.start_serverus ;  F JJud++ -D-7777777777 k!!!!!!!!!y DI *4955=GG   GGG $+qLLfn##DIty&AA$00222A26 49 %TYGGGjjll.AJ**,,Q/ ;( " "y   DKDKCCDICC CCDD s4B B"!B"c KdSNr^rRrLs r3razBaseTestServer._make_runners  r5pathct|}|js|j|Stt |j|zSrp)rrJrPjoinstr)rRrrurls r3make_urlzBaseTestServer.make_urlsG$ii$ /:??3'' 's4:-.. .r5c|jduSrp)rOrRs r3startedzBaseTestServer.starteds{$&&r5c|jSrp)rQrys r3closedzBaseTestServer.closed |r5c|j}|jSrp)rOrm)rRrOs r3handlerzBaseTestServer.handlers}r5cK|jr=|js8|jd{Vd|_d|_d|_dSdSdS)a`Close all fixtures created by the test client. After that point, the TestClient is no longer usable. This is an idempotent function: running close multiple times will not have any additional effects. close is also run when the object is garbage collected, and on exit when used as a context manager. NT)rzr|rOcleanuprPr6rQrys r3closezBaseTestServer.closesn <   +%%'' ' ' ' ' ' ' 'DJDIDLLL     r5c tdNzUse async with instead TypeErrorrys r3 __enter__zBaseTestServer.__enter__0111r5exc_type exc_value tracebackcdSrpr^rRrrrs r3__exit__zBaseTestServer.__exit__  r5cLK||jd{V|SNrI)rnrNrys r3 __aenter__zBaseTestServer.__aenter__s6TZ000000000 r5c>K|d{VdSrprrs r3 __aexit__zBaseTestServer.__aexit__. jjllr5rpr0N)r0rG)&__name__ __module__ __qualname____test__rr2r ruobjectr asyncioAbstractEventLooprCboolrr8 AddressFamilyrrSrnrr"rarrwpropertyrzr|r$rrrr BaseExceptionrrrrr^r5r3rGrG[sH &.48"!& ---c6k"-w01 -  - sm --! #v+ ,fm ; -- ----0;?EEW67EJME EEEEB 3 :   ^ /S/S////''''X'XX    &2222 4 ./ M* M*       4 ./M*M*   r5rGc jeZdZeddddedeeefdedee de f fd Z de d e fd Z xZS) TestServerrANrHr.r6apprHr.r6rLc P||_tjd|||d|dSNrr^)rsuperrS)rRrrHr.r6rL __class__s r3rSzTestServer.__init__s8GTGGGGGGGr5r0c*Kt|jfi|Srp)r!rrqs r3razTestServer._make_runners,,V,,,r5)rrrrr r rurr rCrrSr"ra __classcell__rs@r3rrs &." H H H  Hc6k" H  H sm H H H H H H H-3-:--------r5rc teZdZeddddedeeefdedee de d df fd Z dd e de d e fd ZxZS) RawTestServerrANrrrHr.r6rLr0c P||_tjd|||d|dSr)_handlerrrS)rRrrHr.r6rLrs r3rSzRawTestServer.__init__s8  GTGGGGGGGr5TdebugcXKt|jf|j|d|}t|fd|i|S)N)rIrr)r$rrNr%)rRrrLsrvs r3razRawTestServer._make_runnersAT]K5KKFKKC77u7777r5)T)rrrrr(r rurr rCrrSrr%rarrs@r3rrs &." H H H  Hc6k" H  H sm H H  H H H H H H888s8|88888888r5rc eZdZdZdZddddedeedeej de d df d Z d'd Z e d efd Ze d eefd Ze d efdZe d eefdZe d efdZded efdZdedede d efdZdedede d efdZdede d efdZdede d efdZdede d efdZdede d efdZ dede d efdZ!dede d efdZ"dede d efdZ#dede d e$fdZ%dede d e&fdZ'd'dZ(d'd Z)d!ee*e+d"ee+d#ee,d dfd$Z-d(d%Z.d!ee*e+d"ee+d#ee,d dfd&Z/dS)) TestClientzb A test client implementation. To write functional tests for aiohttp based servers. FN) cookie_jarrIrmrrIrLr0c t|tstdt|z||_||_|t jd|}td||d||_ d|_ g|_ g|_ dS)Nz2server must be TestServer instance, found type: %rT)unsaferI)rIrFr^) isinstancerGrtyperirNaiohttp CookieJarr_sessionrQ _responses _websockets)rRrmrrIrLs r3rSzTestClient.__init__ s&.11 G$v,,V     *$TBBBJ%Q4JQQ&QQ  02:<r5cVK|j|jd{VdSr)rirnrNrys r3rnzTestClient.start_server"s9l''TZ'88888888888r5c|jjSrp)rir.rys r3r.zTestClient.host% |  r5c|jjSrp)rir6rys r3r6zTestClient.port)rr5c|jSrp)rirys r3rmzTestClient.server-r}r5cjtttt|jddS)Nr)rr r getattrrirys r3rzTestClient.app1s%H[)74<+M+MNNNr5c|jS)zAn internal aiohttp.ClientSession. Unlike the methods on the TestClient, client session requests do not automatically include the host in the url queried, and will require an absolute path to the resource. )rrys r3sessionzTestClient.session5s }r5rrc6|j|Srp)rirw)rRrrs r3rwzTestClient.make_url@s|$$T***r5methodcK|jj|||fi|d{V}|j||Srp)rrequestrwrappend)rRrrrrLresps r3_requestzTestClient._requestCs]*T]*64==3F3FQQ&QQQQQQQQ t$$$ r5c :t|j||fi|S)zRoutes a request to tested http server. The interface is identical to aiohttp.ClientSession.request, except the loop kwarg is overridden by the instance used by the test server. )rr)rRrrrrLs r3rzTestClient.requestIs(&mdmFD&K&KF&K&KLLLr5c Nt|jtj|fi|S)zPerform an HTTP GET request.)rrrMETH_GETrRrrrLs r3getzTestClient.getS(%mdmDM4&R&R6&R&RSSSr5c Nt|jtj|fi|S)zPerform an HTTP POST request.)rrr METH_POSTrs r3postzTestClient.postW(%mdmDND&S&SF&S&STTTr5c Nt|jtj|fi|S)z Perform an HTTP OPTIONS request.)rrr METH_OPTIONSrs r3optionszTestClient.options[s)%mdmD4Et&V&Vv&V&VWWWr5c Nt|jtj|fi|S)zPerform an HTTP HEAD request.)rrr METH_HEADrs r3headzTestClient.head_rr5c Nt|jtj|fi|S)zPerform an HTTP PUT request.)rrrMETH_PUTrs r3putzTestClient.putcrr5c Nt|jtj|fi|SzPerform an HTTP PATCH request.)rrr METH_PATCHrs r3patchzTestClient.patchgs(%mdmDOT&T&TV&T&TUUUr5c Nt|jtj|fi|Sr)rrr METH_DELETErs r3deletezTestClient.deleteks)%mdmD4Dd&U&Uf&U&UVVVr5c 8t|j|fi|S)zjInitiate websocket connection. The api corresponds to aiohttp.ClientSession.ws_connect. )r _ws_connectrs r3 ws_connectzTestClient.ws_connectos( ((8(8(H(H(H(HIIIr5cK|jj||fi|d{V}|j||Srp)rrrwrr)rRrrrLwss r3rzTestClient._ws_connectws\+4=+DMM$,?,?JJ6JJ J J J J J J ### r5c*K|js|jD]}||jD]}|d{V|jd{V|jd{Vd|_dSdS)aHClose all fixtures created by the test client. After that point, the TestClient is no longer usable. This is an idempotent function: running close multiple times will not have any additional effects. close is also run on exit when used as a(n) (asynchronous) context manager. NT)rQrrrrri)rRrrs r3rzTestClient.close|s|    & ! !hhjj        -%%'' ' ' ' ' ' ' ',$$&& & & & & & & &DLLL  r5c tdrrrys r3rzTestClient.__enter__rr5rexctbcdSrpr^rRrrrs r3rzTestClient.__exit__rr5c>K|d{V|Srp)rnrys r3rzTestClient.__aenter__s/!!!!!!!!! r5c>K|d{VdSrprrs r3rzTestClient.__aexit__rr5r)r0r)0rrr__doc__rrGr rrrrrSrnrrur.rCr6rmr rrrrrwrrrrrrrrrrrrrrrrrr rrrrrr^r5r3rrsH 3748 ====./ = w01 =  = ====*9999!c!!!X!!hsm!!!X!XOXk*OOOXOX+S+S++++Ss~ McMMM@VMMMMTTsT/ETTTTUUU0FUUUUXCX3X3IXXXXUUU0FUUUUTTsT/ETTTTV#VV1GVVVVW3W#W2HWWWWJsJcJ6NJJJJcS=T     *2222 4 ./ m $  ] #       4 ./m $ ] #   r5rczeZdZdZdefdZdefdZddZddZddZ dd Z dd Z dd Z d ede fd Zde defdZdS)AioHTTPTestCaseaA base class to allow for unittest web applications using aiohttp. Provides the following: * self.client (aiohttp.test_utils.TestClient): an aiohttp test client. * self.loop (asyncio.BaseEventLoop): the event loop in which the application and server are running. * self.app (aiohttp.web.Application): the application returned by self.get_application() Note that the TestClient's methods are asynchronous: you have to execute function on the test client using asynchronous methods. r0c.K|S)zGet application. This method should be overridden to return the aiohttp.web.Application object to test. )get_apprys r3get_applicationzAioHTTPTestCase.get_applications||~~r5c td)zqObsolete method used to constructing web application. Use .get_application() coroutine instead. z+Did you forget to define get_application()?) RuntimeErrorrys r3rzAioHTTPTestCase.get_apps HIIIr5Ncts:tj|dSdSrp)rrget_event_looprun_until_complete asyncSetUprys r3setUpzAioHTTPTestCase.setUpsD K  " $ $ 7 78I8I J J J J J K Kr5cK tj|_nA#ttf$r-tj|_YnwxYw|d{VSrp)rget_running_looprIAttributeErrorrget_event_loop_policyr setUpAsyncrys r3rzAioHTTPTestCase.asyncSetUps I022DII - I I I577FFHHDIII I__&&&&&&&&&s;AAcK|d{V|_||jd{V|_||jd{V|_|jd{VdSrp)rr get_serverrm get_clientclientrnrys r3r zAioHTTPTestCase.setUpAsyncs--//////// OODH55555555  OODK88888888 k&&(((((((((((r5cpts.|j|dSdSrp)rrIr asyncTearDownrys r3tearDownzAioHTTPTestCase.tearDowns< ? I ( (););)=)= > > > > > ? ?r5c:K|d{VSrp) tearDownAsyncrys r3rzAioHTTPTestCase.asyncTearDowns*'')))))))))r5cHK|jd{VdSrp)rrrys r3rzAioHTTPTestCase.tearDownAsyncs2k!!!!!!!!!!!r5rc2Kt||jS)zReturn a TestServer instance.r)rrI)rRrs r3r zAioHTTPTestCase.get_servers#DI....r5rmc2Kt||jS)zReturn a TestClient instance.r)rrI)rRrms r3r zAioHTTPTestCase.get_clients&ty1111r5r)rrrrr rrrrr rrrrr rr r^r5r3rrs  {JJJJJKKKK''''))))????****""""/K/J////2z2j222222r5rfuncargsrLc>tjdtd|S)zw A decorator dedicated to use with asynchronous AioHTTPTestCase test methods. In 3.8+, this does nothing. zBDecorator `@unittest_run_loop` is no longer needed in aiohttp 3.8+rX) stacklevel)warningswarnDeprecationWarning)rrrLs r3unittest_run_looprs-  ML Kr5F loop_factoryfastc#RKt|}|Vt||dS)zzA contextmanager that creates an event_loop, for test purposes. Handles the creation and cleanup of a test loop. )r N)setup_test_loopteardown_test_loop)rr rIs r3 loop_contextr$s7 < ( (D JJJt$''''''r5c|} |jj}d|v}n#t$rd}YnwxYwtj|t jdkr|stj} tj}n##t$rtj }YnwxYw| |tj t5||dddn #1swxYwY|S)zCreate and return an asyncio.BaseEventLoop instance. The caller should also call teardown_test_loop, once they are done with the loop. uvloopTwin32N)rrrrset_event_loopsysplatformr ThreadedChildWatcherSafeChildWatcher attach_loop contextlibsuppressNotImplementedErrorset_child_watcher)rrImodule skip_watcherpolicywatchers r3r"r" sY <>>D*6)   4    |w|.00 1 244GG 1 1 1.00GGG 1D!!!  !4 5 5 . .  $ $W - - - . . . . . . . . . . . . . . . Ks0 ,,)A==BBC00C47C4rIc|}|sB||j|||st jtjddS)z>Teardown and cleanup an event_loop created by setup_test_loop.N) is_closed call_soonstop run_foreverrgccollectrr()rIr r|s r3r#r#/sv ^^  F  ty!!!    4     r5c4dtdtdtfd}dtdtdtddfd}tjt}i|_||_||_d|_t||_ |j |S) Nrkeyr0c|j|Srp __app_dict)rr>s r3get_dictz"_create_app_mock..get_dict>s~c""r5valuec||j|<dSrpr@)rr>rCs r3set_dictz"_create_app_mock..set_dictAs#sr5)specF) rrur MagicMockr rA __getitem__ __setitem___debugron_response_preparefreeze)rBrErs r3_create_app_mockrM=s#c######$c$$C$D$$$$ .k * * *CCNCOCOCJ$SkkC""$$$ Jr5 sslcontextctj}dtdttffd }||j_|S)Nr>r0c|dkrSdS)NrNr^)r>rNs r3get_extra_infoz)_create_transport..get_extra_infoRs ,   4r5)rMockrur r)rQ side_effect)rN transportrQs` r3_create_transportrUOsR ICHZ$8 ,:I( r5i.) match_inforeclosingrwriterprotocolrTpayloadrNclient_max_sizerIrrrheadersrVrerWrrXrYrTrZr[c tj}| durtj} d| j_|t ddkrd}|rHt t |}td|D}nt t }d}d| tj d v}t||||||dd |t| }|t}| t urt#| } |t urtj}| |_|t urjtj}t'd|_t'd|_t'd|_t'd|_| |_| |_||_| t urtj} t3|| |||| | }t5|t urin|tj}||||_|S) zCreates mocked web.Request testing purposes. Useful in unit tests, when spinning full web server is overkill or specific conditions and errors are hard to trigger. .r^rTc3pK|]1\}}|d|dfV2dS)zutf-8N)encode).0kvs r3 z&make_mocked_request..|sT  7;q!QXXg   1 1 2      r5chunkedNF)r[)rrR create_future return_valuerrrtupleitemsrrTRANSFER_ENCODINGlowerrrrMrrUrTmake_mocked_coro write_headerswrite write_eofdrainrXr#r'add_app _match_info)rrrr\rVrerWrrXrYrTrZrNr[rItaskraw_hdrsrdmessagereqs r3make_mocked_requestrw\sD, 9;;D s{{y{{*,'Q""""";w#7#788  ?F}}     #;==117;;t'=rBBHHJJJG    D   G {  H%j11 89;;& /55'-- +D11'-- $"HHO()++ (FD$   C%H$$*dikkJs CO Jr5rgraise_exceptionchdtdtdtffd }tj|S)zCreates a coroutine mock.rrLr0c^KturtjsSd{VdSrp)rinspect isawaitable)rrLrxrgs r3 mock_coroz#make_mocked_coro..mock_corosO ( * *! !"<00  r5)wraps)rrrR)rgrxr}s`` r3rlrlsQ scc 99 % % %%r5)Frp)brrr.r;r{rcosr8r)rabcrrtypesrtypingrrrr r r r r runittestr aiosignalr multidictrryarlrraiohttp.clientrrrerrr client_reqrepr client_wsrhelpersrrr\rrwebr r!r"r#r$r%r&r' web_protocolr(rUr)r*r+ asynctestnamer*r:rBrurr4rCr2rErGrrrrrr _LOOP_FACTORYcontextmanagernew_event_looprr$r"r#rGrMrRrUrwrlr^r5r3rs   ########                      33333333KKKKKKKK!!!!!!!!""""""))))))......$$$$$$$$00000000                    *)))))J#<<<<<<<""""""7"?s|x'? /5n,, ,+, ],,,,      "("6   ]     -S----BBBBBSBBBJ--------"88888N888$ddddddddNB2B2B2B2B2hB2B2B2J C  s s    W667  ")"8u ( ( (@D ( g'( ( ( ( (#*"8 D ! !W6 !d !t ! ! ! !$.$  (:"6 $)     W &;q!,,'+"WWW W WW  W  WW W WWWW$WW W  !WWWWv! & & &36 & & & & & & &r5