o
    HXîhœ9 ã                   @   sP  d Z ddlZddlZddlZddlmZ ddlmZ ddlZddlZddl	Z
ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# G dd„ dej$ƒZ%G dd	„ d	ej$ƒZ&G d
d„ dƒZ'dd„ Z(dd„ Z)dd„ Z*G dd„ dej$ƒZ+G dd„ dej$ƒZ,G dd„ dej$ƒZ-e.dkr¦e /¡  dS dS )zTests for http/cookiejar.py.é    N)Ú	os_helper)Úwarnings_helper)Ú	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\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚDateTimeTestsc                 C   ó’   d}d}|   t|ƒd¡ |   t|| ƒd¡ |   t|d|  ƒd¡ |   t|d|  ƒd¡ tƒ }td	ƒ}||fD ]}|  |d
d||f ¡ q9d S )Néx+À<é€Q z2002-04-19 14:36:40Zz2002-04-20 14:36:40Zé   z2002-04-21 14:36:40Zé   z2002-04-22 14:36:40Zé ¡ z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: %s %s)ÚassertEqualr   ÚassertRegex©ÚselfÚbaseZdayÚazZbzÚtext© r)   úB/opt/python-3.10.19/usr/lib/python3.10/test/test_http_cookiejar.pyÚtest_time2isoz   s   
ÿÿzDateTimeTests.test_time2isozc                 C   r   )Nr   r   zFri, 19-Apr-2002 14:36:40 GMTzSat, 20-Apr-2002 14:36:40 GMTr   zSun, 21-Apr-2002 14:36:40 GMTr    zMon, 22-Apr-2002 14:36:40 GMTr!   z;[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$zbad time2netscape format: %s %s)r"   r   r#   r$   r)   r)   r*   Útest_time2netscape%   s*   ÿÿÿ
ýþz DateTimeTests.test_time2netscapec                 C   s<   dd„ }|   |dƒd¡ |   |dƒd¡ |   |dƒd¡ d S )	Nc                 S   ó   t  t| ƒ¡d d… S ©Né   )ÚtimeÚgmtimer   ©r(   r)   r)   r*   Ú
parse_date<   ó   z0DateTimeTests.test_http2time.<locals>.parse_datez01 Jan 2001)iÑ  é   r5   r   r   ç        z	03-Feb-20)iä  r   r    r   r   r6   z	03-Feb-98)iÎ  r   r    r   r   r6   ©r"   ©r%   r3   r)   r)   r*   Útest_http2time;   s   zDateTimeTests.test_http2timec                 C   s„   g d¢}d}t |ƒ}d}|  ||d|||f ¡ |D ]%}|  t|ƒ||¡ |  t| ¡ ƒ|| ¡ ¡ |  t| ¡ ƒ|| ¡ ¡ qd S )N)zThu, 03 Feb 1994 00:00:00 GMTú Thursday, 03-Feb-94 00:00:00 GMTz"Thursday, 03-Feb-1994 00:00:00 GMTz03 Feb 1994 00:00:00 GMTz03-Feb-94 00:00:00 GMTz03-Feb-1994 00:00:00 GMTz03-Feb-1994 00:00 GMTz03-Feb-1994 00:00z02-Feb-1994 24:00z	03-Feb-94z03-Feb-1994z03 Feb 1994z  03   Feb   1994  0:00  z  03-Feb-1994  é€>P-z1994-02-03 00:00:00Zz%s  =>  '%s' (%s))r   r"   r   ÚlowerÚupper)r%   ÚtestsÚtest_tÚresultÚexpectedÚsr)   r)   r*   Útest_http2time_formatsG   s   ÿýz$DateTimeTests.test_http2time_formatsc                 C   s*   dD ]}|   t|ƒd|t|ƒf ¡ qd S )N)Ú ÚGarbagezMandag 16. September 1996z
01-00-1980z
01-13-1980z
00-01-1980z
32-01-1980z01-01-1980 25:00:00z01-01-1980 00:61:00ú01-01-1980 00:00:62z08-Oct-3697739z08-01-3697739z09 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_garbagek   s   

