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.10/test/__pycache__/test_http_cookiejar.cpython-310.pyc
o

�i�9�@sPdZddlZddlZddlZddlmZddlmZddlZddlZddl	Z
ddlZddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#Gdd�dej$�Z%Gdd	�d	ej$�Z&Gd
d�d�Z'dd
�Z(dd�Z)dd�Z*Gdd�dej$�Z+Gdd�dej$�Z,Gdd�dej$�Z-e.dkr�e�/�dSdS)zTests 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\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�
DateTimeTestscC�d}d}|�t|�d�|�t||�d�|�t|d|�d�|�t|d|�d�t�}td	�}||fD]
}|�|d
d||f�q9dS)N�x+�<�Qz2002-04-19 14:36:40Zz2002-04-20 14:36:40Z�z2002-04-21 14:36:40Z�z2002-04-22 14:36:40Z� �z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: %s %s)�assertEqualr�assertRegex��self�baseZday�azZbz�text�r)�5/usr/local/lib/python3.10/test/test_http_cookiejar.py�test_time2isozs
��zDateTimeTests.test_time2isozcCr)NrrzFri, 19-Apr-2002 14:36:40 GMTzSat, 20-Apr-2002 14:36:40 GMTrzSun, 21-Apr-2002 14:36:40 GMTr zMon, 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$zbad time2netscape format: %s %s)r"rr#r$r)r)r*�test_time2netscape%s*���
��z DateTimeTests.test_time2netscapecCs<dd�}|�|d�d�|�|d�d�|�|d�d�dS)	NcS�t�t|��dd�S�N�)�time�gmtimer�r(r)r)r*�
parse_date<�z0DateTimeTests.test_http2time.<locals>.parse_datez01 Jan 2001)i��r5rr�z	03-Feb-20)i�rr rrr6z	03-Feb-98)i�rr rrr6�r"�r%r3r)r)r*�test_http2time;szDateTimeTests.test_http2timecCs�gd�}d}t|�}d}|�||d|||f�|D]%}|�t|�||�|�t|���||���|�t|���||���qdS)N)zThu, 03 Feb 1994 00:00:00 GMT� Thursday, 03-Feb-94 00:00:00 GMTz"Thursday, 03-Feb-1994 00:00:00 GMTz03 Feb 1994 00:00:00 GMTz03-Feb-94 00:00:00 GMTz03-Feb-1994 00:00:00 GMTz03-Feb-1994 00:00 GMTz03-Feb-1994 00:00z02-Feb-1994 24:00z	03-Feb-94z03-Feb-1994z03 Feb 1994z  03   Feb   1994  0:00  z  03-Feb-1994  �>P-z1994-02-03 00:00:00Zz%s  =>  '%s' (%s))rr"r�lower�upper)r%�tests�test_t�result�expected�sr)r)r*�test_http2time_formatsGs��z$DateTimeTests.test_http2time_formatscCs*dD]}|�t|�d|t|�f�qdS)N)��GarbagezMandag 16. September 1996z
01-00-1980z
01-13-1980z
00-01-1980z
32-01-1980z01-01-1980 25:00:00z01-01-1980 00:61:00�01-01-1980 00:00:62z08-Oct-3697739z
08-01-3697739z09 Feb 19942632 22:23:32 GMTz Wed, 09 Feb 1994834 22:23:32 GMTz,http2time(%s) is not None
http2time(test) %s)�assertIsNoner�r%�testr)r)r*�test_http2time_garbageks

