Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_httpservers.cpython-39.pyc

a

��g���@s.dZddlmZddlmZmZmZmZddlm	Z	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddl m!Z!m"Z"ddlZddl#m$Z$Gd	d
�d
�Z%Gdd�dej&�Z'Gd
d�dej(�Z)Gdd�de)�Z*Gdd�de)�Z+Gdd�de)�Z,dZ-dZ.dZ/dZ0e�1e2ed��o�e�3�dkd�Gdd�de)��Z4Gdd�de�Z5Gdd �d e5�Z6Gd!d"�d"�Z7Gd#d$�d$ej(�Z8Gd%d&�d&ej(�Z9Gd'd(�d(ej(�Z:Gd)d*�d*ej(�Z;d+d,�Z<e=d-k�r*e�>�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.
�)�OrderedDict)�BaseHTTPRequestHandler�
HTTPServer�SimpleHTTPRequestHandler�CGIHTTPRequestHandler)�server�
HTTPStatusN)�mock)�BytesIO�StringIO)�supportc@seZdZdd�Zddd�ZdS)�NoLogRequestHandlercGsdS�N�)�self�argsrr�1/usr/local/lib/python3.9/test/test_httpservers.py�log_message$szNoLogRequestHandler.log_messageNcCsdS�N�r)r�nrrr�read(szNoLogRequestHandler.read)N)�__name__�
__module__�__qualname__rrrrrrr
#sr
c@s$eZdZdd�Zdd�Zdd�ZdS)�TestServerThreadcCstj�|�||_||_dSr)�	threading�Thread�__init__�request_handler�test_object)rr rrrrr-szTestServerThread.__init__cCsdtd|j�|_|jj��\|j_|j_|jj�	�d|_z|j�
d�W|j��n|j��0dS)N)�	localhostrg�������?)rrr�socket�getsocknamer �HOST�PORT�server_started�setZ
serve_foreverZserver_close�rrrr�run2szTestServerThread.runcCs|j��|��dSr)r�shutdown�joinr(rrr�stop<s
zTestServerThread.stopN)rrrrr)r,rrrrr,s
rc@s,eZdZdd�Zdd�Zddifdd�ZdS)	�BaseTestCasecCsDt��|_t��t_t��|_t	||j
�|_|j��|j�
�dSr)rZthreading_setup�_threadsZEnvironmentVarGuard�os�environr�Eventr&rr�thread�start�waitr(rrr�setUpBs



zBaseTestCase.setUpcCs*|j��d|_tj��tj|j�dSr)r2r,r/r0�__exit__rZthreading_cleanupr.r(rrr�tearDownJs

zBaseTestCase.tearDown�GETNcCs0tj�|j|j�|_|j�||||�|j��Sr)�http�client�HTTPConnectionr$r%�
connection�request�getresponse)rZuri�method�body�headersrrrr=PszBaseTestCase.request)rrrr5r7r=rrrrr-Asr-c@s�eZdZGdd�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_handler�HTTP/1.1cCs0|�tj�|�dd�|�dd�|��dS)N�Content-Type�	text/html�
Connection�close��
send_responser�
NO_CONTENT�send_header�end_headersr(rrr�do_TEST[sz.BaseHTTPServerTestCase.request_handler.do_TESTcCs0|�tj�|�dd�|�dd�|��dS)NrDrErF�
keep-aliverHr(rrr�do_KEEPasz.BaseHTTPServerTestCase.request_handler.do_KEEPcCs|�d�dS)N����
send_errorr(rrr�do_KEYERRORgsz2BaseHTTPServerTestCase.request_handler.do_KEYERRORcCs|�tj�dSr�rRr�	NOT_FOUNDr(rrr�do_NOTFOUNDjsz2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDcCs|�ddd�dS)NrPz
Short MessagezThis is a long 
 explanationrQr(rrr�do_EXPLAINERRORms�z6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORcCs.|�d�|�dd�|�dd�|��dS)NrPrDrErFrG)rIrKrLr(rrr�	do_CUSTOMqs
z0BaseHTTPServerTestCase.request_handler.do_CUSTOMcCsJ|�d�|�dd�|�dd�|��|jd�d�}|j�|�dS)NrP�	X-Special�Dängerous MindrFrGzx-special-incoming�utf-8)rIrKrLrA�encode�wfile�write)rr@rrr�do_LATINONEHEADERws
z8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERcCs|�t|jdd���dS�N��rR�int�pathr(rrr�
do_SEND_ERRORsz4BaseHTTPServerTestCase.request_handler.do_SEND_ERRORcCs|�t|jdd���dSr`rbr(rrr�do_HEAD�sz.BaseHTTPServerTestCase.request_handler.do_HEADN)rrr�protocol_version�default_request_versionrMrOrSrVrWrXr_rerfrrrrrWsrcCs,t�|�tj�|j|j�|_|j��dSr)	r-r5r9r:r;r$r%�con�connectr(rrrr5�s
zBaseHTTPServerTestCase.setUpcCs,|j�dd�|j��}|�|jtj�dS)Nr8�/)rir=r>�assertEqual�statusr�NOT_IMPLEMENTED�r�resrrr�test_command�s
z#BaseHTTPServerTestCase.test_commandcCs>d|j_|j�dd�|j��|j��}|�|jtj�dS)Nz	HTTP/1.1
ZXYZBOGUSrk�	ri�
_http_vsn_str�
putrequest�
endheadersr>rlrmrrnrorrr�test_request_line_trimming�s


z1BaseHTTPServerTestCase.test_request_line_trimmingcCs>d|j_|j�dd�|j��|j��}|�|jtj�dS)NZFUBARr8rk�	rirsrtrur>rlrmrZBAD_REQUESTrorrr�test_version_bogus�s


z)BaseHTTPServerTestCase.test_version_boguscCs>d|j_|j�dd�|j��|j��}|�|jtj�dS)Nz
HTTP/9.9.9r8rkrwrorrr�test_version_digits�s


z*BaseHTTPServerTestCase.test_version_digitscCs>d|j_|j�dd�|j��|j��}|�|jtj�dS)Nrr8rkrrrorrr�test_version_none_get�s


z,BaseHTTPServerTestCase.test_version_none_getcCs>d|j_|j�dd�|j��|j��}|�|jtj�dS)Nr�CUSTOMrkrwrorrr�test_version_none�s


z(BaseHTTPServerTestCase.test_version_nonecCsFd|j_d|j_|j�dd�|j��|j��}|�|jtj	�dS)N�czHTTP/9.9r8rk)
riZ	_http_vsnrsrtrur>rlrmrZHTTP_VERSION_NOT_SUPPORTEDrorrr�test_version_invalid�s

z+BaseHTTPServerTestCase.test_version_invalidcCs>d|j_|j�dd�|j��|j��}|�|jtj�dSrrwrorrr�test_send_blank�s


z&BaseHTTPServerTestCase.test_send_blankcCsD|j�dd�|j�dd�|j��|j��}|�|jtj�dS)Nr8rkrFrG)	rirt�	putheaderrur>rlrmrrnrorrr�test_header_close�s


z(BaseHTTPServerTestCase.test_header_closecCsLd|j_|j�dd�|j�dd�|j��|j��}|�|jtj	�dS)NrCr8rkrFrN)
rirsrtr�rur>rlrmrrnrorrr�test_header_keep_alive�s

z-BaseHTTPServerTestCase.test_header_keep_alivecCs,|j�dd�|j��}|�|jtj�dS)N�TESTrk)rir=r>rlrmrrJrorrr�test_handler�s
z#BaseHTTPServerTestCase.test_handlercCsJ|j�dd�|j��}|�|�d�d�|j�dd�|�|jj�dS)NZKEEPrkrFrNr�)rir=r>rl�	getheaderZ
addCleanuprGrorrr�test_return_header_keep_alive�s

z4BaseHTTPServerTestCase.test_return_header_keep_alivecCs*|j�dd�|j��}|�|jd�dS)NZKEYERRORrkrP�rir=r>rlrmrorrr�test_internal_key_error�s
z.BaseHTTPServerTestCase.test_internal_key_errorcCs*|j�dd�|j��}|�|jd�dS)Nr{rkrPr�rorrr�test_return_custom_status�s
z0BaseHTTPServerTestCase.test_return_custom_statuscCs>|j�dd�|j��}|�|jd�|�t|�d���dS)NZEXPLAINERRORrkrP�Content-Length)rir=r>rlrm�
assertTruercr�rorrr�test_return_explain_error�s
z0BaseHTTPServerTestCase.test_return_explain_errorcCsL|jjddddid�|j��}|�|�d�d�|�|��d�d��dS)	NZLATINONEHEADERrkzX-Special-IncominguÄrger mit Unicode�rArYrZr[)rir=r>rlr�rr\rorrr�test_latin1_header�s
�
z)BaseHTTPServerTestCase.test_latin1_headercCsN|j�dd�|j��}|�|jtj�|��}|�t|�	d��t
|��dS)NZNOTFOUNDrkr�)rir=r>rlrmrrUrrcr��len)rrp�datarrr�test_error_content_length�s

z0BaseHTTPServerTestCase.test_error_content_lengthcCs�tjtjf}tjtjtjtjtjfD]�}|j�dd�|��|j�	�}|�
||j�|�
d|�d��|�
d|�d��||vr�|�
d|�d��|�
�}|�
d|�q$dS)NZ
SEND_ERROR�/{}r�rD�Transfer-Encoding�)r�NOT_MODIFIED�
RESET_CONTENTrJZ
PROCESSING�SWITCHING_PROTOCOLSrir=�formatr>rlrmr�r�rZallow_transfer_encoding_codes�coderpr�rrr�test_send_error�s ��
z&BaseHTTPServerTestCase.test_send_errorcCs�tjtjf}tjtjtjtjtjfD]�}|j�dd�|��|j�	�}|�
||j�|tjkr�|�t
|�d��dk�|�d|�d��n$|�
d|�d��|�
d|�d��||vr�|�
d|�d��|��}|�
d|�q$dS)	N�HEADr�r�rrErDr�r�)rr�r��OKrJr�rir=r�r>rlrmr�rcr��assertInrr�rrr�test_head_via_send_errors&��

z/BaseHTTPServerTestCase.test_head_via_send_errorN)rrrr
rrr5rqrvrxryrzr|r~rr�r�r�r�r�r�r�r�r�r�r�rrrrrBVs*.	rBc@s,eZdZGdd�de�Zdd�Zdd�ZdS)�RequestHandlerLoggingTestCasec@s$eZdZdZdZdd�Zdd�ZdS)z-RequestHandlerLoggingTestCase.request_handlerrCcCs|�tj�|��dSr)rIrr�rLr(rrr�do_GET*sz4RequestHandlerLoggingTestCase.request_handler.do_GETcCs|�tjd�dS)NzFile not foundrTr(rrr�do_ERROR.sz6RequestHandlerLoggingTestCase.request_handler.do_ERRORN)rrrrgrhr�r�rrrrr&srcCsvtj�|j|j�|_|j��t���(}|j�	dd�|j�
�Wd�n1sT0Y|�|���
d��dS)Nr8rkz"GET / HTTP/1.1" 200 -
)r9r:r;r$r%rirjr�captured_stderrr=r>r��getvalue�endswith)r�errrrr�test_get1s

(�z&RequestHandlerLoggingTestCase.test_getcCs�tj�|j|j�|_|j��t���(}|j�	dd�|j�
�Wd�n1sT0Y|���d�}|�
|d�d��|�
|d�d��dS)N�ERRORrk�
rz code 404, message File not foundraz"ERROR / HTTP/1.1" 404 -)r9r:r;r$r%rirjrr�r=r>r��splitr�r�)rr��linesrrr�test_err<s

(z&RequestHandlerLoggingTestCase.test_errN)rrrrrr�r�rrrrr�%sr�cs�eZdZGdd�dee�Z�fdd�Z�fdd�Zd'dd	�Ze	�
ejd
kd�e	�
ejdkd
�e	�
ejd�dd����Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Z�ZS)(�SimpleHTTPServerTestCasec@seZdZdS)z(SimpleHTTPServerTestCase.request_handlerN�rrrrrrrrJsrcs�t���t��|_t��}t�|�d|_tj	|d�|_
tj�|j
�|_
d|j
|_tj�|j
d�}t|d��$}|�|j�|��Wd�n1s�0Yt�|�j}tj�|tjj�}|jdd�|_tjj|��dd	�|_dS)
NsWe are the knights who say Ni!)�dirrk�test�wbr)ZmicrosecondT�Zusegmt) �superr5r/�getcwd�cwd�tempfile�
gettempdir�chdirr��mkdtemp�tempdirrd�basename�tempdir_name�base_urlr+�openr^�flush�stat�st_mtime�datetimeZ
fromtimestamp�timezoneZutc�replace�last_modif_datetime�email�utilsZ
formatdate�	timestamp�last_modif_header)rZbasetempdirZtempnameZtemp�mtimeZ
last_modif��	__class__rrr5Ms(


&��zSimpleHTTPServerTestCase.setUpcsJz8t�|j�zt�|j�WnYn0Wt���nt���0dSr)r/r�r��shutil�rmtreer�r�r7r(r�rrr7bsz!SimpleHTTPServerTestCase.tearDownNcs���fdd�}d�|�_���}|���|��j|�|��j�|rT|�||�|��jd�|��j�	dd�d�|���d�dd���
�|S)	Ncs�j�d�_dS)zWDon't close reader yet so we can check if there was leftover
            buffered inputN)�fpr��reader�responserr�
close_connmszDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conn�
rFrG�r�zConnection should be closed)Z_close_connrr�rlrm�assertIsNotNone�reason�version�msg�getrG)rr�rmr�r�r@rr�r�check_status_and_reasonls
z0SimpleHTTPServerTestCase.check_status_and_reason�darwinz2undecodable name cannot always be decoded on macOS�win32z+undecodable name cannot be decoded on win32zneed support.TESTFN_UNDECODABLEcCst��}t�tj�d}ttj�|j	|�d��}|�
tj�Wd�n1sP0Y|�|jd�}tj
dkr�t�|j	�D]}|dkr�|}q�q�|�|tj�}tjj|dd�}|�d|�|d	�|�|�d
tj|dd��|d	�|�|�|jd|�}|j|tjtjd
�dS)Nz.txtr�rkr�r��
surrogatepass)�errorsz	href="%s"�surrogateescape�>%s<F��quote�r�)�sys�getfilesystemencodingr/�fsdecoder�TESTFN_UNDECODABLEr�rdr+r�r^r=r��platform�listdirr�rr��urllib�parser�r�r\�html�escape)r�enc�filename�fr��namer@Z
quotednamerrr�test_undecodable_filename�s4*
����
�z2SimpleHTTPServerTestCase.test_undecodable_filenamecCsd|�|jd���}|�|d|j�d��d��|�|jd���}|�|d|j�d��d��dS)Nz/?x=123zlisting for z/\?x=123�latin1z/?x=%bbu/\?x=�)r=r�rZassertRegexr\�rr�rrr�test_undecodable_parameter�sz3SimpleHTTPServerTestCase.test_undecodable_parameterc	Cs2t�tj�|jd��d|j�d�}|�d�}|�|�}|�|tj	�|�
d�}|j||dd�d|��}|�|�}|�|tj	�|�
d�}|j|�
d�|d�|j||d	d�d|��}|�|�}|�|tj	�|�|�
d�|�d
|��}|�d�}|�|�}|�|tj	�|�
d�}|j|�
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.
        Zexisting_directoryz2/python.org/..%2f..%2f..%2f..%2f..%2f../%0a%0d/../z/existing_directoryrk�Locationznon-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)r/�mkdirrdr+r�r�r=r�r�MOVED_PERMANENTLYr�rl�assertFalse�
startswithr�)	r�urlZexpected_locationr��locationZ
attack_urlZattack3_urlZattack_scheme_netloc_2slash_urlZexpected_scheme_netloc_locationrrr�3test_get_dir_redirect_location_domain_injection_bug�s2	





�





zLSimpleHTTPServerTestCase.test_get_dir_redirect_location_domain_injection_bugc
Cs�|�|jd�}|j|tj|jd�|�|jd�}|�|tj�|�|jd�}|�|tj�|�|j�}|�|tj�|�|�	d�d�|�|jd�}|�|tj�|�|jd�}|�|tj�|�|�	d	�|jd
�|�d�}|�|tj�|�d�}|�|tj�d
}t
tj�
|jd�d��}|�|�Wd�n1�sL0Y|�|jd�}|�|tj|�tjdk�r�t��dk�r�t�|jd�z0|�|jd�}|�|tj�Wt�|jd�nt�|jd�0dS)N�/testr��/test/rkr��0�/?hi=2�?hi=1r��/?hi=1z/ThisDoesNotExistz/ThisDoesNotExist/sDummy index file
z
index.htmlr��posixri�)r=r�r�rr�r�rUr�rlr�r�r/rdr+r�r^r��geteuid�chmodr�)rr�r�r�rrrr��s>�

*z!SimpleHTTPServerTestCase.test_getcCsT|j|jddd�}|�|tj�|�|�d�tt|j	���|�|�d�d�dS)Nrr��r?zcontent-lengthzcontent-typezapplication/octet-stream)
r=r�r�rr�rlr��strr�r�r�rrr�	test_heads
���z"SimpleHTTPServerTestCase.test_headcCs�tj��}|j|d<|j|jd|d�}|�|tj�|j	t
jdd�}tj��}tjj
|dd�|d<|j|jd|d�}|�|tj�dS)	z�Check 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-Sincerr�ra)ZhoursTr�N)r��message�Messager�r=r�r�rr�r�r��	timedeltar��format_datetime)rrAr�Znew_dtrrr�test_browser_caches


�
z+SimpleHTTPServerTestCase.test_browser_cachecCsZ|j}|tjdd�}tj��}tjj|dd�|d<|j|j	d|d�}|�
|tj�dS)Nim)ZdaysTr�r
rr�)
r�r�rr�rrr�rr=r�r�rr�)rZdtZold_dtrAr�rrr�test_browser_cache_file_changeds
�
z8SimpleHTTPServerTestCase.test_browser_cache_file_changedcCsBtj��}|j|d<d|d<|j|jd|d�}|�|tj�dS)Nr
�*z
If-None-Matchrr�)	r�rrr�r=r�r�rr�)rrAr�rrr�,test_browser_cache_with_If_None_Match_header(s


zESimpleHTTPServerTestCase.test_browser_cache_with_If_None_Match_headercCsX|jddd�}|�|tj�|jddd�}|�|tj�|jddd�}|�|tj�dS)NrkZFOOr
ZcustomZGETs)r=r�rrnr�rrr�test_invalid_requests1sz.SimpleHTTPServerTestCase.test_invalid_requestscCs@|�|jd�}|j|tj|jd�|jd}|�||j�dS)z�Checks that the datetime returned in Last-Modified response header
        is the actual datetime of last modification, rounded to the second
        rr�z
Last-modifiedN)	r=r�r�rr�r�rArlr�)rr�r�rrr�test_last_modified:s
z+SimpleHTTPServerTestCase.test_last_modifiedcCs�|�|jd�}|j|tj|jd�|�|jd�}|�|tj�|�|jd�}|�|tj�|�|j�}|�|tj�|�|jd�}|�|tj�|�|jd�}|�|tj�|�|�	d�|jd�dS)	Nrr�rrkrrr�r)
r=r�r�rr�r�rUr�rlr�r�rrr�test_path_without_leading_slashCs�z8SimpleHTTPServerTestCase.test_path_without_leading_slashc	Cs�d}tj�|j|�}zt|d���Wn tyFt�d|��Yn0z6|�	|j
d�}|�|tj
�}|j��}Wt�|�nt�|�0|�|�dtj|dd�}|�|�|�|�dS)Nz<test&>.txt�wz-Can not create file %s on current file systemrkr�Fr�)r/rdr+r�r�rG�OSError�unittestZSkipTestr=r�r�rr�rAZget_content_charset�unlinkr�r�r�r�r\)rr��fullpathr�r@r�Z	html_textrrr�test_html_escape_filenameSs �
z2SimpleHTTPServerTestCase.test_html_escape_filename)N)rrrr
rrr5r7r�r�skipIfr�r�Z
skipUnlessrr�r�r�rr�rrrrrrrr�
__classcell__rrr�rr�Is2

���1'				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"])
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>")
rz7This test can't be run reliably as root (issue #13308).c@s�eZdZGdd�dee�Zej�d�Zdd�Z	dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$S)%�CGIHTTPServerTestCasec@seZdZdS)z%CGIHTTPServerTestCase.request_handlerNr�rrrrr�sr�asciicCst�|�t��|_t��|_tj�	|jd�|_
tj�	|j
d�|_tj�	|jd�|_tj�	|jd�|_
tj�	|j
d�|_t�|j
�t�|j�t�|j�t�|j
�t�|j�d|_d|_d|_d|_d|_d|_d|_t���rtj�	|jd�|_t�|j���|_ntj|_z|j�d�Wn&t�yL|� �|�!d�Yn0tj�	|jd�|_t"|jd	�� }|�#t$|j�Wd�n1�s�0Yt�%|jd
�tj�	|j
d�|_t"|jd	dd�� }|�#t$|j�Wd�n1�s�0Yt�%|jd
�tj�	|j
d
�|_t"|jd	dd�� }|�#t&|j�Wd�n1�sX0Yt�%|jd
�tj�	|jd�|_t"|jd	dd�� }|�#t$|j�Wd�n1�s�0Yt�%|jd
�tj�	|j
d�|_t"|jd	dd��$}|�#t'|jdf�Wd�n1�s 0Yt�%|jd
�tj�	|jd�|_t"|jd	dd�� }|�#t$|j�Wd�n1�s�0Yt�%|jd
�tj�	|j
d�|_(t"|j(d	dd�� }|�#t)|j�Wd�n1�s�0Yt�%|j(d
�t�*|j�dS)Nzcgi-binz	child-dir�subr��pythonr[z0Python executable path is not encodable to utf-8znocgi.pyri�zfile1.py)�encodingzfile2.pyzfile3.pyzfile4.pyZQUERY_STRINGzfile5.pyzfile6.py)+r-r5r/r�r�r�r��
parent_dirrdr+�cgi_dir�
cgi_child_dir�	sub_dir_1�	sub_dir_2�cgi_dir_in_sub_dirr��
nocgi_path�
file1_path�
file2_path�
file3_path�
file4_path�
file5_path�_pythonexe_symlinkrZcan_symlinkZ	pythonexeZ
PythonSymlink�	__enter__r��
executabler\�UnicodeEncodeErrorr7ZskipTestr�r^�	cgi_file1r	�	cgi_file2�	cgi_file4�
file6_path�	cgi_file6r�)rr�Zfile1Zfile2Zfile3Zfile4Zfile5Zfile6rrrr5�st



0000400zCGIHTTPServerTestCase.setUpc	Csz�t�|j�|jr$|j�ddd�|jr6t�|j�|jrHt�|j�|jrZt�|j�|j	rlt�|j	�|j
r~t�|j
�|jr�t�|j�|jr�t�|j�t�
|j�t�
|j�t�
|j�t�
|j�t�
|j�t�
|j�Wt�|�nt�|�0dSr)r/r�r�r2r6r,�remover-r.r/r0r1r9�rmdirr(r'r+r*r)r&r-r7r(rrrr7�s2zCGIHTTPServerTestCase.tearDowncCs�dttddddddddddddddddd	d
d
tddtddd
�}|��D]R\}}t|t�rtt|t�rt|�|tj|�qFt�|�}|j	||d|||fd�qFdS)Nr�z//\�/cgi-bin/file1.py�//az/C:/�/a/b�/a/b/z/a/b/dz/a/b/d/fz/a/b/fz/a/fz//f)rz..z/.//..rkr�z/\z/.//�cgi-bin/file1.pyr=�az/ar>z./az./C:/r?r@z/a/b/.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 = %r
Got:    %r
Wanted: %rr�)
�
IndexError�items�
isinstance�type�
issubclass�	Exception�assertRaisesrZ_url_collapse_pathrl)rZtest_vectorsrd�expected�actualrrr�test_url_collapse_path
sP��
��z,CGIHTTPServerTestCase.test_url_collapse_pathcCs:|�d�}|�|��|�d�|jfd|jdtjf�dS)Nr=�Content-type�Hello WorldrE)r=rlrr�rm�lineseprr�rorrr�test_headers_and_content4s

�z.CGIHTTPServerTestCase.test_headers_and_contentcCs|�d�}|�|jtj�dS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)r=rlrmrrUrorrr�test_issue19435:s
z%CGIHTTPServerTestCase.test_issue19435cCsFtj�dddd��}ddi}|�dd||�}|�|��d	|j�dS)
Nrar$i@�)ZspamZeggsZbaconrMz!application/x-www-form-urlencodedz/cgi-bin/file2.pyZPOSTs1, python, 123456)r�r��	urlencoder=rlrrO)r�paramsrArprrr�	test_post>s
�zCGIHTTPServerTestCase.test_postcCs&|�d�}|��|�|jtj�dS)Nz/cgi-bin/invalid)r=rrlrmrrUrorrr�test_invaliduriFs
z%CGIHTTPServerTestCase.test_invaliduricCsRddt�d�i}|jdd|d�}|�d|jdtjf|��|�d	�|j	f�dS)
Ns
AuthorizationsBasic s
username:passr=r8r�rNrErM)
�base64Z	b64encoder=rlrOrr�rr�rm)rrArprrr�test_authorizationKs��z(CGIHTTPServerTestCase.test_authorizationcCs:|�d�}|�d|jdtjf|��|�d�|jf�dS)NrArNrErM�r=rlrOrr�rr�rmrorrr�test_no_leading_slashSs

�z+CGIHTTPServerTestCase.test_no_leading_slashcCsZd}|tjd<|�d�}|�d|jdtjf|��|�d�|j	f�|�tjd|�dS)NzTest CGI ServerZSERVER_SOFTWAREr=rNrErM)
r/r0r=rlrOrr�rr�rm)rZ	signaturerprrr�test_os_environ_is_not_alteredZs

�z4CGIHTTPServerTestCase.test_os_environ_is_not_alteredcCs:|�d�}|�d|jdtjf|��|�d�|jf�dS)Nz/cgi-bin%2ffile1.pyrNrErMrXrorrr�#test_urlquote_decoding_in_cgi_checkcs

�z9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checkcCs:|�d�}|�d|jdtjf|��|�d�|jf�dS)Nz/cgi-bin/child-dir/file3.pyrNrErMrXrorrr�test_nested_cgi_path_issue21323is

�z5CGIHTTPServerTestCase.test_nested_cgi_path_issue21323cCs:|�d�}|�d|jdtjf|��|�d�|jf�dS)Nz/cgi-bin/file4.py?a=b?c=dsa=b?c=drErMrXrorrr�&test_query_with_multiple_question_markos

�z<CGIHTTPServerTestCase.test_query_with_multiple_question_markcCs:|�d�}|�d|jdtjf|��|�d�|jf�dS)Nz0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//sk=aa%2F%2Fbb&//q//p//=//a//b//rErMrXrorrr�"test_query_with_continuous_slashesus
��z8CGIHTTPServerTestCase.test_query_with_continuous_slashesc	CsfzRtj�d�|�d�}|�d|jdtjf|��|�	d�|j
f�Wtj�d�ntj�d�0dS)Nz/sub/dir/cgi-binz/sub/dir/cgi-bin/file5.pyrNrErM)rZcgi_directories�appendr=rlrOrr�rr�rmr;rorrr� test_cgi_path_in_sub_directories|s
�z6CGIHTTPServerTestCase.test_cgi_path_in_sub_directoriesc	Cs�d}d|ff|fddf}|D]|\}}t|�}|�|��R|jdd|d�}|�tjj|j�d|���d	�}|�	||�
��Wd�q1s�0YqdS)
Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8�Accept)rr)))rarE)ZACCEPTz
text/plainztext/html,text/plainz/cgi-bin/file6.pyr8r�zHTTP_ACCEPT=r")rZsubTestr=rlr9rr�rmr\r�r)rZbrowser_acceptZtestsrArJrprrr�test_accept�s��z!CGIHTTPServerTestCase.test_acceptN)rrrr
rrr/rOr\r5r7rLrPrQrTrUrWrYrZr[r\r]r^r`rbrrrrr!�s$L*	
r!cs.eZdZd�fdd�	Zdd�Zdd�Z�ZS)	�SocketlessRequestHandlerNcs6t��}t�|j_t�j|dd|d�d|_d|_dS)N��	directoryFrC)	r	ZMockr
�makefile�return_valuer�r�
get_calledrg)rrer=r�rrr�s