ÿÿðz$DateTimeTests.test_http2time_garbagec                 C   ó(   t d dd ¡ƒ t d dd ¡ƒ d S )Nz01 Jan 1970{}00:00:00 GMT!ú i † z01 Jan 1970 00:00:00{}GMT!)r   Úformat©r%   r)   r)   r*   Ú2test_http2time_redos_regression_actually_completes€   s   z@DateTimeTests.test_http2time_redos_regression_actually_completesc                 C   s<   dd„ }|   |dƒd¡ |   |dƒd¡ |   |dƒd¡ d S )Nc                 S   r-   r.   )r0   r1   r   r2   r)   r)   r*   r3   ˆ   r4   z/DateTimeTests.test_iso2time.<locals>.parse_dateZ19940203T141529Z)iÊ  r   r    é   é   é   z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r7   r8   r)   r)   r*   Útest_iso2time‡   s   
ÿ
ÿ
ÿzDateTimeTests.test_iso2timec                 C   s`   g d¢}d}|D ]%}|   t|ƒ||¡ |   t| ¡ ƒ|| ¡ ¡ |   t| ¡ ƒ|| ¡ ¡ qd S )N)
z1994-02-03 00:00:00 -0000z1994-02-03 00:00:00 +0000z1994-02-03 00:00:00z
1994-02-03z1994-02-03T00:00:00Z19940203z1994-02-02 24:00:00Z19940203T000000Zz  1994-02-03 z  1994-02-03T00:00:00  r;   )r"   r   r<   r=   )r%   r>   r?   rB   r)   r)   r*   Útest_iso2time_formats—   s   ýz#DateTimeTests.test_iso2time_formatsc                 C   s"   dD ]}|   t|ƒd| ¡ qd S )N)rD   rE   r:   z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rF   z01-01-1980T00:00:62Z19800101T250000Zziso2time(%r))rG   r   rH   r)   r)   r*   Útest_iso2time_garbage®   s
   
ÿòz#DateTimeTests.test_iso2time_garbagec                 C   rK   )Nz1994-02-03{}14:15:29 -0100!rL   i@B z1994-02-03 14:15:29{}-0100!)r   rM   rN   r)   r)   r*   Ú$test_iso2time_performance_regressionÀ   s   z2DateTimeTests.test_iso2time_performance_regressionN)Ú__name__Ú
__module__Ú__qualname__r+   r,   r9   rC   rJ   rO   rS   rT   rU   rV   r)   r)   r)   r*   r      s    $r   c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚHeaderTestsc                 C   s*   g d¢g}dD ]}|   t|gƒ|¡ qd S )N)©ÚfooÚbar)Úexpiresl   d9W ©ÚversionÚ0)z)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"©r"   r   ©r%   rA   Úhdrr)   r)   r*   Útest_parse_ns_headersÉ   s   
üz!HeaderTests.test_parse_ns_headersc                 C   s*   ddgg}dD ]}|   t|gƒ|¡ qd S )Nr\   )ra   Ú1)zfoo=bar; version="1"úfoo=bar; Version="1"rc   rd   r)   r)   r*   Útest_parse_ns_headers_versionÒ   s   
üz)HeaderTests.test_parse_ns_headers_versionc                 C   s$   d}ddgg}|   t|gƒ|¡ d S )Nz expires=01 Jan 2040 22:23:32 GMT)r_   z01 Jan 2040 22:23:32 GMTr`   rc   )r%   re   rA   r)   r)   r*   Ú#test_parse_ns_headers_special_namesÜ   s   
z/HeaderTests.test_parse_ns_headers_special_namesc                 C   s0   t ddggƒ}|  |d¡ |  t g gƒd¡ d S )N©r]   N©r^   Úbazzfoo; bar=bazrD   )r	   r"   )r%   Zjoinedr)   r)   r*   Útest_join_header_wordsä   s   z"HeaderTests.test_join_header_wordsc                 C   s  ddggfddggfddggfddggfddggfd	dggfd
ddggfdddggfddggfdddggfdg d¢gfddgdgdggfdddgdgdgdggfg}|D ]4\}}zt |gƒ}W n   dd l}dd l}| ¡ }| d |¡ d| ¡  }Y |  ||d|||f ¡ qTd S )Nr]   rk   úfoo=barr\   ú	   foo   z
   foo=   )r]   rD   z   foo=z   foo=   ; z   foo=   ; bar= baz rl   úfoo=bar bar=bazzfoo= bar=baz)r]   zbar=bazúfoo=bar;bar=bazúfoo bar baz)rk   )r^   N)rm   Nza, b, c)ÚaN)ÚbN)ÚcNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )ÚspamrD   )r]   z,;")r^   rD   r   z (error -- traceback follows)

%sz:
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
)r
   Ú	tracebackÚioÚStringIOÚ	print_excÚgetvaluer"   )r%   r>   ÚargÚexpectr@   rx   ry   Úfr)   r)   r*   Útest_split_header_wordsê   s<   






ÿÿò
üøz#HeaderTests.test_split_header_wordsc              
   C   sF   g d¢}|D ]\}}t |gƒ}t|ƒ}|  ||d||||f ¡ qd S )N))r]   r]   )ro   ro   )rp   r]   )zfoo=zfoo="")rq   úfoo=bar; bar=baz)rr   r   )rs   zfoo; bar; baz)zfoo="\"" bar="\\"zfoo="\""; bar="\\")z	foo,,,barzfoo, bar)zfoo=bar,bar=bazzfoo=bar, bar=baz)ztext/html; charset=iso-8859-1ztext/html; charset="iso-8859-1")z)foo="bar"; port="80,81"; discard, bar=bazz'foo=bar; port="80,81"; discard, bar=baz)zBasic realm="\"foo\\\\bar\""zBasic; realm="\"foo\\\\bar\""zM
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
Input was:    '%s'
)r
   r	   r"   )r%   r>   r}   r~   ÚinputÚresr)   r)   r*   Útest_roundtrip  s   


ûýzHeaderTests.test_roundtripN)	rW   rX   rY   rf   ri   rj   rn   r€   r„   r)   r)   r)   r*   r[   Ç   s    	
"r[   c                   @   s"   e Zd Zg dfdd„Zdd„ ZdS )ÚFakeResponseNc                 C   s$   ddl }| d |¡¡| _|| _dS )zD
        headers: list of RFC822-style 'Key: value' strings
        r   NÚ
)ÚemailZmessage_from_stringÚjoinÚ_headersZ_url)r%   ÚheadersÚurlr‡   r)   r)   r*   Ú__init__/  s   
zFakeResponse.__init__c                 C   s   | j S ©N)r‰   rN   r)   r)   r*   Úinfo6  s    zFakeResponse.info)rW   rX   rY   rŒ   rŽ   r)   r)   r)   r*   r…   .  s    r…   c                 G   ó   t | ||dƒS )NzSet-Cookie2©Ú	_interact©Ú	cookiejarr‹   Úset_cookie_hdrsr)   r)   r*   Úinteract_29658  ó   r•   c                 G   r   )Nz
Set-Cookier   r’   r)   r)   r*   Úinteract_netscape;  r–   r—   c           	      C   s\   t j |¡}|  |¡ | dd¡}g }|D ]}| d||f ¡ qt||ƒ}|  ||¡ |S )zDPerform a single request / response cycle, returning Cookie: header.r   rD   z%s: %s)ÚurllibÚrequestÚRequestÚadd_cookie_headerÚ
get_headerÚappendr…   Úextract_cookies)	r“   r‹   r”   Zhdr_nameÚreqZ
cookie_hdrrŠ   re   rƒ   r)   r)   r*   r‘   >  s   