���z$DateTimeTests.test_http2time_garbagecC�(td�dd��td�dd��dS)Nz01 Jan 1970{}00:00:00 GMT!� i��z01 Jan 1970 00:00:00{}GMT!)r�format�r%r)r)r*�2test_http2time_redos_regression_actually_completes�sz@DateTimeTests.test_http2time_redos_regression_actually_completescCs<dd�}|�|d�d�|�|d�d�|�|d�d�dS)NcSr-r.)r0r1rr2r)r)r*r3�r4z/DateTimeTests.test_iso2time.<locals>.parse_dateZ19940203T141529Z)i�rr ���z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r7r8r)r)r*�
test_iso2time�s
�
�
�zDateTimeTests.test_iso2timecCs`gd�}d}|D]%}|�t|�||�|�t|���||���|�t|���||���qdS)N)
z1994-02-03 00:00:00 -0000z1994-02-03 00:00:00 +0000z1994-02-03 00:00:00z
1994-02-03z1994-02-03T00:00:00Z19940203z1994-02-02 24:00:00Z19940203T000000Zz
  1994-02-03 z  1994-02-03T00:00:00  r;)r"rr<r=)r%r>r?rBr)r)r*�test_iso2time_formats�s�z#DateTimeTests.test_iso2time_formatscCs"dD]}|�t|�d|�qdS)N)rDrEr:z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rFz01-01-1980T00:00:62Z19800101T250000Zziso2time(%r))rGrrHr)r)r*�test_iso2time_garbage�s

��z#DateTimeTests.test_iso2time_garbagecCrK)Nz1994-02-03{}14:15:29 -0100!rLi@Bz1994-02-03 14:15:29{}-0100!)rrMrNr)r)r*�$test_iso2time_performance_regression�sz2DateTimeTests.test_iso2time_performance_regressionN)
�__name__�
__module__�__qualname__r+r,r9rCrJrOrSrTrUrVr)r)r)r*rs$rc@�<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�HeaderTestscCs*gd�g}dD]}|�t|g�|�qdS)N)��foo�bar)�expiresld9W��version�0)z)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"�r"r�r%rA�hdrr)r)r*�test_parse_ns_headers�s
�z!HeaderTests.test_parse_ns_headerscCs*ddgg}dD]}|�t|g�|�qdS)Nr\)ra�1)zfoo=bar; version="1"�foo=bar; Version="1"rcrdr)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)r_z01 Jan 2040 22:23:32 GMTr`rc)r%rerAr)r)r*�#test_parse_ns_headers_special_names�s
z/HeaderTests.test_parse_ns_headers_special_namescCs0tddgg�}|�|d�|�tgg�d�dS)N�r]N�r^�bazzfoo; bar=bazrD)r	r")r%Zjoinedr)r)r*�test_join_header_words�sz"HeaderTests.test_join_header_wordscCsddggfddggfddggfddggfddggfd	dggfd
ddggfdddggfd
dggfdddggfdgd�gfddgdgdggfdddgdgdgdggfg
}|D]4\}}zt|g�}Wnddl}ddl}|��}|�d|�d|��}Y|�||d|||f�qTdS)Nr]rk�foo=barr\�	   foo   z
   foo=   )r]rDz   foo=z   foo=   ; z   foo=   ; bar= baz rl�foo=bar bar=bazzfoo= bar=baz)r]zbar=baz�foo=bar;bar=baz�foo bar baz)rk)r^N)rmNza, b, c)�aN)�bN)�cNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )�spamrD)r]z,;")r^rDrz (error -- traceback follows)

%sz:
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
)r
�	traceback�io�StringIO�	print_exc�getvaluer")r%r>�arg�expectr@rxry�fr)r)r*�test_split_header_words�s<






���
��z#HeaderTests.test_split_header_wordsc
CsFgd�}|D]\}}t|g�}t|�}|�||d||||f�qdS)N)
)r]r])roro)rpr])zfoo=zfoo="")rq�foo=bar; bar=baz)rrr�)rsz
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'
)r
r	r")r%r>r}r~�input�resr)r)r*�test_roundtrips


��zHeaderTests.test_roundtripN)	rWrXrYrfrirjrnr�r�r)r)r)r*r[�s	
"r[c@s"eZdZgdfdd�Zdd�ZdS)�FakeResponseNcCs$ddl}|�d�|��|_||_dS)zD
        headers: list of RFC822-style 'Key: value' strings
        rN�
)�emailZmessage_from_string�join�_headersZ_url)r%�headers�urlr�r)r)r*�__init__/s
zFakeResponse.__init__cCs|jS�N)r�rNr)r)r*�info6szFakeResponse.info)rWrXrYr�r�r)r)r)r*r�.sr�cG�t|||d�S)NzSet-Cookie2��	_interact��	cookiejarr��set_cookie_hdrsr)r)r*�
interact_29658�r�cGr�)Nz
Set-Cookier�r�r)r)r*�interact_netscape;r�r�c	Cs\tj�|�}|�|�|�dd�}g}|D]}|�d||f�qt||�}|�||�|S)zDPerform a single request / response cycle, returning Cookie: header.rrDz%s: %s)�urllib�request�Request�add_cookie_header�
get_header�appendr��extract_cookies)	r�r�r�Zhdr_name�reqZ
cookie_hdrr�rer�r)r)r*r�>s

