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.pyc



��Yf(��@s}dZddlmZmZmZmZddlmZmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZddlZddlmZejd�ZGdd	�d	�ZGd
d�dej�ZGdd
�d
ej�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"dZ#dZ$dZ%ej&e'e	d�o�e	j(�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(�Z0e1d)krye0�dS)*z�Unittests 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.
�)�BaseHTTPRequestHandler�
HTTPServer�SimpleHTTPRequestHandler�CGIHTTPRequestHandler)�server�
HTTPStatusN)�BytesIO)�support�	threadingc@s+eZdZdd�Zddd�ZdS)�NoLogRequestHandlercGsdS)N�)�self�argsrr�:/opt/alt/python35/lib64/python3.5/test/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)rrrZsocketZgetsocknamer�HOST�PORT�server_started�setZ
serve_foreverZserver_close)r
rrr�run*s$	zTestServerThread.runcCs|jj�dS)N)rZshutdown)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
ZEventrrr�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�HTTPConnectionrrZ
connection�request�getresponse)r
Zuri�method�body�headersrrrr1GszBaseTestCase.request)rrrr*r,r1r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/htmlr7z
keep-alive)r9rr:r;r<)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)r?r�	NOT_FOUND)r
rrr�do_NOTFOUNDasz2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDcCs|jddd�dS)Ni�z
Short MessagezThis is a long 
 explanation)r?)r
rrr�do_EXPLAINERRORdsz6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORcCs;|jd�|jdd�|jdd�|j�dS)Ni�zContent-Typez	text/htmlr7r8)r9r;r<)r
rrr�	do_CUSTOMhs
z0BaseHTTPServerTestCase.request_handler.do_CUSTOMcCsa|jd�|jdd�|jdd�|j�|jdjd�}|jj|�dS)Ni�z	X-SpecialuDängerous Mindr7r8zx-special-incomingzutf-8)r9r;r<r5�encode�wfile�write)r
r4rrr�do_LATINONEHEADERns

z8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERcCs$|jt|jdd���dS)N�)r?�int�path)r
rrr�
do_SEND_ERRORvsz4BaseHTTPServerTestCase.request_handler.do_SEND_ERRORcCs$|jt|jdd���dS)NrI)r?rJrK)r
rrr�do_HEADysz.BaseHTTPServerTestCase.request_handler.do_HEADN)rrr�protocol_version�default_request_versionr=r>r@rBrCrDrHrLrMrrrrrNsrcCs<tj|�tjj|j|j�|_|jj�dS)N)	r#r*r.r/r0rr�con�connect)r
rrrr*|s
zBaseHTTPServerTestCase.setUpcCs<|jjdd�|jj�}|j|jtj�dS)Nr-�/)rPr1r2�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
ZXYZBOGUSrR)	rP�
_http_vsn_str�
putrequest�
endheadersr2rSrTrrU)r
rVrrr�test_request_line_trimming�s

z1BaseHTTPServerTestCase.test_request_line_trimmingcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)NZFUBARr-rR)	rPrXrYrZr2rSrTr�BAD_REQUEST)r
rVrrr�test_version_bogus�s

z)BaseHTTPServerTestCase.test_version_boguscCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nz
HTTP/9.9.9r-rR)	rPrXrYrZr2rSrTrr\)r
rVrrr�test_version_digits�s

z*BaseHTTPServerTestCase.test_version_digitscCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nrr-rR)	rPrXrYrZr2rSrTrrU)r
rVrrr�test_version_none_get�s

z,BaseHTTPServerTestCase.test_version_none_getcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nr�CUSTOMrR)	rPrXrYrZr2rSrTrr\)r
rVrrr�test_version_none�s

z(BaseHTTPServerTestCase.test_version_nonecCsad|j_d|j_|jjdd�|jj�|jj�}|j|jtj	�dS)N�czHTTP/9.9r-rR)
rPZ	_http_vsnrXrYrZr2rSrTrZHTTP_VERSION_NOT_SUPPORTED)r
rVrrr�test_version_invalid�s
z+BaseHTTPServerTestCase.test_version_invalidcCsUd|j_|jjdd�|jj�|jj�}|j|jtj�dS)Nr)	rPrXrYrZr2rSrTrr\)r
rVrrr�test_send_blank�s

z&BaseHTTPServerTestCase.test_send_blankcCs\|jjdd�|jjdd�|jj�|jj�}|j|jtj�dS)Nr-rRr7r8)	rPrY�	putheaderrZr2rSrTrrU)r
rVrrr�test_header_close�s