z!SocketlessRequestHandler.__init__cCs6d|_|�tj�|�dd�|��|j�d�dS)NTrDrE� <html><body>Data</body></html>
)rhrIrr�rKrLr]r^r(rrrr��s
zSocketlessRequestHandler.do_GETcGsdSrr)rr�rrrrr�sz$SocketlessRequestHandler.log_message)N)rrrrr�rr rrr�rrc�srcc@seZdZdd�ZdS)�!RejectingSocketlessRequestHandlercCs|�tj�dS)NF)rRrZEXPECTATION_FAILEDr(rrr�handle_expect_100�sz3RejectingSocketlessRequestHandler.handle_expect_100N)rrrrkrrrrrj�srjc@s0eZdZdd�Zdd�Zdd�Zedd��Zd	S)
�AuditableBytesIOcCs
g|_dSr)�datasr(rrrr�szAuditableBytesIO.__init__cCs|j�|�dSr)rmr_)rr�rrrr^�szAuditableBytesIO.writecCsd�|j�S)Nr�)r+rmr(rrr�getData�szAuditableBytesIO.getDatacCs
t|j�Sr)r�rmr(rrr�	numWrites�szAuditableBytesIO.numWritesN)rrrrr^rn�propertyrorrrrrl�s
rlc@s�eZdZdZe�d�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)d*�Zd+d,�Zd-d.�Zd/d0�Zd1S)2�BaseHTTPRequestHandlerTestCasezrTest the functionality of the BaseHTTPServer.

       Test the support for the Expect 100-continue header.
       sHTTP/1.[0-9]+ 200 OKcCst�|_dSr)rc�handlerr(rrrr5�sz$BaseHTTPRequestHandlerTestCase.setUpcCs:t|�}t�}||j_||j_|j��|�d�|��S�Nr)r
