Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_httpservers.cpython-311.opt-1.pyc
�

�Ke�����dZddlmZddlmZmZmZmZddlm	Z	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddl m!Z!m"Z"ddlZddl#m$Z$dd	l%m&Z&dd
l%m'Z'e$j(d���Gd
�d��Z)Gd�dej*��Z+Gd�dej,��Z-Gd�de-��Z.Gd�de-��Z/Gd�de-��Z0dZ1dZ2dZ3dZ4ej5e6ed��oej7��dkd��Gd�d e-����Z8Gd!�d"e��Z9Gd#�d$e9��Z:Gd%�d&��Z;Gd'�d(ej,��Z<Gd)�d*ej,��Z=Gd+�d,ej,��Z>Gd-�d.ej,��Z?d/�Z@eAd0krejB��dSdS)1z�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_helperT)�modulec��eZdZd�Zdd�ZdS)�NoLogRequestHandlerc��dS�N�)�self�argss  �?/usr/local/apps/python3/lib/python3.11/test/test_httpservers.py�log_messagezNoLogRequestHandler.log_message's����Nc��dS�N�r)r�ns  r�readzNoLogRequestHandler.read+s���rrr)�__name__�
__module__�__qualname__rrrrrrr&s7������
�
�
������rrc� �eZdZd�Zd�Zd�ZdS)�TestServerThreadc�`�tj�|��||_||_dSr)�	threading�Thread�__init__�request_handler�test_object)rr*r)s   rr(zTestServerThread.__init__0s/����!�!�$�'�'�'�.���&����rc��td|j��|_|jj���\|j_|j_|jj�	��d|_	|j�
d��|j���dS#|j���wxYw)N)�	localhostrg�������?)rr)r�socket�getsocknamer*�HOST�PORT�server_started�set�
serve_forever�server_close�rs r�runzTestServerThread.run5s��� �!1�4�3G�H�H���7;�{�7I�7U�7U�7W�7W�4����t�/�4���'�+�+�-�-�-����	'��K�%�%�d�+�+�+��K�$�$�&�&�&�&�&��D�K�$�$�&�&�&�&���s�6B+�+Cc�`�|j���|���dSr)r�shutdown�joinr5s r�stopzTestServerThread.stop?s'����������	�	�����rN)r r!r"r(r6r:rrrr$r$/sA������'�'�'�
'�'�'�����rr$c�(�eZdZd�Zd�Zddifd�ZdS)�BaseTestCasec�8�tj��|_tj��t
_tj��|_	t||j��|_|j�
��|j	���dSr)r�threading_setup�_threadsr�EnvironmentVarGuard�os�environr&�Eventr1r$r)�thread�start�waitr5s r�setUpzBaseTestCase.setUpEsu��(�8�:�:��
��2�4�4��
�'�o�/�/���&�t�T�-A�B�B������������ � �"�"�"�"�"rc��|j���d|_tj���tj|j�dSr)rDr:rArB�__exit__r�threading_cleanupr?r5s r�tearDownzBaseTestCase.tearDownMsG������������
�
�������*�D�M�:�:�:�:r�GETNc���tj�|j|j��|_|j�||||��|j���Sr)�http�client�HTTPConnectionr/r0�
connection�request�getresponse)r�uri�method�body�headerss     rrRzBaseTestCase.requestSsO���+�4�4�T�Y��	�J�J���������T�7�;�;�;���*�*�,�,�,r)r r!r"rGrKrRrrrr<r<DsO������#�#�#�;�;�;�#(�d�B�-�-�-�-�-�-rr<c��eZdZGd�dee��Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�BaseHTTPServerTestCasec�L�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
dS)�&BaseHTTPServerTestCase.request_handler�HTTP/1.1c���|�tj��|�dd��|�dd��|���dS)N�Content-Type�	text/html�
Connection�close��
send_responser	�
NO_CONTENT�send_header�end_headersr5s r�do_TESTz.BaseHTTPServerTestCase.request_handler.do_TEST^s]�����z�4�5�5�5����^�[�9�9�9����\�7�3�3�3��������rc���|�tj��|�dd��|�dd��|���dS)Nr^r_r`�
keep-aliverbr5s r�do_KEEPz.BaseHTTPServerTestCase.request_handler.do_KEEPds]�����z�4�5�5�5����^�[�9�9�9����\�<�8�8�8��������rc�0�|�d��dS)N����
send_errorr5s r�do_KEYERRORz2BaseHTTPServerTestCase.request_handler.do_KEYERRORjs���O�O�C� � � � � rc�D�|�tj��dSr�rnr	�	NOT_FOUNDr5s r�do_NOTFOUNDz2BaseHTTPServerTestCase.request_handler.do_NOTFOUNDms���O�O�J�0�1�1�1�1�1rc�4�|�ddd��dS)Nrlz
Short MessagezThis is a long 
 explanationrmr5s r�do_EXPLAINERRORz6BaseHTTPServerTestCase.request_handler.do_EXPLAINERRORps)���O�O�C��;�
=�
=�
=�
=�
=rc��|�d��|�dd��|�dd��|���dS)Nrlr^r_r`ra)rcrerfr5s r�	do_CUSTOMz0BaseHTTPServerTestCase.request_handler.do_CUSTOMtsZ�����s�#�#�#����^�[�9�9�9����\�7�3�3�3��������rc�$�|�d��|�dd��|�dd��|���|jd�d��}|j�|��dS)Nrl�	X-Special�Dängerous Mindr`razx-special-incoming�utf-8)rcrerfrW�encode�wfile�write)rrVs  r�do_LATINONEHEADERz8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADERzs������s�#�#�#����[�*;�<�<�<����\�7�3�3�3��������<� 4�5�<�<�W�E�E�D��J���T�"�"�"�"�"rc�d�|�t|jdd�����dS�N��rn�int�pathr5s r�
do_SEND_ERRORz4BaseHTTPServerTestCase.request_handler.do_SEND_ERROR��,���O�O�C��	�!�"�"�
�.�.�/�/�/�/�/rc�d�|�t|jdd�����dSr�r�r5s r�do_HEADz.BaseHTTPServerTestCase.request_handler.do_HEAD�r�rN)r r!r"�protocol_version�default_request_versionrgrjrorsrurwrr�r�rrrr)r[Zs�������%��",��	�	�	�	�	�	�	!�	!�	!�	2�	2�	2�	=�	=�	=�	�	�	�	#�	#�	#�	0�	0�	0�	0�	0�	0�	0�	0rr)c���t�|��tj�|j|j��|_|j���dSr)	r<rGrNrOrPr/r0�con�connectr5s rrGzBaseHTTPServerTestCase.setUp�sM�����4� � � ��;�-�-�d�i���C�C�����������rc��|j�dd��|j���}|�|jt
j��dS)NrL�/)r�rRrS�assertEqual�statusr	�NOT_IMPLEMENTED�r�ress  r�test_commandz#BaseHTTPServerTestCase.test_command�sN��������$�$�$��h�"�"�$�$�������Z�%?�@�@�@�@�@rc��d|j_|j�dd��|j���|j���}|�|jtj��dS)Nz	HTTP/1.1
�XYZBOGUSr��	r��
_http_vsn_str�
putrequest�
endheadersrSr�r�r	r�r�s  r�test_request_line_trimmingz1BaseHTTPServerTestCase.test_request_line_trimming�sl��!-��������J��,�,�,���������h�"�"�$�$�������Z�%?�@�@�@�@�@rc��d|j_|j�dd��|j���|j���}|�|jtj��dS)N�FUBARrLr��	r�r�r�r�rSr�r�r	�BAD_REQUESTr�s  r�test_version_bogusz)BaseHTTPServerTestCase.test_version_bogus�sl��!(��������E�3�'�'�'���������h�"�"�$�$�������Z�%;�<�<�<�<�<rc��d|j_|j�dd��|j���|j���}|�|jtj��dS)Nz
HTTP/9.9.9rLr�r�r�s  r�test_version_digitsz*BaseHTTPServerTestCase.test_version_digits�sl��!-��������E�3�'�'�'���������h�"�"�$�$�������Z�%;�<�<�<�<�<rc��d|j_|j�dd��|j���|j���}|�|jtj��dS)NrrLr�r�r�s  r�test_version_none_getz,BaseHTTPServerTestCase.test_version_none_get�sl��!#��������E�3�'�'�'���������h�"�"�$�$�������Z�%?�@�@�@�@�@rc��d|j_|j�dd��|j���|j���}|�|jtj��dS)Nr�CUSTOMr�r�r�s  r�test_version_nonez(BaseHTTPServerTestCase.test_version_none�sl��!#��������H�c�*�*�*���������h�"�"�$�$�������Z�%;�<�<�<�<�<rc��d|j_d|j_|j�dd��|j���|j���}|�|jtj	��dS)N�czHTTP/9.9rLr�)
r��	_http_vsnr�r�r�rSr�r�r	�HTTP_VERSION_NOT_SUPPORTEDr�s  r�test_version_invalidz+BaseHTTPServerTestCase.test_version_invalid�sv������!+��������E�3�'�'�'���������h�"�"�$�$�������Z�%J�K�K�K�K�Krc��d|j_|j�dd��|j���|j���}|�|jtj��dSrr�r�s  r�test_send_blankz&BaseHTTPServerTestCase.test_send_blank�sl��!#��������B��#�#�#���������h�"�"�$�$�������Z�%;�<�<�<�<�<rc� �|j�dd��|j�dd��|j���|j���}|�|jtj��dS)NrLr�r`ra)	r�r��	putheaderr�rSr�r�r	r�r�s  r�test_header_closez(BaseHTTPServerTestCase.test_header_close�sz������E�3�'�'�'�����<��1�1�1���������h�"�"�$�$�������Z�%?�@�@�@�@�@rc�8�d|j_|j�dd��|j�dd��|j���|j���}|�|jtj	��dS)Nr\rLr�r`ri)
r�r�r�r�r�rSr�r�r	r�r�s  r�test_header_keep_alivez-BaseHTTPServerTestCase.test_header_keep_alive�s���!+��������E�3�'�'�'�����<��6�6�6���������h�"�"�$�$�������Z�%?�@�@�@�@�@rc��|j�dd��|j���}|�|jt
j��dS)N�TESTr�)r�rRrSr�r�r	rdr�s  r�test_handlerz#BaseHTTPServerTestCase.test_handler�sN��������%�%�%��h�"�"�$�$�������Z�%:�;�;�;�;�;rc�4�|j�dd��|j���}|�|�d��d��|j�dd��|�|jj��dS)N�KEEPr�r`rir�)r�rRrSr��	getheader�
addCleanuprar�s  r�test_return_header_keep_alivez4BaseHTTPServerTestCase.test_return_header_keep_alive�s���������%�%�%��h�"�"�$�$��������|�4�4�l�C�C�C�������%�%�%�������'�'�'�'�'rc��|j�dd��|j���}|�|jd��dS)N�KEYERRORr�rl�r�rRrSr�r�r�s  r�test_internal_key_errorz.BaseHTTPServerTestCase.test_internal_key_error�sK�������S�)�)�)��h�"�"�$�$�������S�)�)�)�)�)rc��|j�dd��|j���}|�|jd��dS)Nr�r�rlr�r�s  r�test_return_custom_statusz0BaseHTTPServerTestCase.test_return_custom_status�sK�������3�'�'�'��h�"�"�$�$�������S�)�)�)�)�)rc��|j�dd��|j���}|�|jd��|�t
|�d������dS)N�EXPLAINERRORr�rl�Content-Length)r�rRrSr�r��
assertTruer�r�r�s  r�test_return_explain_errorz0BaseHTTPServerTestCase.test_return_explain_error�sr��������-�-�-��h�"�"�$�$�������S�)�)�)�����C�M�M�*:�;�;�<�<�=�=�=�=�=rc�>�|j�ddddi���|j���}|�|�d��d��|�|���d�d����dS)	N�LATINONEHEADERr�zX-Special-IncominguÄrger mit Unicode�rWryrzr{)r�rRrSr�r�rr|r�s  r�test_latin1_headerz)BaseHTTPServerTestCase.test_latin1_header�s�������)�3� �(<�9
��	�	�	��h�"�"�$�$��������{�3�3�5F�G�G�G���������%9�%@�%@��%I�%I�J�J�J�J�Jrc�f�|j�dd��|j���}|�|jt
j��|���}|�t|�	d����t|����dS)N�NOTFOUNDr�r�)r�rRrSr�r�r	rrrr�r��len)rr��datas   r�test_error_content_lengthz0BaseHTTPServerTestCase.test_error_content_length�s��������S�)�)�)��h�"�"�$�$�������Z�%9�:�:�:��x�x�z�z������S�]�]�+;�<�<�=�=�s�4�y�y�I�I�I�I�Irc���tjtjf}tjtjtjtjtjfD�]}|j�dd�|����|j�	��}|�
||j��|�
d|�d����|�
d|�d����||vr)|�
d|�d����|�
��}|�
d|����dS)N�
SEND_ERROR�/{}r�r^�Transfer-Encodingr)r	�NOT_MODIFIED�
RESET_CONTENTrd�
PROCESSING�SWITCHING_PROTOCOLSr�rR�formatrSr�r�r�r�r�allow_transfer_encoding_codes�coder�r�s     r�test_send_errorz&BaseHTTPServerTestCase.test_send_errors9��)3�)@�)3�)A�)C�%��*�J�,C��*�J�,D��3�5�	(�	(�D�
�H���\�5�<�<��+=�+=�>�>�>��(�&�&�(�(�C����T�3�:�.�.�.����T�3�=�=�1A�#B�#B�C�C�C����T�3�=�=��#@�#@�A�A�A��8�8�8�� � ��s�}�}�5H�'I�'I�J�J�J��8�8�:�:�D����S�$�'�'�'�'�	(�	(rc��tjtjf}tjtjtjtjtjfD�]�}|j�dd�|����|j�	��}|�
||j��|tjkrc|�t|�d����dk��|�d|�d����nR|�
d|�d����|�
d|�d����||vr)|�
d|�d����|���}|�
d|�����dS)	N�HEADr�r�rr_r^r�r)r	r�r��OKrdr�r�rRr�rSr�r�r�r�r��assertInrr�s     r�test_head_via_send_errorz/BaseHTTPServerTestCase.test_head_via_send_errors���)3�)@�)3�)A�)C�%��]�J�$9��,�j�.F��3�5�	(�	(�D�
�H���V�U�\�\�$�%7�%7�8�8�8��(�&�&�(�(�C����T�3�:�.�.�.��z�}�$�$�����C�M�M�2B�$C�$C� D� D�q� H�I�I�I��
�
�k�3�=�=��+H�+H�I�I�I�I�� � ��s�}�}�5E�'F�'F�G�G�G�� � ��s�}�}�^�'D�'D�E�E�E��8�8�8�� � ��s�}�}�5H�'I�'I�J�J�J��8�8�:�:�D����S�$�'�'�'�'�!	(�	(rN)r r!r"rrr)rGr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrYrYYs�������,0�,0�,0�,0�,0�-�/E�,0�,0�,0�\���
A�A�A�
A�A�A�=�=�=�=�=�=�A�A�A�=�=�=�L�L�L�=�=�=�A�A�A�A�A�A�<�<�<�
(�(�(�*�*�*�
*�*�*�
>�>�>�K�K�K�J�J�J�(�(�(�"(�(�(�(�(rrYc�6�eZdZGd�de��Zd�Zd�ZdS)�RequestHandlerLoggingTestCasec�"�eZdZdZdZd�Zd�ZdS)�-RequestHandlerLoggingTestCase.request_handlerr\c�l�|�tj��|���dSr)rcr	r�rfr5s r�do_GETz4RequestHandlerLoggingTestCase.request_handler.do_GET-s0�����z�}�-�-�-��������rc�F�|�tjd��dS)NzFile not foundrqr5s r�do_ERRORz6RequestHandlerLoggingTestCase.request_handler.do_ERROR1s ���O�O�J�0�2B�C�C�C�C�CrN)r r!r"r�r�r�r�rrrr)r�)sC������%��",��	�	�	�	D�	D�	D�	D�	Drr)c���tj�|j|j��|_|j���tj��5}|j�	dd��|j�
��ddd��n#1swxYwY|�|����
d����dS)NrLr�z"GET / HTTP/1.1" 200 -
)rNrOrPr/r0r�r�r
�captured_stderrrRrSr��getvalue�endswith)r�errs  r�test_getz&RequestHandlerLoggingTestCase.test_get4s���;�-�-�d�i���C�C����������
�
$�
&�
&�	#�#��H���U�C�(�(�(��H� � �"�"�"�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�	
����L�L�N�N�#�#�$>�?�?�	A�	A�	A�	A�	A��5B�B!�$B!c�Z�tj�|j|j��|_|j���tj��5}|j�	dd��|j�
��ddd��n#1swxYwY|����d��}|�
|d�d����|�
|d�d����dS)N�ERRORr��
rz code 404, message File not foundr�z"ERROR / HTTP/1.1" 404 -)rNrOrPr/r0r�r�r
r�rRrSr��splitr�r�)rr��liness   r�test_errz&RequestHandlerLoggingTestCase.test_err?s-���;�-�-�d�i���C�C����������
�
$�
&�
&�	#�#��H���W�c�*�*�*��H� � �"�"�"�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#������$�$�T�*�*������a��)�)�*L�M�M�N�N�N�����a��)�)�*D�E�E�F�F�F�F�Fr�N)r r!r"rr)r�r�rrrr�r�(sm������	D�	D�	D�	D�	D�0�	D�	D�	D�	A�	A�	A�
G�
G�
G�
G�
Grr�c�H��eZdZGd�dee��Z�fd�Z�fd�Zdd�Ze	j
ejdkd��e	j
ejd	kd
��e	j
ejd��d�������Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�SimpleHTTPServerTestCasec��eZdZdS)�(SimpleHTTPServerTestCase.request_handlerN�r r!r"rrrr)r�M��������rr)c���t�����tj��|_tj��}tj|��d|_tj	|���|_
tj�|j
��|_
d|j
z|_tj�|j
d��}t!|d��5}|�|j��|���ddd��n#1swxYwYtj|��j}t*j�|t*jj��}|�d���|_t6j�|���d�	��|_dS)
NsWe are the knights who say Ni!)�dirr��test�wbr)�microsecondT��usegmt) �superrGrA�getcwd�cwd�tempfile�
gettempdir�chdirr��mkdtemp�tempdirr��basename�tempdir_name�base_urlr9�openr~�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__s      �rrGzSimpleHTTPServerTestCase.setUpPs����
���
�
�����9�;�;����)�+�+��
������5��	��'�K�8�8�8����G�,�,�T�\�:�:����d�/�/��
��7�<�<���f�5�5��
�(�D�
!�
!�	�T��J�J�t�y�!�!�!��J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����!�!�*���&�4�4�U���!�#�#�
�#-�#5�#5�!�#5�#D�#D�� �!&��!7�!7�� � �"�"�4�"8�"1�"1����s�//D*�*D.�1D.c�
��	tj|j��	tj|j��n#YnxYwt
�����dS#t
�����wxYwr)rArr�shutil�rmtreer
rrK)rr%s �rrKz!SimpleHTTPServerTestCase.tearDownesz���	��H�T�X����
��
�d�l�+�+�+�+��
�������G�G���������E�G�G���������s�A �7�A �;�A � "BNc�$�����fd�}d�|�_����}|����|��j|��|��j��|r|�||��|��jd��|��j�	dd��d��|���d��dd����
��|S)Nc�$���j�d�_dS)zWDon't close reader yet so we can check if there was leftover
            buffered inputN)�fp)�reader�responses��r�
close_connzDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_connps����[�F��H�K�K�Kr�
r`ra�rzConnection should be closed)�_close_connrr�r�r��assertIsNotNone�reason�version�msg�getra)rr-r�r�r.rVr,s `    @r�check_status_and_reasonz0SimpleHTTPServerTestCase.check_status_and_reasonos����	�	�	�	�	�	���)����}�}��������!�!�!������&�1�1�1����X�_�-�-�-��	)����T�4�(�(�(�	
����)�2�.�.�.������)�)�,��@�@�'�J�J�J�������R���#�/L�M�M�M��������r�darwinz2undecodable name cannot always be decoded on macOS�win32z+undecodable name cannot be decoded on win32z!need os_helper.TESTFN_UNDECODABLEc���tj��}tjtj��dz}t
tj�|j	|��d��5}|�
tj��ddd��n#1swxYwY|�|jdz��}tj
dkr&tj|j	��D]}|dkr|}n�
|�|t j��}t$j�|d���}|�d|z�|d	��|��|�d
t/j|d���z�|d	��|��|�|jdz|z��}|�|t jtj�
��dS)Nz.txtrr�r8r�
surrogatepass)�errorsz	href="%s"�surrogateescape�>%s<F��quote�r�)�sys�getfilesystemencodingrA�fsdecoder�TESTFN_UNDECODABLErr�r9r
r~rRr�platform�listdirr7r	r��urllib�parser@r�r|�html�escape)r�enc�filename�fr-�namerV�
quotednames        r�test_undecodable_filenamez2SimpleHTTPServerTestCase.test_undecodable_filename�s���'�)�)���;�y�;�<�<�v�E��
�"�'�,�,�t�|�X�6�6��
=�
=�	2��
�G�G�I�0�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��<�<��
�� 3�4�4���<�8�#�#��
�4�<�0�0�
�
���6�>�>�#�H��E�"��+�+�H�j�m�D�D���\�'�'���'�I�I�
��
�
�{�Z�/��v�c�#4�5�5�t�	=�	=�	=��
�
�v���H�E� B� B� B�B��v�c�#4�5�5�t�	=�	=�	=��<�<��
�� 3�j� @�A�A���$�$�X�z�}�*3�*F�	%�	H�	H�	H�	H�	Hs�( B�B�Bc�<�tjtj�|jd����d|j�d�}|�d�}|�|��}|�|tj	��|�
d��}|�||d���d|��}|�|��}|�|tj	��|�
d��}|�|�
d��|���|�||d	���d|��}|�|��}|�|tj	��|�|�
d��|��d
|��}|�d�}|�|��}|�|tj	��|�
d��}|�|�
d
��|���dS)aIEnsure //evil.co/..%2f../../X does not put //evil.co/ in Location.

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

        This checks that a path resolving to a directory on our server cannot
        resolve into a redirect to another server.
        �existing_directoryz2/python.org/..%2f..%2f..%2f..%2f..%2f../%0a%0d/../z/existing_directoryr��Locationznon-attack failed!�r5�//zcExpected Location header to start with a single / and end with a / as this is a directory redirect.zhttps://pypi.org/N)rA�mkdirr�r9r
