HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_http_cookiejar.cpython-37.pyc
B

��g�.�@sBdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZm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-dk�r>e,dd�dS)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
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�
DateTimeTestscCs�d}d}|�t|�d�|�t||�d�|�t|d|�d�|�t|d|�d�t�}td	�}x&||fD]}|�|d
d||f�qtWdS)Nix+�<i�Qz2002-04-19 14:36:40Zz2002-04-20 14:36:40Z�z2002-04-21 14:36:40Z�z2002-04-22 14:36:40Zi �z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: %s %s)�assertEqualr�assertRegex)�self�base�day�az�bz�text�r$�4/usr/local/lib/python3.7/test/test_http_cookiejar.py�test_time2isozszDateTimeTests.test_time2isozcCs�d}d}|�t|�d�|�t||�d�|�t|d|�d�|�t|d|�d�t�}td	�}x&||fD]}|�|d
d||f�qtWdS)Nix+�<i�QzFri, 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 GMTi �z;[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)rrr r!r"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.<locals>.parse_datez01 Jan 2001)i��r,rrgz	03-Feb-20)i�rrrrgz	03-Feb-98)i�rrrrg)r)rr+r$r$r%�test_http2time9szDateTimeTests.test_http2timecCs�ddddddddd	d
ddd
dg}d}t|�}d}|�||d|||f�xR|D]J}|�t|�||�|�t|���||���|�t|���||���qNWdS)NzThu, 03 Feb 1994 00:00:00 GMTz 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-94z03-Feb-1994z03 Feb 1994z  03   Feb   1994  0:00  z  03-Feb-1994  i�>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.x(dD] }|�t|�d|t|�f�qWdS)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:00z01-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)rr$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�S)Nr()r)r*r)r#r$r$r%r+�sz/DateTimeTests.test_iso2time.<locals>.parse_dateZ19940203T141529Z)i�rr���z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530)r)rr+r$r$r%�
test_iso2time�s


zDateTimeTests.test_iso2timec
Cstddddddddd	d
g
}d}xR|D]J}|�t|�||�|�t|���||���|�t|���||���q"WdS)Nz1994-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  i�>P-)rrr.r/)rr0r1r4r$r$r%�test_iso2time_formats�s
z#DateTimeTests.test_iso2time_formatscCs&x dD]}|�t|�d|�qWdS)N)r6r7z Thursday, 03-Feb-94 00:00:00 GMTz
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00z01-01-1980 00:00:62z01-01-1980T00:00:62Z19800101T250000Zziso2time(%r))r8r)rr9r$r$r%�test_iso2time_garbage�s

z#DateTimeTests.test_iso2time_garbagecCs(td�dd��td�dd��dS)Nz1994-02-03{}14:15:29 -0100!r;i@Bz1994-02-03 14:15:29{}-0100!)rr<)rr$r$r%�$test_iso2time_performance_regression�sz2DateTimeTests.test_iso2time_performance_regressionN)
�__name__�
__module__�__qualname__r&r'r-r5r:r=rArBrCrDr$r$r$r%rs$rc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�HeaderTestscCs0dddgg}xdD]}|�t|g�|�qWdS)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)rr3�hdrr$r$r%�test_parse_ns_headers�s
z!HeaderTests.test_parse_ns_headerscCs.ddgg}xdD]}|�t|g�|�qWdS)N)rIrJ)rL�1)zfoo=bar; version="1"zfoo=bar; Version="1")rr)rr3rNr$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)rKz01 Jan 2040 22:23:32 GMT)rLrM)rr)rrNr3r$r$r%�#test_parse_ns_headers_special_names�s
z/HeaderTests.test_parse_ns_headers_special_namescCs0tddgg�}|�|d�|�tgg�d�dS)N)rIN)rJ�bazzfoo; bar=bazr6)rr)rZjoinedr$r$r%�test_join_header_words�sz"HeaderTests.test_join_header_wordscCs ddggfddggfddggfddggfddggfd	dggfd
ddggfdddggfd
dggfdddggfddddggfddgdgdggfdddgdgdgdggfg
}xt|D]l\}}yt|g�}Wn<ddl}ddl}|��}|�d|�d|��}YnX|�||d|||f�q�WdS)NrI)rINzfoo=bar)rIrJz	   foo   z
   foo=   )rIr6z   foo=z   foo=   ; z   foo=   ; bar= baz )rJrSzfoo=bar bar=bazzfoo= bar=baz)rIzbar=bazzfoo=bar;bar=bazzfoo bar baz)rJN)rSNza, b, c)�aN)�bN)�cNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )�spamr6)rIz,;")rJr6rz (error -- traceback follows)

