python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
test_httpservers.cpython-311.opt-1.pyc

edZddlmZddlmZmZmZmZddlm	Z	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddl m!Z!m"Z"ddlZddl#m$Z$dd	l%m&Z&dd
l%m'Z'e$j(dGd
dZ)Gddej*Z+Gddej,Z-Gdde-Z.Gdde-Z/Gdde-Z0dZ1dZ2dZ3dZ4ej5e6edoej7dkdGdd e-Z8Gd!d"eZ9Gd#d$e9Z:Gd%d&Z;Gd'd(ej,Z<Gd)d*ej,Z=Gd+d,ej,Z>Gd-d.ej,Z?d/Z@eAd0krejBdSdS)1zUnittests for the various HTTPServer modules.

Written by Cody A.W. Somerville <cody-somerville@ubuntu.com>,
Josip Dzolonga, and Michael Otteneder for the 2007/08 GHOP contest.
)OrderedDict)BaseHTTPRequestHandler
HTTPServerSimpleHTTPRequestHandlerCGIHTTPRequestHandler)server
HTTPStatusN)mock)BytesIOStringIO)support)	os_helper)threading_helperT)moduleceZdZdZddZdS)NoLogRequestHandlercdSN)selfargss  I/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/test_httpservers.pylog_messagezNoLogRequestHandler.log_message'sNcdSNr)rns  rreadzNoLogRequestHandler.read+srrr)__name__
__module____qualname__rrrrrrr&s7


