Your IP : 216.73.216.52


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_httpservers.cpython-35.opt-2.pyc



���](��@swddlmZmZmZmZddlmZmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZddlZddlmZejd�ZGdd�d�ZGd	d
�d
ej�ZGdd�dej�ZGd
d�de�ZGdd�de�Z Gdd�de�Z!dZ"dZ#dZ$ej%e&ed�o�ej'�dkd�Gdd�de��Z(Gdd�de�Z)Gdd�de)�Z*Gdd�d�Z+Gd d!�d!ej�Z,Gd"d#�d#ej�Z-Gd$d%�d%ej�Z.dd&d'�Z/e0d(krse/�dS))�)�BaseHTTPRequestHandler�
HTTPServer�SimpleHTTPRequestHandler�CGIHTTPRequestHandler)�server�
HTTPStatusN)�BytesIO)�support�	threadingc@s+eZdZdd�Zddd�ZdS)�NoLogRequestHandlercGsdS)N�)�self�argsrr�5/opt/alt/python35/lib64/python3.5/test_httpservers.py�log_messageszNoLogRequestHandler.log_messageNcCsdS)N�r)r
�nrrr�read szNoLogRequestHandler.read)�__name__�
__module__�__qualname__rrrrrrrsrc@s4eZdZdd�Zdd�Zdd�ZdS)�TestServerThreadcCs&tjj|�||_||_dS)N)r
�Thread�__init__�request_handler�test_object)r
rrrrrr%s	zTestServerThread.__init__c
Cs{td|j�|_|jjj�\|j_|j_|jjj	�d|_z|jj
d�Wd|jj�XdS)N�	localhostrg�������?)rr)rrr�socket�getsocknamer�HOST�PORT�server_started�setZ
serve_foreverZserver_close)r
rrr�run*s$	zTestServerThread.runcCs|jj�dS)N)r�shutdown)r
rrr�stop4szTestServerThread.stopN)rrrrr#r%rrrrr$s
rc@s=eZdZdd�Zdd�Zddidd�ZdS)	�BaseTestCasecCs`tj�|_tj�t_tj�|_t	||j
�|_|jj�|jj
�dS)N)r	Zthreading_setup�_threadsZEnvironmentVarGuard�os�environr
�Eventr!rr�thread�start�wait)r
rrr�setUp9s
zBaseTestCase.setUpcCs7|jj�d|_tjj�tj|j�dS)N)r+r%r(r)�__exit__r	Zthreading_cleanupr')r
rrr�tearDownAs
	
zBaseTestCase.tearDown�GETNcCsDtjj|j|j�|_|jj||||�|jj�S)N)�http�client�HTTPConnectionrr �
connection�request�getresponse)r
Zuri�method�body�headersrrrr6GszBaseTestCase.request)rrrr.r0r6rrrrr&8sr&c@seZdZGdd�dee�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�BaseHTTPServerTestCasec@s�eZdZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dS)z&BaseHTTPServerTestCase.request_handlerzHTTP/1.1cCs>|jtj�|jdd�|jdd�|j�dS)NzContent-Typez	text/html�
Connection�close)�
send_responser�
NO_CONTENT�send_header�end_headers)r
rrr�do_TESTRsz.BaseHTTPServerTestCase.request_handler.do_TESTcCs>|jtj�|jdd�|jdd�|j�dS)NzContent-Typez	text/htmlr<z
keep-alive)r>rr?r@rA)r
rrr�do_KEEPXsz.BaseHTTPServerTestCase.request_handler.do_KEEPcCs|jd�dS)Ni�)�
send_error)r
rrr�do_KEYERROR^sz2BaseHTTPServerTestCase.request_handler.do_KEYERRORcCs|jtj�dS)N)rDr�	NOT_FOUND)r
rrr�do_NOTFOUNDasz2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDcCs|jddd�dS)Ni�z
Short MessagezThis is a long 
 explanation)rD)r
rrr�do_EXPLAINERRORdsz6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORcCs;|jd�|jdd�|jdd�|j�dS)Ni�zContent-Typez	text/htmlr<r=)r>r@rA)r
rrr�	do_CUSTOMhs
z0BaseHTTPServerTestCase.request_handler.do_CUSTOMcCsa|jd�|jdd�|jdd�|j�|jdjd�}|jj|�dS)Ni�z	X-SpecialuDängerous Mindr<r=zx-special-incomingzutf-8)r>r@rAr:�encode�wfile�write)r
r9rrr�do_LATINONEHEADERns

z8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERcCs$|jt|jdd���dS)N�)rD�int�path)r
rrr�
do_SEND_ERRORvsz4BaseHTTPServerTestCase.request_handler.do_SEND_ERRORcCs$|jt|jdd���dS)NrN)rDrOrP)r
rrr�do_HEADysz.BaseHTTPServerTestCase.request_handler.do_HEADN)rrr�protocol_version�default_request_versionrBrCrErGrHrIrMrQrRrrrrrNsrcCs<tj|�tjj|j|j�|_|jj�dS)N)	r&r.r2r3r4rr �con�connect)r
rrrr.|s
zBaseHTTPServerTestCase.setUpcCs<|jjdd�|jj�}|j|jtj�dS)Nr1�/)rUr6r7�assertEqual�statusr�NOT_IMPLEMENTED)r
�resrrr�test_command�sz#BaseHTTPServerTestCase.test_commandcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nz	HTTP/1.1
ZXYZBOGUSrW)	rU�
_http_vsn_str�
putrequest�
endheadersr7rXrYrrZ)r
r[rrr�test_request_line_trimming�s

z1BaseHTTPServerTestCase.test_request_line_trimmingcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)NZFUBARr1rW)	rUr]r^r_r7rXrYr�BAD_REQUEST)r
r[rrr�test_version_bogus�s

z)BaseHTTPServerTestCase.test_version_boguscCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nz
HTTP/9.9.9r1rW)	rUr]r^r_r7rXrYrra)r
r[rrr�test_version_digits�s

z*BaseHTTPServerTestCase.test_version_digitscCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nrr1rW)	rUr]r^r_r7rXrYrrZ)r
r[rrr�test_version_none_get�s

z,BaseHTTPServerTestCase.test_version_none_getcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nr�CUSTOMrW)	rUr]r^r_r7rXrYrra)r
r[rrr�test_version_none�s

z(BaseHTTPServerTestCase.test_version_nonecCsad|j_d|j_|jjdd�|jj�|jj�}|j|jtj	�dS)N�czHTTP/9.9r1rW)
rUZ	_http_vsnr]r^r_r7rXrYrZHTTP_VERSION_NOT_SUPPORTED)r
r[rrr�test_version_invalid�s
z+BaseHTTPServerTestCase.test_version_invalidcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nr)	rUr]r^r_r7rXrYrra)r
r[rrr�test_send_blank�s

z&BaseHTTPServerTestCase.test_send_blankcCs\|jjdd�|jjdd�|jj�|jj�}|j|jtj�dS)Nr1rWr<r=)	rUr^�	putheaderr_r7rXrYrrZ)r
r[rrr�test_header_close�s

z(BaseHTTPServerTestCase.test_header_closecCshd|j_|jjdd�|jjdd�|jj�|jj�}|j|jtj	�dS)NzHTTP/1.1r1rWr<z
keep-alive)
rUr]r^rjr_r7rXrYrrZ)r
r[rrr�test_head_keep_alive�s
z+BaseHTTPServerTestCase.test_head_keep_alivecCs<|jjdd�|jj�}|j|jtj�dS)N�TESTrW)rUr6r7rXrYrr?)r
r[rrr�test_handler�sz#BaseHTTPServerTestCase.test_handlercCse|jjdd�|jj�}|j|jd�d�|jjdd�|j|jj�dS)NZKEEPrWr<z
keep-aliverm)rUr6r7rX�	getheaderZ
addCleanupr=)r
r[rrr�test_return_header_keep_alive�s
z4BaseHTTPServerTestCase.test_return_header_keep_alivecCs9|jjdd�|jj�}|j|jd�dS)NZKEYERRORrWi�)rUr6r7rXrY)r
r[rrr�test_internal_key_error�sz.BaseHTTPServerTestCase.test_internal_key_errorcCs9|jjdd�|jj�}|j|jd�dS)NrerWi�)rUr6r7rXrY)r
r[rrr�test_return_custom_status�sz0BaseHTTPServerTestCase.test_return_custom_statuscCsU|jjdd�|jj�}|j|jd�|jt|jd���dS)NZEXPLAINERRORrWi�zContent-Length)rUr6r7rXrY�
assertTruerOro)r
r[rrr�test_return_explain_error�sz0BaseHTTPServerTestCase.test_return_explain_errorcCsj|jjdddddi�|jj�}|j|jd�d�|j|j�djd��dS)	NZLATINONEHEADERrWr:zX-Special-IncominguÄrger mit Unicodez	X-SpecialuDängerous Mindzutf-8)rUr6r7rXrorrJ)r
r[rrr�test_latin1_header�s

z)BaseHTTPServerTestCase.test_latin1_headercCsm|jjdd�|jj�}|j|jtj�|j�}|jt|j	d��t
|��dS)NZNOTFOUNDrWzContent-Length)rUr6r7rXrYrrFrrOro�len)r
r[�datarrr�test_error_content_length�s
z0BaseHTTPServerTestCase.test_error_content_lengthcCs�tjtjf}x�tjtjtjtjtjfD]�}|jjddj|��|jj	�}|j
||j�|j
d|jd��|j
d|jd��||kr�|j
d|jd��|j
�}|j
d|�q7WdS)NZ
SEND_ERRORz/{}zContent-LengthzContent-TypezTransfer-Encoding�)r�NOT_MODIFIED�
RESET_CONTENTr?Z
PROCESSING�SWITCHING_PROTOCOLSrUr6�formatr7rXrYror)r
�allow_transfer_encoding_codes�coder[rwrrr�test_send_error�sz&BaseHTTPServerTestCase.test_send_errorcCsCtjtjf}x*tjtjtjtjtjfD]}|jjddj|��|jj	�}|j
||j�|tjkr�|jt
|jd��dk�|jd|jd��n2|j
d|jd��|j
d|jd��||kr|j
d|jd��|j�}|j
d|�q7WdS)	N�HEADz/{}zContent-Lengthrz	text/htmlzContent-TypezTransfer-Encodingry)rrzr{�OKr?r|rUr6r}r7rXrYrsrOro�assertInr)r
r~rr[rwrrr�test_head_via_send_errors""z/BaseHTTPServerTestCase.test_head_via_send_errorN)rrrrrrr.r\r`rbrcrdrfrhrirkrlrnrprqrrrtrurxr�r�rrrrr;Ms*.	r;c@s>eZdZGdd�de�Zdd�Zdd�ZdS)�RequestHandlerLoggingTestCasec@s4eZdZdZdZdd�Zdd�ZdS)z-RequestHandlerLoggingTestCase.request_handlerzHTTP/1.1cCs|jtj�|j�dS)N)r>rr�rA)r
rrr�do_GET!sz4RequestHandlerLoggingTestCase.request_handler.do_GETcCs|jtjd�dS)NzFile not found)rDrrF)r
rrr�do_ERROR%sz6RequestHandlerLoggingTestCase.request_handler.do_ERRORN)rrrrSrTr�r�rrrrrsrc
Cs�tjj|j|j�|_|jj�tj��'}|jj	dd�|jj
�WdQRX|j|j�j
d��dS)Nr1rWz"GET / HTTP/1.1" 200 -
)r2r3r4rr rUrVr	�captured_stderrr6r7rs�getvalue�endswith)r
�errrrr�test_get(s
z&RequestHandlerLoggingTestCase.test_getc
Cs�tjj|j|j�|_|jj�tj��'}|jj	dd�|jj
�WdQRX|j�jd�}|j
|djd��|j
|djd��dS)N�ERRORrW�
rz code 404, message File not foundrNz"ERROR / HTTP/1.1" 404 -)r2r3r4rr rUrVr	r�r6r7r��splitrsr�)r
r��linesrrr�test_err3s
z&RequestHandlerLoggingTestCase.test_errN)rrrrrr�r�rrrrr�sr�c@s�eZdZGdd�dee�Zdd�Zdd�Zddd	�Ze	j
d
d�eje	j
d�d
d���Zdd�Zdd�Zdd�Zdd�ZdS)�SimpleHTTPServerTestCasec@seZdZdS)z(SimpleHTTPServerTestCase.request_handlerN)rrrrrrrrAsrc	Cs�tj|�tj�|_tj�}tj|�d|_tj	d|�|_
tjj|j
�|_
d|j
|_ttjj|j
d�d��}|j|j�WdQRXdS)NsWe are the knights who say Ni!�dirrW�test�wb)r&r.r(�getcwd�cwd�tempfile�
gettempdir�chdirrw�mkdtemp�tempdirrP�basename�tempdir_name�base_url�open�joinrL)r
ZbasetempdirZtemprrrr.Ds

	$zSimpleHTTPServerTestCase.setUpcCsHz3tj|j�ytj|j�WnYnXWdtj|�XdS)N)r(r�r��shutil�rmtreer�r&r0)r