%sz:
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
)r�	traceback�io�StringIO�	print_exc�getvaluer)rr0�arg�expectr2rYrZ�fr$r$r%�test_split_header_words�s2






z#HeaderTests.test_split_header_wordsc
Cs`ddddddddd	d
ddd
g
}x<|D]4\}}t|g�}t|�}|�||d||||f�q$WdS)N)rIrI)zfoo=barzfoo=bar)z	   foo   rI)zfoo=zfoo="")zfoo=bar bar=bazzfoo=bar; bar=baz)zfoo=bar;bar=bazzfoo=bar; bar=baz)zfoo bar bazz
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)rr0r^r_�input�resr$r$r%�test_roundtrip
s$
zHeaderTests.test_roundtripN)	rErFrGrOrQrRrTrardr$r$r$r%rH�s	
"rHc@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�urlrgr$r$r%�__init__-szFakeResponse.__init__cCs|jS)N)ri)rr$r$r%�info4�zFakeResponse.info)rErFrGrlrmr$r$r$r%re,srecGst|||d�S)NzSet-Cookie2)�	_interact)�	cookiejarrk�set_cookie_hdrsr$r$r%�
interact_29656srrcGst|||d�S)Nz
Set-Cookie)ro)rprkrqr$r$r%�interact_netscape9srsc	Cs`tj�|�}|�|�|�dd�}g}x|D]}|�d||f�q,Wt||�}|�||�|S)zDPerform a single request / response cycle, returning Cookie: header.r	r6z%s: %s)�urllib�request�Request�add_cookie_header�
get_header�appendre�extract_cookies)	rprkrqZhdr_name�reqZ
cookie_hdrrjrNrcr$r$r%ro<s


