K iy< ddlmZddlmZddlmZmZmZmZm Z m Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZmZdd lmZdd lmZdd lmZmZmZmZdd l m!Z!ddl"m#Z#m$Z$ddl%m&Z&m'Z'm(Z(m)Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9ddl:Z:ddl;Z;ddlZ?ddl@Z@ddlAmBZBddlCZCddlDZDddlEZEddlFZFddlGZGddlHZHddlIZIddlJZKdZLGddeZMGddeMZNGdde'ZOGdde'ZPGddeIjZRGddeIjZSGdd eMZTGd!d"eMZUGd#d$e'ZVGd%d&eMZWGd'd(e'ZXGd)d*eMZYGd+d,e'ZZGd-d.eMZ[Gd/d0e'Z\Gd1d2e'Z]Gd3d4e'Z^Gd5d6e'Z_Gd7d8e'Z`Gd9d:e'ZaGd;de'ZbGd?d@e'ZcGdAdBe'ZdGdCdDe'ZeGdEdFe'ZfGdGdHeMZgGdIdJeMZhGdKdLeMZiGdMdNeMZjGdOdPeMZkGdQdReMZlGdSdTeMZmGdUdVeMZnGdWdXeMZoGdYdZeMZpGd[d\eMZqGd]d^eNZrGd_d`eNZsGdadbeNZtGdcddeNZuGdedfeNZvGdgdheNZwGdidjeMZxGdkdleNZyGdmdneMZzGdodpeNZ{Gdqdre|Z}GdsdteNZ~GdudveNZGdwdxeNZGdydzeNZGd{d|eNZGd}d~eMZGddeNZGddeNZGddeNZGddeNZGddeNZGddeMZGddeMZGddeMZGddeMZGddeMZe6Gdde'ZGddZGddeeMZGddeeMZGddeNZGddeNZGddeIjZGddeNZGddeNZGddeNZGddeNZGddeMZGddeMZGddeNZGddeIjZGddeZGddeIjZGddeMZGddeMZy))Future)gen) json_decodeutf8 to_unicoderecursive_unicode native_str to_basestring)HTTPClientError)format_timestamp)IOStream)locale)Event)app_loggen_logSimpleAsyncHTTPClient DictLoader)AsyncHTTPTestCase AsyncTestCase ExpectLoggen_test)ignore_deprecation) ObjectDict unicode_type) ApplicationRequestHandlerStaticFileHandlerRedirectHandler HTTPErrorMissingArgumentError ErrorHandler authenticatedurl_create_signature_v1create_signed_valuedecode_signed_valueget_signature_key_versionUIModuleFinishstream_request_body removeslashaddslashGZipContentEncodingN)BytesIOctjjtjjtg|SN)ospathjoindirname__file__)as [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/tornado/test/web_test.pyrelpathr:=s' 77<<1 6A 66c"eZdZdZdZdZdZy) WebTestCasezBase class for web tests that also supports WSGI mode. Override get_handlers and get_app_kwargs instead of get_app. This class is deprecated since WSGI mode is no longer supported. ctt|jfi|j|_|jSr2)r get_handlersget_app_kwargsappselfs r9get_appzWebTestCase.get_appHs.t002Ld6I6I6KLxxr;ctr2NotImplementedErrorrBs r9r?zWebTestCase.get_handlersLs !##r;ciSr2rBs r9r@zWebTestCase.get_app_kwargsO r;N)__name__ __module__ __qualname____doc__rDr?r@rIr;r9r=r=As $r;r=ceZdZdZdZdZy)SimpleHandlerTestCasezSimplified base class for tests that work with a single handler class. To use, define a nested class named ``Handler``. Nc d|jfgS)N/HandlerrBs r9r?z"SimpleHandlerTestCase.get_handlers[sdll#$$r;)rKrLrMrNrTr?rIr;r9rPrPSs G%r;rPceZdZdZy) HelloHandlerc&|jdyNhellowriterBs r9getzHelloHandler.get`s 7r;NrKrLrMr\rIr;r9rVrV_sr;rVc"eZdZddZdZddZy)CookieTestRequestHandlerNci|_|tt||_ytt|||_y)N) cookie_secret)settingsra key_version)_cookiesrdict application)rCrards r9__init__z!CookieTestRequestHandler.__init__fs=  )M: D  *M{S D r;c8|jj|Sr2)rer\)rCnames r9 get_cookiez#CookieTestRequestHandler.get_cookiers}}  &&r;c"||j|<yr2)re)rCrjvalue expires_dayss r9 set_cookiez#CookieTestRequestHandler.set_cookieus# dr;) 0123456789Nr2)rKrLrMrhrkrorIr;r9r_r_ds '$r;r_ceZdZdZdZdZy)SecureCookieV1Testct}|jddd|j|jdddy)Nfoobarversion min_versionr_set_signed_cookie assertEqualget_signed_cookierChandlers r9test_round_tripz"SecureCookieV1Test.test_round_trip{?*,!!%!; 225a2H&Qr;c t}|jdtjdd|jd}t j d|}|j||J|jd}|jd}|jt|jjddd|||jt|jjddd d |z|td t|d t||jd<tt d 5|j#|j%dddddy#1swYyxYw)Nrts d76df8e7aefcrvrws12345678\|([0-9]+)\|([0-9a-f]+)ra123456781234s5678z 1234|5678|zCookie timestamp in futurery)r_r|binasciia2b_hexrerematchassertIsNotNonegroupr}r&rgrbrr rr assertIsNoner~)rCrcookier timestampsigs r9&test_cookie_tampering_future_timestampz9SecureCookieV1Test.test_cookie_tampering_future_timestampsn*,!!%)9)9/)JTU!V!!%(.FinishHandlerc3TK|j_jywr2)finish final_returnrCtests r9r\z7FinalReturnTest.get_handlers..FinishHandler.gets!$(KKM!'''s%(c3K|jd|j|jd_jyw)Nzhello,world)r[flushrrrs r9postz8FinalReturnTest.get_handlers..FinishHandler.posts< 8$jjl"$(KK$8!'''sA A N)rKrLrMr coroutiner\rrsr9 FinishHandlerrs1 ]] ( (]] ( (r;rc<eZdZdZej fdZy)3FinalReturnTest.get_handlers..RenderHandlerctddiS)Nfoo.htmlhirrCr4s r9create_template_loaderzJFinalReturnTest.get_handlers..RenderHandler.create_template_loaders!:t"455r;c2|jd_yNr)renderrrs r9r\z7FinalReturnTest.get_handlers..RenderHandler.gets$(KK $;!r;N)rKrLrMrrrr\rsr9 RenderHandlerrs  6]] < .SetCookieHandlercp|jdd|jdd|jddy)NstrasdfunicodeqwerbytesszxcvrorBs r9r\z5CookieTest.get_handlers..SetCookieHandler.gets.v. 621r;Nr]rIr;r9SetCookieHandlerrs 2r;rceZdZdZy)1CookieTest.get_handlers..GetCookieHandlercR|jdd}|J|j|y)Nrtdefault)rkr[)rCrs r9r\z5CookieTest.get_handlers..GetCookieHandler.gets* :))) 6"r;Nr]rIr;r9GetCookieHandlerrs #r;rceZdZdZy)7CookieTest.get_handlers..SetCookieDomainHandlerc.|jddddy)N unicode_argsblahzfoo.com/foo)domainr4rrBs r9r\z;CookieTest.get_handlers..SetCookieDomainHandler.get!syvVr;Nr]rIr;r9SetCookieDomainHandlerr s Wr;rceZdZdZy).SetCookieSpecialCharHandlercp|jdd|jdd|jddy)Nequalsa=b semicolona;bquotea"brrBs r9r\z@CookieTest.get_handlers..SetCookieSpecialCharHandler.get's,%0 U3/r;Nr]rIr;r9SetCookieSpecialCharHandlerr&s 0r;rceZdZdZy):CookieTest.get_handlers..SetCookieOverwriteHandlercx|jddd|jddd|jddy)Nr8bz example.com)rcderrBs r9r\z>CookieTest.get_handlers..SetCookieOverwriteHandler.get-s6S?S?S)r;Nr]rIr;r9SetCookieOverwriteHandlerr,s *r;r ceZdZdZy)7CookieTest.get_handlers..SetCookieMaxAgeHandlerc,|jdddy)Nrtbar )max_agerrBs r9r\z;CookieTest.get_handlers..SetCookieMaxAgeHandler.get5sub9r;Nr]rIr;r9SetCookieMaxAgeHandlerr 4s :r;rceZdZdZy).SetCookieExpiresDaysHandlerc,|jdddy)Nrtr r)rnrrBs r9r\z@CookieTest.get_handlers..SetCookieExpiresDaysHandler.get9su2>r;Nr]rIr;r9SetCookieExpiresDaysHandlerr8s ?r;rceZdZdZy)4CookieTest.get_handlers..SetCookieFalsyFlagsc|jddd|jddd|jddd|jd ddy) Nr81T)securerFr)httponlyrrrBs r9r\z8CookieTest.get_handlers..SetCookieFalsyFlags.get=sJS6S7S48S59r;Nr]rIr;r9SetCookieFalsyFlagsr<s :r;rceZdZdZy)8CookieTest.get_handlers..SetCookieDeprecatedArgsc.|jddddy)Nr8rTr)HttpOnlypATHrrBs r9r\z.SetCookieDeprecatedArgs.getDsS4fEr;Nr]rIr;r9SetCookieDeprecatedArgsrCs Fr;r!/set/get /set_domain /special_char/set_overwrite /set_max_age/set_expires_days/set_falsy_flags/set_deprecatedr) rCrrrrr rrrr!s r9r?zCookieTest.get_handlerss 2~ 2 #~ #  W^ W  0. 0  * * :^ : ?. ? :. : Fn F % & % & 2 3 9 : 8 9 3 4 "= > !4 5  7 8  r;c|jd}|jt|jj dgdy)Nr" Set-Cookie)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)rr}sortedheadersget_listrs r9test_set_cookiezCookieTest.test_set_cookieTs:::f%  8##,,\: ; N r;c*|jdddi}|j|jd|jdddi}|j|jd|jdddi}|j|jdy) Nr#Cookiefoo=barr.ruz foo="bar"z /=exception;defaultrr}rrs r9test_get_cookiezCookieTest.test_get_cookie[s::fx.C:D /::fx.E:F /::fx.H:I  3r;c~|jd}|j|jjddgy)Nr$r,z,unicode_args=blah; Domain=foo.com; Path=/foorr}r.r/rs r9test_set_cookie_domainz!CookieTest.test_set_cookie_domaines8::m,     % %l 3 ; < r;c|jd}t|jjd}|j t |d|j |dd|j |dd|j |dd |dgd }|D]U\}}tjd ||jd d |i}|j |jt|Wy)Nr%r,rzequals="a=b"; Path=/rvzquote="a\"b"; Path=/r)zsemicolon="a;b"; Path=/zsemicolon="a\073b"; Path=/))zfoo=a=br)z foo="a=b"r)z foo="a;b"z"a)z foo=a\073bza\073b)z foo="a\073b"r)z foo="a\"b"rz trying %rr#r2r4) rr-r.r/r}lenassertInloggingdebugrr)rCrr.dataheaderexpecteds r9test_cookie_special_charz#CookieTest.test_cookie_special_charls::o.))22<@A Wq) %;< %<= AJ F AJ  !% < FH MM+v .zz&8V2DzEH   X]]DN ; ::n-""++L9 +H*IJr;c0|jd}|jjd}|j||Jt j d|}|j||Jt j jt jjt jdz}tjj|jd}|jt!||z j#dy)Nr(r,z(foo=bar; expires=(?P.+); Path=/rdaysexpires)rr.r\rrrdatetimenowtimezoneutc timedeltaemailutilsparsedate_to_datetime groupdict assertLessabs total_secondsrCrrBrrNheader_expiress r9test_set_cookie_expires_daysz'CookieTest.test_set_cookie_expires_dayss::12!!%%l3 V$!!!CVL U#   ##''(9(9(=(=>ASASB  ::5??;LY;WX W~5DDFGLr;c|jd}t|jjd}|j |dd|j |dd|j |dd|j |d d y) Nr)r,rza=1; Path=/; Securervz b=1; Path=/rzc=1; HttpOnly; Path=/r<z d=1; Path=/)rr-r.r/r}rGs r9test_set_cookie_false_flagsz&CookieTest.test_set_cookie_false_flagss~::01))22<@A %:; ]3 %<= ]3r;ct5|jd}dddjjd}|j |dy#1swY7xYw)Nr*r,za=b; HttpOnly; Path=/foo)rrr.r\r})rCrrBs r9test_set_cookie_deprecatedz%CookieTest.test_set_cookie_deprecatedsS  ! 5zz"34H 5!!%%l3 !;< 5 5s AAN) rKrLrMr?r0r7r:rDrHrJr]r_rarIr;r9rrs8A F 4 <4 K M4=r;rc(eZdZdZdZedZy)AuthRedirectRequestHandlerc||_yr2 login_url)rCrfs r9 initializez%AuthRedirectRequestHandler.initializes "r;c|jSr2rerBs r9 get_login_urlz(AuthRedirectRequestHandler.get_login_urls ~~r;c&|jdy)N) send_errorrBs r9r\zAuthRedirectRequestHandler.gets r;N)rKrLrMrgrir$r\rIr;r9rcrcs #r;rcceZdZdZdZdZy)AuthRedirectTestcNdttdfdttdfgS)N /relativez/loginre /absolutezhttp://example.com/login)rcrfrBs r9r?zAuthRedirectTest.get_handlerss0 4dX6N O*9:   r;c|j|jdd}|j|jd|j|jddy)NrpFfollow_redirects.Locationz/login?next=%2Frelative)rrr}rr.rs r9test_relative_auth_redirectz,AuthRedirectTest.test_relative_auth_redirectsM::dll;7%:P , ))*57PQr;c|j|jdd}|j|jd|j t j d|jd|jdy)NrqFrsruzIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluterv)rrr}rrrrr.rs r9test_absolute_auth_redirectz,AuthRedirectTest.test_absolute_auth_redirectsj::dll;7%:P ,  HH\  ,    Z (  r;N)rKrLrMr?rwryrIr;r9rnrns R  r;rnc<eZdZdZej dZdZy)ConnectionCloseHandlerc||_yr2rrs r9rgz!ConnectionCloseHandler.initializes  r;c#K|jj|jjjywr2)ron_handler_waiting cleanup_eventwaitrBs r9r\zConnectionCloseHandler.gets/ $$&ii%%**,,AAc8|jjyr2)ron_connection_closerBs r9rz*ConnectionCloseHandler.on_connection_closes %%'r;N)rKrLrMrgrrr\rrIr;r9r{r{s$ ]]--(r;r{c$eZdZdZdZdZdZy)ConnectionCloseTestcHt|_dtt|fgS)NrRr)rrr{rfrBs r9r?z ConnectionCloseTest.get_handlerss!"W,do>??r;ctjtjtjd}|jd|j ft ||_|j jd|j|jj|jjdy)Nr 127.0.0.1sGET / HTTP/1.0 c,tjdSNr)rsleeprIr;r9z;ConnectionCloseTest.test_connection_close..sciilr;) socketAF_INET SOCK_STREAMconnect get_http_portr streamr[rrsetio_looprun_sync)rCss r9test_connection_closez)ConnectionCloseTest.test_connection_closes MM&..&*<*&?&BCH T\\-@-@-B(CA(F(L(LcR  !!# $ 07$,,:K:K:MM  +T-C-CF-KUS  doof&=sC  doou= ($*=*=*?E  t'7'7 U'KSQ )4+@+@+BCHr;ch|jd|t|j|jyNpath_componentrrr[rrCrs r9r\zTypeCheckHandler.getes% (.,G 4;;r;ch|jd|t|j|jyrrrs r9rzTypeCheckHandler.postks# (.,G 4;;r;cPt|}||k7rd|d||j|<yy)Nz expected z, got )rr)rCrjobj expected_type actual_types r9rzTypeCheckHandler.check_typeos33i K '"+M?& NDKK  (r;N)rKrLrMrr\rrrIr;r9rrIsI6  Or;rceZdZddZdZy)DecodeArgHandlerNct|turtdt|zd|jjvr4|j t |jjddS|S)Nzunexpected type for value: %rencodingr)rrrrrdecoder)rCrmrjs r9decode_argumentz DecodeArgHandler.decode_argumentvsb ;e #;d5kIJ J // /<< 4<<+A+A*+Ma+P QR RLr;chd}|j||||jddy)Nct|tur dttj|gSt|t urd|gSt d)Nrrz unknown type)rrr rb2a_hexrr)rs r9describez&DecodeArgHandler.get..describesJAw%H,<,"r;Nr]rIr;r9rrs#r;rceZdZdZy)MultiHeaderHandlerc|jdd|jdd|jdd|jddy) N x-overwriterz X-Overwriterx-multir<zX-Multi4) set_header add_headerrBs r9r\zMultiHeaderHandler.gets:  s+  q)  1%  3'r;Nr]rIr;r9rrs(r;rceZdZdZy)r c "|jdd5|jdtt|jdy|jdd,|jdt|jdyt d)N permanentrR)rr)rz(didn't get permanent or status arguments)rredirectboolrrrBs r9r\zRedirectHandler.getsy   [$ / ; MM#c$2C2CK2P.Q)RM S   x . : MM#c$*;*;H*E&FM GFG Gr;Nr]rIr;r9r r sHr;r c0eZdZejdZy)EmptyFlushCallbackHandlerc#K|j|j|jd|j|j|jdyw)Nok)rr[rrBs r9r\zEmptyFlushCallbackHandler.getsO jjljjl 3jjljjl CsA,A.N)rKrLrMrrr\rIr;r9rrs]]  r;rceZdZdZy)HeaderInjectionHandlerc |jddtd#t$r*}dt|vr|j dnYd}~yd}~wwxYw)NX-Foozfoo X-Bar: bazDidn't get expected exceptionUnsafe header valueok)rr ValueErrorrrrCrs r9r\zHeaderInjectionHandler.getsR  OOG%8 9;< < $A. E"# s A A  ANr]rIr;r9r r sr;r ceZdZdZy)SetHeaderHandlerctddDcgc] }t|}}|jtd|jd|D]%} |j dd|zdzt d|j dd |jd ycc}w#t $r}d t|vrYd}~md}~wwxYw) Nr  r rtr rrr) rangechrappendremoverrrrr)rCr illegal_charscharrs r9r\zSetHeaderHandler.gets).q$8AQ8 8SY'T"! D )=> ?@@  $ E9 (A67 sB#B!! C*B==CNr]rIr;r9rrsr;rceZdZdZy)GetArgumentHandlerc|jdddk(r |j}n.|jdddk(r |j}n |j}|j|ddy)Nsourcerrrtr)rget_query_argumentget_body_argumentrrCrs r9rzGetArgumentHandler.prepares`   Xt , 7,,F   x .& 8++F&&F F5),-r;NrKrLrMrrIr;r9r!r!s.r;r!ceZdZdZy)GetArgumentsHandlerc |jt|jd|jd|j dy)Nrtrrr)rrfrget_query_argumentsget_body_argumentsrBs r9rzGetArgumentsHandler.prepares@ **51..u5,,U3  r;Nr'rIr;r9r)r)s r;r)ceZdZdZdZfdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZxZS)WSGISafeWebTestzWebTest.COOKIE_SECRETcPtdddd}t|d|jS)Nz{% module linkify(message) %}zv {% for e in entries %} {% module Template("entry.html", entry=e) %} {% end %} aY{{ set_resources(embedded_css=".entry { margin-bottom: 1em; }", embedded_javascript="js_embed()", css_files=["/base.css", "/foo.css"], javascript_files="/common.js", html_head="", html_body='