r�c@rZ)�FileCookieJarTestscCs tj}t|�}|�|j|�dSr�)r�TESTFNrr"�filename�r%r�rvr)r)r*�test_constructor_with_strLsz,FileCookieJarTests.test_constructor_with_strcCs,t�tj�}t|�}|�|jt�|��dSr�)	�pathlib�Pathrr�rr"r��os�fspathr�r)r)r*�test_constructor_with_path_likeQsz2FileCookieJarTests.test_constructor_with_path_likecCstd�}|�|j�dSr�)rrGr��r%rvr)r)r*�test_constructor_with_noneVsz-FileCookieJarTests.test_constructor_with_nonec
Cs�Gdd�d�}tt|fD]5}|j|d��%|�t��|�}t|d�}Wd�n1s-wYWd�n1s<wYqdS)Nc@seZdZdS)z?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)rWrXrYr)r)r)r*�A[sr��r�)�int�floatZsubTest�assertRaises�	TypeErrorr)r%r�Ztype_�instancervr)r)r*�!test_constructor_with_other_typesZs�����z4FileCookieJarTests.test_constructor_with_other_typescCs�tj}t�}t|dd�|�|jdddjd�z#|j|dd�t�}|j|dd�Wzt	�
|�Wnty=Ynwzt	�
|�WwtyNYww|�|jdddjd�dS)N�http://www.acme.com/Zboo�www.acme.com�/T��ignore_discard)rr�rr�r"�_cookies�value�save�loadr��unlink�OSErrorr�r)r)r*�test_lwp_valueless_cookieds� z,FileCookieJarTests.test_lwp_valueless_cookiecCstj}ttfD],}|�}z|jdd�Wnty-}z
|�|jt�WYd}~qd}~ww|�	d�qz@t
|d��}|�d�ttfD]
}|�}|�t|j|�qDWd�n1s\wYWzt
�|�WdStytYdSwzt
�|�Wwty�Yww)NzAfor this test to work, a file with this filename should not existr�z%expected OSError for invalid filename�wzoops
)rr�rrr�r�ZassertIsNot�	__class__rZfail�open�writer�r�r�)r%r�Zcookiejar_classrv�excrr)r)r*�test_bad_magicss.��
����z!FileCookieJarTests.test_bad_magicN)	rWrXrYr�r�r�r�r�r�r)r)r)r*r�Ks
r�c@seZdZdd�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"dAdB�Z#dCdD�Z$dES)F�CookieTestscCsLt�}dD]\}}}tj�|�}|�||�}|r|�|�q|�|�qdS)N))�http://foo.bar.com/zblah.comF)r�zrhubarb.blah.comF)r�zrhubarb.foo.bar.comF)r��.foo.bar.comT)r��foo.bar.comT)r�z.bar.comT)r��bar.comT)r��comT)�http://foo.com/zrhubarb.foo.comF)r��.foo.comT)r��foo.comT)r�r�T)�http://foo/zrhubarb.fooF)r�z.fooT)r�r]T)r�z	foo.localT)r��.localT)�http://barfoo.comr�F)r�r�F)r
r�r�r�Zdomain_return_ok�
assertTrue�assertFalse)r%�polr��domain�okr��rr)r)r*�test_domain_return_ok�s�z!CookieTests.test_domain_return_okc	Cstj}t|�}t|dd�t|dd�|jddd}|�|j�|�|jd�|jddd}|�|j�|�|jd�|�t	|�d�t
|�}|jd	d	d
�zt|�}|jd	d	d
�Wt
�|j�nt
�|j�w|�t
|�t�dd	dd|��|�t|d
�d�dS)Nr��eggsz"spam"; path=/foo/r�r��/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)Zignore_expiresr�zpath_specified=%sF�http://www.acme.com/foo/z"spam"; eggs)rr�rr�r�rGr�r"�namer�reprr�Zrevertr�r�r��re�sub)r%r�rv�cookieZold_strr)r)r*�test_missing_value�s8
����zCookieTests.test_missing_valuec	Cs�dD]N\}}}t||d�}t|�}t|dd�z|jddd}Wnty0|�|�Yqw|�|j|�t|dd�|rP|jddd	}|�|jd
�qdS)N))NFr)NTr5)FFN)FTr5)TFr)TTr)�rfc2109_as_netscape�rfc2965�http://www.example.com/zni=ni; Version=1�www.example.comr��ni�foo=bar; Version=1r]r5)	r
rr�r��KeyErrorrGr"rar�)r%r�r�ra�policyrvr�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)Nr�z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080�http://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z	fortytwo=z=unladenswallowZholyhandgrenade�	.acme.comr�rwZblArghZblarghr�r�z80,8080Zninir]ZfortytworD)rr�r�r"r�r�Zdomain_specified�portrr�Zport_specifiedZhas_nonstandard_attrrGr_ZassertIsNotNoner�)r%rvr�r]rwr)r)r*�test_ns_parsersF�zCookieTests.test_ns_parsercCsHt�}t|dd�t|dd�|jdd}|�d|�|�d|�dS)Nr�zexpires=eggszversion=eggs; spam=eggsr�r�r_ra)rr�r��assertIn)r%rv�cookiesr)r)r*�test_ns_parser_special_namesLsz(CookieTests.test_ns_parser_special_namesc
Cs�t�}tt��d�}t�|��2d|��g}tj�d�}t|d�}|�	||�}|�
t|�d�|�
t|dj�|�Wd�n1sEwYt
|dd|�|�
t|�d�tt��d�}t
|dd|�t
|d�}|�
t|�d�|�d	|�|�d
|�t
|dd|�t
|dd|�|�
t|�d
�t
|dd|�t
|dd|�t
|d�}|�
t|�d�t
|dd�|�
t|�d�|��|�
t|�d�|�d	|�tdddddddddddddddi�}	|�
|	jd�dS)N�z%Set-Cookie: FOO=BAR; path=/; expires=�http://www.coyote.com/r5rr�zspam="bar"; expires=%szfoo="eggs"; expires=%s�
spam="bar"r]zeggs="bar"; expires=%szbar="bar"; expires=%sr z!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/zwhum="fizz"rr�r�Fzwww.python.orgTr�z1444312383.018307i?uV)rrr0rZcheck_no_warningsr�r�r�r��make_cookiesr"�lenr_r�r��assertNotIn�clear_session_cookiesr)
r%rv�futurer�r�r�r�Znow�hr�r)r)r*�test_expiresWsd
���
����
�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�r�zspam="bar"; Version="1"r�r�zhttp://www.acme.com/blahzeggs="bar"; Version="1"z http://www.acme.com/blah/rhubarb�/blah/z!http://www.acme.com/blah/rhubarb/z/blah/rhubarb/r��
eggs="bar"�/blahz
/blah/rhubarb)r
rr�r�r�r��r%r�rvr)r)r*�test_default_path�s:
��zCookieTests.test_default_pathcCsBt�}d}d}t|||�|�d|jd�|�t||�|�dS)Nzhttp://example.com/?spam/eggsr�r�zexample.com)rr�r�r�r")r%�cjZurir�r)r)r*�test_default_path_with_query�sz(CookieTests.test_default_path_with_querycCs*gd�}|D]\}}|�t|�|�qdS)N))z/foo%2f/bar�/foo%2F/bar)rr)�
/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�zCookieTests.test_escape_pathcCsXtj�d�}|�t|�d�tj�d�}|�t|�d�tj�d�}|�t|�d�dS)NzThttp://www.example.com/rheum/rhaponticum;foo=bar;sing=song?apples=pears&spam=eggs#niz$/rheum/rhaponticum;foo=bar;sing=songzBhttp://www.example.com/rheum/rhaponticum?apples=pears&spam=eggs#niz/rheum/rhaponticumzhttp://www.example.comr�)r�r�r�r"r�r%r�r)r)r*�test_request_path�s�
��zCookieTests.test_request_pathcCs�t�}tdd�}t|�}d}t||d�|jddd}dD]>\}}|�|��}tj�|�}	t||�}
|rJ|�d	|
d
|���|�|�	||	��q|�
d	|
d|���|�|�	||	��qdS)NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foor��/foorw))rT)r�T)�/foo/barT)r�F)z/foobad/fooFz	spam=eggszcookie not set for zcookie set for )r
rr�r�r�r�r�r�r�Zset_ok_pathr�r�)r%r�Zstrict_ns_path_polrvZbase_urlr��pathr�r�r�r�r)r)r*�test_path_prefix_match�s 