rr�rfiler]�handle_one_request�seek�	readlines)rr�input�outputrrr�send_typical_request�s

z3BaseHTTPRequestHandlerTestCase.send_typical_requestcCs|�|jj�dSr)r�rrrhr(rrr�verify_get_called�sz0BaseHTTPRequestHandlerTestCase.verify_get_calledcs,dD]"�|�t�fdd�|D��d�qdS)N)sServer: sDate: sContent-Type: c3s|]}|���VqdSr)r�)�.0�h�Z	fieldNamerr�	<genexpr>�r�zIBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>ra)rl�sum)rrArr~r�verify_expected_headers�sz6BaseHTTPRequestHandlerTestCase.verify_expected_headerscCs|j�|�}|�|�dSr)�HTTPResponseMatch�searchr�)rr��matchrrr�verify_http_server_response�sz:BaseHTTPRequestHandlerTestCase.verify_http_server_responsecCs�d|j_tj}tj�tdt���D}||jd�||jd�||jdd�||jdd�Wd�n1sj0Y|�	�}|�
d|�|�
d	|�|��}|�d|d
�|�d|d�|�d
|d�|�d|d�dS)N)�	127.0.0.1i9�stderrz/fooz/barz	/spam %s.rBuŸ beans��rz/\x1bbar\x00\x1braz/spam a.�u/spam \x1b\x7f\x9f beans.�)
rrZclient_addressrrr	�patch�objectr�rr�ZassertNotIn�
splitlinesr�)rrZfake_stderrr�r�rrr�test_unprintable_not_logged�s,z:BaseHTTPRequestHandlerTestCase.test_unprintable_not_loggedcCs�|�d�}|�|d�|�|dd��|��|�|dd�|�|jjd�|�|jjd�|�|jjd�|�|jj	d	�|�
|jj��d
�dS)N�GET / HTTP/1.1