r‘   c                   @   rZ   )ÚFileCookieJarTestsc                 C   s    t j}t|ƒ}|  |j|¡ d S r   )r   ÚTESTFNr   r"   Úfilename©r%   r¢   rv   r)   r)   r*   Útest_constructor_with_strL  s   z,FileCookieJarTests.test_constructor_with_strc                 C   s,   t  tj¡}t|ƒ}|  |jt |¡¡ d S r   )	ÚpathlibÚPathr   r¡   r   r"   r¢   ÚosÚfspathr£   r)   r)   r*   Útest_constructor_with_path_likeQ  s   z2FileCookieJarTests.test_constructor_with_path_likec                 C   s   t d ƒ}|  |j¡ d S r   )r   rG   r¢   ©r%   rv   r)   r)   r*   Útest_constructor_with_noneV  s   z-FileCookieJarTests.test_constructor_with_nonec              
   C   sˆ   G dd„ dƒ}t t|fD ]5}| j|d% |  t¡ |ƒ }t|d}W d   ƒ n1 s-w   Y  W d   ƒ n1 s<w   Y  qd S )Nc                   @   s   e Zd ZdS )z?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)rW   rX   rY   r)   r)   r)   r*   ÚA[  s    r¬   ©r¢   )ÚintÚfloatZsubTestÚassertRaisesÚ	TypeErrorr   )r%   r¬   Ztype_Úinstancerv   r)   r)   r*   Ú!test_constructor_with_other_typesZ  s   þ€ÿ€ÿz4FileCookieJarTests.test_constructor_with_other_typesc                 C   s¾   t j}tƒ }t|ddƒ |  |jd d d jd ¡ z#|j|dd tƒ }|j|dd W zt	 
|¡ W n ty=   Y nw zt	 
|¡ W w  tyN   Y w w |  |jd d d jd ¡ d S )Núhttp://www.acme.com/Zbooúwww.acme.comú/T©Úignore_discard)r   r¡   r   r—   r"   Ú_cookiesÚvalueÚsaveÚloadr§   ÚunlinkÚOSErrorr£   r)   r)   r*   Útest_lwp_valueless_cookied  s   ÿ z,FileCookieJarTests.test_lwp_valueless_cookiec                 C   s  t j}ttfD ],}|ƒ }z|jdd W n ty- } z|  |jt¡ W Y d }~qd }~ww |  	d¡ qz@t
|dƒ}| d¡ ttfD ]}|ƒ }|  t|j|¡ qDW d   ƒ n1 s\w   Y  W zt |¡ W d S  tyt   Y d S w zt |¡ W w  ty…   Y w w )NzAfor this test to work, a file with this filename should not existr­   z%expected OSError for invalid filenameÚwzoops
)r   r¡   r   r   r¼   r¾   ZassertIsNotÚ	__class__r   ZfailÚopenÚwriter°   r§   r½   )r%   r¢   Zcookiejar_classrv   Úexcr   r)   r)   r*   Útest_bad_magics  s.   €ý
þþ€ÿz!FileCookieJarTests.test_bad_magicN)	rW   rX   rY   r¤   r©   r«   r³   r¿   rÅ   r)   r)   r)   r*   r    K  s    
r    c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dES )FÚCookieTestsc                 C   sL   t ƒ }dD ]\}}}tj |¡}| ||¡}|r|  |¡ q|  |¡ qd S )N))úhttp://foo.bar.com/zblah.comF)rÇ   zrhubarb.blah.comF)rÇ   zrhubarb.foo.bar.comF)rÇ   ú.foo.bar.comT)rÇ   úfoo.bar.comT)rÇ   z.bar.comT)rÇ   úbar.comT)rÇ   ÚcomT)úhttp://foo.com/zrhubarb.foo.comF)rÌ   ú.foo.comT)rÌ   úfoo.comT)rÌ   rË   T)úhttp://foo/zrhubarb.fooF)rÏ   z.fooT)rÏ   r]   T)rÏ   z	foo.localT)rÏ   ú.localT)úhttp://barfoo.comrÍ   F)rÑ   rÎ   F)r   r˜   r™   rš   Zdomain_return_okÚ
assertTrueÚassertFalse)r%   Úpolr‹   ÚdomainÚokr™   Úrr)   r)   r*   Útest_domain_return_ok¼  s   èz!CookieTests.test_domain_return_okc              	   C   s  t j}t|ƒ}t|ddƒ t|ddƒ |jd d d }|  |j¡ |  |jd¡ |jd d d }|  |j¡ |  |jd¡ |  t	|ƒd¡ t
|ƒ}|jd	d	d
 zt|ƒ}|jd	d	d
 W t |j¡ nt |j¡ w |  t
|ƒt dd	 dd |¡¡ |  t|dƒd¡ d S )Nr´   Úeggsz"spam"; path=/foo/rµ   r¶   ú/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)Zignore_expiresr¸   zpath_specified=%sFúhttp://www.acme.com/foo/z"spam"; eggs)r   r¡   r   r—   r¹   rG   rº   r"   Únamer   Úreprr»   Zrevertr§   r½   r¢   ÚreÚsub)r%   r¢   rv   ÚcookieZold_strr)   r)   r*   Útest_missing_valueÝ  s8   
ÿÿþÿzCookieTests.test_missing_valuec              	   C   s¦   dD ]N\}}}t ||d}t|ƒ}t|ddƒ z|jd d d }W n ty0   |  |¡ Y qw |  |j|¡ t|ddƒ |rP|jd d d	 }|  |jd
¡ qd S )N))NFr   )NTr5   )FFN)FTr5   )TFr   )TTr   )Úrfc2109_as_netscapeÚrfc2965úhttp://www.example.com/zni=ni; Version=1úwww.example.comr¶   Úniúfoo=bar; Version=1r]   r5   )	r   r   r—   r¹   ÚKeyErrorrG   r"   ra   r•   )r%   râ   rã   ra   Úpolicyrv   rà   Z
cookie2965r)   r)   r*   Útest_rfc2109_handlingý  s*   
þÿÿ€æz!CookieTests.test_rfc2109_handlingc                 C   sÆ  t ƒ }t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|dd	ƒ t|dd
ƒ |jd d d }|  |jd¡ |  |j¡ |  |jt¡ |  	|j
¡ |  | d¡¡ |  	| d¡¡ |jd d d }|  |jd¡ |  	|j¡ |  |jd¡ |  |j
¡ |jd d d }|  |j¡ |  	|j
¡ |jd d d }|jd d d }|  |j¡ |  |j¡ |jd d d }|  |j¡ |  |jd¡ |jd d d
 }|  |j¡ d S )Nr´   z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080úhttp://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z	fortytwo=z=unladenswallowZholyhandgrenadeú	.acme.comr¶   rw   ZblArghZblarghrµ   ræ   z80,8080Zninir]   ZfortytworD   )r   r—   r¹   r"   rÕ   rÒ   Zdomain_specifiedÚportr   rÓ   Zport_specifiedZhas_nonstandard_attrrG   r_   ZassertIsNotNonerº   )r%   rv   rà   r]   rw   r)   r)   r*   Útest_ns_parser  sF   ÿzCookieTests.test_ns_parserc                 C   sH   t ƒ }t|ddƒ t|ddƒ |jd d }|  d|¡ |  d|¡ d S )Nr´   zexpires=eggszversion=eggs; spam=eggsrµ   r¶   r_   ra   )r   r—   r¹   ÚassertIn)r%   rv   Úcookiesr)   r)   r*   Útest_ns_parser_special_namesL  s   z(CookieTests.test_ns_parser_special_namesc           
      C   sè  t ƒ }tt ¡ d ƒ}t | ¡2 d|› g}tj d¡}t|dƒ}| 	||¡}|  