�z"CookieTests.test_path_prefix_matchcCsLtjjdddid�}|�t|�d�tjjdddid�}|�t|�t�dS)Nzhttp://www.acme.com:1234/�Hostzwww.acme.com:4321�r�Z1234r�)r�r�r�r"rrrr)r)r*�test_request_ports��zCookieTests.test_request_portcCsptjjdddid�}|�t|�d�tjjdddid�}|�t|�d�tjjd	dd
id�}|�t|�d�dS)Nzhttp://1.1.1.1/r�www.acme.com:80rz1.1.1.1r�zirrelevant.comr�z&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)r�r�r�r"rrr)r)r*�test_request_hosts���zCookieTests.test_request_hostcCst|�td��|�td��|�td��|�td��|�td��|�td��|�td��|�td��dS)	Nr�z1foo2.3bar4.5com�192.168.1.1rD�.r�z..foozfoo.)r�rr�rNr)r)r*�test_is_HDNszCookieTests.test_is_HDNcCs�|�td�d�|�td�d�|�td�d�|�td�d�|�td�d�|�td�d�|�td�d�|�td	�d	�dS)
Nr�r��acme.comz
acme.localr��.comrrDz192.168.0.1)r"rrNr)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)Nrz.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comz
example.localr�z	blah.blahrDz.rhubarb.rhubarbrr�zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comrr��mz.mr)r�rr�rrNr)r)r*�test_domain_match/s>zCookieTests.test_domain_matchcCs&t�}t|dd�|�t|�d�dS)Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r)rr�r"r�r�r)r)r*�test_wrong_domainSs
�zCookieTests.test_wrong_domaincCsjtdd�}t|d�}t|dd�t|dd�|�t|�d�dD]}t|d	|d
�|�t|�d�q dS)NT)Z
strict_domain�r�zhttp://example.co.uk/zno=problemoz!okey=dokey; Domain=.example.co.ukr)z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)r
rr�r"r�)r%ZcprZ
pseudo_tldr)r)r*�test_strict_domain]s