rrrr0Ps	z!SimpleHTTPServerTestCase.tearDownNcs���fdd�}d�|�_�j�}|j��|j�j|�|j�j�|rv|j||�|j�jd�|j�jj	dd�d�|j�jd�dd��j
�|S)	Ncs�j�d�_dS)N)�fpr)�reader�responserr�
close_conn[s	zDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conn�
r<r=�ryzConnection should be closed)Z_close_connrrsrXrY�assertIsNotNone�reason�version�msg�getr=)r
r�rYrwr�r9r)r�r�r�check_status_and_reasonZs	

z0SimpleHTTPServerTestCase.check_status_and_reasonr��zneed support.TESTFN_UNDECODABLEcCsbtj�}tjtj�d}ttjj|j	|�d��}|j
tj�WdQRX|j|jd�}tj
dkr�x-tj|j	�D]}|dkr�|}Pq�W|j|tj�}tjj|dd�}|jd|j|d	�|�|jd
tj|�j|d	�|�|j|jd|�}|j|tjdtj�dS)Nz.txtr�rW�darwinr��errors�
surrogatepassz	href="%s"�surrogateescapez>%s<rw)�sys�getfilesystemencodingr(�fsdecoder	�TESTFN_UNDECODABLEr�rPr�r�rLr6r��platform�listdirr�rr��urllib�parse�quoter�rJ�html�escape)r
�enc�filename�fr��namer9Z
quotednamerrr�test_undecodable_filenamess&$z2SimpleHTTPServerTestCase.test_undecodable_filenamecCsE|j|jd�}|j|tjd|j�|j|jd�}|j|tj�|j|jd�}|j|tj�|j|j�}|j|tj�|j|jd�}|j|tj�|j|jd�}|j|tj�|j|j	d�|jd�|jd	�}|j|tj�|jd�}|j|tj�d}t
tjj
|jd�d
��}|j|�WdQRX|j|jd�}|j|tj|�tjdkrAtj�dkrAtj|jd�z-|j|jd�}|j|tj�Wdtj|jd�XdS)Nz/testrwz/test/rWz/?hi=2z?hi=1�Locationz/?hi=1z/ThisDoesNotExistZThisDoesNotExistsDummy index file
z
index.htmlr��posixri�z/ThisDoesNotExistz/ThisDoesNotExist/)r6r�r�rr�rwrF�MOVED_PERMANENTLYrXror�r(rPr�r�rLr��geteuid�chmodr�)r
r�rwr�rrrr��s:$!z!SimpleHTTPServerTestCase.test_getcCst|j|jddd�}|j|tj�|j|jd�tt|j	���|j|jd�d�dS)Nz/testr8r�zcontent-lengthzcontent-typezapplication/octet-stream)
r6r�r�rr�rXro�strrvrw)r
r�rrr�	test_head�sz"SimpleHTTPServerTestCase.test_headcCs||jddd�}|j|tj�|jddd�}|j|tj�|jddd�}|j|tj�dS)NrWr8ZFOOZcustomZGETs)r6r�rrZ)r
r�rrr�test_invalid_requests�sz.SimpleHTTPServerTestCase.test_invalid_requestscCs|j|jd�}|j|tjd|j�|j|jd�}|j|tj�|j|jd�}|j|tj�|j|j�}|j|tj�|j|jd�}|j|tj�|j|jd�}|j|tj�|j|j	d�|jd�dS)	Nz/testrwz/test/rWz/?hi=2z?hi=1r�z/?hi=1)
r6r�r�rr�rwrFr�rXro)r
r�rrr�test_path_without_leading_slash�sz8SimpleHTTPServerTestCase.test_path_without_leading_slash)rrrrrrr.r0r�r	Zrequires_mac_ver�unittestZ
skipUnlessr�r�r�r�r�r�rrrrr�@s
&		r�zD#!%s