roc@seZdZdd�Zdd�ZdS)�FileCookieJarTestscCs�tjj}t�}t|dd�|�|jdddjd�z&|j|dd�t�}|j	|dd�Wdyt
�|�Wntk
r�YnXX|�|jdddjd�dS)Nzhttp://www.acme.com/Zboozwww.acme.com�/T)�ignore_discard)
r9�support�TESTFNrrsr�_cookies�value�save�load�os�unlink�OSError)r�filenamerWr$r$r%�test_lwp_valueless_cookieJsz,FileCookieJarTests.test_lwp_valueless_cookiecCs�tjj}xbttfD]V}|�}y|jdd�Wn0tk
r\}z|�|jt	�Wdd}~XYqX|�
d�qWzLt|d��8}|�d�x&ttfD]}|�}|�
t	|j|�q�WWdQRXWdyt�|�Wntk
r�YnXXdS)NzAfor this test to work, a file with this filename should not exist)r�z%expected OSError for invalid filename�wzoops
)r9rr�rr
r�r�ZassertIsNot�	__class__rZfail�open�writeZassertRaisesr�r�)rr�Zcookiejar_classrW�excr`r$r$r%�test_bad_magicYs$ 
"z!FileCookieJarTests.test_bad_magicN)rErFrGr�r�r$r$r$r%r|Isr|c@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�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"dAS)B�CookieTestscCsPt�}xDdD]<\}}}tj�|�}|�||�}|r>|�|�q|�|�qWdS)N))zhttp://foo.bar.com/zblah.comF)zhttp://foo.bar.com/zrhubarb.blah.comF)zhttp://foo.bar.com/zrhubarb.foo.bar.comF)zhttp://foo.bar.com/z.foo.bar.comT)zhttp://foo.bar.com/zfoo.bar.comT)zhttp://foo.bar.com/z.bar.comT)zhttp://foo.bar.com/zbar.comT)zhttp://foo.bar.com/�comT)zhttp://foo.com/zrhubarb.foo.comF)zhttp://foo.com/z.foo.comT)zhttp://foo.com/zfoo.comT)zhttp://foo.com/r�T)zhttp://foo/zrhubarb.fooF)zhttp://foo/z.fooT)zhttp://foo/rIT)zhttp://foo/z	foo.localT)zhttp://foo/z.localT)zhttp://barfoo.comz.foo.comF)zhttp://barfoo.comzfoo.comF)rrtrurvZdomain_return_ok�
assertTrue�assertFalse)r�polrk�domain�okru�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
�zt|�}|j
d	d	d
�Wdt�|j�X|�t|�t�dd	dd|��|�t|d
�d�dS)Nzhttp://www.acme.com/�eggsz"spam"; path=/foo/zwww.acme.comr}z/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)Zignore_expiresr~zpath_specified=%sFzhttp://www.acme.com/foo/z"spam"; eggs)r9rr�r
rsr�r8r�r�namer�reprr�Zrevertr�r�r��re�sub)rr�rW�cookieZold_strr$r$r%�test_missing_value�s0
zCookieTests.test_missing_valuec	Cs�x�dD]�\}}}t||d�}t|�}t|dd�y|jddd}Wntk
rd|�|�YqX|�|j|�t|dd�|r|jddd	}|�|jd
�qWdS)N))NFr)NTr,)FFN)FTr,)TFr)TTr)�rfc2109_as_netscape�rfc2965zhttp://www.example.com/zni=ni; Version=1zwww.example.comr}�nizfoo=bar; Version=1rIr,)	rr
rsr��KeyErrorr8rrLrr)rr�r�rL�policyrWr�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
�|jdd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)Nzhttp://www.acme.com/z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080zhttp://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z	fortytwo=z=unladenswallowZholyhandgrenadez	.acme.comr}rXZblArghZblarghzwww.acme.comr�z80,8080ZninirIZfortytwor6)r
rsr�rr�r�Zdomain_specifiedZportrr�Zport_specifiedZhas_nonstandard_attrr8rKZassertIsNotNoner�)rrWr�rIrXr$r$r%�test_ns_parsersDzCookieTests.test_ns_parsercCsHt�}t|dd�t|dd�|jdd}|�d|�|�d|�dS)Nzhttp://www.acme.com/zexpires=eggszversion=eggs; spam=eggszwww.acme.comr}rKrL)r
rsr��assertIn)rrW�cookiesr$r$r%�test_ns_parser_special_names2sz(CookieTests.test_ns_parser_special_namescCs�t�}tt��d�}tjdd��j}d|��g}tj�d�}t|d�}|�	||�}|�
t|�d�|�
t|dj�|�|�
t|�d�WdQRXt
|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)NiT)�recordz%Set-Cookie: FOO=BAR; path=/; expires=zhttp://www.coyote.com/r,rzhttp://www.acme.com/zspam="bar"; expires=%szfoo="eggs"; expires=%sz
spam="bar"rIzeggs="bar"; expires=%szbar="bar"; expires=%srz!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/zwhum="fizz"rr�r�Fzwww.python.orgr}z1444312383.018307i?uV)r
rr)�warnings�catch_warningsrtrurvre�make_cookiesr�lenrKrsr��assertNotIn�clear_session_cookiesr	)rrW�futureZwarnsrjr{rcr�Znow�hr�r$r$r%�test_expires=sV


zCookieTests.test_expirescCs6tdd�}t|�}t|dd�|�d|jd�t|�}t|dd�|�d|jd�t|�}t|d	d�|�d
|jd�t|�}t|dd�|�d|jd�t�}t|dd
�|�d|jd�t�}t|dd�|�d|jd�t�}t|d	d�|�d|jd�t�}t|dd�|�d|jd�dS)NT)r�zhttp://www.acme.com/zspam="bar"; Version="1"r}zwww.acme.comzhttp://www.acme.com/blahzeggs="bar"; Version="1"z http://www.acme.com/blah/rhubarbz/blah/z!http://www.acme.com/blah/rhubarb/z/blah/rhubarb/z
spam="bar"z
eggs="bar"z/blahz
/blah/rhubarb)rr
rrr�r�rs)rr�rWr$r$r%�test_default_pathws6
zCookieTests.test_default_pathcCsBt�}d}d}t|||�|�d|jd�|�t||�|�dS)Nzhttp://example.com/?spam/eggsz
eggs="bar"r}zexample.com)r
rsr�r�r)r�cjZurir�r$r$r%�test_default_path_with_query�sz(CookieTests.test_default_path_with_querycCsBddddddddd	d
ddg}x |D]\}}|�t|�|�q"WdS)
N)z/foo%2f/barz/foo%2F/bar)z/foo%2F/barz/foo%2F/bar)z
/foo%%/barz
/foo%%/bar)z/fo%19o/barz/fo%19o/bar)z/fo%7do/barz/fo%7Do/bar)z	/foo/bar&z	/foo/bar&)z	/foo//barz	/foo//bar)z	~/foo/barz	~/foo/bar)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)rZcasesr^r2r$r$r%�test_escape_path�szCookieTests.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})rtrurvrr)rr{r$r$r%�test_request_path�s
zCookieTests.test_request_pathcCs�t�}tdd�}t|�}d}t||d�|jddd}x�dD]|\}}|�|��}tj�|�}	t||�}
|r�|�d	|
d
|���|�|�	||	��q@|�
d	|
d|���|�|�	||	��q@WdS)NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foozbar.comz/foorX))z/fooT)z/foo/T)z/foo/barT)r}F)z/foobad/fooFz	spam=eggszcookie not set for zcookie set for )rr
rsr�rtrurvr�r�Zset_ok_pathr�r�)rr�Zstrict_ns_path_polrWZbase_urlr��pathr�rkr{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)rjZ1234zhttp://www.acme.com/)rtrurvrrr)rr{r$r$r%�test_request_port�szCookieTests.test_request_portcCsptjjdddid�}|�t|�d�tjjdddid�}|�t|�d�tjjd	dd
id�}|�t|�d�dS)Nzhttp://1.1.1.1/r�zwww.acme.com:80)rjz1.1.1.1zhttp://www.acme.com/zirrelevant.comzwww.acme.comz&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)rtrurvrr)rr{r$r$r%�test_request_host�szCookieTests.test_request_hostcCst|�td��|�td��|�td��|�td��|�td��|�td��|�td��|�td��dS)	Nzfoo.bar.comz1foo2.3bar4.5comz192.168.1.1r6�.z.foo.bar.comz..foozfoo.)r�rr�)rr$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)
Nzwww.acme.comz	.acme.comzacme.comz
acme.localz.localz.comr�r6z192.168.0.1)rr)rr$r$r%�
test_reachszCookieTests.test_reachcCs�|�tdd��|�tdd��|�tdd��|�tdd��|�tdd��|�tdd��|�tdd��|�td	d
��|�tdd��|�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)Nz192.168.1.1z.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comz
example.localz.localz	blah.blahr6z.rhubarb.rhubarbzacme.comz	.acme.comzrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comz.comr��mz.mr�)r�rr�r)rr$r$r%�test_domain_matchs>zCookieTests.test_domain_matchcCs&t�}t|dd�|�t|�d�dS)Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r)r
rrrr�)rrWr$r$r%�test_wrong_domain:szCookieTests.test_wrong_domaincCsntdd�}t|d�}t|dd�t|dd�|�t|�d�x,dD]$}t|d	|d
�|�t|�d�qBWdS)NT)Z
strict_domain)r�zhttp://example.co.uk/zno=problemoz!okey=dokey; Domain=.example.co.ukr)z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)rr
rsrr�)rZcpr�Z
pseudo_tldr$r$r%�test_strict_domainDs



zCookieTests.test_strict_domaincCs8t�}t|dd�|�t|�d�|�|jdddjd�|�t|d�d�|�t|d�d�ttjd	�}|�|�|�t|d�d
�t|dd�t|d
d�|�t|�d�|�|jdddjd�|�|jdddjd�|�t|d
�d�t|dd�|�t|�d�t|dd�|�t|�d�dS)Nzhttp://foo.net/zns=barr,zfoo.netr}�nsrJzhttp://www.foo.net/)Zstrict_ns_domainr6zhttp://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netrz.foo.netz/fooZspam1r�z/foo/barZspam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uk�)	r
rsrr�r�r�rZDomainStrictNonDomain�
set_policy)rrWr�r$r$r%�test_two_component_domain_nsRs4

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)NT)r�zhttp://foo.net/zfoo=bar; Version="1"r,zfoo.netr}rIrJz$Version=1; foo=barzhttp://www.foo.net/r6zhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"z.foo.netz/foo/rXr�rzhttp://foo.net/foo/z($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)rr
rrrr�r�r�)rr�rWr$r$r%�!test_two_component_domain_rfc2965�s8
z-CookieTests.test_two_component_domain_rfc2965cCsttdgdgd�d�}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)
Nzacme.comzwww.acme.com)�blocked_domainsZallowed_domains)r�zhttp://acme.com/z*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/rzhttp://www.acme.com/r,zhttp://www.coyote.com/rr	)r
rrtrurvrerzrr�r��
set_cookierwr��
has_header)rrWr{rjrcr�r$r$r%�test_domain_allow�s.




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)NTz	.acme.com)r�r�)r�z*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/zhttp://www.acme.com/rzacme.comr,zhttp://www.roadrunner.net/r	�Cookie2rzhttp://acme.com/zhttp://badacme.com/)rr
rtrurvrerzrr�Zset_blocked_domains�clearrwr�r�r�r�r�Z	return_ok)rr�rWrjr{rc�pr�r$r$r%�test_domain_block�sh











zCookieTests.test_domain_blockcCs�x�dD]�}x�dD]�}t�}|r2tdd�}t}d}ntdd�}t}d}|�|�d}|||d	||f�|||d
||f�|�|jddd
jd�|�|jdddjd�qWqWdS)N)TF)r;r6F)r�r6Tz; Version=1zhttp://www.acme.com/zfoo1=bar%s%szfoo2=bar%s; secure%szwww.acme.comr}Zfoo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure)	r
rrsrrr�r�r�Zsecurer�)rr�Z
whitespacerWr��intZvsrkr$r$r%�test_secures(




zCookieTests.test_securecCs6ttdd�d�}t|dd�t|d�}|�|d�dS)NT)r�)r�zhttp://www.acme.com/zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r
rrrr)rrWr�r$r$r%�test_quote_cookie_value's
z#CookieTests.test_quote_cookie_valuecCsXd}ttdd��}t||d�tj�|�}|�t|�d�|�|�|�	|�
d��dS)Nzhttp://www.acme.comT)r�zfoo=bar; Version=1r,r	)r
rrrrtrurvrr�rwr�r�)rrkrWr{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)NT)r�zhttp://foo.bar.com/zspam=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")rr
rrr�r�)rr�rWrkr�r$r$r%�test_domain_mirror7s"



zCookieTests.test_domain_mirrorcCsntdd�}t|�}d}t||d�t||�}|�d|d�t|�}d}t||d�t||�}|�d|d	�dS)
NT)r�zhttp://foo.bar.com/zspam=eggs; Version=1ZPathz&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returned)rr
rrr�r�)rr�rWrkr�r$r$r%�test_path_mirrorNs


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)NT)r�zhttp://foo.bar.com/zspam=eggs; Version=1ZPortz&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)rr
rrr�rr�)rr�rWrkr�r$r$r%�test_port_mirror]s0




zCookieTests.test_port_mirrorcCs:ttdd��}d}t||d�t||�}|�d|d�dS)NT)r�zhttp://foo.bar.com/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
rrrr�)rrWrkr�r$r$r%�test_no_return_comment|s
z"CookieTests.test_no_return_commentcCsttdd��}t|dd�t|dd�t|dd�t|dd�t|d	d
�dddddg}d
ddddg}dddddg}dddddg}x~td�D]r}d}xh|D]`}|�|t�|�|j||�|�|j	||�|�|j
||�|�|j||�|d}q�Wq�WdS)NT)r�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=1zhttp://www.sol.nozsbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) "r,rZbangrIrXz.sol.noz
blah.spam.orgzwww.acme.comr}z/blahz/blah/r�)r
rrrrs�rangeZassertIsInstancer	rrLr�r�r�)r�csZversions�namesZdomains�paths�irWr$r$r%�test_Cookie_iterator�s.
z CookieTests.test_Cookie_iteratorcCs�|�tdg�ddddgg�|�tdg�dddgg�|�tdg�d	dgg�|�td
g�dddgg�|�tdg�ddgg�|�td
g�g�dS)Nzfoo=bar; path=/; domain)rIrJ)r�r})r�N)rLrMz)foo=bar; expires=Foo Bar 12 33:22:11 2000)rKNrI)rINzfoo=bar; expireszfoo=bar; version)rLNr6)rr)rr$r$r%rO�s"z!CookieTests.test_parse_ns_headerscCs�dd�}tt��d�}x@dgdgdgdgdgd	|ggD]}||�}|�t|�d
�q:Wdg}||�}|jdd
d}|�|j�dS)NcSs,t�}tj�d�}t|d�}|�||�|S)Nzhttp://www.example.com/)r
rtrurvrerz)rjrWr{r�r$r$r%�cookiejar_from_cookie_headers�s

zICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersiz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 2000zwww.example.comr}rW)rr)rr�r�r8rK)rr�r�rjrWr�r$r$r%�test_bad_cookie_header�sz"CookieTests.test_bad_cookie_headerN)#rErFrGr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rOr�r$r$r$r%r�ss@/! 0:(