�
��zCookieTests.test_strict_domaincCs8t�}t|dd�|�t|�d�|�|jdddjd�|�t|d�d�|�t|d�d�ttjd	�}|�|�|�t|d�d
�t|dd�t|d
d�|�t|�d�|�|jdddjd�|�|jdddjd�|�t|d
�d�t|dd�|�t|�d�t|dd�|�t|�d�dS)N�http://foo.net/zns=barr5�foo.netr��nsr^�http://www.foo.net/)Zstrict_ns_domainrD�http://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr �.foo.netrZspam1r�rZspam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uk�)	rr�r"r�r�r�r
ZDomainStrictNonDomain�
set_policy)r%rvr�r)r)r*�test_two_component_domain_nsksB��
�����z(CookieTests.test_two_component_domain_nscCs4tdd�}t|�}t|dd�|�t|�d�|�|jdddjd	�|�t|d�d
�|�t|d�d�t|d
d�|�t|�d�|�t|d
�d
�t|dd�|�|jdddjd�|�t|�d�|�t|d�d
�|�t|d�d�t|dd�|�t|�d�t|dd�|�t|�d�dS)NTr�r"rhr5r#r�r]r^z$Version=1; foo=barr%rDzhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"r'r�rwr�rr&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 )r
rr�r"r�r�r�rr)r)r*�!test_two_component_domain_rfc2965�sJ
���������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)
Nrr�)�blocked_domainsZallowed_domainsr �http://acme.com/�*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/rr�r5r�rr)rr
r�r�r�r�r�r"r�r��
set_cookier�r��
has_header)r%rvr�r�r�r�r)r)r*�test_domain_allow�s0
�




zCookieTests.test_domain_allowcCs�tddgd�}t|d�}dg}tj�d�}t|d�}|�||�|�t|�d�|�	dg�}|�||�|�t|�d	�|�
�tj�d
�}t|d
�}|�||�|�t|�d	�tj�d
�}|�|�|�|�
d��|�|�
d��|�
�|�	dg�|�||�|�t|�d	�tj�d�}t|d�}|�||�}|�|d�|�t|�d
�|�|�|�|�
d��|�
�|�	g�tj�d�}t|d�}|�||�}|�||�|�t|�d	�tj�d�}|�|�|�|�
d��tj�d�}|�|�|�|�|d|��|�|�
d��|�	dg�}tj�d�}|�|�|�|�
d��tj�d�}|�|�|�|�
d��dS)NTr�)r�r,r r.r�rrr5zhttp://www.roadrunner.net/r�Cookie2rr-zhttp://badacme.com/)r
rr�r�r�r�r�r"r�Zset_blocked_domains�clearr�r�r0r�r/r�Z	return_ok)r%r�rvr�r�r��pr�r)r)r*�test_domain_block�sj�











zCookieTests.test_domain_blockcCs�dD]V}dD]Q}t�}|rtdd�}t}d}n	tdd�}t}d}|�|�d}|||d	||f�|||d
||f�|�|jddd
jd�|�|jdddjd�qqdS)N)TF)rLrDFr�rDTz; Version=1r�zfoo1=bar%s%szfoo2=bar%s; secure%sr�r��foo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure)	rr
r�r�r)r�r�Zsecurer�)r%r$�
whitespacervr�r�Zvsr�r)r)r*�test_secure)s0


����zCookieTests.test_securecCs�t�}t|d�}dg}tj�d�}t|d�}|�||�|�t|�d�tj�d�}|�	|�|�
|�d��tj�d�}|�	|�|�|�d��tj�d�}|�	|�|�
|�d��tj�d�}|�	|�|�|�d��dS)	Nr �(Set-Cookie: session=narf; secure; path=/�https://www.acme.com/r5rr�zwss://www.acme.com/zws://www.acme.com/)
r
rr�r�r�r�r�r"r�r�r�r0r��r%r�rvr�r�r�r)r)r*�test_secure_block@s&





zCookieTests.test_secure_blockcCs�tdgd�}t|d�}dg}tj�d�}t|d�}|�||�|�t|�d�tj�d�}|�	|�|�
|�d��tj�d�}|�	|�|�
|�d��tj�d	�}|�	|�|�|�d��tj�d
�}|�	|�|�
|�d��dS)NZfoos)Zsecure_protocolsr r9r:r5rr�zfoos://www.acme.com/zfoo://www.acme.com/)
r
rr�r�r�r�r�r"r�r�r�r0r�r;r)r)r*�test_custom_secure_protocols\s&





z(CookieTests.test_custom_secure_protocolscCs6ttdd�d�}t|dd�t|d�}|�|d�dS)NTr�r r�zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)rr
r�r")r%rvr�r)r)r*�test_quote_cookie_valuews
z#CookieTests.test_quote_cookie_valuecCsXd}ttdd��}t||d�tj�|�}|�t|�d�|�|�|�	|�
d��dS)N�http://www.acme.comTr�r�r5r)rr
r�r�r�r�r"r�r�r�r0)r%r�rvr�r)r)r*�test_missing_final_slash}s
z$CookieTests.test_missing_final_slashcCs�tdd�}t|�}d}t||d�t||�}|�d|d�t|�}d}t||d�t||�}|�d|d	�t|�}d}t||d
�t||�}|�d|d	�dS)NTr�r��spam=eggs; Version=1ZDomainz*absent domain returned with domain presentz%spam=eggs; Version=1; Domain=.bar.comz$Domain=".bar.com"zdomain not returnedz$spam=eggs; Version=1; Domain=bar.comz$Domain="bar.com"�r
rr�r�r��r%r�rvr�r�r)r)r*�test_domain_mirror�s$

�

zCookieTests.test_domain_mirrorcCsntdd�}t|�}d}t||d�t||�}|�d|d�t|�}d}t||d�t||�}|�d|d	�dS)
NTr�r�rAr�z&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedrBrCr)r)r*�test_path_mirror�s


zCookieTests.test_path_mirrorcCs�tdd�}t|�}d}t||d�t||�}|�d|d�t|�}d}t||d�t||�}|�|dd	�t|�}d}t||d
�t||�}|�d|d�t|�}d}t||d
�t||�}|�d|d�dS)NTr�r�rAZPortz&absent port returned with port presentzspam=eggs; Version=1; Portz\$Port([^=]|$)z-port with no value not returned with no valuezspam=eggs; Version=1; Port="80"z
$Port="80"z5port with single value not returned with single valuez$spam=eggs; Version=1; Port="80,8080"z$Port="80,8080"z;port with multiple values not returned with multiple values)r
rr�r�r#r�rCr)r)r*�test_port_mirror�s6