rra���ri�GET / HTTP/1.1r8rkrCr�
rzr�r�r{rlrr�requestline�commandrd�request_version�assertSequenceEqualrArD�r�resultrrr�
test_http_1_1�s
z,BaseHTTPRequestHandlerTestCase.test_http_1_1cCs�|�d�}|�|d�|�|dd��|��|�|dd�|�|jjd�|�|jjd�|�|jjd�|�|jj	d	�|�
|jj��d
�dS)NsGET / HTTP/1.0

rrar�ri�GET / HTTP/1.0r8rk�HTTP/1.0rr�r�rrr�
test_http_1_0s
z,BaseHTTPRequestHandlerTestCase.test_http_1_0cCs6|�d�}|�t|�d�|�|dd�|��dS)NsGET / HTTP/0.9

rarri)rzrlr�r{r�rrr�
test_http_0_9s
z,BaseHTTPRequestHandlerTestCase.test_http_0_9cCsH|�d�}|�|d�d��|�|d|�d���|�|jj�dS)Ns)GET /spaced out HTTP/1.1
Host: dummy

rs
HTTP/1.1 400 ra�
)rzr�r�r��indexr�rrrhr�rrr�test_extra_spaces�z/BaseHTTPRequestHandlerTestCase.test_extra_spacecCs�|�d�}|�|d�|�|dd��|��|�|dd�|�|jjd�|�|jjd�|�|jjd�|�|jj	d	�d
}|�
|jj��|�dS)Ns(GET / HTTP/1.0
Expect: 100-continue

rrar�rir�r8rkr��)ZExpectz100-continuer��rr�rArrr�test_with_continue_1_0s
z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_0cCs�|�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
rar�r�sHTTP/1.1 200 OK
r�rir�r8rkrCr�)rzrlr�r{rrr�r�rdr�r�rArDr�rrr�test_with_continue_1_1)s
z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1cCsNtd�}t�}t�}||_||_d|_d|_d|_|�d�|�	|j
d�dS)Nr�rCr�r�)r
rlrcrtr]r�r�r�rRrlro�rrxryrrrrr�#test_header_buffering_of_send_error8s
zBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_errorcCsXtd�}t�}t�}||_||_d|_|�d�|�|jd�|�	�|�|jd�dS)Nr�rCr�rra)
r
rlrcrtr]r�Zsend_response_onlyrlrorLr�rrr�+test_header_buffering_of_send_response_onlyFs
zJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_onlycCsvtd�}t�}t�}||_||_d|_|�dd�|�dd�|�|jd�|�	�|�|�
�d�|�|jd�dS)	Nr�rCZFoo�foo�barrsFoo: foo
bar: bar