t|ƒd¡ |  
t|d jƒ|¡ W d   ƒ n1 sEw   Y  t|dd| ƒ |  
t|ƒd¡ tt ¡ d ƒ}t|dd| ƒ t|dƒ}|  
t|ƒd¡ |  d	|¡ |  d
|¡ t|dd| ƒ t|dd| ƒ |  
t|ƒd¡ t|dd| ƒ t|dd| ƒ t|dƒ}|  
t|ƒd¡ t|ddƒ |  
t|ƒd¡ | ¡  |  
t|ƒd¡ |  d	|¡ tdddd dddddddddd d i ƒ}	|  
|	jd¡ d S )Né  z%Set-Cookie: FOO=BAR; path=/; expires=úhttp://www.coyote.com/r5   r   r´   zspam="bar"; expires=%szfoo="eggs"; expires=%sú
spam="bar"r]   zeggs="bar"; expires=%szbar="bar"; expires=%sr    z!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/zwhum="fizz"r   rÜ   rº   Fzwww.python.orgTr¶   z1444312383.018307i?uV)r   r   r0   r   Zcheck_no_warningsr˜   r™   rš   r…   Úmake_cookiesr"   Úlenr_   r—   rï   ÚassertNotInÚclear_session_cookiesr   )
r%   rv   ÚfuturerŠ   rŸ   rƒ   rð   ZnowÚhrà   r)   r)   r*   Útest_expiresW  sd   
úÿÿ
ÿÿÿÿ
ûzCookieTests.test_expiresc                 C   s6  t dd}t|ƒ}t|ddƒ |  d|jd ¡ t|ƒ}t|ddƒ |  d|jd ¡ t|ƒ}t|d	dƒ |  d
|jd ¡ t|ƒ}t|ddƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ tƒ }t|d	dƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ d S )NT©rã   r´   zspam="bar"; Version="1"r¶   rµ   zhttp://www.acme.com/blahzeggs="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Ô   rv   r)   r)   r*   Útest_default_path  s:   
ÿÿzCookieTests.test_default_pathc                 C   sB   t ƒ }d}d}t|||ƒ |  d|jd ¡ |  t||ƒ|¡ d S )Nzhttp://example.com/?spam/eggsrþ   r¶   zexample.com)r   r—   rï   r¹   r"   )r%   ÚcjZurirº   r)   r)   r*   Útest_default_path_with_query¸  s   z(CookieTests.test_default_path_with_queryc                 C   s*   g d¢}|D ]\}}|   t|ƒ|¡ qd S )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)r"   r   )r%   Úcasesr}   r@   r)   r)   r*   Útest_escape_pathÂ  s   ÿzCookieTests.test_escape_pathc                 C   sX   t j d¡}|  t|ƒd¡ t j d¡}|  t|ƒd¡ t j d¡}|  t|ƒd¡ d S )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/rhaponticumzhttp://www.example.comr¶   )r˜   r™   rš   r"   r   ©r%   rŸ   r)   r)   r*   Útest_request_pathÛ  s   ÿ
ÿÿzCookieTests.test_request_pathc                 C   sÀ   t ƒ }t dd}t|ƒ}d}t||dƒ |jd d d }dD ]>\}}|› |› }tj |¡}	t||ƒ}
|rJ|  d	|
d
|› ¡ |  | 	||	¡¡ q|  
d	|
d|› ¡ |  | 	||	¡¡ qd S )NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foorÊ   ú/foorw   ))r  T)rÚ   T)ú/foo/barT)r¶   F)z/foobad/fooFz	spam=eggszcookie not set for zcookie set for )r   r   r—   r¹   r˜   r™   rš   rï   rÒ   Zset_ok_pathr÷   rÓ   )r%   rÔ   Zstrict_ns_path_polrv   Zbase_urlrà   ÚpathrÖ   r‹   rŸ   rú   r)   r)   r*   Útest_path_prefix_matchë  s    

