Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_httpservers.cpython-310.pyc
o

�9jr��@sHdZddlmZddlmZmZmZmZddlm	Z	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddl m!Z!m"Z"ddlZddl#m$Z$dd	l%m&Z&dd
l%m'Z'Gdd�d�Z(Gd
d�dej)�Z*Gdd�dej+�Z,Gdd�de,�Z-Gdd�de,�Z.Gdd�de,�Z/dZ0dZ1dZ2dZ3e�4e5ed�o�e�6�dkd�Gdd�de,��Z7Gdd �d e�Z8Gd!d"�d"e8�Z9Gd#d$�d$�Z:Gd%d&�d&ej+�Z;Gd'd(�d(ej+�Z<Gd)d*�d*ej+�Z=Gd+d,�d,ej+�Z>d-d.�Z?e@d/k�r"e�A�dSdS)0z�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)�support)�	os_helper)�threading_helperc@seZdZdd�Zddd�ZdS)�NoLogRequestHandlercG�dS�N�)�self�argsrr�,/usr/lib/python3.10/test/test_httpservers.py�log_message&szNoLogRequestHandler.log_messageNcC�dS�N�r)r�nrrr�read*�zNoLogRequestHandler.readr)�__name__�
__module__�__qualname__rrrrrrr%src@s$eZdZdd�Zdd�Zdd�ZdS)�TestServerThreadcCstj�|�||_||_dSr)�	threading�Thread�__init__�request_handler�test_object)rr%r$rrrr#/s
zTestServerThread.__init__cCsbtd|j�|_|jj��\|j_|j_|jj�	�d|_z|j�
d�W|j��dS|j��w)N)�	localhostrg�������?)rr$r�socket�getsocknamer%�HOST�PORT�server_started�set�
serve_forever�server_close�rrrr�run4szTestServerThread.runcCs|j��|��dSr)r�shutdown�joinr/rrr�stop>s
zTestServerThread.stopN)rrrr#r0r3rrrrr .s
r c@s,eZdZdd�Zdd�Zddifdd�ZdS)	�BaseTestCasecCsDt��|_t��t_t��|_	t
||j�|_|j�
�|j	��dSr)r�threading_setup�_threadsr
�EnvironmentVarGuard�os�environr!�Eventr+r r$�thread�start�waitr/rrr�setUpDs



zBaseTestCase.setUpcCs*|j��d|_tj��tj|j�dSr)r;r3r8r9�__exit__r�threading_cleanupr6r/rrr�tearDownLs

zBaseTestCase.tearDown�GETNcCs0tj�|j|j�|_|j�||||�|j��Sr)�http�client�HTTPConnectionr)r*�
connection�request�getresponse)r�uri�method�body�headersrrrrGRs
zBaseTestCase.request)rrrr>rArGrrrrr4Csr4c@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.1cC�0|�tj�|�dd�|�dd�|��dS)N�Content-Type�	text/html�
Connection�close��
send_responser�
NO_CONTENT�send_header�end_headersr/rrr�do_TEST]�z.BaseHTTPServerTestCase.request_handler.do_TESTcCrO)NrPrQrR�
keep-aliverTr/rrr�do_KEEPcrZz.BaseHTTPServerTestCase.request_handler.do_KEEPcCs|�d�dS)N����
send_errorr/rrr�do_KEYERRORisz2BaseHTTPServerTestCase.request_handler.do_KEYERRORcCs|�tj�dSr�r_r�	NOT_FOUNDr/rrr�do_NOTFOUNDl�z2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDcCs|�ddd�dS)Nr]z
Short MessagezThis is a long 
 explanationr^r/rrr�do_EXPLAINERRORos�z6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORcCs.|�d�|�dd�|�dd�|��dS)Nr]rPrQrRrS)rUrWrXr/rrr�	do_CUSTOMss