�
�
�zCookieTests.test_port_mirrorcCs:ttdd��}d}t||d�t||�}|�d|d�dS)NTr�r�zfspam=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"�Commentz:Comment or CommentURL cookie-attributes returned to server)rr
r�r�)r%rvr�r�r)r)r*�test_no_return_comment�s
�z"CookieTests.test_no_return_commentcCs�ttdd��}t|dd�t|dd�t|dd�t|dd�t|d	d
�gd�}gd�}gd
�}gd�}td�D]7}d}|D]0}|�|t�|�|j||�|�|j	||�|�|j
||�|�|j||�|d}q?q9dS)NTr�zhttp://blah.spam.org/zefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"zhttp://www.acme.com/blah/zspam=bar; securezfoo=bar; secure; Version=1zfoo=bar; path=/; Version=1�http://www.sol.no�sbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")r5r5r5rr5)Zbangr]r]rwr])z.sol.noz
blah.spam.orgr�r�r�)r�r�r�r�r�r(rr5)rr
r�r��rangeZassertIsInstancerr"rar�r�r)r%�csZversions�namesZdomains�paths�irvr)r)r*�test_Cookie_iterator�s6���
��z CookieTests.test_Cookie_iteratorcCs�|�tdg�gd�g�|�tdg�gd�g�|�tdg�ddgg�|�tdg�gd�g�|�td	g�d
dgg�|�tdg�g�dS)
Nzfoo=bar; path=/; domain)r\)rr�)r�Nr`z)foo=bar; expires=Foo Bar 12 33:22:11 2000)r\)r_Nr`r]rkr`zfoo=bar; expireszfoo=bar; versionr\)raNrDrcrNr)r)r*rf�s*�����z!CookieTests.test_parse_ns_headerscCs�dd�}tt��d�}dgdgdgdgdgd	|gfD]}||�}|�t|�d
�qdg}||�}|jdd
d}|�|j�dS)NcSs,t�}tj�d�}t|d�}|�||�|S)Nr�)rr�r�r�r�r�)r�rvr�r�r)r)r*�cookiejar_from_cookie_headerss

zICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersr�zSet-Cookie: z
Set-Cookie2: z-Set-Cookie2: a=foo; path=/; Version=1; domainzSet-Cookie: b=foo; max-age=oopszSet-Cookie: b=foo; version=spamzSet-Cookie:; Expires=%srz3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000r�r�rv)rr0r"r�r�rGr_)r%rQr�r�rvr�r)r)r*�test_bad_cookie_headers�z"CookieTests.test_bad_cookie_headerN)%rWrXrYr�r�r�r�r�r�rrrr
rrrrrrrr!r*r+r1r5r8r<r=r>r@rDrErFrHrPrfrRr)r)r)r*r��sF/! 09(


$
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)Nrr5Tr�r�rrrzVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr�rzCUSTOMER=WILE_E_COYOTEr2�$Version="1"�4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/bar� PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foor?zSHIPPING=FEDEXr�zSHIPPING=FEDEX;)r0�	localtimerr
r�r�r�r�r�r�r�r"r�r�r�r��
startswith)r%�
year_plus_oner�rvr�r�r�r)r)r*�test_netscape_example_16sP%���











z&LWPCookieTests.test_netscape_example_1cCs�t�}g}tj�d�}|�d�t|d�}|�||�tj�d�}|�|�|�|�	d�d�|�d�t|d�}|�||�tj�d�}|�|�|�
|�	d�d�dS)Nr�rUrrVz6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://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%rvr�r�r�r)r)r*�test_netscape_example_2�s*


��

�z&LWPCookieTests.test_netscape_example_2cCs�ttdd��}t|dd�}|�|�t|dd�}|�|d�t|dd	�}|�|d
�|�|d�|�|d�t|d
�}|�|d�|�d|�dS)NTr�zhttp://www.acme.com/acme/loginz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"z!http://www.acme.com/acme/pickitem�=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z=^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$z!http://www.acme.com/acme/shippingz+Shipping="FedEx"; Version="1"; Path="/acme"z^\$Version="?1"?;z7Part_Number="?Rocket_Launcher_0001"?;\s*\$Path="\/acme"z-Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"z http://www.acme.com/acme/processz%Shipping="?FedEx"?;\s*\$Path="\/acme"Z
WILE_E_COYOTE)rr
r�r�r#r��r%rvr�r)r)r*�test_ietf_example_1�s*�
���
z"LWPCookieTests.test_ietf_example_1cCsXttdd��}t|ddd�t|d�}|�|d�t|d�}|�d	|�|�d
|�dS)NTr�z&http://www.acme.com/acme/ammo/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_0001zhttp://www.acme.com/acme/parts/ZRocket_Launcher_0001ZRiding_Rocket_0023)rr
r�r#r�r�r^r)r)r*�test_ietf_example_24s
�

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�tj}z)|j|dd�t	|�}t|d�}|j
|dd�Wzt�|�Wnt
y�Ynwzt�|�Wwt
y�Yww|�|t	|��dS)NTr�r zmax-age=3600r?z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r5zhttp://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=1rIz6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1zhttp://www.sol.no/foo/barz3bing=bong; domain=".sol.no"; path="/foo"; version=1r z5whiz=ffft; domain=".sol.no"; port="90,100"; version=1rJr(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�)r
rr�r�r"r�rr�r�r�r�r�r�r�)r%r�rvZmax_ager�r��oldr)r)r*�test_rejectionisv

�
���������	�
�zLWPCookieTests.test_rejectioncCsnttdd��}t|dd�t|dd�}t�dtj�}|�d|�|�||�t|d	�}|�|�t|d
�}dS)NTr�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\"?rou-http://www.acme.com/foo/%25/<<%0anewå/æøåuhttp://www.acme.com/ü)	rr
r�r��compile�Ir�r#r�)r%rvr�Z
version_rer)r)r*�test_url_encoding�s ���
z LWPCookieTests.test_url_encodingcst��dd}tj�t�tdd�d�}t|dd�t|dd�t|dd	�d
|f}t|dd|�t|dd
|�t|dd|�|D]
}|jdkrR|�	dd�qE�fdd�}||d�}|�
t|�d�|�dt
|��|�dt
|��||d�}|�
t|�d�|�dt
|��dS)Nrr5Tr�r r�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; %sr6ZHTTPOnlyrDcstz(|j|d�t�tdd��}|j|d�Wzt���W|Sty(Y|Swzt���Wwty9Yww)Nr�Tr�)r�rr
r�r�r�r�)rr��new_cr�r)r*�save_and_restore�s����z5LWPCookieTests.test_mozilla.<locals>.save_and_restorer/zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr()r0rWrr�rr
r�r�r�Zset_nonstandard_attrr"r�r�r�)r%rYrvr_r�rhrgr)r�r*�test_mozilla�sD���
���
�

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,4rzCustomer=WILE_E_COYOTE)
rr�r�r�r�r�r�r�r�r�r[r)r)r*�test_netscape_miscs




z!LWPCookieTests.test_netscape_misccCshttdd��}t|dd�t|dd�}|�d|�t|dd�t|d�}|�d|�|�t|�d	�dS)
NTr��http://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1�foo1=barzfoo3=bar; Version=1�foo2=barr )rr
r�r�r"r�r^r)r)r*�test_intranet_domains_2965s��
z)LWPCookieTests.test_intranet_domains_2965cCslttdd��}t|dd�t|dd�}|�t|�d�|�d|�t|d�}|�d|�|�t|�d�dS)NFr�rkrlzfoo2=bar; domain=.localrrm)rr
r�r"r�r�r^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)
NTr�zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=rzJSESSIONID=ABCDERANDOM123r2rTzhttp://www.ants.com:8080)rr
r�r�r�r�r�r�r�r"r�r[r)r)r*�test_empty_path9s$


�
�zLWPCookieTests.test_empty_pathc	Cst��dd}tj�d�}g}|�d�|�d|�|�d|�|�d�|�d�t|d�}t�}|�||�ddddd	�}|D]}d
|j	}||d||<qD|�
�|D]}d|j	}||d||<qZ|�|d|d
�|�|dd�|�|dd�dS)Nrr5z"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_afterrrrtrqrs)
r0rWr�r�r�r�r�rr�r�r�r"ZassertNotEqual)	r%rYr�r�r�rvZcounterr��keyr)r)r*�test_session_cookiesXs<
��


�

z#LWPCookieTests.test_session_cookiesN)rWrXrYrZr\r_r`rcrfrirjrnrorprvr)r)r)r*rS3s[3p5[.rS�__main__)0�__doc__r�r�Ztest.supportrIrrr0ZunittestZurllib.requestr�r�Zhttp.cookiejarrrrrrr	r
rrr
rrrrrrrrrrrrrZTestCaserr[r�r�r�r�r�r�rSrW�mainr)r)r)r*�<module>sFd3g

B-T