print("Content-type: text/html")
print()
print("Hello World")
z�#!%s
import cgi

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

form = cgi.FieldStorage()
print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),
                          form.getfirst("bacon")))
zR#!%s
import os

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

print(os.environ["%s"])
r�z7This test can't be run reliably as root (issue #13308).c@s�eZdZGdd�dee�Zejjd�Zdd�Z	dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd S)!�CGIHTTPServerTestCasec@seZdZdS)z%CGIHTTPServerTestCase.request_handlerN)rrrrrrrr�sr�asciic/CsBtj|�tj�|_tj�|_tjj	|jd�|_
tjj	|j
d�|_tj|j
�tj|j�d|_
d|_d|_d|_d|_tj�r�tjj	|jd�|_tjtj|j�ntj|_y|jjd�Wn)tk
r9|j�|jd�YnXtjj	|jd�|_
t|j
d��}|jt|j�WdQRXtj|j
d�tjj	|j
d	�|_t|jdd
d��}|jt|j�WdQRXtj|jd�tjj	|j
d�|_t|jdd
d��}|jt |j�WdQRXtj|jd�tjj	|jd�|_t|jdd
d��}|jt|j�WdQRXtj|jd�tjj	|j
d
�|_t|jdd
d��!}|jt!|jdf�WdQRXtj|jd�tj"|j�dS)Nzcgi-binz	child-dir�pythonzutf-8z0Python executable path is not encodable to utf-8znocgi.py�wi�zfile1.py�encodingzfile2.pyzfile3.pyzfile4.pyZQUERY_STRING)#r&r.r(r�r�r�r��
parent_dirrPr��cgi_dir�
cgi_child_dir�mkdir�
nocgi_path�
file1_path�
file2_path�
file3_path�
file4_pathr	Zcan_symlink�	pythonexe�symlinkr��
executablerJ�UnicodeEncodeErrorr0ZskipTestr�rL�	cgi_file1r��	cgi_file2�	cgi_file4r�)r
r�Zfile1Zfile2Zfile3Zfile4rrrr.�sT
					