z0BaseHTTPServerTestCase.request_handler.do_CUSTOMcCsJ|�d�|�dd�|�dd�|��|jd�d�}|j�|�dS)Nr]�	X-Special�Dängerous MindrRrSzx-special-incoming�utf-8)rUrWrXrL�encode�wfile�write)rrKrrr�do_LATINONEHEADERys
z8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERcC�|�t|jdd���dS�N��r_�int�pathr/rrr�
do_SEND_ERROR��z4BaseHTTPServerTestCase.request_handler.do_SEND_ERRORcCrnrorqr/rrr�do_HEAD�ruz.BaseHTTPServerTestCase.request_handler.do_HEADN)rrr�protocol_version�default_request_versionrYr\r`rcrerfrmrtrvrrrrr$Ysr$cCs,t�|�tj�|j|j�|_|j��dSr)	r4r>rCrDrEr)r*�con�connectr/rrrr>�s
zBaseHTTPServerTestCase.setUpcC�,|j�dd�|j��}|�|jtj�dS)NrB�/)ryrGrH�assertEqual�statusr�NOT_IMPLEMENTED�r�resrrr�test_command��
z#BaseHTTPServerTestCase.test_commandcC�>d|j_|j�dd�|j��|j��}|�|jtj�dS)Nz	HTTP/1.1
�XYZBOGUSr|�	ry�
_http_vsn_str�
putrequest�
endheadersrHr}r~rrr�rrr�test_request_line_trimming��


z1BaseHTTPServerTestCase.test_request_line_trimmingcCr�)N�FUBARrBr|�	ryr�r�r�rHr}r~r�BAD_REQUESTr�rrr�test_version_bogus�r�z)BaseHTTPServerTestCase.test_version_boguscCr�)Nz
HTTP/9.9.9rBr|r�r�rrr�test_version_digits�r�z*BaseHTTPServerTestCase.test_version_digitscCr�)NrrBr|r�r�rrr�test_version_none_get�r�z,BaseHTTPServerTestCase.test_version_none_getcCr�)Nr�CUSTOMr|r�r�rrr�test_version_none�s


z(BaseHTTPServerTestCase.test_version_nonecCsFd|j_d|j_|j�dd�|j��|j��}|�|jtj	�dS)N�czHTTP/9.9rBr|)
ry�	_http_vsnr�r�r�rHr}r~r�HTTP_VERSION_NOT_SUPPORTEDr�rrr�test_version_invalid�s

z+BaseHTTPServerTestCase.test_version_invalidcCs>d|j_|j�dd�|j��|j��}|�|jtj�dSrr�r�rrr�test_send_blank�r�z&BaseHTTPServerTestCase.test_send_blankcCsD|j�dd�|j�dd�|j��|j��}|�|jtj�dS)NrBr|rRrS)	ryr��	putheaderr�rHr}r~rrr�rrr�test_header_close�s


z(BaseHTTPServerTestCase.test_header_closecCsLd|j_|j�dd�|j�dd�|j��|j��}|�|jtj	�dS)NrNrBr|rRr[)
ryr�r�r�r�rHr}r~rrr�rrr�test_header_keep_alive�s

z-BaseHTTPServerTestCase.test_header_keep_alivecCr{)N�TESTr|)ryrGrHr}r~rrVr�rrr�test_handler�r�z#BaseHTTPServerTestCase.test_handlercCsJ|j�dd�|j��}|�|�d�d�|j�dd�|�|jj�dS)N�KEEPr|rRr[r�)ryrGrHr}�	getheader�
addCleanuprSr�rrr�test_return_header_keep_alive�s

z4BaseHTTPServerTestCase.test_return_header_keep_alivecC�*|j�dd�|j��}|�|jd�dS)N�KEYERRORr|r]�ryrGrHr}r~r�rrr�test_internal_key_error��
z.BaseHTTPServerTestCase.test_internal_key_errorcCr�)Nr�r|r]r�r�rrr�test_return_custom_status�r�z0BaseHTTPServerTestCase.test_return_custom_statuscCs>|j�dd�|j��}|�|jd�|�t|�d���dS)N�EXPLAINERRORr|r]�Content-Length)ryrGrHr}r~�
assertTruerrr�r�rrr�test_return_explain_error�s
z0BaseHTTPServerTestCase.test_return_explain_errorcCsL|jjddddid�|j��}|�|�d�d�|�|��d�d��dS)	N�LATINONEHEADERr|zX-Special-IncominguÄrger mit Unicode�rLrgrhri)ryrGrHr}r�rrjr�rrr�test_latin1_header�s
�
z)BaseHTTPServerTestCase.test_latin1_headercCsN|j�dd�|j��}|�|jtj�|��}|�t|�	d��t
|��dS)N�NOTFOUNDr|r�)ryrGrHr}r~rrbrrrr��len)rr��datarrr�test_error_content_length�s

z0BaseHTTPServerTestCase.test_error_content_lengthcCs�tjtjf}tjtjtjtjtjfD]A}|j�dd�|��|j�	�}|�
||j�|�
d|�d��|�
d|�d��||vrI|�
d|�d��|�
�}|�
d|�qdS)N�
SEND_ERROR�/{}r�rP�Transfer-Encoding�)r�NOT_MODIFIED�
RESET_CONTENTrV�
PROCESSING�SWITCHING_PROTOCOLSryrG�formatrHr}r~r�r�r�allow_transfer_encoding_codes�coder�r�rrr�test_send_errors"��
�z&BaseHTTPServerTestCase.test_send_errorcCs�tjtjf}tjtjtjtjtjfD]\}|j�dd�|��|j�	�}|�
||j�|tjkrE|�t
|�d��dk�|�d|�d��n|�
d|�d��|�
d|�d��||vrd|�
d|�d��|��}|�
d|�qdS)	N�HEADr�r�rrQrPr�r�)rr�r��OKrVr�ryrGr�rHr}r~r�rrr��assertInrr�rrr�test_head_via_send_errors(��

�z/BaseHTTPServerTestCase.test_head_via_send_errorN)rrrrrr$r>r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrMXs,.	rMc@s,eZdZGdd�de�Zdd�Zdd�ZdS)�RequestHandlerLoggingTestCasec@s$eZdZdZdZdd�Zdd�ZdS)z-RequestHandlerLoggingTestCase.request_handlerrNcCs|�tj�|��dSr)rUrr�rXr/rrr�do_GET,sz4RequestHandlerLoggingTestCase.request_handler.do_GETcCs|�tjd�dS)NzFile not foundrar/rrr�do_ERROR0�z6RequestHandlerLoggingTestCase.request_handler.do_ERRORN)rrrrwrxr�r�rrrrr$(s
r$cCsvtj�|j|j�|_|j��t���}|j�	dd�|j�
�Wd�n1s*wY|�|���
d��dS)NrBr|z"GET / HTTP/1.1" 200 -
)rCrDrEr)r*ryrzr�captured_stderrrGrHr��getvalue�endswith)r�errrrr�test_get3s

��z&RequestHandlerLoggingTestCase.test_getcCs�tj�|j|j�|_|j��t���}|j�	dd�|j�
�Wd�n1s*wY|���d�}|�
|d�d��|�
|d�d��dS)N�ERRORr|�
rz code 404, message File not foundrpz"ERROR / HTTP/1.1" 404 -)rCrDrEr)r*ryrzrr�rGrHr��splitr�r�)rr��linesrrr�test_err>s

�z&RequestHandlerLoggingTestCase.test_errN)rrrrr$r�r�rrrrr�'sr�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@�eZdZdS)z(SimpleHTTPServerTestCase.request_handlerN�rrrrrrrr$L�r$cs�t���t��|_t��}t�|�d|_tj	|d�|_
tj�|j
�|_
d|j
|_tj�|j
d�}t|d��}|�|j�|��Wd�n1sMwYt�|�j}tj�|tjj�}|jdd�|_tjj|��dd	�|_dS)
NsWe are the knights who say Ni!)�dirr|�test�wbr)�microsecondT��usegmt) �superr>r8�getcwd�cwd�tempfile�
gettempdir�chdirr��mkdtemp�tempdirrs�basename�tempdir_name�base_urlr2�openrl�flush�stat�st_mtime�datetime�
fromtimestamp�timezone�utc�replace�last_modif_datetime�email�utils�
formatdate�	timestamp�last_modif_header)r�basetempdir�tempname�temp�mtime�
last_modif��	__class__rrr>Os*



���zSimpleHTTPServerTestCase.setUpcsTz#t�|j�zt�|j�WnYWt���dSWt���dSt���wr)r8r�r��shutil�rmtreer�r�rAr/r�rrrAds�z!SimpleHTTPServerTestCase.tearDownNcs���fdd�}d�|�_���}|���|��j|�|��j�|r*|�||�|��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_connos
zDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conn�
rRrS�r�zConnection should be closed)�_close_connrr�r}r~�assertIsNotNone�reason�version�msg�getrS)rrr~r�rrKrrr�check_status_and_reasonns
z0SimpleHTTPServerTestCase.check_status_and_reason�darwinz2undecodable name cannot always be decoded on macOS�win32z+undecodable name cannot be decoded on win32z!need os_helper.TESTFN_UNDECODABLEcCst��}t�tj�d}ttj�|j	|�d��}|�
tj�Wd�n1s(wY|�|jd�}tj
dkrKt�|j	�D]
}|dkrJ|}nq@|�|tj�}tjj|dd�}|�d|�|d	�|�|�d
tj|dd��|d	�|�|�|jd|�}|j|tjtjd
�dS)Nz.txtr�r|r
r��
surrogatepass)�errorsz	href="%s"�surrogateescape�>%s<F��quote�r�)�sys�getfilesystemencodingr8�fsdecoder
�TESTFN_UNDECODABLEr�rsr2r�rlrGr��platform�listdirrrr��urllib�parserr�rj�html�escape)r�enc�filename�fr�namerK�
quotednamerrr�test_undecodable_filename�s0�
�

�
�

�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=�)rGr�r�assertRegexrj�rrrrr�test_undecodable_parameter�s z3SimpleHTTPServerTestCase.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.
        �existing_directoryz2/python.org/..%2f..%2f..%2f..%2f..%2f../%0a%0d/../z/existing_directoryr|�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)r8�mkdirrsr2r�r�rGrr�MOVED_PERMANENTLYr�r}�assertFalse�
startswithr�)	r�url�expected_locationr�location�
attack_url�attack3_url�attack_scheme_netloc_2slash_url�expected_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�t
�t
j�
|jd
d��|�|jd�}|�|tj�d}tt
j�
|jd�d��
}|�|�Wd�n1s�wY|�|jd�}|�|tj|�t
jdk�rt
��dk�r
t
�|jd�z|�|jd�}|�|tj�Wt
�|jd�dSt
�|jd�wdSdS)N�/testr�/test/r|r��0�/?hi=2�?hi=1r+�/?hi=1z/ThisDoesNotExistz/ThisDoesNotExist/�spamz
index.htmlz/spam/sDummy index file
r��posixri�)rGr�rrr�r�rbr/r}r�r8�makedirsrsr2r�r�r�rlr#�geteuid�chmod)rrr�r"rrrr��sH�

�"�z!SimpleHTTPServerTestCase.test_getcCsT|j|jddd�}|�|tj�|�|�d�tt|j	���|�|�d�d�dS)Nr:r��rJzcontent-lengthzcontent-typezapplication/octet-stream)
rGr�rrr�r}r��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-Sincer:r�rp)�hoursTr�N)r��message�Messager�rGr�rrr�r�r��	timedeltar��format_datetime)rrLr�new_dtrrr�test_browser_caches



�z+SimpleHTTPServerTestCase.test_browser_cachecCsZ|j}|tjdd�}tj��}tjj|dd�|d<|j|j	d|d�}|�
|tj�dS)Nim)�daysTr�rHr:r�)
r�r�rLr�rJrKr�rMrGr�rrr�)r�dt�old_dtrLrrrr�test_browser_cache_file_changed"s

�z8SimpleHTTPServerTestCase.test_browser_cache_file_changedcCsBtj��}|j|d<d|d<|j|jd|d�}|�|tj�dS)NrH�*z
If-None-Matchr:r�)	r�rJrKr�rGr�rrr�)rrLrrrr�,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)Nr|�FOOrE�custom�GETs)rGrrrr(rrr�test_invalid_requests6s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
        r:rz
Last-modifiedN)	rGr�rrr�r�rLr}r�)rrr�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)	Nr:rr;r|r=r>r+r?)
rGr�rrr�r�rbr/r}r�r(rrr�test_path_without_leading_slashHs�z8SimpleHTTPServerTestCase.test_path_without_leading_slashc	Cs�d}tj�|j|�}z	t|d���Wnty!t�d|��wz|�	|j
d�}|�|tj
�}|j��}Wt�|�nt�|�w|�|�dtj|dd�}|�|�|�|�dS)Nz<test&>.txtr�z-Can not create file %s on current file systemr|rFr)r8rsr2r�r�rS�OSError�unittest�SkipTestrGr�rrr�rL�get_content_charset�unlinkrrrr�rj)rr!�fullpathrrKr �	html_textrrr�test_html_escape_filenameXs"��
z2SimpleHTTPServerTestCase.test_html_escape_filenamer)rrrrrr$r>rArr]�skipIfrr�
skipUnlessr
rr%r)r9r�rGrOrSrUrYrZr[rc�
__classcell__rrr�rr�Ks4

���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>")
rCz7This 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@r�)z%CGIHTTPServerTestCase.request_handlerNr�rrrrr$�r�r$�asciicCst�|�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��r�tj�	|jd�|_t�|j���|_ntj|_z|j�d�Wnt y�|�!�|�"d�Ynwtj�	|jd�|_t#|jd	dd
��}|�$t%|j�Wd�n1s�wYt�&|jd�tj�	|j
d�|_t#|jd	dd
��}|�$t%|j�Wd�n1s�wYt�&|jd�tj�	|j
d
�|_t#|jd	dd
��}|�$t'|j�Wd�n	1�s*wYt�&|jd�tj�	|jd�|_t#|jd	dd
��}|�$t%|j�Wd�n	1�s[wYt�&|jd�tj�	|j
d�|_t#|jd	dd
��}|�$t(|jdf�Wd�n	1�s�wYt�&|jd�tj�	|jd�|_t#|jd	dd
��}|�$t%|j�Wd�n	1�s�wYt�&|jd�tj�	|j
d�|_)t#|j)d	dd
��}|�$t*|j�Wd�n	1�s�wYt�&|j)d�t�+|j�dS)Nzcgi-binz	child-dir�subr��pythonriz0Python executable path is not encodable to utf-8znocgi.py�w)�encodingi�zfile1.pyzfile2.pyzfile3.pyzfile4.py�QUERY_STRINGzfile5.pyzfile6.py),r4r>r8r�r�r�r��
parent_dirrsr2�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
�can_symlink�	pythonexer�
PythonSymlink�	__enter__r�
executablerj�UnicodeEncodeErrorrA�skipTestr�rl�	cgi_file1rD�	cgi_file2�	cgi_file4�
file6_path�	cgi_file6r�)rr��file1�file2�file3�file4�file5�file6rrrr>�s�


��������zCGIHTTPServerTestCase.setUpc	Csz|t�|j�|jr|j�ddd�|jrt�|j�|jr$t�|j�|jr-t�|j�|j	r6t�|j	�|j
r?t�|j
�|jrHt�|j�|jrQt�|j�t�
|j�t�
|j�t�
|j�t�
|j�t�
|j�t�
|j�Wt�|�dSt�|�wr)r8r�r�rzr?rt�removerurvrwrxryr��rmdirrprorsrrrqrnr4rAr/rrrrA�s2zCGIHTTPServerTestCase.tearDownc
Cs�idd�dt�dt�dd�dd�dd�dd�d	d
�d
d
�dd�d
d�dd�dd�dd�dd�dd�dd�dddddtddtddd��}|��D])\}}t|t�r^t|t�r^|�|tj|�qGt�|�}|j	||d|||fd�qGdS)Nrr-z..z/.//..r|z/\z//\z/.//�cgi-bin/file1.py�/cgi-bin/file1.py�az//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 = %r
Got:    %r
Wanted: %rr,)
�
IndexError�items�
isinstance�type�
issubclass�	Exception�assertRaisesr�_url_collapse_pathr})r�test_vectorsrs�expected�actualrrr�test_url_collapse_pathsv��������	�
���
�������
���z,CGIHTTPServerTestCase.test_url_collapse_pathcCs:|�d�}|�|��|�d�|jfd|jdtjf�dS)Nr��Content-type�Hello WorldrQ)rGr}rr�r~�lineseprr�r�rrr�test_headers_and_content9s

�z.CGIHTTPServerTestCase.test_headers_and_contentcCs|�d�}|�|jtj�dS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)rGr}r~rrbr�rrr�test_issue19435?s
z%CGIHTTPServerTestCase.test_issue19435cCsFtj�dddd��}ddi}|�dd||�}|�|��d	|j�dS)
Nrprji@�)r@�eggs�baconr�z!application/x-www-form-urlencodedz/cgi-bin/file2.py�POSTs1, python, 123456)rr�	urlencoderGr}rr�)r�paramsrLr�rrr�	test_postCs
�zCGIHTTPServerTestCase.test_postcCs&|�d�}|��|�|jtj�dS)Nz/cgi-bin/invalid)rGrr}r~rrbr�rrr�test_invaliduriKs
z%CGIHTTPServerTestCase.test_invaliduricCsRddt�d�i}|jdd|d�}|�d|jdtjf|��|�d	�|j	f�dS)
Ns
AuthorizationsBasic s
username:passr�rBr�r�rQr�)
�base64�	b64encoderGr}r�rr�rr�r~)rrLr�rrr�test_authorizationPs��z(CGIHTTPServerTestCase.test_authorizationcC�:|�d�}|�d|jdtjf|��|�d�|jf�dS)Nr�r�rQr��rGr}r�rr�rr�r~r�rrr�test_no_leading_slashXs

�z+CGIHTTPServerTestCase.test_no_leading_slashcCsZd}|tjd<|�d�}|�d|jdtjf|��|�d�|j	f�|�tjd|�dS)NzTest CGI Server�SERVER_SOFTWAREr�r�rQr�)
r8r9rGr}r�rr�rr�r~)r�	signaturer�rrr�test_os_environ_is_not_altered_s

�z4CGIHTTPServerTestCase.test_os_environ_is_not_alteredcCr�)Nz/cgi-bin%2ffile1.pyr�rQr�r�r�rrr�#test_urlquote_decoding_in_cgi_checkh�

�z9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checkcCr�)Nz/cgi-bin/child-dir/file3.pyr�rQr�r�r�rrr�test_nested_cgi_path_issue21323nr�z5CGIHTTPServerTestCase.test_nested_cgi_path_issue21323cCr�)Nz/cgi-bin/file4.py?a=b?c=dsa=b?c=drQr�r�r�rrr�&test_query_with_multiple_question_marktr�z<CGIHTTPServerTestCase.test_query_with_multiple_question_markcCr�)Nz0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//sk=aa%2F%2Fbb&//q//p//=//a//b//rQr�r�r�rrr�"test_query_with_continuous_slasheszs
��z8CGIHTTPServerTestCase.test_query_with_continuous_slashesc	Csdz*tj�d�|�d�}|�d|jdtjf|��|�	d�|j
f�Wtj�d�dStj�d�w)Nz/sub/dir/cgi-binz/sub/dir/cgi-bin/file5.pyr�rQr�)r�cgi_directories�appendrGr}r�rr�rr�r~r�r�rrr� test_cgi_path_in_sub_directories�s
�z6CGIHTTPServerTestCase.test_cgi_path_in_sub_directoriesc	Cs�d}d|ff|fddf}|D]>\}}t|�}|�|��)|jdd|d�}|�tjj|j�d|���d	�}|�	||�
��Wd�n1sGwYqdS)
Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8�Accept)rr)))r�rQ)�ACCEPTz
text/plainztext/html,text/plainz/cgi-bin/file6.pyrBr�zHTTP_ACCEPT=rh)r�subTestrGr}rCrr�r~rjr�r)r�browser_accept�testsrLr�r�rrr�test_accept�s �����z!CGIHTTPServerTestCase.test_acceptN)rrrrrr$r8r�rjr>rAr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrg�s&L*	
rgcs.eZdZd�fdd�	Zdd�Zdd�Z�ZS)	�SocketlessRequestHandlerNcs6t��}t�|j_t�j|dd|d�d|_d|_dS)N��	directoryFrN)	r	�Mockr
�makefile�return_valuer�r#�
get_calledrw)rr�rGr�rrr#�s


z!SocketlessRequestHandler.__init__cCs6d|_|�tj�|�dd�|��|j�d�dS)NTrPrQ� <html><body>Data</body></html>
)r�rUrr�rWrXrkrlr/rrrr��s
zSocketlessRequestHandler.do_GETcGrrr)rr�rrrrr�rz$SocketlessRequestHandler.log_messager)rrrr#r�rrfrrr�rr��sr�c@�eZdZdd�ZdS)�!RejectingSocketlessRequestHandlercCs|�tj�dS)NF)r_r�EXPECTATION_FAILEDr/rrr�handle_expect_100�sz3RejectingSocketlessRequestHandler.handle_expect_100N)rrrr�rrrrr���r�c@s0eZdZdd�Zdd�Zdd�Zedd��Zd	S)
�AuditableBytesIOcCs
g|_dSr)�datasr/rrrr#�s
zAuditableBytesIO.__init__cCs|j�|�dSr)r�r�)rr�rrrrl�rdzAuditableBytesIO.writecCsd�|j�S)Nr�)r2r�r/rrr�getData��zAuditableBytesIO.getDatacCs
t|j�Sr)r�r�r/rrr�	numWrites�s
zAuditableBytesIO.numWritesN)rrrr#rlr��propertyr�rrrrr��sr�c@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)r��handlerr/rrrr>�r�z$BaseHTTPRequestHandlerTestCase.setUpcCs:t|�}t�}||j_||j_|j��|�d�|��S�Nr)r
r��rfilerk�handle_one_request�seek�	readlines)rrJ�input�outputrrr�send_typical_request�s

z3BaseHTTPRequestHandlerTestCase.send_typical_requestcCs|�|jj�dSr)r�r�r�r/rrr�verify_get_called�r�z0BaseHTTPRequestHandlerTestCase.verify_get_calledcs,dD]�|�t�fdd�|D��d�qdS)N)sServer: sDate: sContent-Type: c3s�|]}|���VqdSr)r1)�.0�h��	fieldNamerr�	<genexpr>�s�zIBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>rp)r}�sum)rrLrr�r�verify_expected_headers�s �z6BaseHTTPRequestHandlerTestCase.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���(}||jd�||jd�||jdd�||jdd�||jd�Wd�n1s;wY|�	�}|�
d	|�|�
d
|�|��}|�d|d�|�d|d
�|�d|d�|�d|d�|�d|d�dS)N)�	127.0.0.1i9�stderrz/fooz/barz	/spam %s.r�uŸ beansz"GET /foo\b"ar HTTP/1.0"��rz/\x1bbar\x00\x1brpz/spam a.�u/spam \x1b\x7f\x9f beans.�z"GET /foo\\b"ar\x07 HTTP/1.0"�)
r��client_addressrrr	�patch�objectrrr��assertNotIn�
splitlinesr�)rr�fake_stderrr�r�rrr�test_unprintable_not_logged�s$�z:BaseHTTPRequestHandlerTestCase.test_unprintable_not_loggedcC�|�d�}|�|d�|�|dd��|��|�|dd�|�|jjd�|�|jjd�|�|jjd�|�|jj	d	�|�
|jj��d
�dS)N�GET / HTTP/1.1

rrp���r��GET / HTTP/1.1rBr|rNr�
r�r�r�r�r}r��requestline�commandrs�request_version�assertSequenceEqualrLr��r�resultrrr�
test_http_1_1��
z,BaseHTTPRequestHandlerTestCase.test_http_1_1cCr�)NsGET / HTTP/1.0

rrpr�r��GET / HTTP/1.0rBr|�HTTP/1.0rr�rrrr�
test_http_1_0rz,BaseHTTPRequestHandlerTestCase.test_http_1_0cCs6|�d�}|�t|�d�|�|dd�|��dS)NsGET / HTTP/0.9

rprr�)r�r}r�r�rrrr�
test_http_0_9s
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 rp�
)r�r�r1r��indexr0r�r�rrrr�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

rrpr�r�rrBr|r�)�Expectz100-continuer��rrrLrrr�test_with_continue_1_0#s
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
rpr	r�sHTTP/1.1 200 OK
r�r�r�rBr|rNr)r�r}r�r�r�r�r�rsr�rrLr�rrrr�test_with_continue_1_10s
z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1cCsNtd�}t�}t�}||_||_d|_d|_d|_|�d�|�	|j
d�dS)Nr�rNr�r�)r
r�r�r�rkr�r�r�r_r}r��rr�r�r�rrr�#test_header_buffering_of_send_error?s
zBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_errorcCsXtd�}t�}t�}||_||_d|_|�d�|�|jd�|�	�|�|jd�dS)Nr�rNrrrp)
r
r�r�r�rkr��send_response_onlyr}r�rXrrrr�+test_header_buffering_of_send_response_onlyMs
zJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_onlycCsvtd�}t�}t�}||_||_d|_|�dd�|�dd�|�|jd�|�	�|�|�
�d�|�|jd�dS)	Nr�rN�Foo�foo�barrsFoo: foo
bar: bar

rp)r
r�r�r�rkr�rWr}r�rXr�rrrr�$test_header_buffering_of_send_header[s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�|��}|�|�|Sr�)�tellr�r)r"�posr�rrr�_readAndReseekms


z[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseekrrNr�r	rsHTTP/1.1 100 Continuerpr�sHTTP/1.1 200 OK)	r
r�r�rkr�r��assertNotEqualr�r})rrr�r�rrrr�$test_header_unbuffered_when_continueks
zCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continuecCst|j}t�|_|�d�}|�|dd�|�|dd��|�|jj�|�tdd�|dd�D��d�||_dS)Nrrs!HTTP/1.1 417 Expectation Failed
rpr�css�|]}|dkVqdS)sConnection: close
Nr)r��rrrrr��s�zMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>)r�r�r�r}r�r0r�r�)r�
usual_handlerrrrr�test_with_continue_rejected�s
"
z:BaseHTTPRequestHandlerTestCase.test_with_continue_rejectedcCsD|�ddd�}|�|dd�|�|jj�|�|jjt�dS)NsGET �x�rs#HTTP/1.1 414 Request-URI Too Long
)r�r}r0r�r��assertIsInstancer�rFrrrr�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��r�r}r0r�r�r�rrrr�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(rrrr�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>Frrh)r�r2r�rrrj)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)�nextr��close_connectionr��close_valuesrrrr��rdzPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_request)T)FFT)r�r��iter�handler��
StopIterationr-)rr�rr/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�gmtimer��weekdayname�	monthnamer}�date_time_string)r�now�year�month�day�hh�mm�ss�wd�y�zr�rrr�test_date_time_string�s

�z4BaseHTTPRequestHandlerTestCase.test_date_time_stringN)rrr�__doc__�re�compiler�r>r�r�r�r�r�rrrrrrrrrrr"r&r)r*r,r4rDrrrrr��s4
	

r�c@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!rrr�)
r8rsr2r��translated_1�translated_2�translated_3r��	handler_1�	handler_2�pathlib�PurePath�	handler_3r/rrrr>�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�rL�translate_pathr}rIrMrJrPrK�rrsrrr�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=barrQrSrrr�test_start_with_double_slash�sz=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slashcCs2t�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�dS1�swYdS)Nrszc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r�	swap_attrrr8�ntpathrLrRr��sepr}rIrMrJrPrKrSrrr�test_windows_colon�sL$�z3SimpleHTTPRequestHandlerTestCase.test_windows_colonN)rrrrEr>rTrUrYrrrrrH�srHc@r�)�MiscTestCasecCsdg}hd�}tt�D]}|�d�s||vrq
tt|�}t|dd�dkr(|�|�q
|�tj|�dS)N>r�r�
nobody_uid�_rzhttp.server)r�rr1�getattrr��assertCountEqual�__all__)rr��denylistr#�
module_objectrrr�test_all"s

�zMiscTestCase.test_allN)rrrrbrrrrrZ!r�rZc@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)NcSr)N)rrrrrrr�<lambda>6sz2ScriptTestCase.mock_server_class.<locals>.<lambda>)r()r')r�)r~)r	�	MagicMockr/rrr�mock_server_class0s�����z ScriptTestCase.mock_server_classzbuiltins.printcCs0|��}tj|dd�|�|jtjtjf�dS�N��ServerClass�bind�rfrr�r��address_familyr'�AF_INET6�AF_INET�rr\�mock_serverrrr�test_server_test_unspec=�
�z&ScriptTestCase.test_server_test_unspeccCs0|��}tj|dd�|�|jtjtjf�dS)Nr&rhrkrorrr�test_server_test_localhostFrrz)ScriptTestCase.test_server_test_localhost)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334z::1)z0.0.0.0z8.8.8.8r�cC�6|jD]}|��}tj||d�|�|jtj�qdSrg)�
ipv6_addrsrfrr�r}rlr'rm�rr\rjrprrr�test_server_test_ipv6[�

�z$ScriptTestCase.test_server_test_ipv6cCrtrg)�
ipv4_addrsrfrr�r}rlr'rnrvrrr�test_server_test_ipv4brxz$ScriptTestCase.test_server_test_ipv4N)rrrrfr	r�rqrsruryrwrzrrrrrc.s


rccCst�tjt���dSr)r]�addModuleCleanupr8r�r�rrrr�setUpModulejsr|�__main__)BrE�collectionsr�http.serverrrrrrCrrr8r'rrFr�rWrNr��
email.messager��email.utilsr�http.client�urllib.parserr�r5r�r!r]r	�ior
rr�r�test.supportr
rrr"r �TestCaser4rMr�r�r�r�r�r�rd�hasattrrCrgr�r�r�r�rHrZrcr|r�mainrrrr�<module>st	P$%
�~Z
<
�

Youez - 2016 - github.com/yon3zu
LinuXploit