
    daf1F                        d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlZddl	Z	ddl
Zddl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# ejH                  dk(  Z% G d de	jL                        Z' G d	 d
e	jL                        Z( G d d      Z)d Z*d Z+d Z, G d de	jL                        Z- G d de	jL                        Z. G d de	jL                        Z/e0dk(  r e	jb                          yy)zTests for http/cookiejar.py.    N)	os_helper)warnings_helper)	time2isoz	http2timeiso2timetime2netscapeparse_ns_headersjoin_header_wordssplit_header_wordsCookie	CookieJarDefaultCookiePolicyLWPCookieJarMozillaCookieJar	LoadErrorlwp_cookie_strDEFAULT_HTTP_PORTescape_pathreachis_HDNdomain_matchuser_domain_matchrequest_pathrequest_portrequest_hostwin32c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)DateTimeTestsc           	      p   d}d}| j                  t        |      d       | j                  t        ||z         d       | j                  t        |d|z  z         d       | j                  t        |d|z  z         d       t               }t        d	      }||fD ]  }| j                  |d
d|d|        y )Nx+<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:  )assertEqualr   assertRegexselfbasedayazbztexts         3/root/Python-3.12.4/Lib/test/test_http_cookiejar.pytest_time2isozzDateTimeTests.test_time2isoz   s    4*@A48,.DE4#:.0FG4#:.0FG[vH 	GDT#G>@"EG	G    c           	      p   d}d}| j                  t        |      d       | j                  t        ||z         d       | j                  t        |d|z  z         d       | j                  t        |d|z  z         d       t               }t        d	      }||fD ]  }| j                  |d
d|d|        y )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: r%   )r&   r   r'   r(   s         r/   test_time2netscapez DateTimeTests.test_time2netscape&   s    t,.MNtCx08	: 	tAcEz28	: 	tAcEz28	: _6"H 	>DN57<>	>r1   c                     d }| j                   |d      d       | j                   |d      d       | j                   |d      d       y )Nc                 D    t        j                  t        |             d d S N   )timegmtimer   r.   s    r/   
parse_datez0DateTimeTests.test_http2time.<locals>.parse_date=   s    ;;y/33r1   z01 Jan 2001)i     r<   r   r           z	03-Feb-20)i  r"   r#   r   r   r=   z	03-Feb-98)i  r"   r#   r   r   r=   r&   r)   r;   s     r/   test_http2timezDateTimeTests.test_http2time<   sO    	4 	M24KL 	K02IJ 	K02IJr1   c           
         g d}d}t        |      }d}| j                  |||d|d|d       |D ]  }| j                  t        |      ||       | j                  t        |j                               ||j                                | j                  t        |j	                               ||j	                                 y )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  =>  'z' ())r   r&   r   lowerupper)r)   teststest_tresultexpectedss         r/   test_http2time_formatsz$DateTimeTests.test_http2time_formatsH   s    
, 6")06I	K  	FAYq\615Yqwwy161779EYqwwy161779E	Fr1   c           
      f    dD ],  }| j                  t        |      d|dt        |             . y )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(z) is not None
http2time(test) )assertIsNoner   r)   tests     r/   test_http2time_garbagez$DateTimeTests.test_http2time_garbagel   s;     	ND  io6:IdOMN!	Nr1   c                 x    t        dj                  ddz               t        dj                  ddz               y )Nz01 Jan 1970{}00:00:00 GMT!r%   i z01 Jan 1970 00:00:00{}GMT!)r   formatr)   s    r/   2test_http2time_redos_regression_actually_completesz@DateTimeTests.test_http2time_redos_regression_actually_completes   s4     	.55cGmDE.55cGmDEr1   c                     d }| j                   |d      d       | j                   |d      d       | j                   |d      d       y )Nc                 D    t        j                  t        |             d d S r6   )r8   r9   r   r:   s    r/   r;   z/DateTimeTests.test_iso2time.<locals>.parse_date   s    ;;x~.r22r1   19940203T141529Z)i  r"   r#            z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r>   r?   s     r/   test_iso2timezDateTimeTests.test_iso2time   sX    	3 	$671	3 	$?@1	3 	$?@1	3r1   c                 6   g d}d}|D ]  }| j                  t        |      ||       | j                  t        |j                               ||j                                | j                  t        |j                               ||j                                 y )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:0019940203z1994-02-02 24:00:0019940203T000000Zz  1994-02-03 z  1994-02-03T00:00:00  rC   )r&   r   rE   rF   )r)   rG   rH   rK   s       r/   test_iso2time_formatsz#DateTimeTests.test_iso2time_formats   s}    
  	EAXa[&!4Xaggi0&!'')DXaggi0&!'')D	Er1   c                 N    dD ]   }| j                  t        |      d|z         " y )N)rN   rO   rB   z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rP   z01-01-1980T00:00:6219800101T250000Zziso2time(%r))rQ   r   rR   s     r/   test_iso2time_garbagez#DateTimeTests.test_iso2time_garbage   s1     	5D htn,t35	5r1   c                 x    t        dj                  ddz               t        dj                  ddz               y )Nz1994-02-03{}14:15:29 -0100!r%   i@B z1994-02-03 14:15:29{}-0100!)r   rV   rW   s    r/   $test_iso2time_performance_regressionz2DateTimeTests.test_iso2time_performance_regression   s4     	.55c%i@A.55c%i@Ar1   N)__name__