óz"CookieTests.test_path_prefix_matchc                 C   sL   t jjdddid}|  t|ƒd¡ t jjdddid}|  t|ƒt¡ d S )Nzhttp://www.acme.com:1234/ÚHostzwww.acme.com:4321©rŠ   Z1234r´   )r˜   r™   rš   r"   r   r   r  r)   r)   r*   Útest_request_port  s   ÿÿzCookieTests.test_request_portc                 C   sp   t jjdddid}|  t|ƒd¡ t jjdddid}|  t|ƒd¡ t jjd	dd
id}|  t|ƒd¡ d S )Nzhttp://1.1.1.1/r  úwww.acme.com:80r  z1.1.1.1r´   zirrelevant.comrµ   z&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)r˜   r™   rš   r"   r   r  r)   r)   r*   Útest_request_host  s   ÿÿÿzCookieTests.test_request_hostc                 C   st   |   tdƒ¡ |   tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ d S )	NrÉ   z1foo2.3bar4.5comú192.168.1.1rD   Ú.rÈ   z..foozfoo.)rÒ   r   rÓ   rN   r)   r)   r*   Útest_is_HDN  s   zCookieTests.test_is_HDNc                 C   s„   |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   td	ƒd	¡ d S )
Nrµ   rì   úacme.comz
acme.localrÐ   ú.comr  rD   z192.168.0.1)r"   r   rN   r)   r)   r*   Ú
test_reach%  s   zCookieTests.test_reachc                 C   sô  |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   td	d
ƒ¡ |  tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ d S )Nr  z.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comzexample.localrÐ   z	blah.blahrD   z.rhubarb.rhubarbr  rì   zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr  rË   Úmz.mr  )rÒ   r   rÓ   r   rN   r)   r)   r*   Útest_domain_match/  s>   zCookieTests.test_domain_matchc                 C   s&   t ƒ }t|ddƒ |  t|ƒd¡ d S )Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r   )r   r•   r"   rö   rª   r)   r)   r*   Útest_wrong_domainS  s
   ÿzCookieTests.test_wrong_domainc                 C   sj   t dd}t|d}t|ddƒ t|ddƒ |  t|ƒd¡ dD ]}t|d	| d
ƒ |  t|ƒd¡ q d S )NT)Zstrict_domain©ré   zhttp://example.co.uk/zno=problemoz!okey=dokey; Domain=.example.co.ukr   )z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)r   r   r—   r"   rö   )r%   Zcpr  Z
pseudo_tldr)   r)   r*   Útest_strict_domain]  s   

ÿ
ÿýzCookieTests.test_strict_domainc                 C   s8  t ƒ }t|ddƒ |  t|ƒd¡ |  |jd d d jd¡ |  t|dƒd¡ |  t|dƒd¡ ttjd	}| |¡ |  t|dƒd
¡ t|ddƒ t|ddƒ |  t|ƒd¡ |  |jd d d jd¡ |  |jd d d jd¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ t|ddƒ |  t|ƒd¡ d S )Núhttp://foo.net/zns=barr5   úfoo.netr¶   Únsr^   úhttp://www.foo.net/)Zstrict_ns_domainrD   úhttp://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr    ú.foo.netr  Zspam1rÙ   r  Zspam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uké   )	r   r—   r"   rö   r¹   rº   r   ZDomainStrictNonDomainÚ
set_policy)r%   rv   rÔ   r)   r)   r*   Útest_two_component_domain_nsk  sB   ÿÿ
ÿÿÿÿÿz(CookieTests.test_two_component_domain_nsc                 C   s4  t dd}t|ƒ}t|ddƒ |  t|ƒd¡ |  |jd d d jd	¡ |  t|dƒd
¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ |  t|dƒd
¡ t|ddƒ |  |jd d d jd¡ |  t|ƒd¡ |  t|dƒd
¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ t|ddƒ |  t|ƒd¡ d S )NTrü   r"  rh   r5   r#  r¶   r]   r^   z$Version=1; foo=barr%  rD   zhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"r'  rÚ   rw   rÙ   r   r&  z($Version=1; spam=eggs; $Domain="foo.net"z#ni="ni"; domain=".net"; Version="1"zhttp://foo.co.uk/z'nasty=trick; domain=.co.uk; Version="1"r    )r   r   r•   r"   rö   r¹   rº   r   r)   r)   r*   Ú!test_two_component_domain_rfc2965›  sJ   
ÿÿÿÿÿÿÿÿÿz-CookieTests.test_two_component_domain_rfc2965c                 C   s  t tdgdgdd}tj d¡}dg}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}t|dƒ}| ||¡ |  t|ƒd	¡ tj d
¡}t|d
ƒ}| ||¡ |  t|ƒd	¡ tj d
¡}t|d
ƒ}| 	||¡}| 
|d ¡ |  t|ƒd¡ | |¡ |  | d¡¡ d S )Nr  rµ   )Úblocked_domainsZallowed_domainsr   úhttp://acme.com/ú*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/r   r´   r5   ró   r   r   )r   r   r˜   r™   rš   r…   rž   r"   rö   rõ   Ú
set_cookier›   rÓ   Ú
has_header)r%   rv   rŸ   rŠ   rƒ   rð   r)   r)   r*   Útest_domain_allowÇ  s0   
þ




zCookieTests.test_domain_allowc                 C   s€  t ddgd}t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ | 	dg¡}| ||¡ |  t|ƒd	¡ | 
¡  tj d
¡}t|d
ƒ}| ||¡ |  t|ƒd	¡ tj d
¡}| |¡ |  | d¡¡ |  | d¡¡ | 
¡  | 	dg¡ | ||¡ |  t|ƒd	¡ tj d¡}t|dƒ}| ||¡}| |d ¡ |  t|ƒd¡ | |¡ |  | d¡¡ | 
¡  | 	g ¡ tj d¡}t|dƒ}| ||¡}| ||¡ |  t|ƒd	¡ tj d¡}| |¡ |  | d¡¡ tj d¡}| |¡ |  | |d |¡¡ |  | d¡¡ | 	dg¡}tj d¡}| |¡ |  | d¡¡ tj d¡}| |¡ |  | d¡¡ d S )NTrì   )rã   r,  r   r.  r´   r   r  r5   zhttp://www.roadrunner.net/r   ÚCookie2r   r-  zhttp://badacme.com/)r   r   r˜   r™   rš   r…   rž   r"   rö   Zset_blocked_domainsÚclearr›   rÒ   r0  rõ   r/  rÓ   Z	return_ok)r%   rÔ   rv   rŠ   rŸ   rƒ   Úprð   r)   r)   r*   Útest_domain_blockæ  sj   ÿ