rrRr7r	�MOVED_PERMANENTLYr�r��assertFalse�
startswithr�)	r�url�expected_locationr-�location�
attack_url�attack3_url�attack_scheme_netloc_2slash_url�expected_scheme_netloc_locations	         r�3test_get_dir_redirect_location_domain_injection_bugzLSimpleHTTPServerTestCase.test_get_dir_redirect_location_domain_injection_bug�s%��	������d�l�,@�A�A�B�B�B�i�4�CT�i�i�i��"�I�I�I���<�<��$�$���$�$�X�z�/K�L�L�L��%�%�j�1�1������#4�:N��O�O�O���Y�Y�
��<�<�
�+�+���$�$�X�z�/K�L�L�L��%�%�j�1�1������,�,�T�2�2���A�A�A�����#4�@�	�	A�	A�	A�
!�3�j�j���<�<��,�,���$�$�X�z�/K�L�L�L�����+�+�J�7�7�9J�K�K�K�+D�c�*C�*C�'�-L�*O�*O�*O�'��<�<� ?�@�@���$�$�X�z�/K�L�L�L��%�%�j�1�1��	
����+�+�,?�@�@�h��O�O�O�O�Orc��|�|jdz��}|�|tj|j���|�|jdz��}|�|tj��|�|jdz��}|�|tj��|�|j��}|�|tj��|�|�	d��d��|�|jdz��}|�|tj��|�|jdz��}|�|tj��|�|�	d	��|jd
z��|�d��}|�|tj��|�d��}|�|tj��tjtj�
|jd
d����|�|jdz��}|�|tj��d}ttj�
|jd��d��5}|�|��ddd��n#1swxYwY|�|jdz��}|�|tj|��tjdkr�tj��dkr�tj|jd��	|�|jdz��}|�|tj��tj|jd��dS#tj|jd��wxYwdSdS)N�/testrA�/test/r�r��0�/?hi=2�?hi=1rT�/?hi=1z/ThisDoesNotExistz/ThisDoesNotExist/�spamz
index.htmlz/spam/sDummy index file
r�posixri�)rRrr7r	r�r�rrrXr�r�rA�makedirsr�r9r
rrr~rO�geteuid�chmod)rr-r�rNs    rr�z!SimpleHTTPServerTestCase.test_get�s����<�<��
�� 7�8�8���$�$�X�z�}�4�9�$�M�M�M��<�<��
�� 8�9�9���$�$�X�z�/C�D�D�D��<�<��
�� 3�4�4���$�$�X�z�}�=�=�=��<�<��
�.�.���$�$�X�z�/K�L�L�L�����+�+�,<�=�=�s�C�C�C��<�<��
�� 8�9�9���$�$�X�z�}�=�=�=��<�<��
�� 7�8�8���$�$�X�z�/K�L�L�L�����+�+�J�7�7����1�	3�	3�	3��<�<� 3�4�4���$�$�X�z�/C�D�D�D��<�<� >�?�?���$�$�X�z�/C�D�D�D�
��B�G�L�L���v�|�D�D�E�E�E��<�<��
�� 8�9�9���$�$�X�z�}�=�=�=�&��
�"�'�,�,�t�0�,�?�?��
F�
F�	�!�
�G�G�D�M�M�M�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��<�<��
�� 3�4�4���$�$�X�z�}�d�C�C�C��7�g���"�*�,�,�!�"3�"3��H�T�\�1�%�%�%�
.��<�<��
��(;�<�<���,�,�X�z�7K�L�L�L�����u�-�-�-�-�-������u�-�-�-�-����
��"3�"3s�!L�L�
L�=O'�'Pc�f�|�|jdzd���}|�|tj��|�|�d��tt|j	������|�|�d��d��dS)Nrdr��rUzcontent-lengthzcontent-typezapplication/octet-stream)
rRrr7r	r�r�r��strr�r��rr-s  r�	test_headz"SimpleHTTPServerTestCase.test_heads����<�<��M�G�#�F� �4�4���$�$�X�z�}�=�=�=�����+�+�,<�=�=��S���^�^�,�,�	.�	.�	.�����+�+�N�;�;�3�	5�	5�	5�	5�	5rc��tj���}|j|d<|�|jdz|���}|�|tj��|j	tjd���z}tj���}tj�
|d���|d<|�|jdz|���}|�|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-Sincerdr�r�)�hoursTrN)r�message�MessagerrRrr7r	r�rr�	timedeltar�format_datetime)rrWr-�new_dts    r�test_browser_cachez+SimpleHTTPServerTestCase.test_browser_cache	s���
�-�'�'�)�)��'+�'=��#�$��<�<��
�� 7��<�I�I���$�$�X�z�/F�G�G�G��)�H�,>�Q�,G�,G�,G�G���-�'�'�)�)��',�{�'B�'B�6��(C�(�(��#�$��<�<��
�� 7��<�I�I���$�$�X�z�/F�G�G�G�G�Grc�F�|j}|tjd���z
}tj���}tj�|d���|d<|�|j	dz|���}|�
|tj��dS)Nim)�daysTrrurdr�)
rrryrrwrxrrzrRrr7r	r�)r�dt�old_dtrWr-s     r�test_browser_cache_file_changedz8SimpleHTTPServerTestCase.test_browser_cache_file_changeds���
�
%���h�(�c�2�2�2�2���-�'�'�)�)��',�{�'B�'B�6��(C�(�(��#�$��<�<��
�� 7��<�I�I���$�$�X�z�}�=�=�=�=�=rc���tj���}|j|d<d|d<|�|jdz|���}|�|tj��dS)Nru�*z
If-None-Matchrdr�)	rrwrxrrRrr7r	r�)rrWr-s   r�,test_browser_cache_with_If_None_Match_headerzESimpleHTTPServerTestCase.test_browser_cache_with_If_None_Match_header&si���-�'�'�)�)��'+�'=��#�$�#&��� ��<�<��
�� 7��<�I�I���$�$�X�z�}�=�=�=�=�=rc�P�|�dd���}|�|tj��|�dd���}|�|tj��|�dd���}|�|tj��dS)Nr��FOOrp�custom�GETs)rRr7r	r�rrs  r�test_invalid_requestsz.SimpleHTTPServerTestCase.test_invalid_requests/s����<�<��E�<�2�2���$�$�X�z�/I�J�J�J��<�<��H�<�5�5���$�$�X�z�/I�J�J�J��<�<��F�<�3�3���$�$�X�z�/I�J�J�J�J�Jrc���|�|jdz��}|�|tj|j���|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
        rdrAz