!zCGIHTTPServerTestCase.setUpcCs�z�tj|j�|jtjkr5tj|j�|jrNtj|j�|jrgtj|j�|j	r�tj|j	�|j
r�tj|j
�|jr�tj|j�tj|j
�tj|j�tj|j�Wdtj|�XdS)N)r(r�r�r�r�r��remover�r�r�r�r��rmdirr�r�r�r&r0)r
rrrr07s$					zCGIHTTPServerTestCase.tearDownc8Cs8dddtdtddddddddd	d
d
d
ddd
ddddddddddddddddddddddddtdddd d!td"dd#di}x�|j�D]u\}}t|t�r�t|t�r�|j|tj|�q�tj|�}|j	||d$d%|||f�q�WdS)&Nrz//z..z/.//..rWz/\z//\z/.//zcgi-bin/file1.pyz/cgi-bin/file1.py�az//az/az./az./C:/z/C:/z/a/bz/a/b/z/a/b/.z	/a/b/c/..z/a/b/c/../dz/a/b/dz/a/b/c/../d/e/../fz/a/b/d/fz/a/b/c/../d/e/../../fz/a/b/fz/a/b/c/../d/e/.././././..//fz../a/b/c/../d/e/.././././..//fz/a/b/c/../d/e/../../../fz/a/fz/a/b/c/../d/e/../../../../fz//fz/a/b/c/../d/e/../../../../../fz/a/b/c/../d/e/../../../../f/..z /a/b/c/../d/e/../../../../f/../.r�zpath = %r
Got:    %r
Wanted: %r)
�
IndexError�items�
isinstance�type�
issubclass�	Exception�assertRaisesrZ_url_collapse_pathrX)r
Ztest_vectorsrP�expected�actualrrr�test_url_collapse_pathLsH	z,CGIHTTPServerTestCase.test_url_collapse_pathcCsQ|jd�}|j|j�|jd�|jfd|jdtjf�dS)Nz/cgi-bin/file1.pyzContent-typesHello Worldz	text/html)r6rXrrorY�lineseprr�)r
r[rrr�test_headers_and_contentvsz.CGIHTTPServerTestCase.test_headers_and_contentcCs)|jd�}|j|jtj�dS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)r6rXrYrrF)r
r[rrr�test_issue19435|sz%CGIHTTPServerTestCase.test_issue19435cCsitjjddddddi�}ddi}|jd	d
||�}|j|j�d|j�dS)NZspamrNZeggsr�Zbaconi@�zContent-typez!application/x-www-form-urlencodedz/cgi-bin/file2.pyZPOSTs1, python, 123456)r�r��	urlencoder6rXrr�)r
�paramsr:r[rrr�	test_post�s
	zCGIHTTPServerTestCase.test_postcCs3|jd�}|j�|j|jtj�dS)Nz/cgi-bin/invalid)r6rrXrYrrF)r