z(BaseHTTPServerTestCase.test_header_closecCshd|j_|jjdd�|jjdd�|jj�|jj�}|j|jtj	�dS)NzHTTP/1.1r-rRr7z
keep-alive)
rPrXrYrerZr2rSrTrrU)r
rVrrr�test_head_keep_alive�s
z+BaseHTTPServerTestCase.test_head_keep_alivecCs<|jjdd�|jj�}|j|jtj�dS)N�TESTrR)rPr1r2rSrTrr:)r
rVrrr�test_handler�sz#BaseHTTPServerTestCase.test_handlercCse|jjdd�|jj�}|j|jd�d�|jjdd�|j|jj�dS)NZKEEPrRr7z
keep-aliverh)rPr1r2rS�	getheaderZ
addCleanupr8)r
rVrrr�test_return_header_keep_alive�s
z4BaseHTTPServerTestCase.test_return_header_keep_alivecCs9|jjdd�|jj�}|j|jd�dS)NZKEYERRORrRi�)rPr1r2rSrT)r
rVrrr�test_internal_key_error�sz.BaseHTTPServerTestCase.test_internal_key_errorcCs9|jjdd�|jj�}|j|jd�dS)Nr`rRi�)rPr1r2rSrT)r
rVrrr�test_return_custom_status�sz0BaseHTTPServerTestCase.test_return_custom_statuscCsU|jjdd�|jj�}|j|jd�|jt|jd���dS)NZEXPLAINERRORrRi�zContent-Length)rPr1r2rSrT�
assertTruerJrj)r
rVrrr�test_return_explain_error�sz0BaseHTTPServerTestCase.test_return_explain_errorcCsj|jjdddddi�|jj�}|j|jd�d�|j|j�djd��dS)	NZLATINONEHEADERrRr5zX-Special-IncominguÄrger mit Unicodez	X-SpecialuDängerous Mindzutf-8)rPr1r2rSrjrrE)r
rVrrr�test_latin1_header�s

z)BaseHTTPServerTestCase.test_latin1_headercCsm|jjdd�|jj�}|j|jtj�|j�}|jt|j	d��t
|��dS)NZNOTFOUNDrRzContent-Length)rPr1r2rSrTrrArrJrj�len)r
rV�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_PROTOCOLSrPr1�formatr2rSrTrjr)r
�allow_transfer_encoding_codes�coderVrrr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-Encodingrt)rrurv�OKr:rwrPr1rxr2rSrTrnrJrj�assertInr)r
ryrzrVrrrrr�test_head_via_send_errors""z/BaseHTTPServerTestCase.test_head_via_send_errorN)rrrrrrr*rWr[r]r^r_rarcrdrfrgrirkrlrmrorprsr{rrrrrr6Ms*.	r6c@s>eZdZGdd�de�Zdd�Zdd�ZdS)�RequestHandlerLoggingTestCasec@s4eZdZdZdZdd�Zdd�ZdS)z-RequestHandlerLoggingTestCase.request_handlerzHTTP/1.1cCs|jtj�|j�dS)N)r9rr}r<)r
rrr�do_GET!sz4RequestHandlerLoggingTestCase.request_handler.do_GETcCs|jtjd�dS)NzFile not found)r?rrA)r
rrr�do_ERROR%sz6RequestHandlerLoggingTestCase.request_handler.do_ERRORN)rrrrNrOr�r�rrrrrsrc
Cs�tjj|j|j�|_|jj�tj��'}|jj	dd�|jj
�WdQRX|j|j�j
d��dS)Nr-rRz"GET / HTTP/1.1" 200 -
)r.r/r0rrrPrQr	�captured_stderrr1r2rn�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)NZERRORrR�
rz code 404, message File not foundrIz"ERROR / HTTP/1.1" 404 -)r.r/r0rrrPrQr	r�r1r2r��splitrnr�)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!�dirrR�test�wb)r#r*r%�getcwd�cwd�tempfileZ
gettempdir�chdirrr�mkdtemp�tempdirrK�basename�tempdir_name�base_url�open�joinrG)r
ZbasetempdirZtemprrrr*Ds

	$zSimpleHTTPServerTestCase.setUpcCsHz3tj|j�ytj|j�WnYnXWdtj|�XdS)N)r%r�r��shutilZrmtreer�r#r,)r
rrrr,Ps	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)zWDon't close reader yet so we can check if there was leftover
            buffered inputN)�fpr)�reader�responserr�
close_conn[s	zDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conn�
r7r8�rtzConnection should be closed)Z_close_connrrnrSrT�assertIsNotNone�reason�version�msg�getr8)r
r�rTrrr�r4r)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�rR�darwinr��errors�
surrogatepassz	href="%s"�surrogateescapez>%s<rr)�sys�getfilesystemencodingr%�fsdecoder	�TESTFN_UNDECODABLEr�rKr�r�rGr1r��platform�listdirr�rr}�urllib�parseZquoter~rE�html�escape)r
�enc�filename�fr��namer4Z
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/testrrz/test/rRz/?hi=2z?hi=1�Locationz/?hi=1z/ThisDoesNotExistZThisDoesNotExistsDummy index file
z
index.htmlr��posixri�z/ThisDoesNotExistz/ThisDoesNotExist/)r1r�r�rr}rrrA�MOVED_PERMANENTLYrSrjr�r%rKr�r�rGr��geteuid�chmodr�)r
r�rrr�rrrr��s:$!z!SimpleHTTPServerTestCase.test_getcCst|j|jddd�}|j|tj�|j|jd�tt|j	���|j|jd�d�dS)Nz/testr3r|zcontent-lengthzcontent-typezapplication/octet-stream)
r1r�r�rr}rSrj�strrqrr)r
r�rrr�	test_head�sz"SimpleHTTPServerTestCase.test_headcCs||jddd�}|j|tj�|jddd�}|j|tj�|jddd�}|j|tj�dS)NrRr3ZFOOZcustomZGETs)r1r�rrU)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/testrrz/test/rRz/?hi=2z?hi=1r�z/?hi=1)
r1r�r�rr}rrrAr�rSrj)r
r�rrr�test_path_without_leading_slash�sz8SimpleHTTPServerTestCase.test_path_without_leading_slash)rrrrrrr*r,r�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_dirrKr��cgi_dir�
cgi_child_dir�mkdir�
nocgi_path�
file1_path�
file2_path�
file3_path�
file4_pathr	Zcan_symlink�	pythonexe�symlinkr��
executablerE�UnicodeEncodeErrorr,ZskipTestr�rG�	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#r,)r
rrrr,7s$					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/.//..rRz/\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_pathrS)r
Ztest_vectorsrK�expectedZactualr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)r1rSrrjrT�lineseprr})r
rVrrr�test_headers_and_contentvsz.CGIHTTPServerTestCase.test_headers_and_contentcCs)|jd�}|j|jtj�dS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)r1rSrTrrA)r
rVrrr�test_issue19435|sz%CGIHTTPServerTestCase.test_issue19435cCsitjjddddddi�}ddi}|jd	d
||�}|j|j�d|j�dS)NZspamrIZeggsr�Zbaconi@�zContent-typez!application/x-www-form-urlencodedz/cgi-bin/file2.pyZPOSTs1, python, 123456)r�r�Z	urlencoder1rSrr�)r
Zparamsr5rVrrr�	test_post�s
	zCGIHTTPServerTestCase.test_postcCs3|jd�}|j�|j|jtj�dS)Nz/cgi-bin/invalid)r1rrSrTrrA)r
rVr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.pyr-r5sHello Worldz	text/htmlzContent-type)
�base64Z	b64encoder1rSr�rr}rrjrT)r
r5rVr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)r1rSr�rr}rrjrT)r
rVr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&r1rSr�rr}rrjrT)r
Z	signaturerVr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)r1rSr�rr}rrjrT)r
rVr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)r1rSr�rr}rrjrT)r
rVr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)r1rSr�rr}rrjrT)r
rVr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)r1rSr�rr}rrjrT)r
rVrrr�"test_query_with_continuous_slashes�s

z8CGIHTTPServerTestCase.test_query_with_continuous_slashesN)rrrrrrr%r�rEr*r,r�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_calledrN)r
rrrr�s	z!SocketlessRequestHandler.__init__cCsGd|_|jtj�|jdd�|j�|jjd�dS)NTzContent-Typez	text/htmls <html><body>Data</body></html>
)r�r9rr}r;r<rFrG)r
rrrr��s
	
zSocketlessRequestHandler.do_GETcGsdS)Nr)r
rxrrrrr�sz$SocketlessRequestHandler.log_messageN)rrrrr�rrrrrr��sr�c@seZdZdd�ZdS)�!RejectingSocketlessRequestHandlercCs|jtj�dS)NF)r?rZEXPECTATION_FAILED)r
rrr�handle_expect_100�sz3RejectingSocketlessRequestHandler.handle_expect_100N)rrrr�rrrrr��sr�c@sFeZdZdd�Zdd�Zdd�Zedd��Zd	S)
�AuditableBytesIOcCs
g|_dS)N)�datas)r
rrrr�szAuditableBytesIO.__init__cCs|jj|�dS)N)r��append)r
rrrrrrG�szAuditableBytesIO.writecCsdj|j�S)Nrt)r�r�)r
rrr�getData�szAuditableBytesIO.getDatacCs
t|j�S)N)rqr�)r
rrr�	numWrites�szAuditableBytesIO.numWritesN)rrrrrGr��propertyr�rrrrr��sr�c@s	eZdZdZejd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)S)*�BaseHTTPRequestHandlerTestCasezrTest the functionality of the BaseHTTPServer.

       Test the support for the Expect 100-continue header.
       sHTTP/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��rfilerF�handle_one_request�seek�	readlines)r
�message�input�outputrrr�send_typical_request�s	

z3BaseHTTPRequestHandlerTestCase.send_typical_requestcCs|j|jj�dS)N)rnr�r�)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>rI)r	r
r)rS�sum)r
r5r)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

rrIs <html><body>Data</body></html>
zGET / HTTP/1.1r-rRzHTTP/1.1���r)
rrrrrSr��requestline�commandrK�request_version�assertSequenceEqualr5r�)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

rrIs <html><body>Data</body></html>
zGET / HTTP/1.0r-rRzHTTP/1.0rr)
rrrrrSr�rrrKrrr5r�)r
rrrr�
test_http_1_0s
z,BaseHTTPRequestHandlerTestCase.test_http_1_0cCsG|jd�}|jt|�d�|j|dd�|j�dS)NsGET / HTTP/0.9

rIrs <html><body>Data</body></html>
)rrSrqr)r
rr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

rrIs <html><body>Data</body></html>
zGET / HTTP/1.0r-rRzHTTP/1.0�Expect�100-continuerr�r r!)r")
rrrrrSr�rrrKrrr5r�)r
rr5r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
rIs
�sHTTP/1.1 200 OK
s <html><body>Data</body></html>
zGET / HTTP/1.1r-rRzHTTP/1.1r �100-continuerr�r r%)r&)rrSrrr�rrrKrrr5r�)r
rr5r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�r$)rr�r�rrFrrrr?rSr�)r
rrr�r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�rrI)
rr�r�rrFrZsend_response_onlyrSr�r<)r
rrr�r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

rI)rr�r�rrFrr;rSr�r<r�)r
rrr�r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��posrrrrr�_readAndReseekks


z[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseeks(GET / HTTP/1.1
Expect: 100-continue

zHTTP/1.1rts
rsHTTP/1.1 100 ContinuerIr$sHTTP/1.1 200 OK)	rr�rrFrrZassertNotEqualr�rS)r
r-rrrr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
rIcss|]}|dkVqdS)sConnection: close
Nr)r
�rrrrr�szMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>rr)r�r�rrSr�assertFalser�r)r
Z
usual_handlerrr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
)rrSr0r�r�ZassertIsInstancerr�)r
rr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)rrSr0r�r�r)r
rr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)rrSr0r�r�r)r
rr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)�nextr�Zclose_connectionr)�close_valuesr
rrr�szPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_requestTF)T)FFT)r�r�iterZhandler��
StopIterationr8)r
rr)r9r
r�test_close_connection�s

z4BaseHTTPRequestHandlerTestCase.test_close_connectionN)rrr�__doc__�re�compilerr*rrrrrrrr#r'r(r)r*r.r1r3r5r7r<rrrrr��s*	
r�c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)� SimpleHTTPRequestHandlerTestCasez Test url parsing cCs:tj�|_tjj|jd�|_t�|_dS)Nr�)r%r��
translatedrKr�r�r�)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_pathrSrA)r
rKrrr�test_query_arguments�sz5SimpleHTTPRequestHandlerTestCase.test_query_argumentscCsN|jjd�}|j||j�|jjd�}|j||j�dS)Nz
//filenamez//filename?foo=bar)r�rBrSrA)r
rKr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)NrKzc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r	Z	swap_attrrr%�ntpathr�rB�replace�seprSrA)r
rKrrr�test_windows_colon�sz3SimpleHTTPRequestHandlerTestCase.test_windows_colonN)rrrr=r*rCrDrHrrrrr@�s
r@c@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�getattrr�ZassertCountEqual�__all__)r
r�Z	blacklistr�Z
module_objectrrr�test_all�szMiscTestCase.test_allN)rrrrMrrrrrI�srIcCsDtj�}z#tjtttttt	t
�Wdtj|�XdS)N)r%r�r	Zrun_unittestr�r�r6r�r�r@rIr�)�verboser�rrr�	test_main�srO�__main__)2r=Zhttp.serverrrrrr.rrr%r�r>r�rEr�Zurllib.parser�r�Zhttp.clientr��iorr�r�r	�
import_moduler
rrrZTestCaser#r6r�r�r�r�r�ZskipIf�hasattrr�r�r�r�r�r�r@rIrOrrrrr�<module>sJ"	�$�
$��(