Last-modifiedN)	rRrr7r	r�r�rWr�r)rr-rs   r�test_last_modifiedz+SimpleHTTPServerTestCase.test_last_modified8si���<�<��
�� 7�8�8���$�$�X�z�}�4�9�$�M�M�M�$�,�_�=�����*�D�,B�C�C�C�C�Crc�L�|�|jdz��}|�|tj|j���|�|jdz��}|�|tj��|�|jdz��}|�|tj��|�|j��}|�|tj��|�|jdz��}|�|tj��|�|jdz��}|�|tj��|�|�	d��|jdz��dS)	NrdrArer�rgrhrTri)
rRrr7r	r�r�rrrXr�r�rrs  r�test_path_without_leading_slashz8SimpleHTTPServerTestCase.test_path_without_leading_slashAsj���<�<�� 1�G� ;�<�<���$�$�X�z�}�4�9�$�M�M�M��<�<�� 1�H� <�=�=���$�$�X�z�/C�D�D�D��<�<�� 1�C� 7�8�8���$�$�X�z�}�=�=�=��<�<�� 1�2�2���$�$�X�z�/K�L�L�L��<�<�� 1�H� <�=�=���$�$�X�z�}�=�=�=��<�<�� 1�G� ;�<�<���$�$�X�z�/K�L�L�L�����+�+�J�7�7��*�X�5�	7�	7�	7�	7�	7rc��d}tj�|j|��}	t	|d�����n%#t$rtjd|z���wxYw	|�	|j
dz��}|�|tj
��}|j���}tj|��n#tj|��wxYw|�|��dt%j|d���z}|�|�|��|��dS)Nz<test&>.txtrz-Can not create file %s on current file systemr�r>Fr?)rAr�r9r
rra�OSError�unittest�SkipTestrRrr7r	r�rW�get_content_charset�unlinkr2rJrKr�r|)rrM�fullpathr-rVrL�	html_texts       r�test_html_escape_filenamez2SimpleHTTPServerTestCase.test_html_escape_filenameQsE�� ���7�<�<���h�7�7��	9���4� � �&�&�(�(�(�(���	9�	9�	9��#�%-�/7�%8�9�9�
9�	9����	 ��|�|�D�M�C�$7�8�8�H��/�/��*�-�H�H�D��"�6�6�8�8�C��I�h������B�I�h�����������S�!�!�!��T�[���?�?�?�?�	��
�
�i�&�&�s�+�+�T�2�2�2�2�2s�"A�"A.�2AC�C3r)r r!r"rrr)rGrKr7r��skipIfrBrF�
skipUnlessrrErQrbr�rsr|r�r�r�r�r�r��
__classcell__�r%s@rr�r�Ls��������
�
�
�
�
�-�/G�
�
�
�1�1�1�1�1�*���������2�X�_�S�\�X�-�I�K�K��X�_�S�\�W�,�B�D�D��X���5�<�>�>�H�H�>�>�D�D�K�K�H�./P�/P�/P�b(.�(.�(.�T5�5�5�H�H�H�$	>�	>�	>�>�>�>�K�K�K�D�D�D�7�7�7� 3�3�3�3�3�3�3rr�zD#!%s

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

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

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

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

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

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

print("X-ambv: was here")
print("Content-type: text/html")
print()
print("<pre>")
for k, v in os.environ.items():
    try:
        k.encode('ascii')
        v.encode('ascii')
    except UnicodeEncodeError:
        continue  # see: BPO-44647
    print(f"{k}={v}")
print("</pre>")
rmz7This test can't be run reliably as root (issue #13308).c��eZdZGd�dee��Zej�d��Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�CGIHTTPServerTestCasec��eZdZdS)�%CGIHTTPServerTestCase.request_handlerNr�rrrr)r��r�rr)�asciic�
�t�|��tj��|_tj��|_tj�	|jd��|_
tj�	|j
d��|_tj�	|jd��|_tj�	|jd��|_
tj�	|j
d��|_tj|j
��tj|j��tj|j��tj|j
��tj|j��d|_d|_d|_d|_d|_d|_d|_t/j��r[tj�	|jd��|_t5j|j�����|_nt:j|_	|j�d��n9#t@$r,|�!��|�"d��YnwxYwtj�	|jd��|_tG|jd	d�
��5}|�$tJ|jz��ddd��n#1swxYwYtj&|jd��tj�	|j
d��|_tG|jd	d�
��5}|�$tJ|jz��ddd��n#1swxYwYtj&|jd��tj�	|j
d
��|_tG|jd	d�
��5}|�$tN|jz��ddd��n#1swxYwYtj&|jd��tj�	|jd��|_tG|jd	d�
��5}|�$tJ|jz��ddd��n#1swxYwYtj&|jd��tj�	|j
d��|_tG|jd	d�
��5}|�$tP|jdfz��ddd��n#1swxYwYtj&|jd��tj�	|jd��|_tG|jd	d�
��5}|�$tJ|jz��ddd��n#1swxYwYtj&|jd��tj�	|j
d��|_)tG|j)d	d�
��5}|�$tT|jz��ddd��n#1swxYwYtj&|j)d��tj+|j��dS)Nzcgi-binz	child-dir�subr�pythonr{z0Python executable path is not encodable to utf-8znocgi.py�w)�encodingi�zfile1.pyzfile2.pyzfile3.pyzfile4.py�QUERY_STRINGzfile5.pyzfile6.py),r<rGrArrr	r�
parent_dirr�r9�cgi_dir�
cgi_child_dir�	sub_dir_1�	sub_dir_2�cgi_dir_in_sub_dirrW�
nocgi_path�
file1_path�
file2_path�
file3_path�
file4_path�
file5_path�_pythonexe_symlinkr�can_symlink�	pythonexer
�
PythonSymlink�	__enter__rB�
executabler|�UnicodeEncodeErrorrK�skipTestrr~�	cgi_file1rn�	cgi_file2�	cgi_file4�
file6_path�	cgi_file6r)rr+�file1�file2�file3�file4�file5�file6s        rrGzCGIHTTPServerTestCase.setUp�s������4� � � ��9�;�;���"�*�,�,����w�|�|�D�O�Y�?�?����W�\�\�$�,��D�D�������d�o�u�=�=�������d�n�e�<�<���"$�'�,�,�t�~�y�"I�"I���
�������
���#�$�$�$�
���� � � �
���� � � �
���(�)�)�)�������������������#'���� �"�"�	,��W�\�\�$�/�8�D�D�D�N�&-�&;�D�N�&K�&K�&U�&U�&W�&W�D�#�#� �^�D�N�	N�
�N�!�!�'�*�*�*�*��!�	N�	N�	N��M�M�O�O�O��M�M�L�M�M�M�M�M�	N�����'�,�,�t��
�C�C���
�$�/�3��
9�
9�
9�	1�R��H�H�Y���/�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�
����%�(�(�(��'�,�,�t�|�Z�@�@���
�$�/�3��
9�
9�
9�	4�U��K�K�	�D�N�2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
����%�(�(�(��'�,�,�t�|�Z�@�@���
�$�/�3��
9�
9�
9�	4�U��K�K�	�D�N�2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
����%�(�(�(��'�,�,�t�'9�:�F�F���
�$�/�3��
9�
9�
9�	4�U��K�K�	�D�N�2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
����%�(�(�(��'�,�,�t�|�Z�@�@���
�$�/�3��
9�
9�
9�	F�U��K�K�	�T�^�^�$D�D�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�
����%�(�(�(��'�,�,�t�'>�
�K�K���
�$�/�3��
9�
9�
9�	4�U��K�K�	�D�N�2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
����%�(�(�(��'�,�,�t�|�Z�@�@���
�$�/�3��
9�
9�
9�	4�U��K�K�	�D�N�2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
����%�(�(�(�
����!�!�!�!�!s��I&�&3J�J� #L�L�L�5#N$�$N(�+N(�
#P9�9P=�P=�#S�S�S�4%U%�%U)�,U)�#W:�:W>�W>� #Z�Z�Zc���	tj|j��|jr|j�ddd��|jrtj|j��|jrtj|j��|jrtj|j��|j	rtj|j	��|j
rtj|j
��|jrtj|j��|jrtj|j��tj
|j��tj
|j��tj
|j��tj
|j��tj
|j��tj
|j��t(�|��dS#t(�|��wxYwr)rArrr�rIr��remover�r�r�r�r�r��rmdirr�r�r�r�r�r�r<rKr5s rrKzCGIHTTPServerTestCase.tearDown�s���	(��H�T�X�����&�
C��'�0�0��t�T�B�B�B���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*���
+��	�$�/�*�*�*��H�T�'�(�(�(��H�T�\�"�"�"��H�T�,�-�-�-��H�T�^�$�$�$��H�T�^�$�$�$��H�T�_�%�%�%��!�!�$�'�'�'�'�'��L�!�!�$�'�'�'�'���s�F2G�G,c
���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��r7t	|t
��r"|�|tj|���Qtj|��}|�	||d|�d|�d|�������dS)NrrVz..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 = z	
Got:    z	
Wanted: rU)
�
IndexError�items�
isinstance�type�
issubclass�	Exception�assertRaisesr�_url_collapse_pathr�)r�test_vectorsr��expected�actuals     r�test_url_collapse_pathz,CGIHTTPServerTestCase.test_url_collapse_path
s���
���
��*�
�
�j�
�
��	
�

�$�
�
�6�

�
�D�
�
� 3�
�
 �!4�
�
��
�
�%�
�
�5�
�
�5�
�
�V�
�
�F�
� 
�W�!
�"
�g�#
�$!�#�",�%-�,4�.8�(.�+0�.8�.2�04�9
�
�
��<+�0�0�2�2�	;�	;�N�D�(��(�D�)�)�
;�j��9�.M�.M�
;��!�!�(�"(�";�T�C�C�C�C� �2�4�8�8��� � ��6�6�"&�$�$������&:�!�;�;�;�;�
	;�	;rc���|�d��}|�|���|�d��|jfd|jzdtjf��dS)Nr��Content-type�Hello Worldr_)rRr�rr�r��linesepr	r�r�s  r�test_headers_and_contentz.CGIHTTPServerTestCase.test_headers_and_content7sn���l�l�.�/�/�����
�X�X�Z�Z����~�6�6��
�C�
�d�l�
*�K���G�	I�	I�	I�	I�	Irc�z�|�d��}|�|jtj��dS)Nz)///////////nocgi.py/../cgi-bin/nothere.sh)rRr�r�r	rrr�s  r�test_issue19435z%CGIHTTPServerTestCase.test_issue19435=s5���l�l�F�G�G�������Z�%9�:�:�:�:�:rc���tj�dddd���}ddi}|�dd||��}|�|���d	|jz��dS)
Nr�r�i@�)rj�eggs�baconr�z!application/x-www-form-urlencodedz/cgi-bin/file2.py�POSTs1, python, 123456)rHrI�	urlencoderRr�rr�)r�paramsrWr�s    r�	test_postzCGIHTTPServerTestCase.test_postAsu����'�'��(�f�=�=�?�?��!�$G�H���l�l�.����H�H����������%9�D�L�%H�I�I�I�I�Irc��|�d��}|���|�|jtj��dS)Nz/cgi-bin/invalid)rRrr�r�r	rrr�s  r�test_invaliduriz%CGIHTTPServerTestCase.test_invaliduriIsB���l�l�-�.�.�����
�
�
������Z�%9�:�:�:�:�:rc��ddtjd��zi}|�dd|���}|�d|jzdt
jf|���|�d	��|j	f��dS)
Ns
AuthorizationsBasic s
username:passr�rLr�r�r_r�)
�base64�	b64encoderRr�r�r	r�rr�r�)rrWr�s   r�test_authorizationz(CGIHTTPServerTestCase.test_authorizationNs���#�i��#�$4�5�5�'6�7���l�l�.��w�l�G�G�����
�d�l�
*�K���G�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc���|�d��}|�d|jzdtjf|���|�d��|jf��dS)Nr�r�r_r��rRr�r�r	r�rr�r�r�s  r�test_no_leading_slashz+CGIHTTPServerTestCase.test_no_leading_slashVsn���l�l�-�.�.�����
�d�l�
*�K���G�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc�N�d}|tjd<|�d��}|�d|jzdt
jf|���|�d��|j	f��|�tjd|��dS)NzTest CGI Server�SERVER_SOFTWAREr�r�r_r�)
rArBrRr�r�r	r�rr�r�)r�	signaturer�s   r�test_os_environ_is_not_alteredz4CGIHTTPServerTestCase.test_os_environ_is_not_altered]s���%�	�(1��
�$�%��l�l�.�/�/�����
�d�l�
*�K���G�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	
�����$5�6�	�B�B�B�B�Brc���|�d��}|�d|jzdtjf|���|�d��|jf��dS)Nz/cgi-bin%2ffile1.pyr�r_r�r�r�s  r�#test_urlquote_decoding_in_cgi_checkz9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checkfsn���l�l�0�1�1�����
�d�l�
*�K���G�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc���|�d��}|�d|jzdtjf|���|�d��|jf��dS)Nz/cgi-bin/child-dir/file3.pyr�r_r�r�r�s  r�test_nested_cgi_path_issue21323z5CGIHTTPServerTestCase.test_nested_cgi_path_issue21323lsn���l�l�8�9�9�����
�d�l�
*�K���G�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc���|�d��}|�d|jzdtjf|���|�d��|jf��dS)Nz/cgi-bin/file4.py?a=b?c=dsa=b?c=dr_r�r�r�s  r�&test_query_with_multiple_question_markz<CGIHTTPServerTestCase.test_query_with_multiple_question_markrsn���l�l�6�7�7�����
�$�,�
&��Z�]�C�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc���|�d��}|�d|jzdtjf|���|�d��|jf��dS)Nz0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//sk=aa%2F%2Fbb&//q//p//=//a//b//r_r�r�r�s  r�"test_query_with_continuous_slashesz8CGIHTTPServerTestCase.test_query_with_continuous_slashesxsq���l�l�M�N�N�����
.���
=�
�*�-�
)�
�X�X�Z�Z����~�6�6��
�C�	E�	E�	E�	E�	Erc��	tj�d��|�d��}|�d|jzdtjf|���|�	d��|j
f��tj�d��dS#tj�d��wxYw)Nz/sub/dir/cgi-binz/sub/dir/cgi-bin/file5.pyr�r_r�)r�cgi_directories�appendrRr�r�r	r�rr�r�r�r�s  r� test_cgi_path_in_sub_directoriesz6CGIHTTPServerTestCase.test_cgi_path_in_sub_directoriess���	M�!�1�8�8�9K�L�L�L��,�,�:�;�;�C�����$�,�.��Z�]�K������S�]�]�>�:�:�C�J�G�
I�
I�
I�
"�1�8�8�9K�L�L�L�L�L��!�1�8�8�9K�L�L�L�L���s�BB/�/!Cc��d}d|ff|fddf}|D]�\}}t|��}|�|��5|�dd|���}|�tjj|j��d|���d	��}|�	||�
����ddd��n#1swxYwY��dS)
Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8�Accept)rr)))rr_)�ACCEPTz
text/plainztext/html,text/plainz/cgi-bin/file6.pyrLr�zHTTP_ACCEPT=r�)r�subTestrRr�rNr	r�r�r|r�r)r�browser_accept�testsrWr�r�s      r�test_acceptz!CGIHTTPServerTestCase.test_accept�s,��U�	���(�
*�N�;��
'�	
��"'�	4�	4��G�X�!�'�*�*�G����g�&�&�
4�
4��l�l�#6��w�l�O�O��� � ���!3�S�Z�@�@�@�4�(�4�4�;�;�G�D�D���
�
�h����
�
�3�3�3�	
4�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4����
4�
4�
4�
4��	4�	4s�BC�C	�C	N)r r!r"rrr)rAr�r|rGrKr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�r��sl������
�
�
�
�
�-�/D�
�
�
��j����(�(�G�J"�J"�J"�X(�(�(�8(;�(;�(;�TI�I�I�;�;�;�J�J�J�;�;�;�
E�E�E�E�E�E�C�C�C�E�E�E�E�E�E�E�E�E�E�E�E�M�M�M�4�4�4�4�4rr�c�,��eZdZd�fd�	Zd�Zd�Z�xZS)�SocketlessRequestHandlerNc����tj��}t��|j_t���|dd|���d|_d|_dS)N��	directoryFr\)	r
�Mockr�makefile�return_valuerr(�
get_calledr�)rr
rRr%s   �rr(z!SocketlessRequestHandler.__init__�sS����)�+�+��(/�	�	���%�
������$��	��B�B�B���� *����rc���d|_|�tj��|�dd��|���|j�d��dS)NTr^r_� <html><body>Data</body></html>
)rrcr	r�rerfr}r~r5s rr�zSocketlessRequestHandler.do_GET�sd��������:�=�)�)�)������5�5�5��������
���>�?�?�?�?�?rc��dSrr)rr�rs   rrz$SocketlessRequestHandler.log_message�s���rr)r r!r"r(r�rr�r�s@rrr�s^�������+�+�+�+�+�+�@�@�@�
�
�
�
�
�
�
rrc��eZdZd�ZdS)�!RejectingSocketlessRequestHandlerc�D�|�tj��dS)NF)rnr	�EXPECTATION_FAILEDr5s r�handle_expect_100z3RejectingSocketlessRequestHandler.handle_expect_100�s�����
�5�6�6�6��urN)r r!r"rrrrrr�s#����������rrc�6�eZdZd�Zd�Zd�Zed���ZdS)�AuditableBytesIOc��g|_dSr)�datasr5s rr(zAuditableBytesIO.__init__�s
����
�
�
rc�:�|j�|��dSr)rr�)rr�s  rr~zAuditableBytesIO.write�s���
���$�����rc�6�d�|j��S)Nr)r9rr5s r�getDatazAuditableBytesIO.getData�s���x�x��
�#�#�#rc�*�t|j��Sr)r�rr5s r�	numWriteszAuditableBytesIO.numWrites�s���4�:���rN)r r!r"r(r~r�propertyrrrrrr�s\��������� � � �$�$�$�����X���rrc��eZdZdZejd��Zd�Zd�Zd�Z	d�Z
d�Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�BaseHTTPRequestHandlerTestCasezrTest the functionality of the BaseHTTPServer.

       Test the support for the Expect 100-continue header.
       sHTTP/1.[0-9]+ 200 OKc�,�t��|_dSr)r�handlerr5s rrGz$BaseHTTPRequestHandlerTestCase.setUp�s��/�1�1����rc���t|��}t��}||j_||j_|j���|�d��|���S�Nr)rr$�rfiler}�handle_one_request�seek�	readlines)rrw�input�outputs    r�send_typical_requestz3BaseHTTPRequestHandlerTestCase.send_typical_request�sa���� � ������"����#������'�'�)�)�)����A�������!�!�!rc�D�|�|jj��dSr)r�r$rr5s r�verify_get_calledz0BaseHTTPRequestHandlerTestCase.verify_get_called�s�������/�0�0�0�0�0rc�p��dD]1�|�t�fd�|D����d���2dS)N)sServer: sDate: sContent-Type: c3�B�K�|]}|����V��dSr)rZ)�.0�h�	fieldNames  �r�	<genexpr>zIBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>�s/����� J� J�Q����i�!8�!8� J� J� J� J� J� Jrr�)r��sum)rrWr4s  @r�verify_expected_headersz6BaseHTTPRequestHandlerTestCase.verify_expected_headers�sV���B�	O�	O�I����S� J� J� J� J�'� J� J� J�J�J�A�N�N�N�N�	O�	Orc�d�|j�|��}|�|��dSr)�HTTPResponseMatch�searchr2)rr-�matchs   r�verify_http_server_responsez:BaseHTTPRequestHandlerTestCase.verify_http_server_response�s2���&�-�-�h�7�7�����U�#�#�#�#�#rc�8�d|j_tj}tj�tdt����5}||jd��||jd��||jdd��||jdd��||jd��ddd��n#1swxYwY|�	��}|�
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\x1br�z/spam a.�u/spam \x1b\x7f\x9f beans.�z"GET /foo\\b"ar\x07 HTTP/1.0"�)
r$�client_addressrrr
�patch�objectrBrr��assertNotIn�
splitlinesr�)rr�fake_stderrr?r�s     r�test_unprintable_not_loggedz:BaseHTTPRequestHandlerTestCase.test_unprintable_not_logged�s���':���#�,�8��
�Z�
�
�s�H�h�j�j�
9�
9�	G�[��K���f�-�-�-��K���&8�9�9�9��K���k�3�7�7�7��K���k�3J�K�K�K��K���&E�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G��%�%�'�'�������(�(�(������(�(�(��!�!�#�#���
�
�f�e�A�h�'�'�'��
�
�)�5��8�4�4�4��
�
�j�%��(�+�+�+��
�
�7��q��B�B�B��
�
�6��a��A�A�A�A�As�AB/�/B3�6B3c�d�|�d��}|�|d��|�|dd���|���|�|dd��|�|jjd��|�|jjd��|�|jjd��|�|jj	d	��|�
|jj���d
��dS)N�GET / HTTP/1.1

rr����r�GET / HTTP/1.1rLr�r\r�
r-r<r7r/r�r$�requestline�commandr��request_version�assertSequenceEqualrWr��r�results  r�
test_http_1_1z,BaseHTTPRequestHandlerTestCase.test_http_1_1�����*�*�+D�E�E���(�(����3�3�3��$�$�V�A�b�D�\�2�2�2���� � � �������%J�K�K�K������1�3C�D�D�D������-�u�5�5�5������*�C�0�0�0������5�z�B�B�B�� � ���!5�!;�!;�!=�!=�r�B�B�B�B�Brc�d�|�d��}|�|d��|�|dd���|���|�|dd��|�|jjd��|�|jjd��|�|jjd��|�|jj	d	��|�
|jj���d
��dS)NsGET / HTTP/1.0

rr�rNr�GET / HTTP/1.0rLr��HTTP/1.0rrPrUs  r�
test_http_1_0z,BaseHTTPRequestHandlerTestCase.test_http_1_0rXrc���|�d��}|�t|��d��|�|dd��|���dS)NsGET / HTTP/0.9

r�rr)r-r�r�r/rUs  r�
test_http_0_9z,BaseHTTPRequestHandlerTestCase.test_http_0_9se���*�*�+D�E�E������V���a�(�(�(�������$I�J�J�J���� � � � � rc�*�|�d��}|�|d�d����|�|d|�d�����|�|jj��dS)Ns)GET /spaced out HTTP/1.1
Host: dummy

rs
HTTP/1.1 400 r��
)r-r�rZr7�indexrYr$rrUs  r�test_extra_spacez/BaseHTTPRequestHandlerTestCase.test_extra_spaces����*�*�
�
�
��
	
����q�	�,�,�-=�>�>�?�?�?��$�$�V�A�f�l�l�7�.C�.C�,C�%D�E�E�E������0�1�1�1�1�1rc�h�|�d��}|�|d��|�|dd���|���|�|dd��|�|jjd��|�|jjd��|�|jjd��|�|jj	d	��d
}|�
|jj���|��dS)Ns(GET / HTTP/1.0
Expect: 100-continue

rr�rNrrZrLr�r[�)�Expectz100-continuerP�rrVrWs   r�test_with_continue_1_0z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_0!s���*�*�+\�]�]���(�(����3�3�3��$�$�V�A�b�D�\�2�2�2���� � � �������%J�K�K�K������1�3C�D�D�D������-�u�5�5�5������*�C�0�0�0������5�z�B�B�B�/��� � ���!5�!;�!;�!=�!=�w�G�G�G�G�Grc���|�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
r�r`rBsHTTP/1.1 200 OK
rNrrOrLr�r\rd)r-r�r7r/r$rQrRr�rSrTrWr�rfs   r�test_with_continue_1_1z5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1.sN���*�*�+\�]�]��������$@�A�A�A�������G�,�,�,�������$:�;�;�;��$�$�V�A�b�D�\�2�2�2���� � � �������%J�K�K�K������1�3C�D�D�D������-�u�5�5�5������*�C�0�0�0������5�z�B�B�B�/��� � ���!5�!;�!;�!=�!=�w�G�G�G�G�Grc��td��}t��}t��}||_||_d|_d|_d|_|�d��|�	|j
d��dS)NrMr\r�rB)rrrr'r}rSrQrRrnr�r�rr+r,r$s    r�#test_header_buffering_of_send_errorzBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_error=s~���1�2�2��!�#�#��*�,�,����
���
�",��� ���������3��������)�1�-�-�-�-�-rc�D�td��}t��}t��}||_||_d|_|�d��|�|jd��|�	��|�|jd��dS)NrMr\rlrr�)
rrrr'r}rS�send_response_onlyr�rrfrms    r�+test_header_buffering_of_send_response_onlyzJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_onlyKs����1�2�2��!�#�#��*�,�,����
���
�",����"�"�3�'�'�'�����)�1�-�-�-�����������)�1�-�-�-�-�-rc���td��}t��}t��}||_||_d|_|�dd��|�dd��|�|jd��|�	��|�|�
��d��|�|jd��dS)	NrMr\�Foo�foo�barrsFoo: foo
bar: bar

r�)rrrr'r}rSrer�rrfrrms    r�$test_header_buffering_of_send_headerzCBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_headerYs����1�2�2��!�#�#��*�,�,����
���
�",������E�5�)�)�)����E�5�)�)�)�����)�1�-�-�-�������������)�)�+J�K�K�K�����)�1�-�-�-�-�-rc���d�}td��}t��}||j_||j_d|j_|j���|�||��d��||���d��}|�|dd��|�|dd��|�|d	d
��dS)Nc��|���}|�d��|���}|�|��|Sr&)�tellr)r)rN�posr�s   r�_readAndReseekz[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseekks?���&�&�(�(�C�
�F�F�1�I�I�I��6�6�8�8�D�
�F�F�3�K�K�K��Krrir\rr`rsHTTP/1.1 100 Continuer�rBsHTTP/1.1 200 OK)	rr$r'r}rSr(�assertNotEqualr�r�)rr{r+r,rVs     r�$test_header_unbuffered_when_continuezCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continueis���	�	�	��I�J�J������"����#����'1���$���'�'�)�)�)����N�N�6�2�2�C�8�8�8����'�'�-�-�g�6�6��������$<�=�=�=�������C�(�(�(�������$6�7�7�7�7�7rc��|j}t��|_|�d��}|�|dd��|�|dd���|�|jj��|�td�|dd�D����d��||_dS)Nrirs!HTTP/1.1 417 Expectation Failed
r�rNc3�"K�|]
}|dkV��dS)sConnection: close
Nr)r2�rs  rr5zMBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>�s(����Q�Q�q�Q�":�:�Q�Q�Q�Q�Q�Qr)r$rr-r�r7rYrr6)r�
usual_handlerrVs   r�test_with_continue_rejectedz:BaseHTTPRequestHandlerTestCase.test_with_continue_rejecteds�����
�8�:�:����*�*�+\�]�]��������$J�K�K�K��$�$�V�A�b�D�\�2�2�2�	
�����0�1�1�1�����Q�Q�F�1�R�4�L�Q�Q�Q�Q�Q�ST�U�U�U�$����rc��|�dddzz��}|�|dd��|�|jj��|�|jjt��dS)NsGET �x�rs#HTTP/1.1 414 Request-URI Too Long
)r-r�rYr$r�assertIsInstancerQrqrUs  r�test_request_lengthz2BaseHTTPRequestHandlerTestCase.test_request_length�su���*�*�7�T�E�\�+A�B�B��������$L�M�M�M������0�1�1�1����d�l�6��<�<�<�<�<rc��|�dddzzdz��}|�|dd��|�|jj��|�|jjd��dS)NsGET / HTTP/1.1
X-Foo: bar�rr�s