zCookieTests.test_domain_blockc                 C   s¶   dD ]V}dD ]Q}t ƒ }|rtdd}t}d}n	tdd}t}d}| |¡ d}|||d	||f ƒ |||d
||f ƒ |  |jd d d jd¡ |  |jd d d jd¡ qqd S )N)TF)rL   rD   Frü   rD   Tz; Version=1r´   zfoo1=bar%s%szfoo2=bar%s; secure%srµ   r¶   Úfoo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure)	r   r   r—   r•   r)  rÓ   r¹   ZsecurerÒ   )r%   r$  Ú
whitespacerv   rÔ   r®   Zvsr‹   r)   r)   r*   Útest_secure)  s0   


þþïÿzCookieTests.test_securec                 C   sä   t ƒ }t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  | d¡¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  | d¡¡ d S )	Nr   ú(Set-Cookie: session=narf; secure; path=/úhttps://www.acme.com/r5   r   r´   zwss://www.acme.com/zws://www.acme.com/)r   r   r˜   r™   rš   r…   rž   r"   rö   r›   rÒ   r0  rÓ   ©r%   rÔ   rv   rŠ   rŸ   rƒ   r)   r)   r*   Útest_secure_block@  s&   





zCookieTests.test_secure_blockc                 C   sê   t dgd}t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  
| d¡¡ tj d	¡}| 	|¡ |  | d¡¡ tj d
¡}| 	|¡ |  
| d¡¡ d S )NZfoos)Zsecure_protocolsr   r9  r:  r5   r   r´   zfoos://www.acme.com/zfoo://www.acme.com/)r   r   r˜   r™   rš   r…   rž   r"   rö   r›   rÓ   r0  rÒ   r;  r)   r)   r*   Útest_custom_secure_protocols\  s&   





z(CookieTests.test_custom_secure_protocolsc                 C   s6   t tddd}t|ddƒ t|dƒ}|  |d¡ d S )NTrü   r   r´   zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r   r   r•   r"   )r%   rv   rú   r)   r)   r*   Útest_quote_cookie_valuew  s   
z#CookieTests.test_quote_cookie_valuec                 C   sX   d}t tddƒ}t||dƒ tj |¡}|  t|ƒd¡ | |¡ |  	| 
d¡¡ d S )Núhttp://www.acme.comTrü   rç   r5   r   )r   r   r•   r˜   r™   rš   r"   rö   r›   rÒ   r0  )r%   r‹   rv   rŸ   r)   r)   r*   Útest_missing_final_slash}  s   
z$CookieTests.test_missing_final_slashc                 C   sž   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d	¡ t|ƒ}d}t||d
ƒ t||ƒ}|  d|d	¡ d S )NTrü   rÇ   úspam=eggs; Version=1ZDomainz*absent domain returned with domain presentz%spam=eggs; Version=1; Domain=.bar.comz$Domain=".bar.com"zdomain not returnedz$spam=eggs; Version=1; Domain=bar.comz$Domain="bar.com"©r   r   r•   r÷   rï   ©r%   rÔ   rv   r‹   rú   r)   r)   r*   Útest_domain_mirror‡  s$   

ÿ

zCookieTests.test_domain_mirrorc                 C   sn   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d	¡ d S )
NTrü   rÇ   rA  r¦   z&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedrB  rC  r)   r)   r*   Útest_path_mirrorž  s   


zCookieTests.test_path_mirrorc                 C   sÎ   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  |dd	¡ t|ƒ}d}t||d
ƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ d S )NTrü   rÇ   rA  ZPortz&absent port returned with port presentzspam=eggs; Version=1; Portz\$Port([^=]|$)z-port with no value not returned with no valuezspam=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ï   rC  r)   r)   r*   Útest_port_mirror­  s6   