r[rrr�test_invaliduri�s
z%CGIHTTPServerTestCase.test_invaliduricCssddtjd�i}|jddd|�}|jd|jdtjf|j�|jd	�|j	f�dS)
Ns
AuthorizationsBasic s
username:passz/cgi-bin/file1.pyr1r:sHello Worldz	text/htmlzContent-type)
�base64Z	b64encoder6rXr�rr�rrorY)r
r:r[rrr�test_authorization�sz(CGIHTTPServerTestCase.test_authorizationcCsQ|jd�}|jd|jdtjf|j�|jd�|jf�dS)Nzcgi-bin/file1.pysHello Worldz	text/htmlzContent-type)r6rXr�rr�rrorY)r
r[rrr�test_no_leading_slash�sz+CGIHTTPServerTestCase.test_no_leading_slashcCs{d}|tjd<|jd�}|jd|jdtjf|j�|jd�|j	f�|jtjd|�dS)NzTest CGI ServerZSERVER_SOFTWAREz/cgi-bin/file1.pysHello Worldz	text/htmlzContent-type)
r(r)r6rXr�rr�rrorY)r
Z	signaturer[rrr�test_os_environ_is_not_altered�s
"z4CGIHTTPServerTestCase.test_os_environ_is_not_alteredcCsQ|jd�}|jd|jdtjf|j�|jd�|jf�dS)Nz/cgi-bin%2ffile1.pysHello Worldz	text/htmlzContent-type)r6rXr�rr�rrorY)r
r[rrr�#test_urlquote_decoding_in_cgi_check�sz9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checkcCsQ|jd�}|jd|jdtjf|j�|jd�|jf�dS)Nz/cgi-bin/child-dir/file3.pysHello Worldz	text/htmlzContent-type)r6rXr�rr�rrorY)r
r[rrr�test_nested_cgi_path_issue21323�sz5CGIHTTPServerTestCase.test_nested_cgi_path_issue21323cCsQ|jd�}|jd|jdtjf|j�|jd�|jf�dS)Nz/cgi-bin/file4.py?a=b?c=dsa=b?c=dz	text/htmlzContent-type)r6rXr�rr�rrorY)r
r[rrr�&test_query_with_multiple_question_mark�sz<CGIHTTPServerTestCase.test_query_with_multiple_question_markcCsQ|jd�}|jd|jdtjf|j�|jd�|jf�dS)Nz0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//sk=aa%2F%2Fbb&//q//p//=//a//b//z	text/htmlzContent-type)r6rXr�rr�rrorY)r
r[rrr�"test_query_with_continuous_slashes�s

z8CGIHTTPServerTestCase.test_query_with_continuous_slashesN)rrrrrrr(r�rJr.r0r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s :*	r�c@s4eZdZdd�Zdd�Zdd�ZdS)�SocketlessRequestHandlercCsd|_d|_dS)NFzHTTP/1.1)�
get_calledrS)r
rrrr�s	z!SocketlessRequestHandler.__init__cCsGd|_|jtj�|jdd�|j�|jjd�dS)NTzContent-Typez	text/htmls <html><body>Data</body></html>
)rr>rr�r@rArKrL)r
rrrr��s
	