__module____qualname__r0   r3   r@   rL   rT   rX   r_   rc   rf   rh    r1   r/   r   r      s<    G>,
K"FHN*F3 E.5$Br1   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)HeaderTestsc                 T    g dg}dD ]  }| j                  t        |g      |         y )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)   rJ   hdrs      r/   test_parse_ns_headersz!HeaderTests.test_parse_ns_headers   s7    OP 	@C -se4h?		@r1   c                 T    ddgg}dD ]  }| j                  t        |g      |         y )Nrp   )ru   1)zfoo=bar; version="1"foo=bar; Version="1"rw   rx   s      r/   test_parse_ns_headers_versionz)HeaderTests.test_parse_ns_headers_version   s?     $%567 	@C -se4h?		@r1   c                 J    d}ddgg}| j                  t        |g      |       y )Nz expires=01 Jan 2040 22:23:32 GMT)rs   z01 Jan 2040 22:23:32 GMTrt   rw   )r)   ry   rJ   s      r/   #test_parse_ns_headers_special_namesz/HeaderTests.test_parse_ns_headers_special_names   s/     1<>NOP)3%0(;r1   c                 |    t        ddgg      }| j                  |d       | j                  t        g g      d       y )Nrq   Nrr   bazzfoo; bar=bazrN   )r
   r&   )r)   joineds     r/   test_join_header_wordsz"HeaderTests.test_join_header_words   s<    "]N$C#DE0*B40"5r1   c                    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 ]/  \  }}	 t        |g      }| j                  ||d|d|d|d       1 y #  dd l}dd l}|j                         }|j	                  d |       d|j                         z  }Y axY w) Nrq   r   foo=barrp   	   foo   z
   foo=   )rq   rN   z   foo=z   foo=   ; z   foo=   ; bar= baz r   foo=bar bar=bazzfoo= bar=baz)rq   zbar=bazfoo=bar;bar=bazfoo bar baz)r   )rr   N)r   Nza, b, c)aN)bN)cNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )spamrN   )rq   z,;")rr   rN   r   z (error -- traceback follows)

%s
When parsing: ''
Expected:     ''
Got:          ''
)r   	tracebackioStringIO	print_excgetvaluer&   )r)   rG   argexpectrI   r   r   fs           r/   test_split_header_wordsz#HeaderTests.test_split_header_words   sX   m_%&.)*+M?+,[M?++({m_-$^'D&EF..!A BC1234..!A BCJKL+}EF8n-n~.?@& ! 	KCM+SE2 Vf FF	/ 	M$KKM##D!,=

Ls   B?C	c                     g d}|D ]<  \  }}t        |g      }t        |      }| j                  ||d|d|d|d|d	       > y )N))rq   rq   )r   r   )r   rq   )zfoo=zfoo="")r   foo=bar; bar=baz)r   r   )r   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\""r   r   r   z'
Input was:    'r   )r   r
   r&   )r)   rG   r   r   inputress         r/   test_roundtripzHeaderTests.test_roundtrip  sV    , ! 	!KC&u-E#E*CS&
 FC+  !	!r1   N)	ri   rj   rk   rz   r~   r   r   r   r   rl   r1   r/   rn   rn      s#    @@<6 D!r1   rn   c                       e Zd Zg dfdZd Zy)FakeResponseNc                 d    ddl }|j                  dj                  |            | _        || _        y)zD
        headers: list of RFC822-style 'Key: value' strings
        r   N
)emailmessage_from_stringjoin_headers_url)r)   headersurlr   s       r/   __init__zFakeResponse.__init__0  s)     	11$))G2DE	r1   c                     | j                   S N)r   rW   s    r/   infozFakeResponse.info7  s    4==(r1   )ri   rj   rk   r   r   rl   r1   r/   r   r   /  s    !t  )r1   r   c                     t        | ||d      S )NzSet-Cookie2	_interact	cookiejarr   set_cookie_hdrss      r/   interact_2965r   9  s    Y_mDDr1   c                     t        | ||d      S )Nz
Set-Cookier   r   s      r/   interact_netscaper   <  s    Y_lCCr1   c                    t         j                  j                  |      }| j                  |       |j	                  dd      }g }|D ]  }|j                  |d|        t        ||      }| j                  ||       |S )zDPerform a single request / response cycle, returning Cookie: header.r   rN   z: )urllibrequestRequestadd_cookie_header
get_headerappendr   extract_cookies)	r   r   r   hdr_namereq
cookie_hdrr   ry   r   s	            r/   r   r   ?  s{    
..
 
 
%C$"-JG 38S123
w
$Cc3'r1   c                       e Zd Zd Zd Zd Zd Zd Z ej                  e
d      ej                  d               Z ej                  e
d      ej                  d               Z ej                  e
d      ej                  d	               Zd
 Zy)FileCookieJarTestsc                 r    t         j                  }t        |      }| j                  |j                  |       y r   )r   TESTFNr   r&   filenamer)   r   r   s      r/   test_constructor_with_strz,FileCookieJarTests.test_constructor_with_strM  s+    ##"X.r1   c                     t         j                  }t        t        j                  |            }| j	                  |j
                  |       y r   )r   r   r   FakePathr&   r   r   s      r/   test_constructor_with_path_likez2FileCookieJarTests.test_constructor_with_path_likeR  s6    ##++H56X.r1   c                 P    t        d       }| j                  |j                         y r   )r   rQ   r   r)   r   s     r/   test_constructor_with_nonez-FileCookieJarTests.test_constructor_with_noneW  s    !**%r1   c                     G d d      }t         t        |fD ]N  }| j                  |      5  | j                  t              5   |       }t        |      }d d d        d d d        P y # 1 sw Y   xY w# 1 sw Y   gxY w)Nc                       e Zd Zy)?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)ri   rj   rk   rl   r1   r/   Ar   \  s    r1   r   r   )intfloatsubTestassertRaises	TypeErrorr   )r)   r   type_instancer   s        r/   !test_constructor_with_other_typesz4FileCookieJarTests.test_constructor_with_other_types[  s    	 	 5!_ 	8Eu- 8&&y1 8$wH$h7A88 8	88 88 8s#   A6A*A6*A3/A66A?	c                    t         j                  }t               }t        |dd       | j	                  |j
                  d   d   d   j                  d        	 |j                  |d       t               }|j                  |d       t        j                  |       | j	                  |j
                  d   d   d   j                  d        y # t        j                  |       w xY w)Nhttp://www.acme.com/boowww.acme.com/Tignore_discard)