rrc eZdZdZdZdZdS)TestServerThreadc`tj|||_||_dSr)	threadingThread__init__request_handlertest_object)rr*r)s   rr(zTestServerThread.__init__0s/!!$'''.&rctd|j|_|jj\|j_|j_|jj	d|_	|j
d|jdS#|jwxYw)N)	localhostrg?)rr)rsocketgetsocknamer*HOSTPORTserver_startedset
serve_foreverserver_closers rrunzTestServerThread.run5s !143GHH7;{7I7U7U7W7W4t/4'++---	'K%%d+++K$$&&&&&DK$$&&&&s6B++Cc`|j|dSr)rshutdownjoinr5s rstopzTestServerThread.stop?s'		rN)r r!r"r(r6r:rrrr$r$/sA'''
'''rr$c(eZdZdZdZddifdZdS)BaseTestCasec8tj|_tjt
_tj|_	t||j|_|j
|j	dSr)rthreading_setup_threadsrEnvironmentVarGuardosenvironr&Eventr1r$r)threadstartwaitr5s rsetUpzBaseTestCase.setUpEsu(8::
244
'o//&tT-ABB  """""rc|jd|_tjtj|jdSr)rDr:rArB__exit__rthreading_cleanupr?r5s rtearDownzBaseTestCase.tearDownMsG

*DM::::rGETNctj|j|j|_|j|||||jSr)httpclientHTTPConnectionr/r0
connectionrequestgetresponse)rurimethodbodyheaderss     rrRzBaseTestCase.requestSsO+44TY	JJT7;;;**,,,r)r r!r"rGrKrRrrrr<r<DsO###;;;#(dB------rr<ceZdZGddeeZdZdZdZdZ	dZ
dZd	Zd
Z
dZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdS)BaseHTTPServerTestCasecLeZdZdZdZdZdZdZdZdZ	dZ
dZd	Zd
Z
dS)&BaseHTTPServerTestCase.request_handlerHTTP/1.1c|tj|dd|dd|dS)NContent-Type	text/html
Connectionclose
send_responser	
NO_CONTENTsend_headerend_headersr5s rdo_TESTz.BaseHTTPServerTestCase.request_handler.do_TEST^s]z4555^[999\7333rc|tj|dd|dd|dS)Nr^r_r`
keep-aliverbr5s rdo_KEEPz.BaseHTTPServerTestCase.request_handler.do_KEEPds]z4555^[999\<888rc0|ddS)N
send_errorr5s rdo_KEYERRORz2BaseHTTPServerTestCase.request_handler.do_KEYERRORjsOOC     rcD|tjdSrrnr		NOT_FOUNDr5s rdo_NOTFOUNDz2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDmsOOJ011111rc4|ddddS)Nrlz
Short MessagezThis is a long 
 explanationrmr5s rdo_EXPLAINERRORz6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORps)OOC;
=
=
=
=
=rc|d|dd|dd|dS)Nrlr^r_r`ra)rcrerfr5s r	do_CUSTOMz0BaseHTTPServerTestCase.request_handler.do_CUSTOMtsZs###^[999\7333rc$|d|dd|dd||jdd}|j|dS)Nrl	X-SpecialDängerous Mindr`razx-special-incomingutf-8)rcrerfrWencodewfilewrite)rrVs  rdo_LATINONEHEADERz8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERzss###[*;<<<\7333< 45<<WEEDJT"""""rcd|t|jdddSNrnintpathr5s r
do_SEND_ERRORz4BaseHTTPServerTestCase.request_handler.do_SEND_ERROR,OOC	!""
../////rcd|t|jdddSrrr5s rdo_HEADz.BaseHTTPServerTestCase.request_handler.do_HEADrrN)r r!r"protocol_versiondefault_request_versionrgrjrorsrurwrrrrrrr)r[Zs%",							!	!	!	2	2	2	=	=	=				#	#	#	0	0	0	0	0	0	0	0rr)ct|tj|j|j|_|jdSr)	r<rGrNrOrPr/r0conconnectr5s rrGzBaseHTTPServerTestCase.setUpsM4   ;--diCCrc|jdd|j}||jt
jdS)NrL/)rrRrSassertEqualstatusr	NOT_IMPLEMENTEDrress  rtest_commandz#BaseHTTPServerTestCase.test_commandsN$$$h""$$Z%?@@@@@rcd|j_|jdd|j|j}||jtjdS)Nz	HTTP/1.1
XYZBOGUSr	r
_http_vsn_str
putrequest
endheadersrSrrr	rrs  rtest_request_line_trimmingz1BaseHTTPServerTestCase.test_request_line_trimmingsl!-J,,,h""$$Z%?@@@@@rcd|j_|jdd|j|j}||jtjdS)NFUBARrLr	rrrrrSrrr	BAD_REQUESTrs  rtest_version_bogusz)BaseHTTPServerTestCase.test_version_bogussl!(E3'''h""$$Z%;<<<<<rcd|j_|jdd|j|j}||jtjdS)Nz
HTTP/9.9.9rLrrrs  rtest_version_digitsz*BaseHTTPServerTestCase.test_version_digitssl!-E3'''h""$$Z%;<<<<<rcd|j_|jdd|j|j}||jtjdS)NzHTTP/-9_9_9.+9_9_9rLrrrs  r"test_version_signs_and_underscoresz9BaseHTTPServerTestCase.test_version_signs_and_underscoressl!5E3'''h""$$Z%;<<<<<rcd|j_|jdd|j|j}||jtjdS)NzHTTP/909876543210.0rLrrrs  r"test_major_version_number_too_longz9BaseHTTPServerTestCase.test_major_version_number_too_longl!6E3'''h""$$Z%;<<<<<rcd|j_|jdd|j|j}||jtjdS)NzHTTP/1.909876543210rLrrrs  r"test_minor_version_number_too_longz9BaseHTTPServerTestCase.test_minor_version_number_too_longrrcd|j_|jdd|j|j}||jtjdS)NrrLrrrs  rtest_version_none_getz,BaseHTTPServerTestCase.test_version_none_getsl!#E3'''h""$$Z%?@@@@@rcd|j_|jdd|j|j}||jtjdS)NrCUSTOMrrrs  rtest_version_nonez(BaseHTTPServerTestCase.test_version_nonesl!#Hc***h""$$Z%;<<<<<rcd|j_d|j_|jdd|j|j}||jtj	dS)NczHTTP/9.9rLr)
r	_http_vsnrrrrSrrr	HTTP_VERSION_NOT_SUPPORTEDrs  rtest_version_invalidz+BaseHTTPServerTestCase.test_version_invalidsv!+E3'''h""$$Z%JKKKKKrcd|j_|jdd|j|j}||jtjdSrrrs  rtest_send_blankz&BaseHTTPServerTestCase.test_send_blanksl!#B###h""$$Z%;<<<<<rc |jdd|jdd|j|j}||jtjdS)NrLrr`ra)	rr	putheaderrrSrrr	rrs  rtest_header_closez(BaseHTTPServerTestCase.test_header_closeszE3'''<111h""$$Z%?@@@@@rc8d|j_|jdd|jdd|j|j}||jtj	dS)Nr\rLrr`ri)
rrrrrrSrrr	rrs  rtest_header_keep_alivez-BaseHTTPServerTestCase.test_header_keep_alives!+E3'''<666h""$$Z%?@@@@@rc|jdd|j}||jt
jdS)NTESTr)rrRrSrrr	rdrs  rtest_handlerz#BaseHTTPServerTestCase.test_handlersN%%%h""$$Z%:;;;;;rc4|jdd|j}||dd|jdd||jjdS)NKEEPrr`rir)rrRrSr	getheader
addCleanuprars  rtest_return_header_keep_alivez4BaseHTTPServerTestCase.test_return_header_keep_alives%%%h""$$|44lCCC%%%'''''rc|jdd|j}||jddS)NKEYERRORrrlrrRrSrrrs  rtest_internal_key_errorz.BaseHTTPServerTestCase.test_internal_key_errorsKS)))h""$$S)))))rc|jdd|j}||jddS)Nrrrlrrs  rtest_return_custom_statusz0BaseHTTPServerTestCase.test_return_custom_statussK3'''h""$$S)))))rc|jdd|j}||jd|t
|ddS)NEXPLAINERRORrrlContent-Length)rrRrSrr
assertTruerrrs  rtest_return_explain_errorz0BaseHTTPServerTestCase.test_return_explain_errorsr---h""$$S)))CMM*:;;<<=====rc>|jddddi|j}||dd||dddS)	NLATINONEHEADERrzX-Special-IncominguÄrger mit UnicoderWryrzr{)rrRrSrrrr|rs  rtest_latin1_headerz)BaseHTTPServerTestCase.test_latin1_headers)3 (<9
			h""$${335FGGG%9%@%@%I%IJJJJJrcf|jdd|j}||jt
j|}|t|	dt|dS)NNOTFOUNDrr)rrRrSrrr	rrrrrlen)rrdatas   rtest_error_content_lengthz0BaseHTTPServerTestCase.test_error_content_length
sS)))h""$$Z%9:::xxzzS]]+;<<==s4yyIIIIIrctjtjf}tjtjtjtjtjfD]}|jdd||j	}|
||j|
d|d|
d|d||vr)|
d|d|
}|
d|dS)N
SEND_ERROR/{}rr^Transfer-Encodingr)r	NOT_MODIFIED
RESET_CONTENTrd
PROCESSINGSWITCHING_PROTOCOLSrrRformatrSrrrrrallow_transfer_encoding_codescoderrs     rtest_send_errorz&BaseHTTPServerTestCase.test_send_errors9)3)@)3)A)C%*J,C*J,D35	(	(D
H\5<<+=+=>>>(&&((CT3:...T3==1A#B#BCCCT3==#@#@AAA888  s}}5H'I'IJJJ88::DS$''''	(	(rctjtjf}tjtjtjtjtjfD]}|jdd||j	}|
||j|tjkrc|t|ddk|d|dnR|
d|d|
d|d||vr)|
d|d|}|
d|dS)	NHEADrrrr_r^rr)r	rrOKrdrrrRrrSrrrrrassertInrrs     rtest_head_via_send_errorz/BaseHTTPServerTestCase.test_head_via_send_error's)3)@)3)A)C%]J$9,j.F35	(	(D
HVU\\$%7%7888(&&((CT3:...z}$$CMM2B$C$C D Dq HIII

k3==+H+HIIII  s}}5E'F'FGGG  s}}^'D'DEEE888  s}}5H'I'IJJJ88::DS$''''!	(	(rN)r r!r"rrr)rGrrrrrrrrrrrrrrrrrrrrrrrrrrYrYYs,0,0,0,0,0-/E,0,0,0\
AAA
AAA===============AAA===LLL===AAAAAA<<<
(((***
***
>>>KKKJJJ((("(((((rrYc6eZdZGddeZdZdZdS)RequestHandlerLoggingTestCasec"eZdZdZdZdZdZdS)-RequestHandlerLoggingTestCase.request_handlerr\cl|tj|dSr)rcr	rrfr5s rdo_GETz4RequestHandlerLoggingTestCase.request_handler.do_GETBs0z}---rcF|tjddS)NzFile not foundrqr5s rdo_ERRORz6RequestHandlerLoggingTestCase.request_handler.do_ERRORFs OOJ02BCCCCCrN)r r!r"rrrrrrrr)r>sC%",				D	D	D	D	Drr)ctj|j|j|_|jtj5}|j	dd|j
dddn#1swxYwY||
ddS)NrLrz"GET / HTTP/1.1" 200 -
)rNrOrPr/r0rrr
captured_stderrrRrSrgetvalueendswith)rerrs  rtest_getz&RequestHandlerLoggingTestCase.test_getIs;--diCC

$
&
&	##HUC(((H  """	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	
LLNN##$>??	A	A	A	A	A5BB!$B!cZtj|j|j|_|jtj5}|j	dd|j
dddn#1swxYwY|d}|
|dd|
|dddS)NERRORr
rz code 404, message File not foundrz"ERROR / HTTP/1.1" 404 -)rNrOrPr/r0rrr
rrRrSrsplitrr)rrliness   rtest_errz&RequestHandlerLoggingTestCase.test_errTs-;--diCC

$
&
&	##HWc***H  """	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#$$T**a))*LMMNNNa))*DEEFFFFFrN)r r!r"rr)rrrrrrr=sm	D	D	D	D	D0	D	D	D	A	A	A
G
G
G
G
GrrcNeZdZGddeeZfdZfdZddZe	j
ejdkde	j
ejd	kd
e	j
ejddZd
ZdZdZdZdZdZdZdZdZdZdZxZS)SimpleHTTPServerTestCaseceZdZdS)(SimpleHTTPServerTestCase.request_handlerNr r!r"rrrr)rbrr)cttj|_tj}tj|d|_tj	||_
tj|j
|_
d|j
z|_tj|j
d}t!|d5}||j|dddn#1swxYwYtj|j}t*j|t*jj}|d|_t6j|d	|_dS)
NsWe are the knights who say Ni!)dirrtestwbr)microsecondTusegmt) superrGrAgetcwdcwdtempfile
gettempdirchdirrmkdtemptempdirrbasenametempdir_namebase_urlr9openr~flushstatst_mtimedatetime
fromtimestamptimezoneutcreplacelast_modif_datetimeemailutils
formatdate	timestamplast_modif_header)rbasetempdirtempnametempmtime
last_modif	__class__s      rrGzSimpleHTTPServerTestCase.setUpes


9;;)++
5	'K888G,,T\::d//
7<<f55
(D
!
!	TJJty!!!JJLLL															!!*&44U!##
#-#5#5!#5#D#D !&!7!7  ""4"8"1"1s//D**D.1D.c
	tj|j	tj|jn#YnxYwt
dS#t
wxYwr)rArrshutilrmtreerr
rK)rr,s rrKz!SimpleHTTPServerTestCase.tearDownzsz	HTX

dl++++
GGEGGsA 7A ;A  "BNc$fd}d|_}||j||j|r||||jd|j	ddd|ddd
|S)Nc$jd_dS)zWDon't close reader yet so we can check if there was leftover
            buffered inputN)fp)readerresponsesr
close_connzDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conns[FHKKKr
r`rarzConnection should be closed)_close_connrrrrassertIsNotNonereasonversionmsggetra)rr4rrr5rVr3s `    @rcheck_status_and_reasonz0SimpleHTTPServerTestCase.check_status_and_reasons						)}}!!!&111X_---	)T4(((	
)2...)),@@'JJJR#/LMMMrdarwinz2undecodable name cannot always be decoded on macOSwin32z+undecodable name cannot be decoded on win32z!need os_helper.TESTFN_UNDECODABLEctj}tjtjdz}t
tj|j	|d5}|
tjdddn#1swxYwY||jdz}tj
dkr&tj|j	D]}|dkr|}n
||t j}t$j|d}|d|z|d	||d
t/j|dz|d	|||jdz|z}||t jtj
dS)Nz.txtr	rr?r
surrogatepass)errorsz	href="%s"surrogateescape>%s<Fquoter)sysgetfilesystemencodingrAfsdecoderTESTFN_UNDECODABLErrr9rr~rRrplatformlistdirr>r	rurllibparserGrr|htmlescape)rencfilenamefr4namerV
quotednames        rtest_undecodable_filenamez2SimpleHTTPServerTestCase.test_undecodable_filenames'));y;<<vE
"',,t|X66
=
=	2
GGI0111	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2<<
 344<8##
4<00

6>>#HE"++HjmDD\'''II


{Z/vc#455t	=	=	=

vHE B B BBvc#455t	=	=	=<<
 3j @AA$$Xz}*3*F	%	H	H	H	H	Hs( BBBc||jdz}||d|jdd||jdz}||d|jdddS)Nz/?x=123zlisting for z/\?x=123latin1z/?x=%bbz/\?x=\xef\xbf\xbd)rRrrassertRegexr|rr4s  rtest_undecodable_parameterz3SimpleHTTPServerTestCase.test_undecodable_parameters<<
	 9::??AA#J4=#J#J#J#Q#QRZ#[#[\\\<<
	 9::??AA#S4=#S#S#S#Z#Z[c#d#deeeeerc<tjtj|jdd|jd}|d}||}||tj	|
d}|||dd|}||}||tj	|
d}||
d||||d	d|}||}||tj	||
d|d
|}|d}||}||tj	|
d}||
d
|dS)aIEnsure //evil.co/..%2f../../X does not put //evil.co/ in Location.

        //netloc/ in a Location header is a redirect to a new host.
        https://github.com/python/cpython/issues/87389

        This checks that a path resolving to a directory on our server cannot
        resolve into a redirect to another server.
        existing_directoryz2/python.org/..%2f..%2f..%2f..%2f..%2f../%0a%0d/../z/existing_directoryrLocationznon-attack failed!r<//zcExpected Location header to start with a single / and end with a / as this is a directory redirect.zhttps://pypi.org/N)rAmkdirrr9rrrRr>r	MOVED_PERMANENTLYrrassertFalse
startswithr)	rurlexpected_locationr4location
attack_urlattack3_urlattack_scheme_netloc_2slash_urlexpected_scheme_netloc_locations	         r3test_get_dir_redirect_location_domain_injection_bugzLSimpleHTTPServerTestCase.test_get_dir_redirect_location_domain_injection_bugs%	dl,@AABBBi4CTiii"III<<$$$$Xz/KLLL%%j11#4:NOOOYY
<<
++$$Xz/KLLL%%j11,,T22AAA#4@		A	A	A
!3jj<<,,$$Xz/KLLL++J779JKKK+Dc*C*C'-L*O*O*O'<< ?@@$$Xz/KLLL%%j11	
++,?@@hOOOOOrc||jdz}||tj|j||jdz}||tj||jdz}||tj||j}||tj||	dd||jdz}||tj||jdz}||tj||	d	|jd
z|d}||tj|d}||tjtjtj
|jd
d||jdz}||tjd}ttj
|jdd5}||dddn#1swxYwY||jdz}||tj|tjdkrtjdkrtj|jd	||jdz}||tjtj|jddS#tj|jdwxYwdSdS)N/testrH/test/rr0/?hi=2?hi=1r`/?hi=1z/ThisDoesNotExistz/ThisDoesNotExist/spamz
index.htmlz/spam/sDummy index file
r	posixri)rRrr>r	rrrrrdrrrAmakedirsrr9rrrr~rVgeteuidchmod)rr4rrUs    rrz!SimpleHTTPServerTestCase.test_gets<<
 788$$Xz}49$MMM<<
 899$$Xz/CDDD<<
 344$$Xz}===<<
..$$Xz/KLLL++,<==sCCC<<
 899$$Xz}===<<
 788$$Xz/KLLL++J771	3	3	3<< 344$$Xz/CDDD<< >??$$Xz/CDDD
BGLLv|DDEEE<<
 899$$Xz}===&
"',,t0,??
F
F	!
GGDMMM															<<
 344$$Xz}dCCC7g"*,,!"3"3HT\1%%%
.<<
(;<<,,Xz7KLLLu-----u----
"3"3s!LL
L=O''Pcf||jdzd}||tj||dtt|j	||dddS)NrprrUzcontent-lengthzcontent-typezapplication/octet-stream)
rRrr>r	rrrstrrrr\s  r	test_headz"SimpleHTTPServerTestCase.test_heads<<MG#F 44$$Xz}===++,<==S^^,,	.	.	.++N;;3	5	5	5	5	5rctj}|j|d<||jdz|}||tj|j	tjdz}tj}tj
|d|d<||jdz|}||tjdS)	zCheck that when a request to /test is sent with the request header
        If-Modified-Since set to date of last modification, the server returns
        status code 304, not 200
        If-Modified-Sincerprr)hoursTrN)r"messageMessager&rRrr>r	rr!r	timedeltar#format_datetime)rrWr4new_dts    rtest_browser_cachez+SimpleHTTPServerTestCase.test_browser_cache&s
-''))'+'=#$<<
 7<II$$Xz/FGGG)H,>Q,G,G,GG-''))',{'B'B6(C((#$<<
 7<II$$Xz/FGGGGGrcF|j}|tjdz
}tj}tj|d|d<||j	dz|}|
|tjdS)Nim)daysTrrrpr)
r!rrr"rrr#rrRrr>r	r)rdtold_dtrWr4s     rtest_browser_cache_file_changedz8SimpleHTTPServerTestCase.test_browser_cache_file_changed8s

%h(c2222-''))',{'B'B6(C((#$<<
 7<II$$Xz}=====rctj}|j|d<d|d<||jdz|}||tjdS)Nr*z
If-None-Matchrpr)	r"rrr&rRrr>r	r)rrWr4s   r,test_browser_cache_with_If_None_Match_headerzESimpleHTTPServerTestCase.test_browser_cache_with_If_None_Match_headerCsi-''))'+'=#$#& <<
 7<II$$Xz}=====rcP|dd}||tj|dd}||tj|dd}||tjdS)NrFOOr|customGETs)rRr>r	rr\s  rtest_invalid_requestsz.SimpleHTTPServerTestCase.test_invalid_requestsLs<<E<22$$Xz/IJJJ<<H<55$$Xz/IJJJ<<F<33$$Xz/IJJJJJrc||jdz}||tj|j|jd}|||jdS)zChecks that the datetime returned in Last-Modified response header
        is the actual datetime of last modification, rounded to the second
        rprHz
Last-modifiedN)	rRrr>r	rrrWrr&)rr4r&s   rtest_last_modifiedz+SimpleHTTPServerTestCase.test_last_modifiedUsi<<
 788$$Xz}49$MMM$,_=*D,BCCCCCrcL||jdz}||tj|j||jdz}||tj||jdz}||tj||j}||tj||jdz}||tj||jdz}||tj||	d|jdzdS)	NrprHrqrrsrtr`ru)
rRrr>r	rrrrrdrrr\s  rtest_path_without_leading_slashz8SimpleHTTPServerTestCase.test_path_without_leading_slash^sj<< 1G ;<<$$Xz}49$MMM<< 1H <==$$Xz/CDDD<< 1C 788$$Xz}===<< 122$$Xz/KLLL<< 1H <==$$Xz}===<< 1G ;<<$$Xz/KLLL++J77*X5	7	7	7	7	7rcd}tj|j|}	t	|dn%#t$rtjd|zwxYw	|	|j
dz}||tj
}|j}tj|n#tj|wxYw||dt%j|dz}||||dS)Nz<test&>.txtr	z-Can not create file %s on current file systemrrEFrF)rArr9rrraOSErrorunittestSkipTestrRrr>r	rrWget_content_charsetunlinkr9rQrRrr|)rrTfullpathr4rVrS	html_texts       rtest_html_escape_filenamez2SimpleHTTPServerTestCase.test_html_escape_filenamensE 7<<h77	94  &&((((	9	9	9#%-/7%899
9	9	 ||DMC$788H//*-HHD"6688CIhBIhS!!!T[????	

i&&s++T22222s"A"A.2ACC3r)r r!r"rrr)rGrKr>rskipIfrIrM
skipUnlessrrLrXr]rnrr~rrrrrrr
__classcell__r,s@rrras




-/G


11111*2X_S\X-IKKX_S\W,BDDX5<>>HH>>DDKKH.fff/P/P/Pb(.(.(.T555HHH$	>	>	>>>>KKKDDD777 3333333rrzD#!%s

print("Content-type: text/html")
print()
print("Hello World")
a#!%s
import os
import sys
import urllib.parse

print("Content-type: text/html")
print()

content_length = int(os.environ["CONTENT_LENGTH"])
query_string = sys.stdin.buffer.read(content_length)
params = {key.decode("utf-8"): val.decode("utf-8")
            for key, val in urllib.parse.parse_qsl(query_string)}

print("%%s, %%s, %%s" %% (params["spam"], params["eggs"], params["bacon"]))
zR#!%s
import os

print("Content-type: text/html")
print()

print(os.environ["%s"])
a'#!%s
import os

print("X-ambv: was here")
print("Content-type: text/html")
print()
print("<pre>")
for k, v in os.environ.items():
    try:
        k.encode('ascii')
        v.encode('ascii')
    except UnicodeEncodeError:
        continue  # see: BPO-44647
    print(f"{k}={v}")
print("</pre>")
ryz7This test can't be run reliably as root (issue #13308).ceZdZGddeeZejdZdZ	dZ
dZdZdZ
d	Zd
ZdZdZd
ZdZdZdZdZdZdZdS)CGIHTTPServerTestCaseceZdZdS)%CGIHTTPServerTestCase.request_handlerNrrrrr)rrrr)asciic
t|tj|_tj|_tj	|jd|_
tj	|j
d|_tj	|jd|_tj	|jd|_
tj	|j
d|_tj|j
tj|jtj|jtj|j
tj|jd|_d|_d|_d|_d|_d|_d|_t/jr[tj	|jd|_t5j|j|_nt:j|_	|jdn9#t@$r,|!|"dYnwxYwtj	|jd|_tG|jd	d
5}|$tJ|jzdddn#1swxYwYtj&|jdtj	|j
d|_tG|jd	d
5}|$tJ|jzdddn#1swxYwYtj&|jdtj	|j
d
|_tG|jd	d
5}|$tN|jzdddn#1swxYwYtj&|jdtj	|jd|_tG|jd	d
5}|$tJ|jzdddn#1swxYwYtj&|jdtj	|j
d|_tG|jd	d
5}|$tP|jdfzdddn#1swxYwYtj&|jdtj	|jd|_tG|jd	d
5}|$tJ|jzdddn#1swxYwYtj&|jdtj	|j
d|_)tG|j)d	d
5}|$tT|jzdddn#1swxYwYtj&|j)dtj+|jdS)Nzcgi-binz	child-dirsubrpythonr{z0Python executable path is not encodable to utf-8znocgi.pyw)encodingizfile1.pyzfile2.pyzfile3.pyzfile4.pyQUERY_STRINGzfile5.pyzfile6.py),r<rGrArrrr
parent_dirrr9cgi_dir
cgi_child_dir	sub_dir_1	sub_dir_2cgi_dir_in_sub_dirrc
nocgi_path
file1_path
file2_path
file3_path
file4_path
file5_path_pythonexe_symlinkrcan_symlink	pythonexer

PythonSymlink	__enter__rI
executabler|UnicodeEncodeErrorrKskipTestrr~	cgi_file1rz	cgi_file2	cgi_file4
file6_path	cgi_file6r)rr2file1file2file3file4file5file6s        rrGzCGIHTTPServerTestCase.setUps4   9;;"*,,w||DOY??W\\$,DDdou==dne<<"$',,t~y"I"I

#$$$
   
   
()))#' ""	,W\\$/8DDDN&-&;DN&K&K&U&U&W&WD## ^DN	N
N!!'****!	N	N	NMMOOOMMLMMMMM	N',,t
CC
$/3
9
9
9	1RHHY/000	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1
%(((',,t|Z@@
$/3
9
9
9	4UKK	DN2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4
%(((',,t|Z@@
$/3
9
9
9	4UKK	DN2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4
%(((',,t'9:FF
$/3
9
9
9	4UKK	DN2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4
%(((',,t|Z@@
$/3
9
9
9	FUKK	T^^$DDEEE	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F
%(((',,t'>
KK
$/3
9
9
9	4UKK	DN2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4
%(((',,t|Z@@
$/3
9
9
9	4UKK	DN2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4
%(((
!!!!!sI&&3JJ #LLL5#N$$N(+N(
#P99P=P=#SSS4%U%%U),U)#W::W>W> #ZZZc	tj|j|jr|jddd|jrtj|j|jrtj|j|jrtj|j|j	rtj|j	|j
rtj|j
|jrtj|j|jrtj|jtj
|jtj
|jtj
|jtj
|jtj
|jtj
|jt(|dS#t(|wxYwr)rArrrrIrremoverrrrrrrmdirrrrrrrr<rKr5s rrKzCGIHTTPServerTestCase.tearDowns	(HTX&
C'00tTBBB
+	$/***
+	$/***
+	$/***
+	$/***
+	$/***
+	$/***
+	$/***HT'(((HT\"""HT,---HT^$$$HT^$$$HT_%%%!!$'''''L!!$''''sF2GG,c
idddtdtddddddddd	d
d
d
ddd
ddddddddddddddddddtddtddd}|D]\}}t|tr7t	|t
r"||tj|Qtj|}|	||d|d|d|dS)Nrrbz..z/.//..rz/\z//\z/.//cgi-bin/file1.py/cgi-bin/file1.pyaz//az/az./az./C:/z/C:/z/a/bz/a/b/z/a/b/.z/a/b/dz/a/b/d/fz/a/b/fz/a/fz//f)z	/a/b/c/..z/a/b/c/../dz/a/b/c/../d/e/../fz/a/b/c/../d/e/../../fz/a/b/c/../d/e/.././././..//fz../a/b/c/../d/e/.././././..//fz/a/b/c/../d/e/../../../fz/a/b/c/../d/e/../../../../fz/a/b/c/../d/e/../../../../../fz/a/b/c/../d/e/../../../../f/..z /a/b/c/../d/e/../../../../f/../.zpath = z	
Got:    z	
Wanted: ra)

IndexErroritems
isinstancetype
issubclass	ExceptionassertRaisesr_url_collapse_pathr)rtest_vectorsrexpectedactuals     rtest_url_collapse_pathz,CGIHTTPServerTestCase.test_url_collapse_path*s

*

j

	


$

6


D

 3

 !4



%

5

5

V

F
 
W!
"
g#
$!#",%-,4.8(.+0.8.2049


<+0022	;	;ND((D))
;j9.M.M
;!!("(";TCCCC 2488  66"&$$&:!;;;;
	;	;rc|d}|||d|jfd|jzdtjfdS)NrContent-typeHello Worldr_)rRrrrrlinesepr	rrs  rtest_headers_and_contentz.CGIHTTPServerTestCase.test_headers_and_contentTsnll.//
XXZZ~66
C
dl
*KG	I	I	I	I	Ircz|d}||jtjdS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)rRrrr	rrrs  rtest_issue19435z%CGIHTTPServerTestCase.test_issue19435Zs5llFGGZ%9:::::rctjdddd}ddi}|dd||}||d	|jzdS)
Nrri@)rveggsbaconrz!application/x-www-form-urlencodedz/cgi-bin/file2.pyPOSTs1, python, 123456)rOrP	urlencoderRrrr)rparamsrWrs    r	test_postzCGIHTTPServerTestCase.test_post^su''(f==??!$GHll.HH%9DL%HIIIIIrc|d}|||jtjdS)Nz/cgi-bin/invalid)rRrrrr	rrrs  rtest_invaliduriz%CGIHTTPServerTestCase.test_invalidurifsBll-..


Z%9:::::rcddtjdzi}|dd|}|d|jzdt
jf||d	|j	fdS)
Ns
AuthorizationsBasic s
username:passrrLrrr_r)
base64	b64encoderRrrr	rrrr)rrWrs   rtest_authorizationz(CGIHTTPServerTestCase.test_authorizationks#i#$455'67ll.wlGG
dl
*KG
XXZZ~66
C	E	E	E	E	Erc|d}|d|jzdtjf||d|jfdS)Nrrr_rrRrrr	rrrrrs  rtest_no_leading_slashz+CGIHTTPServerTestCase.test_no_leading_slashssnll-..
dl
*KG
XXZZ~66
C	E	E	E	E	ErcNd}|tjd<|d}|d|jzdt
jf||d|j	f|tjd|dS)NzTest CGI ServerSERVER_SOFTWARErrr_r)
rArBrRrrr	rrrr)r	signaturers   rtest_os_environ_is_not_alteredz4CGIHTTPServerTestCase.test_os_environ_is_not_alteredzs%	(1
$%ll.//
dl
*KG
XXZZ~66
C	E	E	E	
$56	BBBBBrc|d}|d|jzdtjf||d|jfdS)Nz/cgi-bin%2ffile1.pyrr_rrrs  r#test_urlquote_decoding_in_cgi_checkz9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checksnll011
dl
*KG
XXZZ~66
C	E	E	E	E	Erc|d}|d|jzdtjf||d|jfdS)Nz/cgi-bin/child-dir/file3.pyrr_rrrs  rtest_nested_cgi_path_issue21323z5CGIHTTPServerTestCase.test_nested_cgi_path_issue21323snll899
dl
*KG
XXZZ~66
C	E	E	E	E	Erc|d}|d|jzdtjf||d|jfdS)Nz/cgi-bin/file4.py?a=b?c=dsa=b?c=dr_rrrs  r&test_query_with_multiple_question_markz<CGIHTTPServerTestCase.test_query_with_multiple_question_marksnll677
$,
&Z]C
XXZZ~66
C	E	E	E	E	Erc|d}|d|jzdtjf||d|jfdS)Nz0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//sk=aa%2F%2Fbb&//q//p//=//a//b//r_rrrs  r"test_query_with_continuous_slashesz8CGIHTTPServerTestCase.test_query_with_continuous_slashessqllMNN
.
=
*-
)
XXZZ~66
C	E	E	E	E	Erc	tjd|d}|d|jzdtjf||	d|j
ftjddS#tjdwxYw)Nz/sub/dir/cgi-binz/sub/dir/cgi-bin/file5.pyrr_r)rcgi_directoriesappendrRrrr	rrrrrrs  r test_cgi_path_in_sub_directoriesz6CGIHTTPServerTestCase.test_cgi_path_in_sub_directoriess	M!1889KLLL,,:;;C$,.Z]KS]]>::CJG
I
I
I
"1889KLLLLL!1889KLLLLsBB//!Ccd}d|ff|fddf}|D]\}}t|}||5|dd|}|tjj|jd|d	}|	||
dddn#1swxYwYdS)
Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept)rr)))rr_)ACCEPTz
text/plainztext/html,text/plainz/cgi-bin/file6.pyrLrzHTTP_ACCEPT=r)rsubTestrRrrNr	rrr|rr)rbrowser_accepttestsrWrrs      rtest_acceptz!CGIHTTPServerTestCase.test_accepts,U	(
*N;
'	
"'	4	4GX!'**Gg&&
4
4ll#6wlOO  !3SZ@@@4(44;;GDD

h

333	
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4	4	4sBCC	C	N)r r!r"rrr)rArr|rGrKrrrrrrrrrrrrr	rrrrrrsl




-/D


j((GJ"J"J"X(((8(;(;(;TIII;;;JJJ;;;
EEEEEECCCEEEEEEEEEEEEMMM44444rrc,eZdZdfd	ZdZdZxZS)SocketlessRequestHandlerNctj}t|j_t|dd|d|_d|_dS)N	directoryFr\)	r
Mockrmakefilereturn_valuer
r(
get_calledr)rrrRr,s   rr(z!SocketlessRequestHandler.__init__sS)++(/		%
$	BBB *rcd|_|tj|dd||jddS)NTr^r_ <html><body>Data</body></html>
)rrcr	rrerfr}r~r5s rrzSocketlessRequestHandler.do_GETsd:=)))555
>?????rcdSrr)rrrs   rrz$SocketlessRequestHandler.log_messagesrr)r r!r"r(rrrrs@rrrs^++++++@@@






rrceZdZdZdS)!RejectingSocketlessRequestHandlercD|tjdS)NF)rnr	EXPECTATION_FAILEDr5s rhandle_expect_100z3RejectingSocketlessRequestHandler.handle_expect_100s
5666urN)r r!r"r!rrrrrs#rrc6eZdZdZdZdZedZdS)AuditableBytesIOcg|_dSr)datasr5s rr(zAuditableBytesIO.__init__s



rc:|j|dSr)r%r)rrs  rr~zAuditableBytesIO.writes
$rc6d|jS)Nr)r9r%r5s rgetDatazAuditableBytesIO.getDatasxx
###rc*t|jSr)rr%r5s r	numWriteszAuditableBytesIO.numWritess4:rN)r r!r"r(r~r(propertyr*rrrr#r#s\   $$$Xrr#ceZdZdZejdZdZdZdZ	dZ
dZdZd	Z
d
ZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdS)BaseHTTPRequestHandlerTestCasezrTest the functionality of the BaseHTTPServer.

       Test the support for the Expect 100-continue header.
       sHTTP/1.[0-9]+ 200 OKc,t|_dSr)rhandlerr5s rrGz$BaseHTTPRequestHandlerTestCase.setUps/11rct|}t}||j_||j_|j|d|SNr)rr/rfiler}handle_one_requestseek	readlines)rrinputoutputs    rsend_typical_requestz3BaseHTTPRequestHandlerTestCase.send_typical_requestsa  "#'')))A!!!rcD||jjdSr)rr/rr5s rverify_get_calledz0BaseHTTPRequestHandlerTestCase.verify_get_calleds/00000rcpdD]1|tfd|Dd2dS)N)sServer: sDate: sContent-Type: c3BK|]}|VdSr)rf).0h	fieldNames  r	<genexpr>zIBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>s/ J JQi!8!8 J J J J J Jrr)rsum)rrWr?s  @rverify_expected_headersz6BaseHTTPRequestHandlerTestCase.verify_expected_headerssVB	O	OIS J J J J' J J JJJANNNN	O	Orcd|j|}||dSr)HTTPResponseMatchsearchr9)rr4matchs   rverify_http_server_responsez:BaseHTTPRequestHandlerTestCase.verify_http_server_responses2&--h77U#####rc8d|j_tj}tjtdt5}||jd||jd||jdd||jdd||jddddn#1swxYwY|	}|
d	||
d
||}|d|d|d|d
|d|d|d|d|d|ddS)N)	127.0.0.1i9stderrz/fooz/barz	/spam %s.ruŸ beansz"GET /foo\b"ar HTTP/1.0"rz/\x1bbar\x00\x1brz/spam a.u/spam \x1b\x7f\x9f beans.z"GET /foo\\b"ar\x07 HTTP/1.0")
r/client_addressrrr
patchobjectrIrrassertNotIn
splitlinesr)rrfake_stderrrJrs     rtest_unprintable_not_loggedz:BaseHTTPRequestHandlerTestCase.test_unprintable_not_loggeds':#,8
Z

sHhjj
9
9	G[Kf---K&8999Kk3777Kk3JKKKK&EFFF	G	G	G	G	G	G	G	G	G	G	G	G	G	G	G%%''((((((!!##

feAh'''

)58444