zSocketlessRequestHandler.do_GETcGsdS)Nr)r
r}rrrrr�sz$SocketlessRequestHandler.log_messageN)rrrrr�rrrrrr�src@seZdZdd�ZdS)�!RejectingSocketlessRequestHandlercCs|jtj�dS)NF)rDrZEXPECTATION_FAILED)r
rrr�handle_expect_100�sz3RejectingSocketlessRequestHandler.handle_expect_100N)rrrrrrrrr�src@sFeZdZdd�Zdd�Zdd�Zedd��Zd	S)
�AuditableBytesIOcCs
g|_dS)N)�datas)r
rrrr�szAuditableBytesIO.__init__cCs|jj|�dS)N)r�append)r
rwrrrrL�szAuditableBytesIO.writecCsdj|j�S)Nry)r�r)r
rrr�getData�szAuditableBytesIO.getDatacCs
t|j�S)N)rvr)r
rrr�	numWrites�szAuditableBytesIO.numWritesN)rrrrrLr�propertyrrrrrr�src@seZdZejd�Zdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(S))�BaseHTTPRequestHandlerTestCasesHTTP/1.[0-9]+ 200 OKcCst�|_dS)N)r�handler)r
rrrr.�sz$BaseHTTPRequestHandlerTestCase.setUpcCsQt|�}t�}||j_||j_|jj�|jd�|j�S)Nr)rr�rfilerK�handle_one_request�seek�	readlines)r
�message�input�outputrrr�send_typical_request�s	