r   r   r   r   r&   _cookiesvaluesaveloadunlinkr   s      r/   test_lwp_valueless_cookiez,FileCookieJarTests.test_lwp_valueless_cookiee  s    ##N!3U;N3C8?EEtL	'FF8DF1AFF8DF1X&N3C8?EEtL X&s   0C C$z9windows file permissions are incompatible with file modesc                 `   t         j                  }t               }t        |dd       	 |j	                  |d       t        j                  |      }| j                  t        j                  |j                        d       t        j                  |       y # t        j                  |       w xY wNr   r   Tr   i  )r   r   r   r   r   osstatr&   S_IMODEst_moder   r)   r   r   sts       r/   test_lwp_filepermissionsz+FileCookieJarTests.test_lwp_filepermissionss  s     ##N!3U;	'FF8DF1"BT\\"**5u=X&IX&   AB B-c                 `   t         j                  }t               }t        |dd       	 |j	                  |d       t        j                  |      }| j                  t        j                  |j                        d       t        j                  |       y # t        j                  |       w xY wr   )r   r   r   r   r   r   r   r&   r   r   r   r   s       r/   test_mozilla_filepermissionsz/FileCookieJarTests.test_mozilla_filepermissions  s     ##!3U;	'FF8DF1"BT\\"**5u=X&IX&r   c                 "   t         j                  }t        t        fD ]  } ||      }t        j
                  j                  d      }dg}t        |d      }|j                  ||       | j                  t        |      d       	 |j                          |j                          |j                          |j                          t        j                  |       | j                  t        |      d        y # t        j                  |       w xY w)Nr   z1Set-Cookie: pll_lang=en; Max-Age=31536000; path=/r<   r   )r   r   r   r   r   r   r   r   r   r&   lenr   clearr   r   )r)   r   cookiejar_classr   r   r   r   s          r/   test_cookie_files_are_truncatedz2FileCookieJarTests.test_cookie_files_are_truncated  s     ## ,.>? 	(O)A..(()?@CJKGw(>?Cc3'SVQ'	+	  *SVQ')	($   *s   A C77Dc                 @   t         j                  }t        t        fD ]-  } |       }	 |j	                  d       | j                  d       / 	 t        |d      5 }|j                  d       t        t        fD ]*  } |       }| j                  t        |j                  |       , 	 d d d        t        j                  |       y # t        $ r*}| j                  |j                  t               Y d }~d }~ww xY w# 1 sw Y   UxY w# t        j                  |       w xY w)NzAfor this test to work, a file with this filename should not existr   z%expected OSError for invalid filenamewzoops
)r   r   r   r   r   failOSErrorassertIsNot	__class__r   openwriter   r   )r)   r   r   r   excr   s         r/   test_bad_magicz!FileCookieJarTests.test_bad_magic  s   ##+-== 
	CO!AC !< = 		AB
	C	'h$ C!'35E'E CO')A%%iBCC X&  ;   	::;C C X&s<   CD AC:&D 	C7 C22C7:D?D DN)ri   rj   rk   r   r   r   r   r   unittestskipIf	mswindowsr   skip_unless_working_chmodr   r   r   r  rl   r1   r/   r   r   L  s    /
/
&8M X__Y [\((
' ) ]
' X__Y [\((
' ) ]
' X__Y [\((( ) ](0'r1   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*y))*CookieTestsc                     t               }dD ]\  \  }}}t        j                  j                  |      }|j	                  ||      }|r| j                  |       L| j                  |       ^ y )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  rq   T)r  z	foo.localT)r  .localT)http://barfoo.comr  F)r  r  F)r   r   r   r   domain_return_ok
assertTrueassertFalse)r)   polr   domainokr   rs          r/   test_domain_return_okz!CookieTests.test_domain_return_ok  sg     "#  	&OC* nn,,S1G$$VW5A4??1%""1%1	&r1   c                 x   t         j                  }t        |      }t        |dd       t        |dd       |j                  d   d   d   }| j                  |j                         | j                  |j                  d       |j                  d   d   d   }| j                  |j                         | j                  |j                  d       | j                  t        |      d       t        |      }|j                  d	d	
       	 t        |      }|j                  d	d	
       t        j                  |j                         | j                  t        |      t        j                   dd	z  ddz  |             | j                  t        |d      d       y # t        j                  |j                         w xY w)Nr   eggsz"spam"; path=/foo/r   r   /foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)ignore_expiresr   zpath_specified=%sFhttp://www.acme.com/foo/z"spam"; eggs)r   r   r   r   r   rQ   r   r&   namer   reprr   revertr   r   resub)r)   r   r   cookieold_strs        r/   test_missing_valuezCookieTests.test_missing_value  s~    ##X&!3V<!35IJN+C08&,,'f-N+G4X>&,,'h//,	. q'	d48	) *AHHDH>QZZ(GFF&-/BU/J	
 	*1.HI'	) QZZ(s   F !F9c                    dD ]  \  }}}t        ||      }t        |      }t        |dd       	 |j                  d   d   d   }| j	                  |j
                  |       t        |dd       |sn|j                  d   d   d	   }| j	                  |j
                  d
        y # t        $ r | j                  |       Y w xY w)N))NFr   )NTr<   )FFN)FTr<   )TFr   )TTr   )rfc2109_as_netscaperfc2965http://www.example.com/zni=ni; Version=1www.example.comr   nifoo=bar; Version=1rq   r<   )	r   r   r   r   r&   ru   r   KeyErrorrQ   )r)   r0  r1  ru   policyr   r,  
cookie2965s           r/   test_rfc2109_handlingz!CookieTests.test_rfc2109_handling2  s    	6 	<1' )$7!F &!Aa!:<NO<$56s;DA   9a!:24!",=!>s!CE!JJ$$Z%7%7;5	<"  +!!'*+s   B%%CCc                    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                  |j                  d       | j                  |j                         | j                  |j                  t               | j                  |j                         | j                  |j                  d             | j                  |j                  d             |j                  d   d   d   }| j                  |j                  d       | j                  |j                         | j                  |j                  d       | j                  |j                         |j                  d   d   d   }| j                  |j                         | j                  |j                         |j                  d   d   d   }|j                  d   d   d   }| j                  |j                         | j                  |j                         |j                  d   d   d   }| j                  |j                         | j                  |j                  d       |j                  d   d   d
   }| j                  |j                         y )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=unladenswallowholyhandgrenade	.acme.comr   r   blArghblarghr   r4  z80,8080ninirq   fortytworN   )r   r   r   r&   r  r  domain_specifiedportr   r  port_specifiedhas_nonstandard_attrrQ   rs   assertIsNotNoner   )r)   r   r,  rq   r   s        r/   test_ns_parserzCookieTests.test_ns_parserQ  s{   K!3L	N!35JK!6	B!68KL!6 9? 	@!3[A!35FG!35FGK(-f54//0&78../33H=>44X>?N+C067001i0--.N+C08&++&../ jj(-e4zz.)#.u5#++&$,,'N+C0<V\\*r*
 N+C01BC&,,'r1   c                     t               }t        |dd       t        |dd       |j                  d   d   }| j                  d|       | j                  d|       y )Nr   zexpires=eggszversion=eggs; spam=eggsr   r   rs   ru   )r   r   r   assertIn)r)   r   cookiess      r/   test_ns_parser_special_namesz(CookieTests.test_ns_parser_special_names  sU     K!3^D!35NO**^,S1i)i)r1   c                 @   t               }t        t        j                         dz         }t        j                  |       5  d| g}t
        j                  j                  d      }t        |d      }|j                  ||      }| j                  t        |      d       | j                  t        |d   j                        |       d d d        t        |dd|z         | j                  t        |      d       t        t        j                         dz
        }t        |dd|z         t        |d      }| j                  t        |      d       | j                  d	|       | j                  d
