a 5êdgn9ã@sBdZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!Gdd„dej"ƒZ#Gdd„dej"ƒZ$Gdd „d ƒZ%d d „Z&d d „Z'dd„Z(Gdd„dej"ƒZ)Gdd„dej"ƒZ*Gdd„dej"ƒZ+ddd„Z,e-dkr>e,dddS)zTests for http/cookiejar.py.éN)Ú time2isozÚ http2timeÚiso2timeÚ time2netscapeÚparse_ns_headersÚjoin_header_wordsÚsplit_header_wordsÚCookieÚ CookieJarÚDefaultCookiePolicyÚ LWPCookieJarÚMozillaCookieJarÚ LoadErrorÚlwp_cookie_strÚDEFAULT_HTTP_PORTÚ escape_pathÚreachÚis_HDNÚ domain_matchÚuser_domain_matchÚ request_pathÚ request_portÚ request_hostc@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)Ú DateTimeTestscCs’d}d}| t|ƒd¡| t||ƒd¡| t|d|ƒd¡| t|d|ƒd¡tƒ}td ƒ}||fD]}| |d d ||f¡qrdS) Néx+À<é€Qz2002-04-19 14:36:40Zz2002-04-20 14:36:40Zéz2002-04-21 14:36:40Zéz2002-04-22 14:36:40Zé ¡z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: %s %s)Ú assertEqualrÚ assertRegex©ÚselfÚbaseZdayÚazZbzÚtext©r&ú4/usr/local/lib/python3.9/test/test_http_cookiejar.pyÚtest_time2isozs  ÿzDateTimeTests.test_time2isozcCs’d}d}| t|ƒd¡| t||ƒd¡| t|d|ƒd¡| t|d|ƒd¡tƒ}td ƒ}||fD]}| |d d ||f¡qrdS) NrrzFri, 19-Apr-2002 14:36:40 GMTzSat, 20-Apr-2002 14:36:40 GMTrzSun, 21-Apr-2002 14:36:40 GMTrzMon, 22-Apr-2002 14:36:40 GMTrz;[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$zbad time2netscape format: %s %s)rrr r!r&r&r'Útest_time2netscape#s(ÿÿÿ  ýz DateTimeTests.test_time2netscapecCs<dd„}| |dƒd¡| |dƒd¡| |dƒd¡dS) NcSst t|ƒ¡dd…S©Né)ÚtimeÚgmtimer©r%r&r&r'Ú parse_date:sz0DateTimeTests.test_http2time..parse_datez 01 Jan 2001)iÑér0rrçz 03-Feb-20)iärrrrr1z 03-Feb-98)iÎrrrrr1©r©r"r/r&r&r'Útest_http2time9szDateTimeTests.test_http2timecCs„gd¢}d}t|ƒ}d}| ||d|||f¡|D]J}| t|ƒ||¡| t| ¡ƒ|| ¡¡| t| ¡ƒ|| ¡¡q4dS)N)zThu, 03 Feb 1994 00:00:00 GMTú Thursday, 03-Feb-94 00:00:00 GMTz"Thursday, 03-Feb-1994 00:00:00 GMTz03 Feb 1994 00:00:00 GMTz03-Feb-94 00:00:00 GMTz03-Feb-1994 00:00:00 GMTz03-Feb-1994 00:00 GMTz03-Feb-1994 00:00z02-Feb-1994 24:00z 03-Feb-94z 03-Feb-1994z 03 Feb 1994z 03 Feb 1994 0:00 z 03-Feb-1994 é€>P-z1994-02-03 00:00:00Zz%s => '%s' (%s))rrrÚlowerÚupper)r"ÚtestsÚtest_tÚresultÚexpectedÚsr&r&r'Útest_http2time_formatsEs ÿz$DateTimeTests.test_http2time_formatscCs*dD] }| t|ƒd|t|ƒf¡qdS)N)ÚÚGarbagezMandag 16. September 1996z 01-00-1980z 01-13-1980z 00-01-1980z 32-01-1980z01-01-1980 25:00:00z01-01-1980 00:61:00ú01-01-1980 00:00:62z08-Oct-3697739z 08-01-3697739z09 Feb 19942632 22:23:32 GMTz Wed, 09 Feb 1994834 22:23:32 GMTz,http2time(%s) is not None http2time(test) %s)Ú assertIsNoner©r"Útestr&r&r'Útest_http2time_garbageis   ÿÿz$DateTimeTests.test_http2time_garbagecCs(td dd¡ƒtd dd¡ƒdS)Nz01 Jan 1970{}00:00:00 GMT!ú i †z01 Jan 1970 00:00:00{}GMT!)rÚformat©r"r&r&r'Ú2test_http2time_redos_regression_actually_completes~sz@DateTimeTests.test_http2time_redos_regression_actually_completescCs<dd„}| |dƒd¡| |dƒd¡| |dƒd¡dS)NcSst t|ƒ¡dd…Sr*)r,r-rr.r&r&r'r/†sz/DateTimeTests.test_iso2time..parse_dateZ19940203T141529Z)iÊrréééz1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r2r3r&r&r'Ú test_iso2time…s ÿ ÿ ÿzDateTimeTests.test_iso2timecCs`gd¢}d}|D]J}| t|ƒ||¡| t| ¡ƒ|| ¡¡| t| ¡ƒ|| ¡¡qdS)N) z1994-02-03 00:00:00 -0000z1994-02-03 00:00:00 +0000z1994-02-03 00:00:00z 1994-02-03z1994-02-03T00:00:00Z19940203z1994-02-02 24:00:00Z19940203T000000Zz 1994-02-03 z 1994-02-03T00:00:00 r6)rrr7r8)r"r9r:r=r&r&r'Útest_iso2time_formats•s z#DateTimeTests.test_iso2time_formatscCs"dD]}| t|ƒd|¡qdS)N) r?r@r5z 1980-00-01z 1980-13-01z 1980-01-00z 1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rAz01-01-1980T00:00:62Z19800101T250000Zz iso2time(%r))rBrrCr&r&r'Útest_iso2time_garbage¬s ÿz#DateTimeTests.test_iso2time_garbagecCs(td dd¡ƒtd dd¡ƒdS)Nz1994-02-03{}14:15:29 -0100!rFi@Bz1994-02-03 14:15:29{}-0100!)rrGrHr&r&r'Ú$test_iso2time_performance_regression¾sz2DateTimeTests.test_iso2time_performance_regressionN) Ú__name__Ú __module__Ú __qualname__r(r)r4r>rErIrMrNrOrPr&r&r&r'rs $rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú HeaderTestscCs*gd¢g}dD]}| t|gƒ|¡qdS)N)©ÚfooÚbar)Úexpiresld9W©ÚversionÚ0)z)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"©rr©r"r<Úhdrr&r&r'Útest_parse_ns_headersÇs z!HeaderTests.test_parse_ns_headerscCs*ddgg}dD]}| t|gƒ|¡qdS)NrU)rZÚ1)zfoo=bar; version="1"úfoo=bar; Version="1"r\r]r&r&r'Útest_parse_ns_headers_versionÐs z)HeaderTests.test_parse_ns_headers_versioncCs$d}ddgg}| t|gƒ|¡dS)Nz expires=01 Jan 2040 22:23:32 GMT)rXz01 Jan 2040 22:23:32 GMTrYr\)r"r^r<r&r&r'Ú#test_parse_ns_headers_special_namesÚs z/HeaderTests.test_parse_ns_headers_special_namescCs0tddggƒ}| |d¡| tggƒd¡dS)N©rVN©rWÚbazz foo; bar=bazr?)rr)r"Zjoinedr&r&r'Útest_join_header_wordsâs z"HeaderTests.test_join_header_wordscCsddggfddggfddggfddggfddggfd dggfd dd ggfd dd ggfd dggfddd ggfdgd¢gfddgdgdggfddd gdgdgdggfg }|D]l\}}zt|gƒ}Wn<ddl}ddl}| ¡}| d|¡d| ¡}Yn0| ||d|||f¡q¨dS)NrVrdúfoo=barrUú foo z foo= )rVr?z foo=z foo= ; z foo= ; bar= baz reúfoo=bar bar=bazz foo= bar=baz)rVzbar=bazúfoo=bar;bar=bazú foo bar baz)rd)rWN)rfNza, b, c)ÚaN)ÚbN)ÚcNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )Úspamr?)rVz,;")rWr?rz (error -- traceback follows) %sz: When parsing: '%s' Expected: '%s' Got: '%s' )rÚ tracebackÚioÚStringIOÚ print_excÚgetvaluer)r"r9ÚargÚexpectr;rqrrÚfr&r&r'Útest_split_header_wordsès:            ÿÿò   üz#HeaderTests.test_split_header_wordsc CsFgd¢}|D]4\}}t|gƒ}t|ƒ}| ||d||||f¡q dS)N) )rVrV)rhrh)rirV)zfoo=zfoo="")rjúfoo=bar; bar=baz)rkrz)rlz foo; bar; baz)zfoo="\"" bar="\\"zfoo="\""; bar="\\")z foo,,,barzfoo, bar)zfoo=bar,bar=bazzfoo=bar, bar=baz)ztext/html; charset=iso-8859-1ztext/html; charset="iso-8859-1")z)foo="bar"; port="80,81"; discard, bar=bazz'foo=bar; port="80,81"; discard, bar=baz)zBasic realm="\"foo\\\\bar\""zBasic; realm="\"foo\\\\bar\""zM When parsing: '%s' Expected: '%s' Got: '%s' Input was: '%s' )rrr)r"r9rvrwÚinputÚresr&r&r'Útest_roundtrip s    ûzHeaderTests.test_roundtripN) rQrRrSr_rbrcrgryr}r&r&r&r'rTÅs   "rTc@s"eZdZgdfdd„Zdd„ZdS)Ú FakeResponseNcCs$ddl}| d |¡¡|_||_dS)zD headers: list of RFC822-style 'Key: value' strings rNÚ )ÚemailZmessage_from_stringÚjoinÚ_headersZ_url)r"ÚheadersÚurlr€r&r&r'Ú__init__-szFakeResponse.__init__cCs|jS©N)r‚rHr&r&r'Úinfo4ózFakeResponse.info)rQrRrSr…r‡r&r&r&r'r~,sr~cGst|||dƒS)Nz Set-Cookie2©Ú _interact©Ú cookiejarr„Úset_cookie_hdrsr&r&r'Ú interact_29656srŽcGst|||dƒS)Nz Set-Cookier‰r‹r&r&r'Úinteract_netscape9src Cs\tj |¡}| |¡| dd¡}g}|D]}| d||f¡q*t||ƒ}| ||¡|S)zDPerform a single request / response cycle, returning Cookie: header.r r?z%s: %s)ÚurllibÚrequestÚRequestÚadd_cookie_headerÚ get_headerÚappendr~Úextract_cookies) rŒr„rZhdr_nameÚreqZ cookie_hdrrƒr^r|r&r&r'rŠ<s     rŠc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚFileCookieJarTestscCs"tjj}t|ƒ}| |j|¡dSr†)rDÚsupportÚTESTFNr rÚfilename©r"r›ror&r&r'Útest_constructor_with_strJsz,FileCookieJarTests.test_constructor_with_strcCs.t tjj¡}t|ƒ}| |jt  |¡¡dSr†) ÚpathlibÚPathrDr™ršr rr›ÚosÚfspathrœr&r&r'Útest_constructor_with_path_likeOsz2FileCookieJarTests.test_constructor_with_path_likecCstdƒ}| |j¡dSr†)r rBr›©r"ror&r&r'Útest_constructor_with_noneTsz-FileCookieJarTests.test_constructor_with_nonec CsˆGdd„dƒ}tt|fD]j}|j|dJ| t¡ |ƒ}t|d}Wdƒn1sZ0YWdƒq1sx0YqdS)Nc@s eZdZdS)z?FileCookieJarTests.test_constructor_with_other_types..AN)rQrRrSr&r&r&r'ÚAYsr¥©r›)ÚintÚfloatZsubTestÚ assertRaisesÚ TypeErrorr )r"r¥Útype_Úinstanceror&r&r'Ú!test_constructor_with_other_typesXs  z4FileCookieJarTests.test_constructor_with_other_typescCsÄtjj}tƒ}t|ddƒ| |jdddjd¡zH|j|ddtƒ}|j |ddWzt   |¡Wq¤t y|Yq¤0n$zt   |¡Wnt y Yn00| |jdddjd¡dS)Núhttp://www.acme.com/Zbooú www.acme.comú/T©Úignore_discard) rDr™ršr rrÚ_cookiesÚvalueÚsaveÚloadr ÚunlinkÚOSErrorrœr&r&r'Útest_lwp_valueless_cookiebs ÿz,FileCookieJarTests.test_lwp_valueless_cookiecCstjj}ttfD]X}|ƒ}z|jddWn2ty\}z| |jt ¡WYd}~qd}~00|  d¡qz~t |dƒ>}|  d¡ttfD]}|ƒ}|  t |j|¡qŠWdƒn1sº0YWzt |¡WntyæYn0n&zt |¡Wnty Yn00dS)NzAfor this test to work, a file with this filename should not existr¦z%expected OSError for invalid filenameÚwzoops )rDr™ršr r r¶r¸Z assertIsNotÚ __class__rZfailÚopenÚwriter©r r·)r"r›Zcookiejar_classroÚexcrxr&r&r'Útest_bad_magicqs$ $    2ÿz!FileCookieJarTests.test_bad_magicN) rQrRrSrr¢r¤r­r¹r¿r&r&r&r'r˜Is  r˜c@seZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dES)FÚ CookieTestscCsLtƒ}dD]<\}}}tj |¡}| ||¡}|r<| |¡q | |¡q dS)N))úhttp://foo.bar.com/zblah.comF)rÁzrhubarb.blah.comF)rÁzrhubarb.foo.bar.comF)rÁú .foo.bar.comT)rÁú foo.bar.comT)rÁz.bar.comT)rÁúbar.comT)rÁÚcomT)úhttp://foo.com/zrhubarb.foo.comF)rÆú.foo.comT)rÆúfoo.comT)rÆrÅT)ú http://foo/z rhubarb.fooF)rÉz.fooT)rÉrVT)rÉz foo.localT)rÉú.localT)úhttp://barfoo.comrÇF)rËrÈF)r rr‘r’Zdomain_return_okÚ assertTrueÚ assertFalse)r"Úpolr„ÚdomainÚokr‘Úrr&r&r'Útest_domain_return_okºs   z!CookieTests.test_domain_return_okc Cstjj}t|ƒ}t|ddƒt|ddƒ|jddd}| |j¡| |j d¡|jddd}| |j¡| |j d¡| t |ƒd¡t |ƒ}|j d d d z&t|ƒ}|j d d d Wt |j¡nt |j¡0| t |ƒt d d d d |¡¡| t|d ƒd¡dS)Nr®Úeggsz"spam"; path=/foo/r¯r°ú/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)Zignore_expiresr²zpath_specified=%sFúhttp://www.acme.com/foo/z "spam"; eggs)rDr™ršr rr³rBr´rÚnamerÚreprrµZrevertr r·r›ÚreÚsub)r"r›roÚcookieZold_strr&r&r'Útest_missing_valueÛs8     ÿÿþ ÿzCookieTests.test_missing_valuec Cs¦dD]œ\}}}t||d}t|ƒ}t|ddƒz|jddd}Wnty`| |¡Yq0| |j|¡t|ddƒ|r|jddd }| |jd ¡qdS) N))NFr)NTr0)FFN)FTr0)TFr)TTr)Úrfc2109_as_netscapeÚrfc2965úhttp://www.example.com/zni=ni; Version=1úwww.example.comr°Úniúfoo=bar; Version=1rVr0) r r rr³ÚKeyErrorrBrrZrŽ)r"rÜrÝrZÚpolicyrorÚZ cookie2965r&r&r'Útest_rfc2109_handlingûs$ þ  ÿz!CookieTests.test_rfc2109_handlingcCsÆtƒ}t|ddƒt|ddƒt|ddƒt|ddƒt|ddƒt|ddƒt|dd ƒt|dd ƒ|jd d d }| |jd ¡| |j¡| |jt¡|  |j ¡| |  d¡¡|  |  d¡¡|jdd d}| |jd¡|  |j¡| |jd¡| |j ¡|jdd d}|  |j¡|  |j ¡|jdd d}|jdd d}|  |j ¡|  |j ¡|jdd d}| |j¡| |jd¡|jdd d }|  |j¡dS)Nr®z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080úhttp://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z fortytwo=z=unladenswallowZholyhandgrenadeú .acme.comr°rpZblArghZblarghr¯ràz80,8080ZninirVZfortytwor?)r rr³rrÏrÌZdomain_specifiedÚportrrÍZport_specifiedZhas_nonstandard_attrrBrXZassertIsNotNoner´)r"rorÚrVrpr&r&r'Útest_ns_parsersFÿ                zCookieTests.test_ns_parsercCsHtƒ}t|ddƒt|ddƒ|jdd}| d|¡| d|¡dS)Nr®z expires=eggszversion=eggs; spam=eggsr¯r°rXrZ)r rr³ÚassertIn)r"roÚcookiesr&r&r'Útest_ns_parser_special_namesJs    z(CookieTests.test_ns_parser_special_namesc Csêtƒ}tt ¡dƒ}tj |¡dd|›g}tj d¡}t |dƒ}|  ||¡}|  t |ƒd¡|  t|dj ƒ|¡Wdƒn1sŒ0Yt|dd|ƒ|  t |ƒd¡tt ¡dƒ}t|dd|ƒt|dƒ}|  t |ƒd¡| d |¡| d |¡t|dd |ƒt|dd |ƒ|  t |ƒd ¡t|dd|ƒt|dd|ƒt|dƒ}|  t |ƒd¡t|ddƒ|  t |ƒd¡| ¡|  t |ƒd¡| d |¡tdddddddddddddddiƒ} |  | j d¡dS)Néz%Set-Cookie: FOO=BAR; path=/; expires=úhttp://www.coyote.com/r0rr®zspam="bar"; expires=%szfoo="eggs"; expires=%sú spam="bar"rVzeggs="bar"; expires=%szbar="bar"; expires=%srz!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/z whum="fizz"rrÖr´Fzwww.python.orgTr°z1444312383.018307i?uV)r rr,rDr™Zcheck_no_warningsrr‘r’r~Ú make_cookiesrÚlenrXrréÚ assertNotInÚclear_session_cookiesr ) r"roÚfuturerƒr—r|rêZnowÚhrÚr&r&r'Ú test_expiresUsb    4ÿÿ   ÿÿÿÿ   ûzCookieTests.test_expirescCs6tdd}t|ƒ}t|ddƒ| d|jd¡t|ƒ}t|ddƒ| d|jd¡t|ƒ}t|d dƒ| d |jd¡t|ƒ}t|d dƒ| d |jd¡tƒ}t|dd ƒ| d|jd¡tƒ}t|ddƒ| d|jd¡tƒ}t|d dƒ| d|jd¡tƒ}t|d dƒ| d|jd¡dS)NT©rÝr®zspam="bar"; Version="1"r°r¯zhttp://www.acme.com/blahzeggs="bar"; Version="1"z http://www.acme.com/blah/rhubarbú/blah/z!http://www.acme.com/blah/rhubarb/z/blah/rhubarb/rîú eggs="bar"ú/blahz /blah/rhubarb)r r rŽrér³r©r"rÎror&r&r'Útest_default_pathŽs:   ÿÿ    zCookieTests.test_default_pathcCsBtƒ}d}d}t|||ƒ| d|jd¡| t||ƒ|¡dS)Nzhttp://example.com/?spam/eggsrør°z example.com)r rrér³r)r"ÚcjZurir´r&r&r'Útest_default_path_with_query¶s  z(CookieTests.test_default_path_with_querycCs*gd¢}|D]\}}| t|ƒ|¡q dS)N) )z /foo%2f/barú /foo%2F/bar)rþrþ)ú /foo%%/barrÿ)ú /fo%19o/barr)z /fo%7do/barz /fo%7Do/bar)ú /foo/bar&r)ú /foo//barr)ú ~/foo/barr)z /foo/barz /foo%19/bar)z /}foo/barz /%7Dfoo/bar)u /foo/barüz/foo/bar%C3%BC)u /foo/barê¯z/foo/bar%EA%AF%8D)rr)r"Zcasesrvr;r&r&r'Útest_escape_pathÀs zCookieTests.test_escape_pathcCsXtj d¡}| t|ƒd¡tj d¡}| t|ƒd¡tj d¡}| t|ƒd¡dS)NzThttp://www.example.com/rheum/rhaponticum;foo=bar;sing=song?apples=pears&spam=eggs#niz$/rheum/rhaponticum;foo=bar;sing=songzBhttp://www.example.com/rheum/rhaponticum?apples=pears&spam=eggs#niz/rheum/rhaponticumzhttp://www.example.comr°)rr‘r’rr©r"r—r&r&r'Útest_request_pathÙsÿ ÿÿ zCookieTests.test_request_pathc CsÀtƒ}tdd}t|ƒ}d}t||dƒ|jddd}dD]|\}}|›|›}tj |¡} t||ƒ} |r”| d | d |›¡| |  || ¡¡q>|  d | d |›¡|  |  || ¡¡q>dS) NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foorÄú/foorp))rT)rÔT)ú/foo/barT)r°F)z /foobad/fooFz spam=eggszcookie not set for zcookie set for ) r r rr³rr‘r’rérÌZ set_ok_pathrñrÍ) r"rÎZstrict_ns_path_polroZbase_urlrÚÚpathrÐr„r—rôr&r&r'Útest_path_prefix_matchés      z"CookieTests.test_path_prefix_matchcCsLtjjdddid}| t|ƒd¡tjjdddid}| t|ƒt¡dS)Nzhttp://www.acme.com:1234/ÚHostzwww.acme.com:4321©rƒZ1234r®)rr‘r’rrrrr&r&r'Útest_request_portsÿÿzCookieTests.test_request_portcCsptjjdddid}| t|ƒd¡tjjdddid}| t|ƒd¡tjjd dd id}| t|ƒd¡dS) Nzhttp://1.1.1.1/r úwww.acme.com:80r z1.1.1.1r®zirrelevant.comr¯z&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)rr‘r’rrrr&r&r'Útest_request_host sÿÿÿzCookieTests.test_request_hostcCst| tdƒ¡| tdƒ¡| tdƒ¡| tdƒ¡| tdƒ¡| tdƒ¡| tdƒ¡| tdƒ¡dS) NrÃz1foo2.3bar4.5comú 192.168.1.1r?Ú.rÂz..foozfoo.)rÌrrÍrHr&r&r'Ú test_is_HDNszCookieTests.test_is_HDNcCs„| tdƒd¡| tdƒd¡| tdƒd¡| tdƒd¡| tdƒd¡| tdƒd¡| tdƒd¡| td ƒd ¡dS) Nr¯ræúacme.comz acme.localrÊú.comrr?z 192.168.0.1)rrrHr&r&r'Ú test_reach#szCookieTests.test_reachcCsô| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| td d ƒ¡| td d ƒ¡| td d ƒ¡| td d ƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tdd ƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tddƒ¡| tdd ƒ¡dS)Nrz.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz a.b.c.comz.c.comz example.localrÊz blah.blahr?z.rhubarb.rhubarbrræzrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comrrÅÚmz.mr)rÌrrÍrrHr&r&r'Útest_domain_match-s>zCookieTests.test_domain_matchcCs&tƒ}t|ddƒ| t|ƒd¡dS)Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r)r rŽrrðr£r&r&r'Útest_wrong_domainQs ÿzCookieTests.test_wrong_domaincCsjtdd}t|d}t|ddƒt|ddƒ| t|ƒd¡dD]$}t|d |d ƒ| t|ƒd¡q@dS) NT)Z strict_domain©rãzhttp://example.co.uk/z no=problemoz!okey=dokey; Domain=.example.co.ukr)z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)r r rrrð)r"ZcprüZ pseudo_tldr&r&r'Útest_strict_domain[s   ÿ ÿzCookieTests.test_strict_domaincCs8tƒ}t|ddƒ| t|ƒd¡| |jdddjd¡| t|dƒd¡| t|dƒd¡ttjd }| |¡| t|dƒd ¡t|d d ƒt|d dƒ| t|ƒd¡| |jdddjd¡| |jdddjd¡| t|d ƒd¡t|ddƒ| t|ƒd¡t|ddƒ| t|ƒd¡dS)Núhttp://foo.net/zns=barr0úfoo.netr°ÚnsrWúhttp://www.foo.net/)Zstrict_ns_domainr?úhttp://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netrú.foo.netrZspam1rÓrZspam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uké) r rrrðr³r´r ZDomainStrictNonDomainÚ set_policy)r"rorÎr&r&r'Útest_two_component_domain_nsisB  ÿÿ ÿÿÿÿ ÿ  z(CookieTests.test_two_component_domain_nscCs4tdd}t|ƒ}t|ddƒ| t|ƒd¡| |jdddjd ¡| t|dƒd ¡| t|d ƒd ¡t|d dƒ| t|ƒd¡| t|d ƒd ¡t|ddƒ| |jdddjd¡| t|ƒd¡| t|dƒd ¡| t|dƒd¡t|ddƒ| t|ƒd¡t|ddƒ| t|ƒd¡dS)NTrörrar0rr°rVrWz$Version=1; foo=barrr?zhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"r rÔrprÓrrz($Version=1; spam=eggs; $Domain="foo.net"z#ni="ni"; domain=".net"; Version="1"zhttp://foo.co.uk/z'nasty=trick; domain=.co.uk; Version="1"r)r r rŽrrðr³r´rúr&r&r'Ú!test_two_component_domain_rfc2965™sJ   ÿÿ ÿÿÿ ÿ ÿÿÿz-CookieTests.test_two_component_domain_rfc2965cCsttdgdgdd}tj d¡}dg}t|dƒ}| ||¡| t|ƒd¡tj d¡}t|dƒ}| ||¡| t|ƒd ¡tj d ¡}t|d ƒ}| ||¡| t|ƒd ¡tj d ¡}t|d ƒ}|  ||¡}|  |d¡| t|ƒd ¡|  |¡|  |  d ¡¡dS) Nrr¯)Úblocked_domainsZallowed_domainsrúhttp://acme.com/ú*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/rr®r0rírr )r r rr‘r’r~r–rrðrïÚ set_cookier“rÍÚ has_header)r"ror—rƒr|rêr&r&r'Útest_domain_allowÅs0þ              zCookieTests.test_domain_allowcCs€tddgd}t|d}dg}tj d¡}t|dƒ}| ||¡| t|ƒd¡|  dg¡}| ||¡| t|ƒd ¡|  ¡tj d ¡}t|d ƒ}| ||¡| t|ƒd ¡tj d ¡}|  |¡|  |  d ¡¡|  |  d ¡¡|  ¡|  dg¡| ||¡| t|ƒd ¡tj d¡}t|dƒ}| ||¡}| |d¡| t|ƒd ¡|  |¡| |  d ¡¡|  ¡|  g¡tj d¡}t|dƒ}| ||¡}| ||¡| t|ƒd ¡tj d¡}|  |¡|  |  d ¡¡tj d¡}|  |¡| | |d|¡¡| |  d ¡¡|  dg¡}tj d¡}|  |¡| |  d ¡¡tj d¡}|  |¡| |  d ¡¡dS)NTræ)rÝr%rr'r®rrr0zhttp://www.roadrunner.net/r ÚCookie2rr&zhttp://badacme.com/)r r rr‘r’r~r–rrðZset_blocked_domainsÚclearr“rÌr)rïr(rÍZ return_ok)r"rÎrorƒr—r|Úprêr&r&r'Útest_domain_blockäsjÿ                               zCookieTests.test_domain_blockcCs¶dD]¬}dD]¢}tƒ}|r.tdd}t}d}ntdd}t}d}| |¡d}|||d ||fƒ|||d ||fƒ| |jd d d jd¡| |jd d djd¡q qdS)N)TF)rFr?Frör?Tz ; Version=1r®z foo1=bar%s%szfoo2=bar%s; secure%sr¯r°Zfoo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure) r r rrŽr"rÍr³ZsecurerÌ)r"rÚ whitespacerorÎr§Zvsr„r&r&r'Ú test_secure's,   þþzCookieTests.test_securecCsätƒ}t|d}dg}tj d¡}t|dƒ}| ||¡| t|ƒd¡tj d¡}|  |¡|  |  d¡¡tj d¡}|  |¡|  |  d¡¡tj d¡}|  |¡|  |  d¡¡tj d¡}|  |¡|  |  d¡¡dS) Nrú(Set-Cookie: session=narf; secure; path=/úhttps://www.acme.com/r0r r®zwss://www.acme.com/zws://www.acme.com/) r r rr‘r’r~r–rrðr“rÌr)rÍ©r"rÎrorƒr—r|r&r&r'Útest_secure_block>s&            zCookieTests.test_secure_blockcCsêtdgd}t|d}dg}tj d¡}t|dƒ}| ||¡| t|ƒd¡tj d¡}|  |¡|  |  d¡¡tj d¡}|  |¡|  |  d¡¡tj d ¡}|  |¡|  |  d¡¡tj d ¡}|  |¡|  |  d¡¡dS) NZfoos)Zsecure_protocolsrr1r2r0r r®zfoos://www.acme.com/zfoo://www.acme.com/) r r rr‘r’r~r–rrðr“rÍr)rÌr3r&r&r'Útest_custom_secure_protocolsZs&             z(CookieTests.test_custom_secure_protocolscCs6ttddd}t|ddƒt|dƒ}| |d¡dS)NTrörr®zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r r rŽr)r"rorôr&r&r'Útest_quote_cookie_valueus  z#CookieTests.test_quote_cookie_valuecCsXd}ttddƒ}t||dƒtj |¡}| t|ƒd¡| |¡|  |  d¡¡dS)Núhttp://www.acme.comTrörár0r ) r r rŽrr‘r’rrðr“rÌr))r"r„ror—r&r&r'Útest_missing_final_slash{s   z$CookieTests.test_missing_final_slashcCsžtdd}t|ƒ}d}t||dƒt||ƒ}| d|d¡t|ƒ}d}t||dƒt||ƒ}| d|d ¡t|ƒ}d}t||d ƒt||ƒ}| d |d ¡dS) NTrörÁúspam=eggs; Version=1ZDomainz*absent domain returned with domain presentz%spam=eggs; Version=1; Domain=.bar.comz$Domain=".bar.com"zdomain not returnedz$spam=eggs; Version=1; Domain=bar.comz$Domain="bar.com"©r r rŽrñré©r"rÎror„rôr&r&r'Útest_domain_mirror…s$   ÿ    zCookieTests.test_domain_mirrorcCsntdd}t|ƒ}d}t||dƒt||ƒ}| d|d¡t|ƒ}d}t||dƒt||ƒ}| d|d ¡dS) NTrörÁr9rŸz&absent path returned with path presentzspam=eggs; Version=1; Path=/z $Path="/"zpath not returnedr:r;r&r&r'Útest_path_mirrorœs     zCookieTests.test_path_mirrorcCsÎtdd}t|ƒ}d}t||dƒt||ƒ}| d|d¡t|ƒ}d}t||dƒt||ƒ}| |dd ¡t|ƒ}d}t||d ƒt||ƒ}| d |d ¡t|ƒ}d}t||d ƒt||ƒ}| d|d¡dS)NTrörÁr9ZPortz&absent port returned with port presentzspam=eggs; Version=1; Portz\$Port([^=]|$)z-port with no value not returned with no valuezspam=eggs; Version=1; Port="80"z $Port="80"z5port with single value not returned with single valuez$spam=eggs; Version=1; Port="80,8080"z$Port="80,8080"z;port with multiple values not returned with multiple values)r r rŽrñr rér;r&r&r'Útest_port_mirror«s6     ÿ  ÿ  ÿzCookieTests.test_port_mirrorcCs:ttddƒ}d}t||dƒt||ƒ}| d|d¡dS)NTrörÁzfspam=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"ÚCommentz:Comment or CommentURL cookie-attributes returned to server)r r rŽrñ)r"ror„rôr&r&r'Útest_no_return_commentÊs  ÿz"CookieTests.test_no_return_commentcCsættddƒ}t|ddƒt|ddƒt|ddƒt|ddƒt|d d ƒgd ¢}gd ¢}gd ¢}gd¢}tdƒD]n}d}|D]`}| |t¡| |j||¡| |j ||¡| |j ||¡| |j ||¡|d}q~qrdS)NTrözhttp://blah.spam.org/zefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"zhttp://www.acme.com/blah/zspam=bar; securezfoo=bar; secure; Version=1zfoo=bar; path=/; Version=1úhttp://www.sol.noúsbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")r0r0r0rr0)ZbangrVrVrprV)z.sol.noz blah.spam.orgr¯r¯r¯)r°r°r°rùr÷r!rr0) r r rŽrÚrangeZassertIsInstancer rrZrÖrÏr )r"ÚcsZversionsÚnamesZdomainsÚpathsÚiror&r&r'Útest_Cookie_iteratorÔs2  ÿÿÿ  z CookieTests.test_Cookie_iteratorcCsŽ| tdgƒgd¢g¡| tdgƒgd¢g¡| tdgƒddgg¡| tdgƒgd¢g¡| td gƒd d gg¡| td gƒg¡dS) Nzfoo=bar; path=/; domain)rU)r r°)rÏNrYz)foo=bar; expires=Foo Bar 12 33:22:11 2000)rU)rXNrYrVrdrYzfoo=bar; expireszfoo=bar; versionrU)rZNr?r\rHr&r&r'r_ôs*þþþþþz!CookieTests.test_parse_ns_headerscCs†dd„}tt ¡dƒ}dgdgdgdgdgd |gfD]}||ƒ}| t|ƒd ¡q8d g}||ƒ}|jd d d}| |j¡dS)NcSs,tƒ}tj d¡}t|dƒ}| ||¡|S)NrÞ)r rr‘r’r~r–)rƒror—rÑr&r&r'Úcookiejar_from_cookie_headerss    zICookieTests.test_bad_cookie_header..cookiejar_from_cookie_headersrìz Set-Cookie: z Set-Cookie2: z-Set-Cookie2: a=foo; path=/; Version=1; domainzSet-Cookie: b=foo; max-age=oopszSet-Cookie: b=foo; version=spamzSet-Cookie:; Expires=%srz3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000rßr°ro)rr,rrðr³rBrX)r"rIrórƒrorÚr&r&r'Útest_bad_cookie_headers÷ z"CookieTests.test_bad_cookie_headerN)%rQrRrSrÒrÛrärèrërõrûrýrrr r rrrrrrr#r$r*r.r0r4r5r6r8r<r=r>r@rHr_rJr&r&r&r'rÀ‹sD/! 0 9(   $ 0,C   rÀc@sleZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)ÚLWPCookieTestscCsœt ¡dd}g}ttddƒ}tjjdddid}| d |¡t|d ƒ}|  ||¡tj d ¡}|  |¡|  |  d ¡d ¡|  |  d ¡d¡| d¡t|d ƒ}|  ||¡tj d¡}|  |¡|  d ¡}|  d|¡|  d |¡| d¡t|dƒ}|  ||¡tj d ¡}|  |¡|  d ¡}|  d|¡|  d |¡| d|¡tj d¡}|  |¡|  d ¡}|  d|¡|  d |¡| | d¡¡dS)Nrr0Trörår rr zVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr®r zCUSTOMER=WILE_E_COYOTEr+ú $Version="1"ú4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/barú PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foor7zSHIPPING=FEDEXrÕzSHIPPING=FEDEX;)r,Ú localtimer r rr‘r’r•r~r–r“rr”rérñrÌÚ startswith)r"Ú year_plus_onerƒror—r|rôr&r&r'Útest_netscape_example_14sP%ÿÿÿ                          z&LWPCookieTests.test_netscape_example_1cCsªtƒ}g}tj d¡}| d¡t|dƒ}| ||¡tj d¡}| |¡| |  d¡d¡| d¡t|dƒ}| ||¡tj d¡}| |¡|  |  d¡d¡dS)Nr®rMr rNz6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://www.acme.com/ammozBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001) r rr‘r’r•r~r–r“rr”r ©r"rorƒr—r|r&r&r'Útest_netscape_example_2s*       ÿÿ     ÿz&LWPCookieTests.test_netscape_example_2cCs’ttddƒ}t|ddƒ}| |¡t|ddƒ}| |d¡t|dd ƒ}| |d ¡| |d ¡| |d ¡t|d ƒ}| |d¡| d|¡dS)NTrözhttp://www.acme.com/acme/loginz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"z!http://www.acme.com/acme/pickitemú=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z=^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$z!http://www.acme.com/acme/shippingz+Shipping="FedEx"; Version="1"; Path="/acme"z^\$Version="?1"?;z7Part_Number="?Rocket_Launcher_0001"?;\s*\$Path="\/acme"z-Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"z http://www.acme.com/acme/processz%Shipping="?FedEx"?;\s*\$Path="\/acme"Z WILE_E_COYOTE)r r rŽrÍr ré©r"rorÚr&r&r'Útest_ietf_example_1Âs*þ ÿÿÿ     z"LWPCookieTests.test_ietf_example_1cCsXttddƒ}t|dddƒt|dƒ}| |d¡t|dƒ}| d |¡| d |¡dS) NTröz&http://www.acme.com/acme/ammo/specificrUz@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"z!http://www.acme.com/acme/ammo/...z(Riding_Rocket_0023.*Rocket_Launcher_0001zhttp://www.acme.com/acme/parts/ZRocket_Launcher_0001ZRiding_Rocket_0023)r r rŽr rérñrVr&r&r'Útest_ietf_example_22s ý   z"LWPCookieTests.test_ietf_example_2cCsàtdd}t|d}d}t|ddƒ}| |¡t|ddƒ}| t|ƒd¡t|d d ƒ}| t|ƒd¡t|d d ƒ}| t|ƒd ¡t|d dƒ}| t|ƒd ¡t|ddƒ}| t|ƒd ¡t|ddƒ}| t|ƒd¡t|ddƒ}| t|ƒd¡t|ddƒ}| t|ƒd¡t|ddƒ}| t|ƒd¡t|ddƒ}| t|ƒd¡tjj}zV|j |ddt |ƒ}t|d}|j |ddWzt   |¡Wnty¢Yn0n&zt   |¡WntyÈYn00| |t |ƒ¡dS)NTrörz max-age=3600r7z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r0zhttp://www.a.acme.comz'whiz=bang; domain="acme.com"; version=1z,wow=flutter; domain=".a.acme.com"; version=1rzhttp://125.125.125.125z*zzzz=ping; domain="125.125.125"; version=1rAz6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1zhttp://www.sol.no/foo/barz3bing=bong; domain=".sol.no"; path="/foo"; version=1rz5whiz=ffft; domain=".sol.no"; port="90,100"; version=1rBr!z9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;ézhttp://www.sol.no/.save_and_restorer+zname='foo1', value='bar'Fr!) r,rOrDr™ršr r rŽrrrðrér×)r"rQrorXr`r_r&r¦r'Ú test_mozillaØs:ÿÿÿ  ÿÿÿ  zLWPCookieTests.test_mozillacCs”tƒ}g}tj d¡}| d¡t|dƒ}| ||¡| d¡t|dƒ}| ||¡tj d¡}| |¡| d|  d¡¡| d|  d¡¡dS)Nzhttp://foo.bar.acme.com/fooz4Set-Cookie: Customer=WILE_E_COYOTE; domain=.acme.comzhttp://www.acme.com/fooz4Set-Cookie: PART_NUMBER=3,4; domain=foo.bar.acme.comzPART_NUMBER=3,4r zCustomer=WILE_E_COYOTE) r rr‘r’r•r~r–r“rér”rSr&r&r'Útest_netscape_miscs         z!LWPCookieTests.test_netscape_misccCshttddƒ}t|ddƒt|ddƒ}| d|¡t|ddƒt|dƒ}| d|¡| t|ƒd ¡dS) NTröúhttp://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1úfoo1=barzfoo3=bar; Version=1úfoo2=barr)r r rŽrérrðrVr&r&r'Útest_intranet_domains_2965sÿÿ    z)LWPCookieTests.test_intranet_domains_2965cCslttddƒ}t|ddƒt|ddƒ}| t|ƒd¡| d|¡t|dƒ}| d|¡| t|ƒd¡dS)NFrörcrdzfoo2=bar; domain=.localrre)r r rrrðrérVr&r&r'Útest_intranet_domains_ns&s ÿ   z'LWPCookieTests.test_intranet_domains_nscCs¶ttddƒ}g}tj d¡}| d¡t|dƒ}| ||¡tj d¡}| |¡|  |  d¡d¡|  |  d¡d¡tj d ¡}| |¡|  |  d¡d¡|  |  d¡d¡dS) NTrözhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r zJSESSIONID=ABCDERANDOM123r+rLzhttp://www.ants.com:8080) r r rr‘r’r•r~r–r“rr”rSr&r&r'Útest_empty_path2s$       ÿ   ÿzLWPCookieTests.test_empty_pathc Cs t ¡dd}tj d¡}g}| d¡| d|¡| d|¡| d¡| d¡t|dƒ}tƒ}| ||¡ddddd œ}|D]}d |j }||d||<qˆ|  ¡|D]}d |j }||d||<q´|  |d |d ¡|  |dd¡|  |dd¡dS)Nrr0z"http://www.perlmeister.com/scriptsz$Set-Cookie: s1=session;Path=/scriptszWSet-Cookie: p1=perm; Domain=.perlmeister.com;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTz>Set-Cookie: p2=perm;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTzs@d3g  B-O