$
0,C

 r�c@sleZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�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)Nrr,T)r�zhttp://www.acme.com:80/r�zwww.acme.com:80)rjzVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTzhttp://www.acme.com/r	zCUSTOMER=WILE_E_COYOTEr�z$Version="1"z4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/barz PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foozhttp://www.acme.comzSHIPPING=FEDEXzhttp://www.acme.com/foo/zSHIPPING=FEDEX;)r)�	localtimer
rrtrurvryrerzrwrrxr�r�r��
startswith)r�
year_plus_onerjrWr{rcr�r$r$r%�test_netscape_example_1�sJ%











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)Nzhttp://www.acme.com/z4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/r	z PART_NUMBER=ROCKET_LAUNCHER_0001z6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://www.acme.com/ammozBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001)r
rtrurvryrerzrwrrxr)rrWrjr{rcr$r$r%�test_netscape_example_2As$




z&LWPCookieTests.test_netscape_example_2cCs�ttdd��}t|dd�}|�|�t|dd�}|�|d�t|dd	�}|�|d
�|�|d�|�|d�t|d
�}|�|d�|�d|�dS)NT)r�zhttp://www.acme.com/acme/loginz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"z!http://www.acme.com/acme/pickitemz=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
rrrr�rr�)rrWr�r$r$r%�test_ietf_example_1ts"