rsHTTP/1.1 431 Line too long
rO�r-r�rYr$rrQrUs  r�test_header_lengthz1BaseHTTPRequestHandlerTestCase.test_header_length�s����*�*�+�d�U�l�:�[�H�J�J��������$E�F�F�F������0�1�1�1������1�3C�D�D�D�D�Drc���|�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
rOr�rUs  r�test_too_many_headersz4BaseHTTPRequestHandlerTestCase.test_too_many_headers�sr���*�*�E�G�G��������$H�I�I�I������0�1�1�1������1�3C�D�D�D�D�Drc���|�d��}d�|��}d}|�tj|d����d��|��dS)Ns*<script>alert("hello")</script> / HTTP/1.1rz<script>alert("hello")</script>Fr?r�)r-r9r�rJrKr|)rrV�texts   r�test_html_escape_on_errorz8BaseHTTPRequestHandlerTestCase.test_html_escape_on_error�sg���*�*�9�;�;�����&�!�!��0���
�
�d�k�$�e�4�4�4�;�;�G�D�D�f�M�M�M�M�Mrc�R�����fd�}|�j_td����j�����t
t���td����j�����t
t���dS)Nc�:��t����j_dSr)�nextr$�close_connection)�close_valuesrs��rr(zPBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_request�s���,0��,>�,>�D�L�)�)�)r)T)FFT)r$r(�iter�handler��
StopIterationr�)rr(r�s` @r�test_close_connectionz4BaseHTTPRequestHandlerTestCase.test_close_connection�s�����	?�	?�	?�	?�	?�	?�*<���'��G�}�}������������-��|�<�<�<��0�1�1������������-��|�<�<�<�<�<rc	��tj��}tj|��\	}}}}}}}}	}
d|jj|||jj|||||fz}|�|j�|���|��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�s            r�test_date_time_stringz4BaseHTTPRequestHandlerTestCase.test_date_time_string�s����i�k�k��15��S�1A�1A�.��e�S�"�b�"�b�!�Q�8��L�$�R�(���L�"�5�)��"�b�"�	<
�
��	
�����6�6��6�E�E�x�P�P�P�P�PrN)r r!r"�__doc__�re�compiler9rGr-r/r7r<rKrWr\r^rbrgrjrnrqrvr}r�r�r�r�r�r�r�rrrr"r"�s���������
#��
�#:�;�;��2�2�2�"�"�"�1�1�1�O�O�O�$�$�$�B�B�B�*
C�
C�
C�
C�
C�
C�!�!�!�2�2�2�H�H�H�
H�
H�
H�.�.�.�.�.�.�.�.�.� 8�8�8�,
%�
%�
%�=�=�=�E�E�E�E�E�E�N�N�N�
=�
=�
=�
Q�
Q�
Q�
Q�
Qrr"c�*�eZdZdZd�Zd�Zd�Zd�ZdS)� SimpleHTTPRequestHandlerTestCasez Test url parsing c��tj�tj��d��|_tj�dd��|_tj�dd��|_t��|_td���|_	ttjd�����|_dS)NrMrtrur	)
rAr�r9r�translated_1�translated_2�translated_3r�	handler_1�	handler_2�pathlib�PurePath�	handler_3r5s rrGz&SimpleHTTPRequestHandlerTestCase.setUp�s����G�L�L�����j�A�A����G�L�L��
�;�;����G�L�L��
�;�;���1�3�3���1�E�B�B�B���1�G�<L�U�<S�<S�T�T�T����rc��|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_pathr�r�r�r�r�r��rr�s  r�test_query_argumentsz5SimpleHTTPRequestHandlerTestCase.test_query_arguments�s����~�,�,�[�9�9������t�0�1�1�1��~�,�,�[�9�9������t�0�1�1�1��~�,�,�[�9�9������t�0�1�1�1��~�,�,�-@�A�A������t�0�1�1�1��~�,�,�-@�A�A������t�0�1�1�1��~�,�,�-@�A�A������t�0�1�1�1��~�,�,�-J�K�K������t�0�1�1�1��~�,�,�-J�K�K������t�0�1�1�1��~�,�,�-J�K�K������t�0�1�1�1�1�1rc��|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�s  r�test_start_with_double_slashz=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slash�s���~�,�,�\�:�:������t�0�1�1�1��~�,�,�\�:�:������t�0�1�1�1��~�,�,�\�:�:������t�0�1�1�1��~�,�,�-A�B�B������t�0�1�1�1��~�,�,�-A�B�B������t�0�1�1�1��~�,�,�-A�B�B������t�0�1�1�1�1�1rc�j	�tjtjdt��5|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��ddd��dS#1swxYwYdS)Nr�zc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r
�	swap_attrrrA�ntpathr�r�r�sepr�r�r�r�r�r�r�s  r�test_windows_colonz3SimpleHTTPRequestHandlerTestCase.test_windows_colon�s���
�
�v�y�&�&�
9�
9�'	6�'	6��>�0�0�1E�F�F�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1E�F�F�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1E�F�F�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1B�C�C�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1B�C�C�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1B�C�C�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1I�J�J�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1I�J�J�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1I�J�J�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1L�M�M�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1L�M�M�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5��>�0�0�1L�M�M�D��<�<��
�B�F�3�3�D����T�4�#4�5�5�5�O'	6�'	6�'	6�'	6�'	6�'	6�'	6�'	6�'	6�'	6�'	6�'	6����'	6�'	6�'	6�'	6�'	6�'	6s�Q5R(�(R,�/R,N)r r!r"r�rGr�r�r�rrrr�r��sY��������U�U�U�2�2�2�,
2�
2�
2�(6�(6�(6�(6�(6rr�c��eZdZd�ZdS)�MiscTestCasec�2�g}hd�}tt��D][}|�d��s||vr�tt|��}t|dd��dkr|�|���\|�tj|��dS)N>rr��
nobody_uid�_r!zhttp.server)rrrZ�getattrr��assertCountEqual�__all__)rr��denylistrO�
module_objects     r�test_allzMiscTestCase.test_all s�����7�7�7����K�K�	&�	&�D����s�#�#�
�t�x�'7�'7��#�F�D�1�1�M��}�l�D�9�9�]�J�J�����%�%�%�����f�n�h�7�7�7�7�7rN)r r!r"r�rrrr�r�s#������	8�	8�	8�	8�	8rr�c���eZdZd�Zejd��d���Zejd��d���ZdZdZ	ejd��d���Z
ejd��d���Zd	S)
�ScriptTestCasec���tjtjtjtjtjd����������������S)Nc��dS)N)rrrrrr�<lambda>z2ScriptTestCase.mock_server_class.<locals>.<lambda>4s���r)r.)r-)r
)r�)r
�	MagicMockr5s r�mock_server_classz ScriptTestCase.mock_server_class.sp���~����.�!%��#�~�(7�� � � �"�"�"�������

�

�

�
	
rzbuiltins.printc��|���}tj|d���|�|jt
jt
jf��dS�N��ServerClass�bind�r�rrr��address_familyr-�AF_INET6�AF_INET�rr��mock_servers   r�test_server_test_unspecz&ScriptTestCase.test_server_test_unspec;sZ���,�,�.�.�����$�7�7�7�7��
�
��&�
�_�f�n�-�	
�	
�	
�	
�	
rc��|���}tj|d���|�|jt
jt
jf��dS)Nr,r�r�r�s   r�test_server_test_localhostz)ScriptTestCase.test_server_test_localhostDsZ���,�,�.�.�����+�>�>�>�>��
�
��&�
�_�f�n�-�	
�	
�	
�	
�	
r)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334z::1)z0.0.0.0z8.8.8.8r>c��|jD]Q}|���}tj||���|�|jtj���RdSr�)�
ipv6_addrsr�rrr�r�r-r��rr�r�r�s    r�test_server_test_ipv6z$ScriptTestCase.test_server_test_ipv6Yse���O�	J�	J�D��0�0�2�2�K��K�K�d�;�;�;�;����[�7���I�I�I�I�	J�	Jrc��|jD]Q}|���}tj||���|�|jtj���RdSr�)�
ipv4_addrsr�rrr�r�r-r�r�s    r�test_server_test_ipv4z$ScriptTestCase.test_server_test_ipv4`se���O�	I�	I�D��0�0�2�2�K��K�K�d�;�;�;�;����[�7���H�H�H�H�	I�	IrN)r r!r"r�r
rFr�r�r�r�r�r�rrrr�r�,s�������
�
�
��T�Z� �!�!�
�
�"�!�
��T�Z� �!�!�
�
�"�!�
��J��J��T�Z� �!�!�J�J�"�!�J��T�Z� �!�!�I�I�"�!�I�I�Irr�c�f�tjtjtj����dSr)r��addModuleCleanuprArrrrr�setUpModuler�hs#����b�h��	���4�4�4�4�4r�__main__)Cr��collectionsr�http.serverrrrrrNrr	rAr-rBr�r�r�r�r'�
email.messager�email.utilsrJ�http.client�urllib.parserHr	r�rr&r�r
�iorrrr
�test.supportrr�requires_working_socketrr'r$�TestCaser<rYr�r�r�r�r�r�r��hasattrrmr�rrrr"r�r�r�r�r �mainrrr�<module>r�s�����
$�#�#�#�#�#�5�5�5�5�5�5�5�5�5�5�5�5�#�#�#�#�#�#�#�#�	�	�	�	�
�
�
�
�
�
�
�
�	�	�	�	�
�
�
�
�
�
�
�
�����
�
�
�
����������������������������������������������� � � � � � � � �����������"�"�"�"�"�"�)�)�)�)�)�)����t�,�,�,�,��������������y�'����*-�-�-�-�-�8�$�-�-�-�*L(�L(�L(�L(�L(�\�L(�L(�L(�^!G�!G�!G�!G�!G�L�!G�!G�!G�HX3�X3�X3�X3�X3�|�X3�X3�X3�v
�	�
�	�"
�	�
�	�&������Y�'�'�=�J�B�J�L�L�A�,=�A�C�C�z4�z4�z4�z4�z4�L�z4�z4�C�C�z4�z
�
�
�
�
�7�
�
�
�&�����(@����
�
�
�
�
�
�
�
� }Q�}Q�}Q�}Q�}Q�X�%6�}Q�}Q�}Q�@W6�W6�W6�W6�W6�x�'8�W6�W6�W6�t
8�
8�
8�
8�
8�8�$�
8�
8�
8�9I�9I�9I�9I�9I�X�&�9I�9I�9I�x5�5�5��z����H�M�O�O�O�O�O��r