z3BaseHTTPRequestHandlerTestCase.send_typical_requestcCs|j|jj�dS)N)rsrr)r
rrr�verify_get_called�sz0BaseHTTPRequestHandlerTestCase.verify_get_calledcs>x7dD]/�|jt�fdd�|D��d�qWdS)N�Server: �Date: �Content-Type: c3s|]}|j��VqdS)N)�
startswith)�.0�h)�	fieldNamerr�	<genexpr>�szIBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>rN)rrr)rX�sum)r
r:r)rr�verify_expected_headers�s
z6BaseHTTPRequestHandlerTestCase.verify_expected_headerscCs#|jj|�}|j|�dS)N)�HTTPResponseMatch�searchr�)r
r��matchrrr�verify_http_server_response�sz:BaseHTTPRequestHandlerTestCase.verify_http_server_responsecCs�|jd�}|j|d�|j|dd	��|j�|j|d
d�|j|jjd�|j|jjd�|j|jjd�|j|jj	d�|j
|jjj�f�dS)NsGET / HTTP/1.1

rrNs <html><body>Data</body></html>
zGET / HTTP/1.1r1rWzHTTP/1.1���r#)
rr"rrrXr�requestline�commandrP�request_version�assertSequenceEqualr:r�)r
�resultrrr�
test_http_1_1s
z,BaseHTTPRequestHandlerTestCase.test_http_1_1cCs�|jd�}|j|d�|j|dd	��|j�|j|d
d�|j|jjd�|j|jjd�|j|jjd�|j|jj	d�|j
|jjj�f�dS)NsGET / HTTP/1.0

rrNs <html><body>Data</body></html>
zGET / HTTP/1.0r1rWzHTTP/1.0r#r#)
rr"rrrXrr$r%rPr&r'r:r�)r
r(rrr�
test_http_1_0s
z,BaseHTTPRequestHandlerTestCase.test_http_1_0cCsG|jd�}|jt|�d�|j|dd�|j�dS)NsGET / HTTP/0.9

rNrs <html><body>Data</body></html>
)rrXrvr)r
r(rrr�
test_http_0_9sz,BaseHTTPRequestHandlerTestCase.test_http_0_9cCs�|jd�}|j|d�|j|dd��|j�|j|dd�|j|jjd�|j|jjd�|j|jjd�|j|jj	d�d}|j
|jjj�|�dS)Ns(GET / HTTP/1.0
Expect: 100-continue

rrNs <html><body>Data</body></html>
zGET / HTTP/1.0r1rWzHTTP/1.0�Expect�100-continuer#r#�r,r-)r.)
rr"rrrXrr$r%rPr&r'r:r�)r
r(r:rrr�test_with_continue_1_0!s
z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_0cCs�|jd�}|j|dd�|j|dd�|j|dd�|j|dd��|j�|j|dd�|j|jjd	�|j|jjd
�|j|jjd�|j|jjd�d}|j	|jj
j�|�dS)Ns(GET / HTTP/1.1
Expect: 100-continue

rsHTTP/1.1 100 Continue
rNs
�sHTTP/1.1 200 OK
s <html><body>Data</body></html>
zGET / HTTP/1.1r1rWzHTTP/1.1r,�100-continuer#r#�r,r1)r2)rrXrrrr$r%rPr&r'r:r�)r
r(r:rrr�test_with_continue_1_1.s
z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1cCsotd�}t�}t�}||_||_d|_d|_d|_|jd�|j	|j
d�dS)NsGET / HTTP/1.1

zHTTP/1.1ri�r0)rrrrrKr&r$r%rDrXr)r
rrrrrr�#test_header_buffering_of_send_error=s							
zBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_errorcCsztd�}t�}t�}||_||_d|_|jd�|j|jd�|j	�|j|jd�dS)NsGET / HTTP/1.1

zHTTP/1.1i�rrN)
rrrrrKr&Zsend_response_onlyrXrrA)r
rrrrrr�+test_header_buffering_of_send_response_onlyKs					

zJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_onlycCs�td�}t�}t�}||_||_d|_|jdd�|jdd�|j|jd�|j	�|j|j
�d�|j|jd�dS)	NsGET / HTTP/1.1

zHTTP/1.1ZFooZfooZbarrsFoo: foo
bar: bar

rN)rrrrrKr&r@rXrrAr)r
rrrrrr�$test_header_buffering_of_send_headerYs					
zCBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_headercCs�dd�}td�}t�}||j_||j_d|j_|jj�|j||�d�||�jd�}|j|dd�|j|d	d�|j|d
d�dS)NcSs6|j�}|jd�|j�}|j|�|S)Nr)�tellrr)r��posrwrrr�_readAndReseekks