z"LWPCookieTests.test_ietf_example_1cCsXttdd��}t|ddd�t|d�}|�|d�t|d�}|�d	|�|�d
|�dS)NT)r�z&http://www.acme.com/acme/ammo/specificz=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z@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
rrrrr�r�)rrWr�r$r$r%�test_ietf_example_2�s


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}z2|j	|dd�t
|�}t|d�}|j|dd�Wdyt�
|�Wntk
�r�YnXX|�|t
|��dS)NT)r�)r�zmax-age=3600zhttp://www.acme.comz!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r,zhttp://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=1zhttp://www.sol.noz6blah=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=1zsbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) "r�z9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;�zhttp://www.sol.no/<oo/z"foo8=bar; version=1; path="/%3coo"r()r~)rrrrr�rr�r9rr�r�r�r�r�r�r�)rr�rWZmax_ager�r��oldr$r$r%�test_rejections`


	
zLWPCookieTests.test_rejectioncCsnttdd��}t|dd�t|dd�}t�dtj�}|�d|�|�||�t|d	�}|�|�t|d
�}dS)NT)r�z7http://www.acme.com/foo%2f%25/%3c%3c%0Anew%C3%A5/%C3%A5zfoo  =   bar; version    =   1u/http://www.acme.com/foo%2f%25/<<%0anewå/æøåz bar=baz; path="/foo/"; version=1z^\$version=\"?1\"?zfoo=baru-http://www.acme.com/foo/%25/<<%0anewå/æøåuhttp://www.acme.com/ü)	r
rrrr��compile�Ir�rr�)rrWr�Z
version_rer$r$r%�test_url_encodingts
z LWPCookieTests.test_url_encodingcs�t��dd}tjj�t�tdd�d�}t|dd�t|dd�t|dd	�d
|f}t|dd|�t|dd
|�t|dd|��fdd�}||d�}|�	t
|�d�|�dt|��||d�}|�	t
|�d�|�dt|��dS)Nrr,T)r�)r�zhttp://www.acme.com/z foo1=bar; max-age=100; Version=1z4foo2=bar; port="80"; max-age=100; Discard; Version=1zfoo3=bar; secure; Version=1zexpires=09-Nov-%d 23:12:40 GMTzhttp://www.foo.com/zfooa=bar; %szfoob=bar; Domain=.foo.com; %sz fooc=bar; Domain=www.foo.com; %scsXz,|j|d�t�tdd��}|j|d�Wdyt���Wntk
rPYnXX|S)N)r~T)r�)r�r
rr�r�r�r�)r�r~�new_c)r�r$r%�save_and_restore�sz5LWPCookieTests.test_mozilla.<locals>.save_and_restorer(zname='foo1', value='bar'Fr�)
r)r�r9rr�r
rrrrsrr�r�r�)rr�rWrKr�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
rtrurvryrerzrwr�rx)rrWrjr{rcr$r$r%�test_netscape_misc�s




z!LWPCookieTests.test_netscape_misccCshttdd��}t|dd�t|dd�}|�d|�t|dd�t|d�}|�d|�|�t|�d	�dS)
NT)r�zhttp://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1zfoo1=barzfoo3=bar; Version=1zfoo2=barr)r
rrrr�rr�)rrWr�r$r$r%�test_intranet_domains_2965�s
z)LWPCookieTests.test_intranet_domains_2965cCslttdd��}t|dd�t|dd�}|�t|�d�|�d|�t|d�}|�d|�|�t|�d�dS)NF)r�zhttp://example/zfoo1=barzfoo2=bar; domain=.localrzfoo2=bar)r
rrsrr�r�)rrWr�r$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)
NT)r�zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r	zJSESSIONID=ABCDERANDOM123r�z$Version="1"zhttp://www.ants.com:8080)r
rrtrurvryrerzrwrrx)rrWrjr{rcr$r$r%�test_empty_path�s 



zLWPCookieTests.test_empty_pathc	Cst��dd}tj�d�}g}|�d�|�d|�|�d|�|�d�|�d�t|d�}t�}|�||�ddddd	�}x&|D]}d
|j	}||d||<q�W|�
�x&|D]}d|j	}||d||<q�W|�|d|d
�|�|dd�|�|dd�dS)Nrr,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_afterr�r�r�r�)
r)r�rtrurvryrer
rzr�r�rZassertNotEqual)	rr�r{rjrcrWZcounterr��keyr$r$r%�test_session_cookiess6







z#LWPCookieTests.test_session_cookiesN)rErFrGr�r�r�r�r�r�r�r�r�r�r�r�r$r$r$r%r��s[3p5[)r�cCstj�ttttt�dS)N)r9rZrun_unittestrrHr�r|r�)�verboser$r$r%�	test_main.sr��__main__T)r�)N).�__doc__r�r�Ztest.supportr9r)ZunittestZurllib.requestrtr�Zhttp.cookiejarrrrrrrrr	r
rrr
rrrrrrrrrrrZTestCaserrHrerrrsror|r�r�r�rEr$r$r$r%�<module>s>d3g

*vO