ÿ
ÿ
ÿzCookieTests.test_port_mirrorc                 C   s:   t tddƒ}d}t||dƒ t||ƒ}|  d|d¡ d S )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%   rv   r‹   rú   r)   r)   r*   Útest_no_return_commentÌ  s   
ÿz"CookieTests.test_no_return_commentc                 C   sæ   t tddƒ}t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|d	d
ƒ g d¢}g d¢}g d¢}g d¢}tdƒD ]7}d}|D ]0}|  |t¡ |  |j|| ¡ |  |j	|| ¡ |  |j
|| ¡ |  |j|| ¡ |d }q?q9d S )NTrü   zhttp://blah.spam.org/zefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"zhttp://www.acme.com/blah/zspam=bar; securezfoo=bar; secure; Version=1zfoo=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! (\"|\\\\) ")r5   r5   r5   r   r5   )Zbangr]   r]   rw   r]   )z.sol.nozblah.spam.orgrµ   rµ   rµ   )r¶   r¶   r¶   rÿ   rý   r(  r   r5   )r   r   r•   r—   ÚrangeZassertIsInstancer   r"   ra   rÜ   rÕ   r  )r%   ÚcsZversionsÚnamesZdomainsÚpathsÚirv   r)   r)   r*   Útest_Cookie_iteratorÖ  s6   ÿÿÿ
úþz CookieTests.test_Cookie_iteratorc                 C   sŽ   |   tdgƒg d¢g¡ |   tdgƒg d¢g¡ |   tdgƒddgg¡ |   tdgƒg d¢g¡ |   td	gƒd
dgg¡ |   tdgƒg ¡ d S )Nzfoo=bar; path=/; domain)r\   )r  r¶   )rÕ   Nr`   z)foo=bar; expires=Foo Bar 12 33:22:11 2000)r\   )r_   Nr`   r]   rk   r`   zfoo=bar; expireszfoo=bar; versionr\   )ra   NrD   rc   rN   r)   r)   r*   rf   ö  s*   þþþþþz!CookieTests.test_parse_ns_headersc                 C   s†   dd„ }t t ¡ d ƒ}dgdgdgdgdgd	| gfD ]}||ƒ}|  t|ƒd
¡ qdg}||ƒ}|jd d d }|  |j¡ d S )Nc                 S   s,   t ƒ }tj d¡}t| dƒ}| ||¡ |S )Nrä   )r   r˜   r™   rš   r…   rž   )rŠ   rv   rŸ   r×   r)   r)   r*   Úcookiejar_from_cookie_headers  s
   
zICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersrò   zSet-Cookie: zSet-Cookie2: z-Set-Cookie2: a=foo; path=/; Version=1; domainzSet-Cookie: b=foo; max-age=oopszSet-Cookie: b=foo; version=spamzSet-Cookie:; Expires=%sr   z3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000rå   r¶   rv   )r   r0   r"   rö   r¹   rG   r_   )r%   rQ  rù   rŠ   rv   rà   r)   r)   r*   Útest_bad_cookie_header  s   ÷z"CookieTests.test_bad_cookie_headerN)%rW   rX   rY   rØ   rá   rê   rî   rñ   rû   r  r  r  r  r  r  r  r  r  r  r  r!  r*  r+  r1  r5  r8  r<  r=  r>  r@  rD  rE  rF  rH  rP  rf   rR  r)   r)   r)   r*   rÆ     sF    /! 09(


$
0,C

 rÆ   c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚLWPCookieTestsc                 C   sœ  t  ¡ d d }g }ttddƒ}tjjdddid}| d	| ¡ t|d
ƒ}| 	||¡ tj d
¡}| 
|¡ |  | d¡d¡ |  | d¡d¡ | d¡ t|d
ƒ}| 	||¡ tj d¡}| 
|¡ | d¡}|  d|¡ |  d|¡ | d¡ t|dƒ}| 	||¡ tj d
¡}| 
|¡ | d¡}|  d|¡ |  d|¡ |  d|¡ tj d¡}| 
|¡ | d¡}|  d|¡ |  d|¡ |  | d¡¡ d S )Nr   r5   Trü   rë   r  r  r  zVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr´   r   zCUSTOMER=WILE_E_COYOTEr2  ú$Version="1"ú4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/barú PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foor?  zSHIPPING=FEDEXrÛ   zSHIPPING=FEDEX;)r0   Ú	localtimer   r   r˜   r™   rš   r   r…   rž   r›   r"   rœ   rï   r÷   rÒ   Ú
startswith)r%   Úyear_plus_onerŠ   rv   rŸ   rƒ   rú   r)   r)   r*   Útest_netscape_example_16  sP   %ÿÿÿ











z&LWPCookieTests.test_netscape_example_1c                 C   sª   t ƒ }g }tj d¡}| d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  | 	d¡d¡ | d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  
| 	d¡d¡ d S )Nr´   rU  r   rV  z6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://www.acme.com/ammozBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001)r   r˜   r™   rš   r   r…   rž   r›   r"   rœ   r#   ©r%   rv   rŠ   rŸ   rƒ   r)   r)   r*   Útest_netscape_example_2‘  s*   


ÿÿ

ÿz&LWPCookieTests.test_netscape_example_2c                 C   s’   t tddƒ}t|ddƒ}|  |¡ t|ddƒ}|  |d¡ t|dd	ƒ}|  |d
¡ |  |d¡ |  |d¡ t|dƒ}|  |d¡ |  d|¡ d S )NTrü   zhttp://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%   rv   rà   r)   r)   r*   Útest_ietf_example_1Ä  s*   þ
ÿÿÿ
z"LWPCookieTests.test_ietf_example_1c                 C   sX   t tddƒ}t|dddƒ t|dƒ}|  |d¡ t|dƒ}|  d	|¡ |  d
|¡ d S )NTrü   z&http://www.acme.com/acme/ammo/specificr]  z@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"z!http://www.acme.com/acme/ammo/...z(Riding_Rocket_0023.*Rocket_Launcher_0001zhttp://www.acme.com/acme/parts/ZRocket_Launcher_0001ZRiding_Rocket_0023)r   r   r•   r#   rï   r÷   r^  r)   r)   r*   Útest_ietf_example_24  s   ý

z"LWPCookieTests.test_ietf_example_2c                 C   sÖ  t dd}t|d}d}t|ddƒ}|  |¡ t|ddƒ}|  t|ƒd¡ t|d	d
ƒ}|  t|ƒd¡ t|d	dƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ tj}z)|j|dd t	|ƒ}t|d}|j
|dd W zt |¡ W n tyÏ   Y nw zt |¡ W w  tyà   Y w w |  |t	|ƒ¡ d S )NTrü   r   zmax-age=3600r?  z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r5   zhttp://www.a.acme.comz'whiz=bang; domain="acme.com"; version=1z,wow=flutter; domain=".a.acme.com"; version=1r   zhttp://125.125.125.125z*zzzz=ping; domain="125.125.125"; version=1rI  z6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1zhttp://www.sol.no/foo/barz3bing=bong; domain=".sol.no"; path="/foo"; version=1r    z5whiz=ffft; domain=".sol.no"; port="90,100"; version=1rJ  r(  z9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;é   zhttp://www.sol.no/<oo/z"foo8=bar; version=1; path="/%3coo"r/   r·   )r   r   r•   rÓ   r"   rö   r   r¡   r»   rÝ   r¼   r§   r½   r¾   )r%   rÔ   rv   Zmax_agerà   r¢   Úoldr)   r)   r*   Útest_rejectioni  sv   

ÿ
ÿÿÿÿÿÿÿþÿ	ÿ
ÿzLWPCookieTests.test_rejectionc                 C   sn   t tddƒ}t|ddƒ t|ddƒ}t dtj¡}|  d|¡ |  ||¡ t|d	ƒ}|  |¡ t|d
ƒ}d S )NTrü   z7http://www.acme.com/foo%2f%25/%3c%3c%0Anew%C3%A5/%C3%A5zfoo  =   bar; version    =   1u/   http://www.acme.com/foo%2f%25/<<%0anewÃ¥/Ã¦Ã¸Ã¥z bar=baz; path="/foo/"; version=1z^\$version=\"?1\"?ro   u-   http://www.acme.com/foo/%25/<<%0anewÃ¥/Ã¦Ã¸Ã¥u   http://www.acme.com/Ã¼)	r   r   r•   rÞ   ÚcompileÚIrï   r#   rÓ   )r%   rv   rà   Z
version_rer)   r)   r*   Útest_url_encodingÄ  s    þþÿ
z LWPCookieTests.test_url_encodingc                    s  t  ¡ d d }tj‰ tˆ tddd}t|ddƒ t|ddƒ t|dd	ƒ d
|f }t|dd| ƒ t|dd| ƒ t|dd| ƒ |D ]}|jdkrR| 	dd¡ qE‡ fdd„}||dƒ}|  
t|ƒd¡ |  dt|ƒ¡ |  dt|ƒ¡ ||dƒ}|  
t|ƒd¡ |  dt|ƒ¡ d S )Nr   r5   Trü   r   r´   z foo1=bar; max-age=100; Version=1z4foo2=bar; port="80"; max-age=100; Discard; Version=1zfoo3=bar; secure; Version=1zexpires=09-Nov-%d 23:12:40 GMTzhttp://www.foo.com/zfooa=bar; %szfoob=bar; Domain=.foo.com; %sz fooc=bar; Domain=www.foo.com; %sr6  ZHTTPOnlyrD   c                    st   z(| j |d tˆ tddƒ}|j|d W zt ˆ ¡ W |S  ty(   Y |S w zt ˆ ¡ W w  ty9   Y w w )Nr·   Trü   )r»   r   r   r¼   r§   r½   r¾   )r  r¸   Únew_cr­   r)   r*   Úsave_and_restoreô  s   ÿÿÿÿz5LWPCookieTests.test_mozilla.<locals>.save_and_restorer/   zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr(  )r0   rW  r   r¡   r   r   r•   r—   rÜ   Zset_nonstandard_attrr"   rö   rï   rÝ   )r%   rY  rv   r_   rà   rh  rg  r)   r­   r*   Útest_mozillaÚ  sD   ÿÿÿ
ÿÿÿ
€

zLWPCookieTests.test_mozillac                 C   s”   t ƒ }g }tj d¡}| d¡ t|dƒ}| ||¡ | d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  d| 	d¡¡ |  d| 	d¡¡ d S )Nzhttp://foo.bar.acme.com/fooz4Set-Cookie: Customer=WILE_E_COYOTE; domain=.acme.comzhttp://www.acme.com/fooz4Set-Cookie: PART_NUMBER=3,4; domain=foo.bar.acme.comzPART_NUMBER=3,4r   zCustomer=WILE_E_COYOTE)
r   r˜   r™   rš   r   r…   rž   r›   rï   rœ   r[  r)   r)   r*   Útest_netscape_misc  s   




z!LWPCookieTests.test_netscape_miscc                 C   sh   t tddƒ}t|ddƒ t|ddƒ}|  d|¡ t|ddƒ t|dƒ}|  d|¡ |  t|ƒd	¡ d S )
NTrü   úhttp://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1úfoo1=barzfoo3=bar; Version=1úfoo2=barr    )r   r   r•   rï   r"   rö   r^  r)   r)   r*   Útest_intranet_domains_2965  s   ÿÿ
z)LWPCookieTests.test_intranet_domains_2965c                 C   sl   t tddƒ}t|ddƒ t|ddƒ}|  t|ƒd¡ |  d|¡ t|dƒ}|  d|¡ |  t|ƒd¡ d S )NFrü   rk  rl  zfoo2=bar; domain=.localr   rm  )r   r   r—   r"   rö   rï   r^  r)   r)   r*   Útest_intranet_domains_ns-  s   ÿ
z'LWPCookieTests.test_intranet_domains_nsc                 C   s¶   t tddƒ}g }tj d¡}| d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  	| 
d¡d¡ |  	| 
d¡d¡ tj d	¡}| |¡ |  	| 
d¡d¡ |  	| 
d¡d¡ d S )
NTrü   zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r   zJSESSIONID=ABCDERANDOM123r2  rT  zhttp://www.ants.com:8080)r   r   r˜   r™   rš   r   r…   rž   r›   r"   rœ   r[  r)   r)   r*   Útest_empty_path9  s$   


ÿ
ÿzLWPCookieTests.test_empty_pathc           	      C   s  t  ¡ d d }tj d¡}g }| d¡ | d| ¡ | d| ¡ | d¡ | d¡ t|dƒ}tƒ }| ||¡ ddddd	œ}|D ]}d
|j	 }|| d ||< qD| 
¡  |D ]}d|j	 }|| d ||< qZ|  |d |d ¡ |  |d d¡ |  |d d¡ d S )Nr   r5   z"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 GMTz<Set-Cookie: s2=session;Path=/scripts;Domain=.perlmeister.comz2Set-Cookie2: s3=session;Version=1;Discard;Path="/")Úsession_afterÚ
perm_afterÚsession_beforeÚperm_beforez	%s_beforez%s_afterrr  rt  rq  rs  )r0   rW  r˜   r™   rš   r   r…   r   rž   rº   rø   r"   ZassertNotEqual)	r%   rY  rŸ   rŠ   rƒ   rv   Zcounterrà   Úkeyr)   r)   r*   Útest_session_cookiesX  s<   
þÿ


ý

z#LWPCookieTests.test_session_cookiesN)rW   rX   rY   rZ  r\  r_  r`  rc  rf  ri  rj  rn  ro  rp  rv  r)   r)   r)   r*   rS  3  s    [3p5[.rS  Ú__main__)0Ú__doc__r§   rÞ   Ztest.supportrI   r   r   r0   ZunittestZurllib.requestr˜   r¥   Zhttp.cookiejarr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZTestCaser   r[   r…   r•   r—   r‘   r    rÆ   rS  rW   Úmainr)   r)   r)   r*   Ú<module>   sF    d 3g
B       -    Tÿ