|       t        |dd|z         t        |dd|z         | j                  t        |      d       t        |dd|z         t        |dd|z         t        |d      }| j                  t        |      d       t        |dd       | j                  t        |      d       |j!                          | j                  t        |      d       | j                  d	|       t#        dddd dddddddddd d i       }	| j                  |	j                  d       y # 1 sw Y   xY w)N  z%Set-Cookie: FOO=BAR; path=/; expires=http://www.coyote.com/r<   r   r   zspam="bar"; expires=%szfoo="eggs"; expires=%s
spam="bar"rq   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   r8   r   check_no_warningsr   r   r   r   make_cookiesr&   r   rs   r   rI  assertNotInclear_session_cookiesr   )
r)   r   futurer   r   r   rJ  nowhr,  s
             r/   test_expireszCookieTests.test_expires  s   Ktyy{4/0..t4 	H>vhGHG..(()ABCw(@ACnnS#.GS\1-]71:+=+=>G	H 	!35M 6! 	"Q#DIIKM*!35M6 	a!78Q#lA&" 	!35M 6! 	"!35L 6! 	"Q#!3 624:6; 	<!3 624:6; 	<a!78Q# 	!6FQ#	!Q#lA& FGu&6uc':d 	4a	H 	Hs    BJJc                    t        d      }t        |      }t        |dd       | j                  d|j                  d          t        |      }t        |dd       | j                  d|j                  d          t        |      }t        |d	d       | j                  d
|j                  d          t        |      }t        |dd       | j                  d|j                  d          t               }t        |dd       | j                  d|j                  d          t               }t        |dd       | j                  d|j                  d          t               }t        |d	d       | j                  d|j                  d          t               }t        |dd       | j                  d|j                  d          y )NTr1  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/rO  
eggs="bar"/blahz/blah/rhubarb)r   r   r   rI  r   r   r)   r  r   s      r/   test_default_pathzCookieTests.test_default_path  sw   !$/cNa/1JKc1::n56cNa35NOc1::n56cNa;/	1h

> :;cNa</	1&

>(BC K!3\Bc1::n56K!7Fc1::n56K!?Ngqzz.9:K!@,Ooqzz.'ABr1   c                     t               }d}d}t        |||       | j                  d|j                  d          | j	                  t        ||      |       y )Nzhttp://example.com/?spam/eggsr[  r   zexample.com)r   r   rI  r   r&   )r)   cjurir   s       r/   test_default_path_with_queryz(CookieTests.test_default_path_with_query  sN    [-"c5)c2;;}56*2s3U;r1   c                 V    g d}|D ]   \  }}| j                  t        |      |       " y )N))z/foo%2f/bar/foo%2F/bar)rd  rd  )
/foo%%/barre  )/fo%19o/barrf  )z/fo%7do/barz/fo%7Do/bar)	/foo/bar&rg  )	/foo//barrh  )	~/foo/barri  )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   rI   s       r/   test_escape_pathzCookieTests.test_escape_path  s3    * ! 	7KC[-v6	7r1   c                 `   t         j                  j                  d      }| j                  t	        |      d       t         j                  j                  d      }| j                  t	        |      d       t         j                  j                  d      }| j                  t	        |      d       y )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   s     r/   test_request_pathzCookieTests.test_request_path  s    nn$$:; 	c*?	A nn$$() 	c*,@Ann$$%=>c*C0r1   c                    t               }t        d      }t        |      }d}t        ||d       |j                  d   d   d   }dD ]  \  }}| | }t        j
                  j                  |      }	t        ||      }
|r8| j                  d	|
d
|        | j                  |j                  ||	             q| j                  d	|
d|        | j                  |j                  ||	              y )NT)strict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foor  /foor   ))rq  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   rI  r  set_ok_pathrR  r  )r)   r  strict_ns_path_polr   base_urlr,  pathr  r   r   rV  s              r/   test_path_prefix_matchz"CookieTests.test_path_prefix_match   s    !#0DIcN#!X'=>I&v.v61 	NHD"
 Jtf%C..((-C!!S)Ak10CD6.JK 2 > >vs KL  a?4&1IJ  !3!?!?!LM	Nr1   c                    t         j                  j                  dddi      }| j                  t	        |      d       t         j                  j                  dddi      }| j                  t	        |      t
               y )Nzhttp://www.acme.com:1234/Hostzwww.acme.com:4321r   1234r   )r   r   r   r&   r   r   rm  s     r/   test_request_portzCookieTests.test_request_port8  sy    nn$$%@.46I-J % Lc*F3nn$$%;.46I-J % Lc*,=>r1   c                 x   t         j                  j                  dddi      }| j                  t	        |      d       t         j                  j                  dddi      }| j                  t	        |      d       t         j                  j                  d	dd
i      }| j                  t	        |      d       y )Nzhttp://1.1.1.1/ry  www.acme.com:80rz  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   rm  s     r/   test_request_hostzCookieTests.test_request_host@  s    nn$$%6.46G-H % J
 	c*I6nn$$%;.46F-G % Ic*N;nn$$%M.46I-J % Lc*N;r1   c                    | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             | j                  t        d             y )	Nr  z1foo2.3bar4.5com192.168.1.1rN   .r  z..foozfoo.)r  r   r  rW   s    r/   test_is_HDNzCookieTests.test_is_HDNP  s    }-.123./$%/0)(r1   c                    | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d	      d	       y )
Nr   r=  acme.comz
acme.localr  .comr  rN   z192.168.0.1)r&   r   rW   s    r/   
test_reachzCookieTests.test_reachZ  s    ~.<z*J7|,h7x(3v/sS)rB'}-}=r1   c                    | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        d	d
             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             | j                  t        dd             y )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.blahrN   z.rhubarb.rhubarbr  r=  zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr  r  mz.mr  )r  r   r  r   rW   s    r/   test_domain_matchzCookieTests.test_domain_matchd  s   ]MBCmZ@AY	:;Y9:i9:[(;<h<=_h?@k267b*<=>R,-)*jAB*:{CD)*<kJK)*@+NO))Y?@))X>?*9g>?)'7;<*8W=>)(H=>))V<=*9e<=*9c:;*9d;<*9b9:*9c:;)-GH*=*EF*=#>?*="=>r1   c                 h    t               }t        |dd       | j                  t        |      d       y )Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r   )r   r   r&   r   r   s     r/   test_wrong_domainzCookieTests.test_wrong_domain  s0    
 Ka0A	CQ#r1   c                    t        d      }t        |      }t        |dd       t        |dd       | j                  t	        |      d       dD ]-  }t        |d	|z  d
       | j                  t	        |      d       / y )NT)strict_domainr7  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)   cpr`  
pseudo_tlds       r/   test_strict_domainzCookieTests.test_strict_domain  s     !t4b!"5}E"5=	?R!$E 	)Jb"6"C8:SWa(	)r1   c                    t               }t        |dd       | j                  t        |      d       | j                  |j                  d   d   d   j
                  d       | j                  t        |d      d       | j                  t        |d      d       t        t        j                  	      }|j                  |       | j                  t        |d      d
       t        |dd       t        |dd       | j                  t        |      d       | j                  |j                  d   d   d   j
                  d       | j                  |j                  d   d   d   j
                  d       | j                  t        |d      d       t        |dd       | j                  t        |      d       t        |dd       | j                  t        |      d       y )Nhttp://foo.net/zns=barr<   foo.netr   nsrr   http://www.foo.net/)strict_ns_domainrN   http://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr#   .foo.netrq  spam1r#  rr  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   DomainStrictNonDomain
set_policy)r)   r   r  s      r/   test_two_component_domain_nsz(CookieTests.test_two_component_domain_ns  s    K 	!.9Q#I.s3D9??G*1.?@(K*1.CD!	# "0FFH	S*1.CDbI 	!26	8 	!67	9Q#J/7@FF	!J/
;GDJJ	!*1.GH9	; 	!.0HIQ# 	!/1MNQ#r1   c                 h    t               }t        |dd       | j                  t        |      d       y )Nhttp://localhostfoo=bar; domain=localhost;r<   r   r   r&   r   r   s     r/   test_localhost_domainz!CookieTests.test_localhost_domain  s+    K!/1MNQ#r1   c                     t               }t        |dd       | j                  |j                  d   d   d   j                  d       y )Nr  r  z
.localhostr   rq   rr   r   r   r&   r   r   r   s     r/   test_localhost_domain_contentsz*CookieTests.test_localhost_domain_contents  s@    K!/1MNL1#6u=CCUKr1   c                     t               }t        |dd       | j                  |j                  d   d   d   j                  d       y )Nr  zfoo=bar;zlocalhost.localr   rq   rr   r  r   s     r/    test_localhost_domain_contents_2z,CookieTests.test_localhost_domain_contents_2  s@    K!/<$56s;EBHH%Pr1   c                 h    t               }t        |dd       | j                  t        |      d       y )Nzhttp://evil.comzfoo=bar; domain=.localhostr   r  r   s     r/   test_evil_nonlocal_domainz%CookieTests.test_evil_nonlocal_domain  s+    K!.0LMQ#r1   c                 h    t               }t        |dd       | j                  t        |      d       y )Nr  zfoo=bar; domain=.evil.comr   r  r   s     r/   test_evil_local_domainz"CookieTests.test_evil_local_domain  s+    K!/1LMQ#r1   c                 h    t               }t        |dd       | j                  t        |      d       y )Nr  z foo=bar; domain=.someother.localr   r  r   s     r/   test_evil_local_domain_2z$CookieTests.test_evil_local_domain_2  s+    K!/1STQ#r1   c                    t        d      }t        |      }t        |dd       | j                  t	        |      d       | j                  |j
                  d   d   d   j                  d	       | j                  t        |d      d
       | j                  t        |d      d       t        |dd       | j                  t	        |      d       | j                  t        |d      d
       t        |dd       | j                  |j
                  d   d   d   j                  d       | j                  t	        |      d       | j                  t        |d      d
       | j                  t        |d      d       t        |dd       | j                  t	        |      d       t        |dd       | j                  t	        |      d       y )NTrY  r  r}   r<   r  r   rq   rr   z$Version=1; foo=barr  rN   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$  r   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]  s      r/   !test_two_component_domain_rfc2965z-CookieTests.test_two_component_domain_rfc2965  s   !$/cN 	a*,BCQ#I.s3E:@@%Hq*;<.	0 	q*?@"E
 	a-I	KQ#q*>?.	0
 	a2>	@J/8@FF	!Q#q*?@.	0q*CDC	E 	a*;	=Q# 	a,?	AQ#r1   c                    t        t        dgdg            }t        j                  j	                  d      }dg}t        |d      }|j                  ||       | j                  t        |      d       t        j                  j	                  d      }t        |d      }|j                  ||       | j                  t        |      d	       t        j                  j	                  d
      }t        |d
      }|j                  ||       | j                  t        |      d	       t        j                  j	                  d
      }t        |d
      }|j                  ||      }|j                  |d          | j                  t        |      d       |j                  |       | j                  |j                  d             y )Nr  r   )blocked_domainsallowed_domainsr  http://acme.com/*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/r   r   r<   rN  r"   r   )r   r   r   r   r   r   r   r&   r   rQ  
set_cookier   r  
has_header)r)   r   r   r   r   rJ  s         r/   test_domain_allowzCookieTests.test_domain_allow&  sx   0'L+,. / nn$$%78?@7$67	#s#Q#nn$$%;<7$:;	#s#Q#nn$$%=>7$<=	#s#Q# nn$$%=>7$<=..c*	WQZ Q#	C 12r1   c                    t        ddg      }t        |      }dg}t        j                  j	                  d      }t        |d      }|j                  ||       | j                  t        |      d       |j                  dg      }|j                  ||       | j                  t        |      d	       |j                          t        j                  j	                  d
      }t        |d
      }|j                  ||       | j                  t        |      d	       t        j                  j	                  d
      }|j                  |       | j                  |j                  d             | j                  |j                  d             |j                          |j                  dg       |j                  ||       | j                  t        |      d	       t        j                  j	                  d      }t        |d      }|j                  ||      }|j                  |d          | j                  t        |      d       |j                  |       | j!                  |j                  d             |j                          |j                  g        t        j                  j	                  d      }t        |d      }|j                  ||      }|j                  ||       | j                  t        |      d	       t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d      }|j                  |       | j!                  |j#                  |d   |             | j!                  |j                  d             |j                  dg      }t        j                  j	                  d      }|j                  |       | j!                  |j                  d             t        j                  j	                  d      }|j                  |       | j!                  |j                  d             y )NTr=  )r1  r  r  r  r   r   r  r<   zhttp://www.roadrunner.net/r   Cookie2r"   r  zhttp://badacme.com/)r   r   r   r   r   r   r   r&   r   set_blocked_domainsr   r   r  r  rQ  r  r  	return_ok)r)   r  r   r   r   r   prJ  s           r/   test_domain_blockzCookieTests.test_domain_blockE  sy   !;-9S!?@nn$$%;<7$:;	#s#Q###ZL1	#s#Q#		nn$$%AB7$@A	#s#Q#nn$$%AB	C x01y12		.	#s#Q# nn$$%;<7$:;..c*	WQZ Q#	C 12		#nn$$%787$67..c*	#s#Q#nn$$%78	C x01nn$$%:;	C wqz37812##ZL1nn$$%78	C 12nn$$%:;	C 12r1   c           
         dD ]  }dD ]  }t               }|rt        d      }t        }d}nt        d      }t        }d}|j	                  |       d} |||d	||        |||d
|d|       | j                  |j                  d   d   d   j                  d       | j                  |j                  d   d   d   j                  d         y )N)TF)r%   rN   FrY  rN   Tz; Version=1r   foo1=barfoo2=barz; securer   r   foo1z#non-secure cookie registered securefoo2z#secure cookie registered non-secure)	r   r   r   r   r  r  r   securer  )r)   r  
whitespacer   r  r   vsr   s           r/   test_securezCookieTests.test_secure  s     	;B% ;
K-e<C+CB-d;C'C&BS!,Asb*=>Asr:FG  JJ~.s3F;BB9; JJ~.s3F;BB9;#;	;r1   c                 f   t               }t        |      }dg}t        j                  j	                  d      }t        |d      }|j                  ||       | j                  t        |      d       t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d      }|j                  |       | j                  |j                  d             y )	Nr  (Set-Cookie: session=narf; secure; path=/https://www.acme.com/r<   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  r   r   r   r   s         r/   test_secure_blockzCookieTests.test_secure_block  sJ   !#S!=>nn$$%<=7$;<	#s#Q#nn$$%<=	C x01nn$$%;<	C 12 nn$$%:;	C x01 nn$$%9:	C 12r1   c                 l   t        dg      }t        |      }dg}t        j                  j	                  d      }t        |d      }|j                  ||       | j                  t        |      d       t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d      }|j                  |       | j                  |j                  d             t        j                  j	                  d	      }|j                  |       | j                  |j                  d             t        j                  j	                  d
      }|j                  |       | j                  |j                  d             y )Nfoos)secure_protocolsr  r  r  r<   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  r  s         r/   test_custom_secure_protocolsz(CookieTests.test_custom_secure_protocols  sN   !F8<S!=>nn$$%<=7$;<	#s#Q# nn$$%<=	C 12nn$$%;<	C 12nn$$%;<	C x01nn$$%:;	C 12r1   c                     t        t        d            }t        |dd       t        |d      }| j                  |d       y )NTrY  r  r   zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r   r   r   r&   )r)   r   rV  s      r/   test_quote_cookie_valuez#CookieTests.test_quote_cookie_value  s>    0>?a/1IJ!3489r1   c                 "   d}t        t        d            }t        ||d       t        j                  j                  |      }| j                  t        |      d       |j                  |       | j                  |j                  d             y )Nhttp://www.acme.comTrY  r5  r<   r   )r   r   r   r   r   r   r&   r   r   r  r  )r)   r   r   r   s       r/   test_missing_final_slashz$CookieTests.test_missing_final_slash  so    #)$78a23nn$$S)Q#	C x01r1   c                 r   t        d      }t        |      }d}t        ||d       t        ||      }| j                  d|d       t        |      }d}t        ||d       t        ||      }| j	                  d|d	       t        |      }d}t        ||d
       t        ||      }| j	                  d|d	       y )NTrY  r  spam=eggs; Version=1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   rR  rI  r)   r  r   r   rV  s        r/   test_domain_mirrorzCookieTests.test_domain_mirror  s    !$/cN#a45!S!1A	C cN#aEF!S!*A/DEcN#aDE!S!)1.CDr1   c                     t        d      }t        |      }d}t        ||d       t        ||      }| j                  d|d       t        |      }d}t        ||d       t        ||      }| j	                  d|d	       y )
NTrY  r  r  Pathz&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedr  r  s        r/   test_path_mirrorzCookieTests.test_path_mirror  s~    !$/cN#a45!S!$LMcN#a<=!S!k1&9:r1   c                    t        d      }t        |      }d}t        ||d       t        ||      }| j                  d|d       t        |      }d}t        ||d       t        ||      }| j	                  |dd	       t        |      }d}t        ||d
       t        ||      }| j                  d|d       t        |      }d}t        ||d       t        ||      }| j                  d|d       y )NTrY  r  r  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   rR  r'   rI  r  s        r/   test_port_mirrorzCookieTests.test_port_mirror  s    !$/cN#a45!S!$LMcN#a:;!S!-H	J cN#a?@!S!lAM	O cN#aDE!S!'	 r1   c                     t        t        d            }d}t        ||d       t        ||      }| j                  d|d       y )NTrY  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   rR  )r)   r   r   rV  s       r/   test_no_return_commentz"CookieTests.test_no_return_comment+  sN    )$78#a E 	F !S!AH	Jr1   c                 0   t        t        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 ]  }d}|D ]  }| j                  |t               | j                  |j                  ||          | j                  |j                  ||          | j                  |j                  ||          | j                  |j                  ||          |dz   }  y )NTrY  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.nosbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")r<   r   r<   r<   r<   )rq   r   rq   rq   bang)zblah.spam.orgr   r   r   z.sol.no)r   r\  rZ  r   r   r  r   r<   )r   r   r   r   rangeassertIsInstancer   r&   ru   r'  r  rv  )r)   csversionsnamesdomainspathsir   s           r/   test_Cookie_iteratorz CookieTests.test_Cookie_iterator5  s"   *489b1 4E 	F 	"9;MNb52	4b52	4b-K	L
 #5.2q 	AA %%a0  HQK8  q2  71:6  q2E	r1   c                 r   | j                  t        dg      g dg       | j                  t        dg      g dg       | j                  t        dg      ddgg       | j                  t        dg      g dg       | j                  t        d	g      d
dgg       | j                  t        dg      g        y )Nzfoo=bar; path=/; domain)rp   )rv  r   )r  Nrt   z)foo=bar; expires=Foo Bar 12 33:22:11 2000)rp   )rs   Nrt   rq   r   rt   zfoo=bar; expireszfoo=bar; versionrp   )ru   NrN   rw   rW   s    r/   rz   z!CookieTests.test_parse_ns_headersU  s    789A B	 	IJKBC	
 	eW%-./	
 	012BC	E 	012/01	3 	)2$/4r1   c                 2   d }t        t        j                         dz         }dgdgdgdgdgd|z  gfD ]%  } ||      }| j                  t        |      d	       ' d
g} ||      }|j                  d   d   d   }| j                  |j                         y )Nc                     t               }t        j                  j                  d      }t	        | d      }|j                  ||       |S )Nr2  )r   r   r   r   r   r   )r   r   r   r   s       r/   cookiejar_from_cookie_headerszICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersr  s@    A..(()BCCW&?@Aa%Hr1   rM  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 2000r3  r   r   )r   r8   r&   r   r   rQ   rs   )r)   r  rT  r   r   r,  s         r/   test_bad_cookie_headerz"CookieTests.test_bad_cookie_headerp  s    	 tyy{4/0 <=././&/0
 	(G .g6ASVQ'	(  II)'2-.s3C8&..)r1   N)+ri   rj   rk   r!  r.  r9  rG  rK  rW  r^  rb  rk  rn  rw  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  rz   r  rl   r1   r/   r  r    s    ^&B)@<>.(`	*55r&CP<721 N0?< )>"?H$).$`$LQ$$$*$X3>A3F;.3836:2E.; >J@56*r1   r  c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)LWPCookieTestsc                 r   t        j                         d   dz   }g }t        t        d            }t        j
                  j                  dddi      }|j                  d	|z         t        |d
      }|j                  ||       t        j
                  j                  d
      }|j                  |       | j                  |j                  d      d       | j                  |j                  d      d       |j                  d       t        |d
      }|j                  ||       t        j
                  j                  d      }|j                  |       |j                  d      }| j                  d|       | j                  d|       |j                  d       t        |d      }|j                  ||       t        j
                  j                  d
      }|j                  |       |j                  d      }| j                  d|       | j                  d|       | j                  d|       t        j
                  j                  d      }|j                  |       |j                  d      }| j                  d|       | j                  d|       | j                  |j!                  d             y )Nr   r<   TrY  r;  ry  r~  rz  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=/foor  zSHIPPING=FEDEXr&  zSHIPPING=FEDEX;)r8   	localtimer   r   r   r   r   r   r   r   r   r&   r   rI  rR  r  
startswith)r)   year_plus_oner   r   r   r   rV  s          r/   test_netscape_example_1z&LWPCookieTests.test_netscape_example_1  sQ   J (+a/)D9: nn$$%>%'89 % ; 	8:GH	I 7$:;	#s#nn$$%;<	C 13KL	2NCMN7$:;	#s#nn$$%BC	C NN8$8!<.2>?7$9:	#s#nn$$%;<	C NN8$8!<.2)1-nn$$%?@	C NN8$8!<.2%678r1   c                 Z   t               }g }t        j                  j                  d      }|j	                  d       t        |d      }|j                  ||       t        j                  j                  d      }|j                  |       | j                  |j                  d      d       |j	                  d       t        |d      }|j                  ||       t        j                  j                  d      }|j                  |       | j                  |j                  d      d       y )Nr   r  r   r  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)   r   r   r   r   s        r/   test_netscape_example_2z&LWPCookieTests.test_netscape_example_2  s    0 Knn$$%;<MN7$:;	#s#nn$$%;<	C 1;	= 	D	F7$:;	#s#nn$$%?@	C 1=	>r1   c                    t        t        d            }t        |dd      }| j                  |       t        |dd      }| j	                  |d       t        |dd	      }| j	                  |d
       | j	                  |d       | j	                  |d       t        |d      }| j	                  |d       | j                  d|       y )NTrY  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"WILE_E_COYOTE)r   r   r   r  r'   rI  r)   r   r,  s      r/   test_ietf_example_1z"LWPCookieTests.test_ietf_example_1#  s     )$78, /AC 	 & q"E ;< 	L	N* q"ELN 	!56 "7 	8 "7 	8* q"DE!IJov.r1   c                     t        t        d            }t        |ddd       t        |d      }| j                  |d       t        |d      }| j	                  d	|       | j                  d
|       y )NTrY  z&http://www.acme.com/acme/ammo/specificr  z@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"z!http://www.acme.com/acme/ammo/...z(Riding_Rocket_0023.*Rocket_Launcher_0001zhttp://www.acme.com/acme/parts/Rocket_Launcher_0001Riding_Rocket_0023)r   r   r   r'   rI  rR  r	  s      r/   test_ietf_example_2z"LWPCookieTests.test_ietf_example_2  sz     )$78 	7KN	P" q"EF!LM q"CD,f5-v6r1   c                    t        d      }t        |      }d}t        |dd      }| j                  |       t        |dd      }| j	                  t        |      d       t        |d	d
      }| j	                  t        |      d       t        |d	d      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        |dd      }| j	                  t        |      d       t        j                  }	 |j                  |d       t        |      }t        |      }|j                  |d       t        j                  |       | j	                  |t        |             y # t        j                  |       w xY w)NTrY  r  zmax-age=3600r  z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r<   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=1r  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=1r  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"r7   r   )r   r   r   r  r&   r   r   r   r   r(  r   r   )r)   r  r   max_ager,  r   olds          r/   test_rejectionzLWPCookieTests.test_rejection  sc   !$/$  q"7BD q"7HJQ# q"9HJQ# q"9MOQ# q":KMQ# q"5 +, 	Q# q"= +, 	Q# q"5 +, 	Q# "AB
 	Q# q"5 ./ 	Q# q":DFQ# ##	'FF8DF1q'CC(AFF8DF1X&d1g& X&s   =I Ic                 D   t        t        d            }t        |dd       t        |dd      }t        j                  dt        j
                        }| j                  d|       | j                  ||       t        |d	      }| j                  |       t        |d
      }y )NTrY  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\"?r   u-   http://www.acme.com/foo/%25/<<%0anewå/æøåu   http://www.acme.com/ü)	r   r   r   r*  compileIrI  r'   r  )r)   r   r,  
version_res       r/   test_url_encodingz LWPCookieTests.test_url_encoding"  s     )$78a 56	8 H.0 ZZ 5rtt<
i(,FH  q"<=r1   c                    t        j                         d   dz   }t        j                  t	        t        d            }t        |dd       t        |dd       t        |dd	       d
|fz  }t        |dd|z         t        |dd|z         t        |dd|z         |D ]$  }|j                  dk(  s|j                  dd       & fd} ||d      }| j                  t        |      d       | j                  dt        |             | j                  dt        |              ||d      }| j                  t        |      d       | j                  dt        |             y )Nr   r<   TrY  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; %sr  HTTPOnlyrN   c                     	 | j                  |       t        t        d            }|j                  |       t	        j
                         |S # t	        j
                         w xY w)Nr   TrY  )r   r   r   r   r   r   )r`  r   new_cr   s      r/   save_and_restorez5LWPCookieTests.test_mozilla.<locals>.save_and_restoreR  s^    +~6()<T)JL

.
9  *L   *s   :A A+r7   zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr  )r8   r  r   r   r   r   r   r   r'  set_nonstandard_attrr&   r   rI  r(  )r)   r  r   rs   r,  r  r  r   s          @r/   test_mozillazLWPCookieTests.test_mozilla8  sc   (+a/##X$7$EGa/8	:a/L	Na/1NO2m5EE!2(72	4!29GC	E!2<wF	H  	<F{{f$++J;	<	 !D)UQ'0$u+>-tE{; E*UQ'0$u+>r1   c                    t               }g }t        j                  j                  d      }|j	                  d       t        |d      }|j                  ||       |j	                  d       t        |d      }|j                  ||       t        j                  j                  d      }|j                  |       | j                  d|j                  d             | j                  d|j                  d             y )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   rI  r   r  s        r/   test_netscape_miscz!LWPCookieTests.test_netscape_misce  s    Knn$$%BC 	MN7$=>	#s#
 	MN7$=>	#s#nn$$%BC	C ')AB.s~~h/GHr1   c                    t        t        d            }t        |dd       t        |dd      }| j                  d|       t        |dd       t        |d      }| j                  d|       | j	                  t        |      d	       y )
NTrY  http://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1r  zfoo3=bar; Version=1r  r#   )r   r   r   rI  r&   r   r	  s      r/   test_intranet_domains_2965z)LWPCookieTests.test_intranet_domains_2965|  s    )$78a*;	=q"3EGj&)a*,ABq"34j&)Q#r1   c                 .   t        t        d            }t        |dd       t        |dd      }| j                  t	        |      d       | j                  d|       t        |d      }| j                  d|       | j                  t	        |      d       y )NFrY  r#  r  zfoo2=bar; domain=.localr"   r  )r   r   r   r&   r   rI  r	  s      r/   test_intranet_domains_nsz'LWPCookieTests.test_intranet_domains_ns  s    )E:;!.
;"1&7#<>Q#j&)"1&78j&)Q#r1   c                    t        t        d            }g }t        j                  j	                  d      }|j                  d       t        |d      }|j                  ||       t        j                  j	                  d      }|j                  |       | j                  |j                  d      d       | j                  |j                  d      d       t        j                  j	                  d	      }|j                  |       | j                  |j                  d      d       | j                  |j                  d      d       y )
NTrY  zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r   zJSESSIONID=ABCDERANDOM123r  r  zhttp://www.ants.com:8080)r   r   r   r   r   r   r   r   r   r&   r   r  s        r/   test_empty_pathzLWPCookieTests.test_empty_path  s
    )D9:nn$$%;<EF7$:;	#s#nn$$%;<	C 14	6	2NC nn$$%?@	C 14	6	2NCr1   c                    t        j                         d   dz   }t        j                  j	                  d      }g }|j                  d       |j                  d|z         |j                  d|z         |j                  d       |j                  d       t        |d      }t               }|j                  ||       ddddd	}|D ]  }d
|j                  z  }||   dz   ||<    |j                          |D ]  }d|j                  z  }||   dz   ||<    | j                  |d   |d          | j                  |d   d       | j                  |d   d       y )Nr   r<   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,  )r8   r  r   r   r   r   r   r   r   r   rS  r&   assertNotEqual)	r)   r  r   r   r   r   counterr,  keys	            r/   test_session_cookiesz#LWPCookieTests.test_session_cookies  s   (+a/
 nn$$%IJ=> D$% 	& 	 02?@ 	A 1 	2KL7$HIK	#s#$%!"%&"#%  	,F,C"3<!+GCL	, 	
! 	,Fv||+C"3<!+GCL	,
 	.0FG115G$45q9r1   N)ri   rj   rk   r  r  r
  r  r  r  r  r!  r$  r&  r(  r1  rl   r1   r/   r  r    sI    Y9v1>fg/`37jX't>,+?ZI.$
$D>(:r1   r  __main__)2__doc__r   r   sysr*  test.supportr   r   r8   r  urllib.requestr   http.cookiejarr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   platformr
  TestCaser   rn   r   r   r   r   r   r  r  ri   mainrl   r1   r/   <module>r;     s    " 	  
 	 " (   ! ! ! ! ! ! ! \\W$	oBH%% oBdd!(## d!N) )ED
t'** t'lM*(## M*`K	:X&& K	:\ zHMMO r1   