ra)r
rlrcrtr]r�rKrlrorLrnr�rrr�$test_header_buffering_of_send_headerTszCBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_headercCs�dd�}td�}t�}||j_||j_d|j_|j��|�||�d�||��d�}|�|dd�|�|d	d�|�|d
d�dS)NcSs(|��}|�d�|��}|�|�|Srs)�tellrvr)r��posr�rrr�_readAndReseekfs


z[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseekr�rCr�r�rsHTTP/1.1 100 Continuerar�sHTTP/1.1 200 OK)	r
rrrtr]r�ruZassertNotEqualr�rl)rr�rxryr�rrr�$test_header_unbuffered_when_continueds
zCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continuecCst|j}t�|_|�d�}|�|dd�|�|dd��|�|jj�|�tdd�|dd�D��d�||_dS)Nr�rs!HTTP/1.1 417 Expectation Failed
rar�css|]}|dkVqdS)sConnection: close
Nr)r|�rrrrr�r�zMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>)rrrjrzrlr�r�rhr�)rZ
usual_handlerr�rrr�test_with_continue_rejectedzs
"z:BaseHTTPRequestHandlerTestCase.test_with_continue_rejectedcCsD|�ddd�}|�|dd�|�|jj�|�|jjt�dS)NsGET �x�rs#HTTP/1.1 414 Request-URI Too Long
)rzrlr�rrrhZassertIsInstancer�rr�rrr�test_request_length�sz2BaseHTTPRequestHandlerTestCase.test_request_lengthcCsH|�dddd�}|�|dd�|�|jj�|�|jjd�dS)NsGET / HTTP/1.1
X-Foo: bar�rr�s