z[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseeks(GET / HTTP/1.1
Expect: 100-continue

zHTTP/1.1rys
rsHTTP/1.1 100 ContinuerNr0sHTTP/1.1 200 OK)	rrrrKr&r
ZassertNotEqualr�rX)r
r9rrr(rrr�$test_header_unbuffered_when_continueis	
zCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continuecCs�|j}t�|_|jd�}|j|dd�|j|dd��|j|jj�|jtdd�|dd�D��d�||_dS)	Ns(GET / HTTP/1.1
Expect: 100-continue

rs!HTTP/1.1 417 Expectation Failed
rNcss|]}|dkVqdS)sConnection: close
Nr)r�rrrrr�szMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>r#r#)rrrrXr�assertFalserr)r
Z
usual_handlerr(rrr�test_with_continue_rejecteds	-z:BaseHTTPRequestHandlerTestCase.test_with_continue_rejectedcCsX|jddd�}|j|dd�|j|jj�|j|jjt�dS)NsGET �xirs#HTTP/1.1 414 Request-URI Too Long
)rrXr<rrZassertIsInstancer$r�)r
r(rrr�test_request_length�sz2BaseHTTPRequestHandlerTestCase.test_request_lengthcCs\|jdddd�}|j|dd�|j|jj�|j|jjd�dS)NsGET / HTTP/1.1
X-Foo: bar�ris

rsHTTP/1.1 400 Line too long
zGET / HTTP/1.1)rrXr<rrr$)r
r(rrr�test_header_length�s
z1BaseHTTPRequestHandlerTestCase.test_header_lengthcCs\|jdddd�}|j|dd�|j|jj�|j|jjd�dS)NsGET / HTTP/1.1
sX-Foo: bar
�es
rsHTTP/1.1 431 Too many headers
zGET / HTTP/1.1)rrXr<rrr$)r
r(rrr�test_too_many_headers�s
z4BaseHTTPRequestHandlerTestCase.test_too_many_headerscs}��fdd�}|�j_td���jj��jtt��td���jj��jtt��dS)Ncst���j_dS)N)�nextrZclose_connectionr)�close_valuesr
rrr
�szPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_requestTF)T)FFT)rr
�iter�handler��
StopIterationrD)r
r
r)rEr
r�test_close_connection�s

z4BaseHTTPRequestHandlerTestCase.test_close_connectionN)rrr�re�compilerr.rrrr"r)r*r+r/r3r4r5r6r:r=r?rArCrIrrrrr
�s(	
r
c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
� SimpleHTTPRequestHandlerTestCasecCs:tj�|_tjj|jd�|_t�|_dS)Nr�)r(r��
translatedrPr�rr)r
rrrr.�sz&SimpleHTTPRequestHandlerTestCase.setUpcCss|jjd�}|j||j�|jjd�}|j||j�|jjd�}|j||j�dS)Nz	/filenamez/filename?foo=barz/filename?a=b&spam=eggs#zot)r�translate_pathrXrM)r
rPrrr�test_query_arguments�sz5SimpleHTTPRequestHandlerTestCase.test_query_argumentscCsN|jjd�}|j||j�|jjd�}|j||j�dS)Nz
//filenamez//filename?foo=bar)rrNrXrM)r
rPrrr�test_start_with_double_slash�sz=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slashc
Cstjtjdt���|jjd�}|jtjtj�}|j	||j
�|jjd�}|jtjtj�}|j	||j
�|jjd�}|jtjtj�}|j	||j
�|jjd�}|jtjtj�}|j	||j
�WdQRXdS)NrPzc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r	Z	swap_attrrr(�ntpathrrN�replace�seprXrM)r
rPrrr�test_windows_colon�sz3SimpleHTTPRequestHandlerTestCase.test_windows_colonN)rrrr.rOrPrTrrrrrL�srLc@seZdZdd�ZdS)�MiscTestCasecCs�g}dddh}xftt�D]X}|jd�s"||krFq"tt|�}t|dd�dkr"|j|�q"W|jtj|�dS)Nr�Z
nobody_uidr��_rzhttp.server)r�rr�getattrrZassertCountEqual�__all__)r
r�Z	blacklistr�Z
module_objectrrr�test_all�szMiscTestCase.test_allN)rrrrYrrrrrU�srUcCsDtj�}z#tjtttttt	t
�Wdtj|�XdS)N)r(r�r	Zrun_unittestr�r
r;r�r�rLrUr�)�verboser�rrr�	test_main�sr[�__main__)1Zhttp.serverrrrrr2rrr(r�rJr�rQr�Zurllib.parser�r�Zhttp.clientr��iorr�r�r	�
import_moduler
rrrZTestCaser&r;r�r�r�r�r�ZskipIf�hasattrr�r�rrrr
rLrUr[rrrrr�<module>sH"	�$�
$��(