j%(+++

7qBBB

6aAAAAAsAB//B36B3cd|d}||d||dd|||dd||jjd||jjd||jjd||jj	d	|
|jjd
dS)NGET / HTTP/1.1

rrrGET / HTTP/1.1rLrr\r
r8rGrBr:rr/requestlinecommandrrequest_versionassertSequenceEqualrWrrresults  r
test_http_1_1z,BaseHTTPRequestHandlerTestCase.test_http_1_1**+DEE((333$$VAbD\222   %JKKK13CDDD-u555*C0005zBBB  !5!;!;!=!=rBBBBBrcd|d}||d||dd|||dd||jjd||jjd||jjd||jj	d	|
|jjd
dS)NsGET / HTTP/1.0

rrrYrGET / HTTP/1.0rLrHTTP/1.0rr[r`s  r
test_http_1_0z,BaseHTTPRequestHandlerTestCase.test_http_1_0"rcrc|d}|t|d||dd|dS)NsGET / HTTP/0.9

rrr)r8rrr:r`s  r
test_http_0_9z,BaseHTTPRequestHandlerTestCase.test_http_0_9.se**+DEEVa((($IJJJ     rc*|d}||dd||d|d||jjdS)Ns)GET /spaced out HTTP/1.1
Host: dummy

rs
HTTP/1.1 400 r
)r8rrfrBindexrer/rr`s  rtest_extra_spacez/BaseHTTPRequestHandlerTestCase.test_extra_space4s**



	
q	,,-=>>???$$VAfll7.C.C,C%DEEE011111rch|d}||d||dd|||dd||jjd||jjd||jjd||jj	d	d
}|
|jj|dS)Ns(GET / HTTP/1.0
Expect: 100-continue

rrrYrrerLrrf)Expectz100-continuer[rrarWs   rtest_with_continue_1_0z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_0>s**+\]]((333$$VAbD\222   %JKKK13CDDD-u555*C0005zBBB/  !5!;!;!=!=wGGGGGrc|d}||dd||dd||dd||dd|||dd	||jjd
||jjd||jjd||jjd
d}|	|jj
|dS)N(GET / HTTP/1.1
Expect: 100-continue

rsHTTP/1.1 100 Continue
rrkrMsHTTP/1.1 200 OK
rYrrZrLrr\ro)r8rrBr:r/r\r]rr^r_rWrrqs   rtest_with_continue_1_1z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1KsN**+\]]$@AAAG,,,$:;;;$$VAbD\222   %JKKK13CDDD-u555*C0005zBBB/  !5!;!;!=!=wGGGGGrctd}t}t}||_||_d|_d|_d|_|d|	|j
ddS)NrXr\rrM)rr#rr2r}r^r\r]rnrr*rr6r7r/s    r#test_header_buffering_of_send_errorzBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_errorZs~122!##*,,

", 3)1-----rcDtd}t}t}||_||_d|_|d||jd|	||jddS)NrXr\rwrr)
rr#rr2r}r^send_response_onlyrr*rfrxs    r+test_header_buffering_of_send_response_onlyzJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_onlyhs122!##*,,

",""3''')1---)1-----rctd}t}t}||_||_d|_|dd|dd||jd|	||
d||jddS)	NrXr\FoofoobarrsFoo: foo
bar: bar

r)rr#rr2r}r^rerr*rfr(rxs    r$test_header_buffering_of_send_headerzCBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_headervs122!##*,,

",E5)))E5))))1---))+JKKK)1-----rcd}td}t}||j_||j_d|j_|j|||d||d}||dd||dd||d	d
dS)Nc|}|d|}|||Sr1)tellr4r)rUposrs   r_readAndReseekz[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseeks?&&((C
FF1III6688D
FF3KKKKrrtr\rrkrsHTTP/1.1 100 ContinuerrMsHTTP/1.1 200 OK)	rr/r2r}r^r3assertNotEqualrr)rrr6r7ras     r$test_header_unbuffered_when_continuezCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continues			IJJ"#'1$'')))NN622C888''--g66$<===C((($677777rc|j}t|_|d}||dd||dd||jj|td|ddDd||_dS)Nrtrs!HTTP/1.1 417 Expectation Failed
rrYc3"K|]
}|dkVdS)sConnection: close
Nr)r=rs  rr@zMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>s(QQqQ"::QQQQQQr)r/rr8rrBrerrA)r
usual_handlerras   rtest_with_continue_rejectedz:BaseHTTPRequestHandlerTestCase.test_with_continue_rejecteds
8::**+\]]$JKKK$$VAbD\222	
0111QQF1R4LQQQQQSTUUU$rc|dddzz}||dd||jj||jjtdS)NsGET xrs#HTTP/1.1 414 Request-URI Too Long
)r8rrer/rassertIsInstancer\r}r`s  rtest_request_lengthz2BaseHTTPRequestHandlerTestCase.test_request_lengthsu**7TE\+ABB$LMMM0111dl6<<<<<rc|dddzzdz}||dd||jj||jjddS)NsGET / HTTP/1.1
X-Foo: barrrs

rsHTTP/1.1 431 Line too long
rZr8rrer/rr\r`s  rtest_header_lengthz1BaseHTTPRequestHandlerTestCase.test_header_lengths**+dUl:[HJJ$EFFF011113CDDDDDrc|d}||dd||jj||jjddS)NsGET / HTTP/1.1
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar

rsHTTP/1.1 431 Too many headers
rZrr`s  rtest_too_many_headersz4BaseHTTPRequestHandlerTestCase.test_too_many_headerssr**EGG$HIII011113CDDDDDrc|d}d|}d}|tj|dd|dS)Ns*<script>alert("hello")</script> / HTTP/1.1rz<script>alert("hello")</script>FrFr)r8r9rrQrRr|)rratexts   rtest_html_escape_on_errorz8BaseHTTPRequestHandlerTestCase.test_html_escape_on_errorsg**9;;&!!0

dk$e444;;GDDfMMMMMrcRfd}|j_tdjt
ttdjt
tdS)Nc:tj_dSr)nextr/close_connection)close_valuesrsrr3zPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_requests,0,>,>DL)))r)T)FFT)r/r3iterhandler
StopIterationr)rr3rs` @rtest_close_connectionz4BaseHTTPRequestHandlerTestCase.test_close_connections	?	?	?	?	?	?*<'G}}-|<<<011-|<<<<<rc	tj}tj|\	}}}}}}}}	}
d|jj|||jj|||||fz}||j||dS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)r%)timegmtimer/weekdayname	monthnamerdate_time_string)rnowyearmonthdayhhmmsswdyzrs            rtest_date_time_stringz4BaseHTTPRequestHandlerTestCase.test_date_time_stringsikk15S1A1A.eS"b"b!Q8L$R(L"5)"b"	<

	
666EExPPPPPrN)r r!r"__doc__recompilerDrGr8r:rBrGrVrbrgrirmrrruryr|rrrrrrrrrrrrr-r-s
#
#:;;222"""111OOO$$$BBB*
C
C
C
C
C
C!!!222HHH
H
H
H......... 888,
%
%
%===EEEEEENNN
=
=
=
Q
Q
Q
Q
Qrr-c*eZdZdZdZdZdZdZdS) SimpleHTTPRequestHandlerTestCasez Test url parsing ctjtjd|_tjdd|_tjdd|_t|_td|_	ttjd|_dS)NrTrrr)
rArr9rtranslated_1translated_2translated_3r	handler_1	handler_2pathlibPurePath	handler_3r5s rrGz&SimpleHTTPRequestHandlerTestCase.setUpsGLLjAAGLL
;;GLL
;;1331EBBB1G<LU<S<STTTrc|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||jdS)Nz	/filenamez/filename?foo=barz/filename?a=b&spam=eggs#zotrtranslate_pathrrrrrrrrs  rtest_query_argumentsz5SimpleHTTPRequestHandlerTestCase.test_query_argumentss~,,[99t0111~,,[99t0111~,,[99t0111~,,-@AAt0111~,,-@AAt0111~,,-@AAt0111~,,-JKKt0111~,,-JKKt0111~,,-JKKt011111rc|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||j|jd}|||jdS)Nz
//filenamez//filename?foo=barrrs  rtest_start_with_double_slashz=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slashs~,,\::t0111~,,\::t0111~,,\::t0111~,,-ABBt0111~,,-ABBt0111~,,-ABBt011111rcj	tjtjdt5|jd}|tjtj}|	||j
|jd}|tjtj}|	||j|j
d}|tjtj}|	||j|jd}|tjtj}|	||j
|jd}|tjtj}|	||j|j
d}|tjtj}|	||j|jd}|tjtj}|	||j
|jd}|tjtj}|	||j|j
d}|tjtj}|	||j|jd}|tjtj}|	||j
|jd}|tjtj}|	||j|j
d}|tjtj}|	||jddddS#1swxYwYdS)Nrzc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r
	swap_attrrrAntpathrrr seprrrrrrrs  rtest_windows_colonz3SimpleHTTPRequestHandlerTestCase.test_windows_colons

vy&&
9
9'	6'	6>001EFFD<<
BF33DT4#4555>001EFFD<<
BF33DT4#4555>001EFFD<<
BF33DT4#4555>001BCCD<<
BF33DT4#4555>001BCCD<<
BF33DT4#4555>001BCCD<<
BF33DT4#4555>001IJJD<<
BF33DT4#4555>001IJJD<<
BF33DT4#4555>001IJJD<<
BF33DT4#4555>001LMMD<<
BF33DT4#4555>001LMMD<<
BF33DT4#4555>001LMMD<<
BF33DT4#4555O'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6'	6sQ5R((R,/R,N)r r!r"rrGrrrrrrrrsYUUU222,
2
2
2(6(6(6(6(6rrceZdZdZdS)MiscTestCasec2g}hd}ttD][}|ds||vrtt|}t|dddkr||\|tj|dS)N>rr
nobody_uid_r!zhttp.server)rrrfgetattrrassertCountEqual__all__)rrdenylistrV
module_objects     rtest_allzMiscTestCase.test_all=s777KK	&	&Ds##
tx'7'7#FD11M}lD99]JJ%%%fnh77777rN)r r!r"rrrrrr<s#	8	8	8	8	8rrceZdZdZejddZejddZdZdZ	ejddZ
ejddZd	S)
ScriptTestCasectjtjtjtjtjdS)NcdS)N)rrrrrr<lambda>z2ScriptTestCase.mock_server_class.<locals>.<lambda>Qsr)r.)r-)r)r)r
	MagicMockr5s rmock_server_classz ScriptTestCase.mock_server_classKsp~.!%#~(7   """






	
rzbuiltins.printc|}tj|d||jt
jt
jfdSNServerClassbindrrrraddress_familyr-AF_INET6AF_INETrrmock_servers   rtest_server_test_unspecz&ScriptTestCase.test_server_test_unspecXsZ,,..$7777

&
_fn-	
	
	
	
	
rc|}tj|d||jt
jt
jfdS)Nr,rrrs   rtest_server_test_localhostz)ScriptTestCase.test_server_test_localhostasZ,,..+>>>>

&
_fn-	
	
	
	
	
r)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334z::1)z0.0.0.0z8.8.8.8rIc|jD]Q}|}tj||||jtjRdSr)
ipv6_addrsrrrrrr-rrrrrs    rtest_server_test_ipv6z$ScriptTestCase.test_server_test_ipv6vseO	J	JD0022KKKd;;;;[7IIII	J	Jrc|jD]Q}|}tj||||jtjRdSr)
ipv4_addrsrrrrrr-rrs    rtest_server_test_ipv4z$ScriptTestCase.test_server_test_ipv4}seO	I	ID0022KKKd;;;;[7HHHH	I	IrN)r r!r"rr
rQrrrrrrrrrrrIs


TZ !!

"!
TZ !!

"!
JJTZ !!JJ"!JTZ !!II"!IIIrrcftjtjtjdSr)raddModuleCleanuprArrrrrsetUpModulers#bh	44444r__main__)Crcollectionsrhttp.serverrrrrrNrr	rAr-rIrrrrr.
email.messager"email.utilsrQhttp.clienturllib.parserOrrrr&rr
iorrrr
test.supportrrrequires_working_socketrr'r$TestCaser<rYrrrrrrrhasattrryrrrr#r-rrrrr mainrrr<module>rs
$#####555555555555########				







				











        """"""))))))t,,,,y'*-----8$---*a(a(a(a(a(\a(a(a(H!G!G!G!G!GL!G!G!GH`3`3`3`3`3|`3`3`3F	
	
	"
	
	&Y''=JBJLLA,=ACCz4z4z4z4z4Lz4z4CCz4z




7


&(@







 }Q}Q}Q}Q}QX%6}Q}Q}Q@W6W6W6W6W6x'8W6W6W6t
8
8
8
8
88$
8
8
89I9I9I9I9IX&9I9I9Ix555zHMOOOOOr