rsHTTP/1.1 431 Line too long
r��rzrlr�rrrhr�r�rrr�test_header_length�s�z1BaseHTTPRequestHandlerTestCase.test_header_lengthcCs<|�d�}|�|dd�|�|jj�|�|jjd�dS)Ns�GET / 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
r�r�r�rrr�test_too_many_headers�s�z4BaseHTTPRequestHandlerTestCase.test_too_many_headerscCs8|�d�}d�|�}d}|�tj|dd��d�|�dS)Ns*<script>alert("hello")</script> / HTTP/1.1r�z<script>alert("hello")</script>Fr�r")rzr+r�r�r�r\)rr��textrrr�test_html_escape_on_error�s�
z8BaseHTTPRequestHandlerTestCase.test_html_escape_on_errorcsZ��fdd�}|�j_td���j����tt��td���j����tt��dS)Ncst���j_dSr)�nextrrZclose_connectionr�Zclose_valuesrrrru�szPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_request)T)FFT)rrru�iter�handlerI�
StopIterationr�)rrurr�r�test_close_connection�s

z4BaseHTTPRequestHandlerTestCase.test_close_connectionc	Csdt��}t�|�\	}}}}}}}}	}
d|jj|||jj|||||f}|�|jj|d�|�dS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)r�)�time�gmtimerrZweekdaynameZ	monthnamerlZdate_time_string)rZnowZyearZmonthZdayZhhZmm�ssZwd�y�zrJrrr�test_date_time_string�s

