a
    äzeª8 ã                   @   s2  d dl Z d dlZd dl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 )é    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\   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   s’   d}d}|   t|ƒd¡ |   t|| ƒd¡ |   t|d|  ƒd¡ |   t|d|  ƒd¡ tƒ }td	ƒ}||fD ]}|  |d
d||f ¡ qrd 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&   ú./usr/lib/python3.9/test/test_http_cookiejar.pyÚtest_time2isoz   s    
ÿzDateTimeTests.test_time2isozc                 C   s’   d}d}|   t|ƒd¡ |   t|| ƒd¡ |   t|d|  ƒd¡ |   t|d|  ƒd¡ tƒ }td	ƒ}||fD ]}|  |d
d||f ¡ qrd S )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   s   t  t| ƒ¡d d… S ©Né   )ÚtimeÚgmtimer   ©r%   r&   r&   r'   Ú
parse_date:   s    z0DateTimeTests.test_http2time.<locals>.parse_datez01 Jan 2001)iÑ  é   r0   r   r   ç        z	03-Feb-20)iä  r   r   r   r   r1   z	03-Feb-98)iÎ  r   r   r   r   r1   ©r   ©r"   r/   r&   r&   r'   Útest_http2time9   s    zDateTimeTests.test_http2timec                 C   s„   g d¢}d}t |ƒ}d}|  ||d|||f ¡ |D ]J}|  t|ƒ||¡ |  t| ¡ ƒ|| ¡ ¡ |  t| ¡ ƒ|| ¡ ¡ q4d 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_formatsE   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_garbagei   s    

ÿÿz$DateTimeTests.test_http2time_garbagec                 C   s(   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   s   t  t| ƒ¡d d… S r*   )r,   r-   r   r.   r&   r&   r'   r/   †   s    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 +0530r2   r3   r&   r&   r'   Útest_iso2time…   s    
ÿ
ÿ
ÿzDateTimeTests.test_iso2timec                 C   s`   g d¢}d}|D ]J}|   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  r6   )r   r   r7   r8   )r"   r9   r:   r=   r&   r&   r'   Útest_iso2time_formats•   s    z#DateTimeTests.test_iso2time_formatsc                 C   s"   dD ]}|   t|ƒd| ¡ qd S )N)r?   r@   r5   z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rA   z01-01-1980T00:00:62Z19800101T250000Zziso2time(%r))rB   r   rC   r&   r&   r'   Útest_iso2time_garbage¬   s    
ÿz#DateTimeTests.test_iso2time_garbagec                 C   s(   t d dd ¡ƒ t d dd ¡ƒ d S )Nz1994-02-03{}14:15:29 -0100!rF   i@B z1994-02-03 14:15:29{}-0100!)r   rG   rH   r&   r&   r'   Ú$test_iso2time_performance_regression¾   s    z2DateTimeTests.test_iso2time_performance_regressionN)Ú__name__Ú
__module__Ú__qualname__r(   r)   r4   r>   rE   rI   rM   rN   rO   rP   r&   r&   r&   r'   r      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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"   r<   Ú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 )NrU   )rZ   Ú1)zfoo=bar; version="1"úfoo=bar; Version="1"r\   r]   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)rX   z01 Jan 2040 22:23:32 GMTrY   r\   )r"   r^   r<   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©rV   N©rW   Úbazzfoo; bar=bazr?   )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 ]l\}}zt |gƒ}W n<   dd l}dd l}| ¡ }| d |¡ d| ¡  }Y n0 |  ||d|||f ¡ q¨d S )NrV   rd   úfoo=barrU   ú	   foo   z
   foo=   )rV   r?   z   foo=z   foo=   ; z   foo=   ; bar= baz re   úfoo=bar bar=bazzfoo= bar=baz)rV   zbar=bazúfoo=bar;bar=bazúfoo bar baz)rd   )rW   N)rf   Nza, b, c)ÚaN)ÚbN)ÚcNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )Úspamr?   )rV   z,;")rW   r?   r   z (error -- traceback follows)

%sz:
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
)r   Ú	tracebackÚioÚStringIOÚ	print_excÚgetvaluer   )r"   r9   ÚargÚexpectr;   rq   rr   Úfr&   r&   r'   Útest_split_header_wordsè   s:    






ÿÿò
üz#HeaderTests.test_split_header_wordsc              
   C   sF   g d¢}|D ]4\}}t |gƒ}t|ƒ}|  ||d||||f ¡ qd S )N))rV   rV   )rh   rh   )ri   rV   )zfoo=zfoo="")rj   úfoo=bar; bar=baz)rk   rz   )rl   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"   r9   rv   rw   ÚinputÚresr&   r&   r'   Útest_roundtrip
  s    


ûzHeaderTests.test_roundtripN)	rQ   rR   rS   r_   rb   rc   rg   ry   r}   r&   r&   r&   r'   rT   Å   s   	
"rT   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 )Nr   Ú
)Ú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‚   rH   r&   r&   r'   Úinfo4  ó    zFakeResponse.info)rQ   rR   rS   r…   r‡   r&   r&   r&   r'   r~   ,  s   r~   c                 G   s   t | ||dƒS )NzSet-Cookie2©Ú	_interact©Ú	cookiejarr„   Úset_cookie_hdrsr&   r&   r'   Úinteract_29656  s    rŽ   c                 G   s   t | ||dƒS )Nz
Set-Cookier‰   r‹   r&   r&   r'   Úinteract_netscape9  s    r   c           	      C   s\   t j |¡}|  |¡ | dd¡}g }|D ]}| d||f ¡ q*t||ƒ}|  ||¡ |S )Nr	   r?   z%s: %s)ÚurllibÚrequestÚRequestÚadd_cookie_headerÚ
get_headerÚappendr~   Úextract_cookies)	rŒ   r„   r   Zhdr_nameÚreqZ
cookie_hdrrƒ   r^   r|   r&   r&   r'   rŠ   <  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S )ÚFileCookieJarTestsc                 C   s"   t jj}t|ƒ}|  |j|¡ d S r†   )rD   ÚsupportÚTESTFNr   r   Úfilename©r"   r›   ro   r&   r&   r'   Útest_constructor_with_strJ  s    z,FileCookieJarTests.test_constructor_with_strc                 C   s.   t  tjj¡}t|ƒ}|  |jt 	|¡¡ d S r†   )
ÚpathlibÚPathrD   r™   rš   r   r   r›   ÚosÚfspathrœ   r&   r&   r'   Útest_constructor_with_path_likeO  s    z2FileCookieJarTests.test_constructor_with_path_likec                 C   s   t d ƒ}|  |j¡ d S r†   )r   rB   r›   ©r"   ro   r&   r&   r'   Útest_constructor_with_noneT  s    z-FileCookieJarTests.test_constructor_with_nonec              
   C   sˆ   G dd„ dƒ}t t|fD ]j}| j|dJ |  t¡  |ƒ }t|d}W d   ƒ n1 sZ0    Y  W d   ƒ q1 sx0    Y  qd S )Nc                   @   s   e Zd ZdS )z?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)rQ   rR   rS   r&   r&   r&   r'   ÚAY  s   r¥   ©r›   )ÚintÚfloatZsubTestÚassertRaisesÚ	TypeErrorr   )r"   r¥   Útype_Úinstancero   r&   r&   r'   Ú!test_constructor_with_other_typesX  s    z4FileCookieJarTests.test_constructor_with_other_typesc                 C   sÄ   t jj}tƒ }t|ddƒ |  |jd d d jd ¡ zH|j|dd tƒ }|j	|dd W zt
 |¡ W q¤ ty|   Y q¤0 n$zt
 |¡ W n ty    Y n0 0 |  |jd d d jd ¡ d S )Núhttp://www.acme.com/Zbooúwww.acme.comú/T©Úignore_discard)rD   r™   rš   r   r   r   Ú_cookiesÚvalueÚsaveÚloadr    ÚunlinkÚOSErrorrœ   r&   r&   r'   Útest_lwp_valueless_cookieb  s    ÿz,FileCookieJarTests.test_lwp_valueless_cookiec                 C   s  t jj}ttfD ]X}|ƒ }z|jdd W n2 ty\ } z|  |jt	¡ W Y d }~qd }~0 0 |  
d¡ qz~t|dƒ>}| d¡ ttfD ]}|ƒ }|  t	|j|¡ qŠW d   ƒ n1 sº0    Y  W zt |¡ W n tyæ   Y n0 n&zt |¡ W n ty   Y n0 0 d S )NzAfor this test to work, a file with this filename should not existr¦   z%expected OSError for invalid filenameÚwzoops
)rD   r™   rš   r   r   r¶   r¸   ZassertIsNotÚ	__class__r   ZfailÚopenÚwriter©   r    r·   )r"   r›   Zcookiejar_classro   Úexcrx   r&   r&   r'   Útest_bad_magicq  s$    $
2ÿz!FileCookieJarTests.test_bad_magicN)	rQ   rR   rS   r   r¢   r¤   r­   r¹   r¿   r&   r&   r&   r'   r˜   I  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É   rV   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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¡ 0 |  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)rD   r™   rš   r   r   r³   rB   r´   r   Únamer   Úreprrµ   Zrevertr    r·   r›   ÚreÚsub)r"   r›   ro   ÚcookieZold_strr&   r&   r'   Útest_missing_valueÛ  s8    
ÿÿþÿzCookieTests.test_missing_valuec              	   C   s¦   dD ]œ\}}}t ||d}t|ƒ}t|ddƒ z|jd d d }W n ty`   |  |¡ Y q0 |  |j|¡ t|ddƒ |r|jd d d	 }|  |jd
¡ qd S )N))NFr   )NTr0   )FFN)FTr0   )TFr   )TTr   )Úrfc2109_as_netscapeÚrfc2965úhttp://www.example.com/zni=ni; Version=1úwww.example.comr°   Úniúfoo=bar; Version=1rV   r0   )	r   r
   r   r³   ÚKeyErrorrB   r   rZ   rŽ   )r"   rÜ   rÝ   rZ   Úpolicyro   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°   rp   ZblArghZblarghr¯   rà   z80,8080ZninirV   Zfortytwor?   )r
   r   r³   r   rÏ   rÌ   Zdomain_specifiedÚportr   rÍ   Zport_specifiedZhas_nonstandard_attrrB   rX   ZassertIsNotNoner´   )r"   ro   rÚ   rV   rp   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°   rX   rZ   )r
   r   r³   ÚassertIn)r"   ro   Úcookiesr&   r&   r'   Útest_ns_parser_special_namesJ  s    z(CookieTests.test_ns_parser_special_namesc           
      C   sê  t ƒ }tt ¡ d ƒ}tj | ¡d d|› g}tj d¡}t	|dƒ}| 
||¡}|  t|ƒd¡ |  t|d jƒ|¡ W d   ƒ n1 sŒ0    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/r0   r   r®   zspam="bar"; expires=%szfoo="eggs"; expires=%sú
spam="bar"rV   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   r,   rD   r™   Zcheck_no_warningsr   r‘   r’   r~   Úmake_cookiesr   ÚlenrX   r   ré   ÚassertNotInÚclear_session_cookiesr	   )
r"   ro   Úfuturerƒ   r—   r|   rê   ZnowÚhrÚ   r&   r&   r'   Útest_expiresU  sb    
4ÿÿ
ÿÿÿÿ
û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Î   ro   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"   Zcasesrv   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||ƒ}
|r”|  d	|
d
|› ¡ |  | 	||	¡¡ q>|  
d	|
d|› ¡ |  | 	||	¡¡ q>d S )NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foorÄ   ú/foorp   ))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_polro   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.1r?   Ú.rÂ   z..foozfoo.)rÌ   r   rÍ   rH   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  r?   z192.168.0.1)r   r   rH   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.blahr?   z.rhubarb.rhubarbr  ræ   zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr  rÅ   Úmz.mr  )rÌ   r   rÍ   r   rH   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_domainQ  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=barr0   úfoo.netr°   ÚnsrW   úhttp://www.foo.net/)Zstrict_ns_domainr?   ú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"   ro   rÎ   r&   r&   r'   Útest_two_component_domain_nsi  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  ra   r0   r  r°   rV   rW   z$Version=1; foo=barr  r?   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Ô   rp   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®   r0   rí   r   r	   )r
   r   r   r‘   r’   r~   r–   r   rð   rï   Ú
set_cookier“   rÍ   Ú
has_header)r"   ro   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  r0   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Ì   r)  rï   r(  rÍ   Z	return_ok)r"   rÎ   ro   rƒ   r—   r|   Úprê   r&   r&   r'   Útest_domain_blockä  sj    ÿ











zCookieTests.test_domain_blockc                 C   s¶   dD ]¬}dD ]¢}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)rF   r?   Frö   r?   Tz; Version=1r®   zfoo1=bar%s%szfoo2=bar%s; secure%sr¯   r°   Zfoo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure)	r
   r   r   rŽ   r"  rÍ   r³   ZsecurerÌ   )r"   r  Ú
whitespacero   rÎ   r§   Zvsr„   r&   r&   r'   Útest_secure'  s,    


þþ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/r0   r	   r®   zwss://www.acme.com/zws://www.acme.com/)r   r
   r   r‘   r’   r~   r–   r   rð   r“   rÌ   r)  rÍ   ©r"   rÎ   ro   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  r1  r2  r0   r	   r®   zfoos://www.acme.com/zfoo://www.acme.com/)r   r
   r   r‘   r’   r~   r–   r   rð   r“   rÍ   r)  rÌ   r3  r&   r&   r'   Útest_custom_secure_protocolsZ  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"   ro   rô   r&   r&   r'   Útest_quote_cookie_valueu  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á   r0   r	   )r
   r   rŽ   r   r‘   r’   r   rð   r“   rÌ   r)  )r"   r„   ro   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Î   ro   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Á   r9  rŸ   z&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedr:  r;  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Á   r9  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é   r;  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"   ro   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 ]n}d}|D ]`}|  |t¡ |  |j|| ¡ |  |j	|| ¡ |  |j
|| ¡ |  |j|| ¡ |d }q~qrd 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! (\"|\\\\) ")r0   r0   r0   r   r0   )ZbangrV   rV   rp   rV   )z.sol.nozblah.spam.orgr¯   r¯   r¯   )r°   r°   r°   rù   r÷   r!  r   r0   )r
   r   rŽ   r   ÚrangeZassertIsInstancer	   r   rZ   rÖ   rÏ   r	  )r"   ÚcsZversionsÚnamesZdomainsÚpathsÚiro   r&   r&   r'   Útest_Cookie_iteratorÔ  s2    ÿÿÿ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)rU   )r	  r°   )rÏ   NrY   z)foo=bar; expires=Foo Bar 12 33:22:11 2000)rU   )rX   NrY   rV   rd   rY   zfoo=bar; expireszfoo=bar; versionrU   )rZ   Nr?   r\   rH   r&   r&   r'   r_   ô  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
¡ q8d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ƒ   ro   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°   ro   )r   r,   r   rð   r³   rB   rX   )r"   rI  ró   rƒ   ro   rÚ   r&   r&   r'   Útest_bad_cookie_header  s    ÷z"CookieTests.test_bad_cookie_headerN)%rQ   rR   rS   rÒ   rÛ   rä   rè   rë   rõ   rû   rý   r  r  r
  r  r  r  r  r  r  r  r#  r$  r*  r.  r0  r4  r5  r6  r8  r<  r=  r>  r@  rH  r_   rJ  r&   r&   r&   r'   rÀ   ‹  sD   /! 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   r0   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_COYOTEr+  ú$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=/foor7  zSHIPPING=FEDEXrÕ   zSHIPPING=FEDEX;)r,   Ú	localtimer
   r   r   r‘   r’   r•   r~   r–   r“   r   r”   ré   rñ   rÌ   Ú
startswith)r"   Úyear_plus_onerƒ   ro   r—   r|   rô   r&   r&   r'   Útest_netscape_example_14  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®   rM  r	   rN  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"   ro   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"   ro   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/specificrU  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ñ   rV  r&   r&   r'   Útest_ietf_example_22  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j}zV|j	|dd t
|ƒ}t|d}|j|dd W zt |¡ W n ty¢   Y n0 n&zt |¡ W n tyÈ   Y n0 0 |  |t
|ƒ¡ d S )NTrö   r  zmax-age=3600r7  z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r0   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=1rA  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=1rB  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ð   rD   r™   rš   rµ   r×   r¶   r    r·   r¸   )r"   rÎ   ro   Zmax_agerÚ   r›   Úoldr&   r&   r'   Útest_rejectiong  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\"?rh   u-   http://www.acme.com/foo/%25/<<%0anewÃ¥/Ã¦Ã¸Ã¥u   http://www.acme.com/Ã¼)	r
   r   rŽ   rØ   ÚcompileÚIré   r    rÍ   )r"   ro   rÚ   Z
version_rer&   r&   r'   Útest_url_encodingÂ  s     þþÿ
z LWPCookieTests.test_url_encodingc                    sì   t  ¡ d d }tj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| ƒ ‡ fdd„}||dƒ}|  	t
|ƒd¡ |  dt|ƒ¡ ||dƒ}|  	t
|ƒd¡ |  dt|ƒ¡ d S )Nr   r0   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; %sc                    sx   zN| j |d tˆ tddƒ}|j|d W zt ˆ ¡ W qt tyL   Y qt0 n$zt ˆ ¡ W n typ   Y n0 0 |S )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'Fr!  )r,   rO  rD   r™   rš   r   r   rŽ   r   r   rð   ré   r×   )r"   rQ  ro   rX   r`  r_  r&   r¦   r'   Útest_mozillaØ  s:    ÿÿÿ
ÿÿÿ

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”   rS  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ð   rV  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ö   rc  rd  zfoo2=bar; domain=.localr   re  )r
   r   r   r   rð   ré   rV  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=ABCDERANDOM123r+  rL  zhttp://www.ants.com:8080)r
   r   r   r‘   r’   r•   r~   r–   r“   r   r”   rS  r&   r&   r'   Útest_empty_path2  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 ||< qˆ| 
¡  |D ]}d|j	 }|| d ||< q´|  |d |d ¡ |  |d d¡ |  |d d¡ d S )Nr   r0   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_afterrj  rl  ri  rk  )r,   rO  r   r‘   r’   r•   r~   r
   r–   r´   rò   r   ZassertNotEqual)	r"   rQ  r—   rƒ   r|   ro   ZcounterrÚ   Úkeyr&   r&   r'   Útest_session_cookiesQ  s<    
þÿ


ý

z#LWPCookieTests.test_session_cookiesN)rQ   rR   rS   rR  rT  rW  rX  r[  r^  ra  rb  rf  rg  rh  rn  r&   r&   r&   r'   rK  1  s   [3p5[)rK  Ú__main__)-r    rØ   Ztest.supportrD   r,   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   rT   r~   rŽ   r   rŠ   r˜   rÀ   rK  rQ   Úmainr&   r&   r&   r'   Ú<module>   s<   d 3g
B       -    O