�z4BaseHTTPRequestHandlerTestCase.test_date_time_stringN)rrr�__doc__�re�compiler�r5rzr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrq�s2
	

rqc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)� SimpleHTTPRequestHandlerTestCasez Test url parsing cCs^tj�t��d�|_tj�dd�|_tj�dd�|_t�|_tdd�|_	tt
�d�d�|_dS)Nr�r�r�rd)
r/rdr+r��translated_1�translated_2�translated_3rc�	handler_1�	handler_2�pathlib�PurePath�	handler_3r(rrrr5�sz&SimpleHTTPRequestHandlerTestCase.setUpcCs�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�dS)Nz	/filenamez/filename?foo=barz/filename?a=b&spam=eggs#zot�r��translate_pathrlr�r�r�r�r��rrdrrr�test_query_arguments�s$z5SimpleHTTPRequestHandlerTestCase.test_query_argumentscCs�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�|j�d�}|�||j�dS)Nz
//filenamez//filename?foo=barr�r�rrr�test_start_with_double_slash�sz=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slashcCs0t�tjdt���|j�d�}|�tjtj�}|�	||j
�|j�d�}|�tjtj�}|�	||j�|j
�d�}|�tjtj�}|�	||j�|j�d�}|�tjtj�}|�	||j
�|j�d�}|�tjtj�}|�	||j�|j
�d�}|�tjtj�}|�	||j�|j�d�}|�tjtj�}|�	||j
�|j�d�}|�tjtj�}|�	||j�|j
�d�}|�tjtj�}|�	||j�|j�d�}|�tjtj�}|�	||j
�|j�d�}|�tjtj�}|�	||j�|j
�d�}|�tjtj�}|�	||j�Wd�n1�s"0YdS)Nrdzc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)rZ	swap_attrrr/�ntpathr�r�r��seprlr�r�r�r�r�r�rrr�test_windows_colon�sJz3SimpleHTTPRequestHandlerTestCase.test_windows_colonN)rrrr�r5r�r�r�rrrrr��s
r�c@seZdZdd�ZdS)�MiscTestCasecCsdg}hd�}tt�D]<}|�d�s||vr,qtt|�}t|dd�dkr|�|�q|�tj|�dS)N>r�Z
nobody_uidr4�_rzhttp.server)r�rr��getattrr_ZassertCountEqual�__all__)rrJZ	blacklistr�Z
module_objectrrr�test_alls
zMiscTestCase.test_allN)rrrr�rrrrr�sr�c@sdeZdZdd�Ze�d�dd��Ze�d�dd��ZdZd	Z	e�d�d
d��Z
e�d�dd
��ZdS)�ScriptTestCasecCs0tjtjtjtjtjdd�d�d�d�d�d�S)NcSsdS)N)rrrrrrr�<lambda>/r�z2ScriptTestCase.mock_server_class.<locals>.<lambda>)r#)r")rg)r3)r	Z	MagicMockr(rrr�mock_server_class)s�����z ScriptTestCase.mock_server_classzbuiltins.printcCs0|��}tj|dd�|�|jtjtjf�dS�N�ZServerClass�bind�r�rr�r��address_familyr"�AF_INET6�AF_INET�rr��mock_serverrrr�test_server_test_unspec6s
�z&ScriptTestCase.test_server_test_unspeccCs0|��}tj|dd�|�|jtjtjf�dS)Nr!r�r�r�rrr�test_server_test_localhost?s
�z)ScriptTestCase.test_server_test_localhost)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334z::1)z0.0.0.0z8.8.8.8r�cCs6|jD]*}|��}tj||d�|�|jtj�qdSr�)�
ipv6_addrsr�rr�rlr�r"r��rr�r�r�rrr�test_server_test_ipv6Ts
z$ScriptTestCase.test_server_test_ipv6cCs6|jD]*}|��}tj||d�|�|jtj�qdSr�)�
ipv4_addrsr�rr�rlr�r"r�r�rrr�test_server_test_ipv4[s
z$ScriptTestCase.test_server_test_ipv4N)rrrr�r	r�r�r�r�r�r�r�rrrrr�'s



r�cCst�tjt���dSr)rZaddModuleCleanupr/r�r�rrrr�setUpModulecsr��__main__)?r��collectionsrZhttp.serverrrrrr9rrr/r"r�r�rVr�r�r�Z
email.messager�Zemail.utilsr�Zhttp.client�urllib.parser�r�r�r�rrr	�ior
rr�rr
rrZTestCaser-rBr�r�r6r7r8r:r�hasattrrr!rcrjrlrqr�r�r�r�r�mainrrrr�<module>sl	P$"
�~Z
<


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists