403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python315/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python315/Lib/test/__pycache__/test_httpservers.cpython-315.pyc
R
>lqj�!c���Qs]QHGsGsGsGs]QHGsGs]PH$s	]PH(s
]PH,s]PH0s]PH4s
]PH8s]PH<s]PH@s]PHDs]PHLs]PHPs]PHs]PHTs]PHXs]PH`s]PHds]PHhs]PHls]PHps]QHtGs]QH|G s G!s!]QH�G#s#]PHts]QH�G%s%]QH�G's'G(s(G)s)G*s*G+s+]QH�G-s-G.s.]Q	H�G0s0]PH�s1\%OfP	Q
5QQ2s4Q
Q\4\2s5Q>QQ?Q\5-Qkks6QQ\On2s8QQ\Or2s:QQ\On2s;QQ\;2s<QQ\;2s=Qs>\O~\1PIQ2QQ\;22s@Q Q!\;2sA\%O�Q"Q#\A22sCQ$Q%\2sDQ&Q'\;2sEQ(Q)\2sFQ*Q+\F2sGQ,Q-2sHQ.Q/\On2sIQ0Q1\On2sJQ2Q3\On2sKQ4Q5\On2sLQ6Q7\On2sMQ8Q9\On2sNQ:Q;\On2sOQ<sP\QQ=6Xc\O�2P!P!\2cPs1CK�h9h)@z�Unittests for the various HTTPServer modules.

Written by Cody A.W. Somerville <cody-somerville@ubuntu.com>,
Josip Dzolonga, and Michael Otteneder for the 2007/08 GHOP contest.
)�BaseHTTPRequestHandler�
HTTPServer�HTTPSServer�SimpleHTTPRequestHandler)�server�
HTTPStatus)�mock)�BytesIO�StringIO)�	get_theme)�support)�force_not_colorized�is_apple�
import_helper�	os_helper�threading_helper)�kill_python�spawn_python)�find_unused_port)�modulec�2`�\sQs]1snQsQQksQsUsP!)�NoLogRequestHandlerc��P!�N�)�self�argss&*�*C:\Python315\\Lib\test\test_httpservers.py�log_message�NoLogRequestHandler.log_message2s���c��P!��r)r�ns&&r�read�NoLogRequestHandler.read6s��rrr)�__name__�
__module__�__qualname__�__firstlineno__rr$�__static_attributes__�__classdictcell__��
__classdict__s@rrr1s����
��rrc��\sQs]:sQsP!)�DummyRequestHandlerr�r&r'r(r)r*rrrr/r/:s��rr/�address�request_handlerc� �[V4VUQ5!)��certfile�keyfile�password)r)r5r6r7r1r2s&&&$$r�create_https_serverr8>s�����X��rc�(`�\sQs]LsnQsQsUsP!)�TestSSLDisabledc	�@�[O29^tt^2P[OQ$[	Q2oUO[29^tt^2[U2PPP2PPP2P!)%fhK9h)%fhP!9h)N�ssl�keycert.pem)r�isolated_modules�sys�modules�
certdata_file�assertRaises�RuntimeErrorr8)rr5s& r�&test_https_server_raises_runtime_error�6TestSSLDisabled.test_https_server_raises_runtime_errorMsd��
�
+�
+�
-�
-�!%�C�K�K���$�]�3�H��"�"�<�0�0�#�H�-�1�.�
-�1�0��.�
-�
-�s/�<B�A9	�'B�9B	
�B	
�B�B	�B	r)r&r'r(r)rDr*r+r,s@rr:r:Ls����.�.rr:c�8`�\sQs]UsnQQksQsQsQsUsP!)�TestServerThreadc�j�[OOU2V mVmV0mP!r)�	threading�Thread�__init__r2�test_object�tls)rrLr2rMs&&&&rrK�TestServerThread.__init__Vs'�����!�!�$�'�.��&���rc�F�UO%c.UOvqo[VUUOQ5UmL[	QUO2UmUOO
O
2vUOmUOm	UOOO2PUmUOOQ2UOO2P!SOO2h9h))r2g�������?��	localhost�)rMr8r2rr�socket�getsocknamerL�HOST�PORT�server_started�set�
serve_forever�server_close)rr5r6r7s&   r�run�TestServerThread.run\s����8�8�8�*.�(�(�'�H�x�-��8� $� 4� 4��D�K�
%�%5�t�7K�7K�L�D�K�7;�{�{�7I�7I�7U�7U�7W�4�����t�/�/�4����'�'�+�+�-����	'��K�K�%�%�d�+��K�K�$�$�&��D�K�K�$�$�&�s�
D�D c�\�UOO2UO2P!r)r�shutdown�join�rs&r�stop�TestServerThread.stopms���������	�	�r)r2rrLrMr)	r&r'r(r)rKr[rar*r+r,s@rrGrGUs�����'�"�rrGc�B`�\sQs]rsnPsQsQsQP-1QksQsUs	P!)�BaseTestCasec�^�[O2Um[O2[
m[O2Um	[VOUO2Um
UOO2UOO2P!r)r�threading_setup�_threadsr�EnvironmentVarGuard�os�environrI�EventrWrGr2rM�thread�start�waitr`s&r�setUp�BaseTestCase.setUpwsk��(�8�8�:��
��2�2�4��
�'�o�o�/���&�t�-A�-A�4�8�8�L������������ � �"rc���UOO2PUm[OO	2[
OUOP!r)rlrarirj�__exit__r�threading_cleanuprgr`s&r�tearDown�BaseTestCase.tearDowns;�����������
�
�
�����*�*�D�M�M�:r�GETc���[OOUOUO2UmUO
O
V!V42UO
O2!r)�http�client�HTTPConnectionrUrV�
connection�request�getresponse)r�uri�method�body�headerss&&&&&rr|�BaseTestCase.request�sI���+�+�4�4�T�Y�Y��	�	�J���������T�;����*�*�,�,r)rgr{rWrl)
r&r'r(r)rMrortr|r*r+r,s@rrdrdrs)�����C�#�;�#(�d�B�-�-rrdc��`�\sQs]�snQQ\\2sQsQsQs	Qs
QsQsQ	s
Q
sQsQsQ
sQsQsQsQsQsQsQsQsQsQsQsQsQsUsP!)�BaseHTTPServerTestCasec�``�\sQs]�snQsQsQsQsQsQs	Qs
QsQsQ	s
Q
sQsUsP!)�&BaseHTTPServerTestCase.request_handler�HTTP/1.1c��UO[O2UOQQ2UOQQ2UO	2P!)�Content-Type�	text/html�
Connection�close��
send_responser�
NO_CONTENT�send_header�end_headersr`s&r�do_TEST�.BaseHTTPServerTestCase.request_handler.do_TEST�sB�����z�4�4�5����^�[�9����\�7�3����rc��UO[O2UOQQ2UOQQ2UO	2P!)r�r�r��
keep-aliver�r`s&r�do_KEEP�.BaseHTTPServerTestCase.request_handler.do_KEEP�sB�����z�4�4�5����^�[�9����\�<�8����rc�*�UOQ2P!)����
send_errorr`s&r�do_KEYERROR�2BaseHTTPServerTestCase.request_handler.do_KEYERROR�s���O�O�C� rc�F�UO[O2P!r�r�r�	NOT_FOUNDr`s&r�do_NOTFOUND�2BaseHTTPServerTestCase.request_handler.do_NOTFOUND�s���O�O�J�0�0�1rc�.�UOQQQ2P!)r�z
Short MessagezThis is a long 
 explanationr�r`s&r�do_EXPLAINERROR�6BaseHTTPServerTestCase.request_handler.do_EXPLAINERROR�s���O�O�C��;�
=rc��UOQ2UOQQ2UOQQ2UO2P!)r�r�r�r�r�)r�r�r�r`s&r�	do_CUSTOM�0BaseHTTPServerTestCase.request_handler.do_CUSTOM�s<�����s�#����^�[�9����\�7�3����rc��UOQ2UOQQ2UOQQ2UO2UOQ*O	Q2oUO
O
U2P!)r��	X-Special�Dängerous Mindr�r�zx-special-incoming�utf-8)r�r�r�r��encode�wfile�write)rr�s& r�do_LATINONEHEADER�8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADER�si�����s�#����[�*;�<����\�7�3������<�<� 4�5�<�<�W�E�D��J�J���T�"rc�^�UO[UOQ*22P!�:�NN�r��int�pathr`s&r�
do_SEND_ERROR�4BaseHTTPServerTestCase.request_handler.do_SEND_ERROR�����O�O�C��	�	�"�
�.�/rc�^�UO[UOQ*22P!r�r�r`s&r�do_HEAD�.BaseHTTPServerTestCase.request_handler.do_HEAD�r�rr)r&r'r(r)�protocol_version�default_request_versionr�r�r�r�r�r�r�r�r�r*r+r,s@rr2r��sC����%��",��	�	�	!�	2�	=�	�	#�	0�	0�	0rr2c���[OU2[OO	UO
UO2UmUOO2P!r)	rdrorxryrzrUrV�con�connectr`s&rro�BaseHTTPServerTestCase.setUp�s@�����4� ��;�;�-�-�d�i�i����C��������rc���UOOQQ2UOO2oUOUO[
O2P!)rv�/)r�r|r}�assertEqual�statusr�NOT_IMPLEMENTED�r�ress& r�test_command�#BaseHTTPServerTestCase.test_command�sB���������$��h�h�"�"�$��������Z�%?�%?�@rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)z	HTTP/1.1
�XYZBOGUSr��	r��
_http_vsn_str�
putrequest�
endheadersr}r�r�rr�r�s& r�test_request_line_trimming�1BaseHTTPServerTestCase.test_request_line_trimming�s^��!-����������J��,��������h�h�"�"�$��������Z�%?�%?�@rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)�FUBARrvr��	r�r�r�r�r}r�r�r�BAD_REQUESTr�s& r�test_version_bogus�)BaseHTTPServerTestCase.test_version_bogus�s^��!(����������E�3�'��������h�h�"�"�$��������Z�%;�%;�<rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)z
HTTP/9.9.9rvr�r�r�s& r�test_version_digits�*BaseHTTPServerTestCase.test_version_digits�s^��!-����������E�3�'��������h�h�"�"�$��������Z�%;�%;�<rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)zHTTP/-9_9_9.+9_9_9rvr�r�r�s& r�"test_version_signs_and_underscores�9BaseHTTPServerTestCase.test_version_signs_and_underscores�s^��!5����������E�3�'��������h�h�"�"�$��������Z�%;�%;�<rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)zHTTP/909876543210.0rvr�r�r�s& r�"test_major_version_number_too_long�9BaseHTTPServerTestCase.test_major_version_number_too_long��^��!6����������E�3�'��������h�h�"�"�$��������Z�%;�%;�<rc��QUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)zHTTP/1.909876543210rvr�r�r�s& r�"test_minor_version_number_too_long�9BaseHTTPServerTestCase.test_minor_version_number_too_long�r�rc��PUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)r"rvr�r�r�s& r�test_version_none_get�,BaseHTTPServerTestCase.test_version_none_get�s^��!#����������E�3�'��������h�h�"�"�$��������Z�%?�%?�@rc��PUOmUOOQQ2UOO2UOO	2oUOUO[O2P!)r"�CUSTOMr�r�r�s& r�test_version_none�(BaseHTTPServerTestCase.test_version_none�s^��!#����������H�c�*��������h�h�"�"�$��������Z�%;�%;�<rc�@�]cUOmQUOmUOOQQ2UOO	2UOO2oUO
UO[O2P!)�czHTTP/9.9rvr�)
r��	_http_vsnr�r�r�r}r�r�r�HTTP_VERSION_NOT_SUPPORTEDr�s& r�test_version_invalid�+BaseHTTPServerTestCase.test_version_invalid�sj�������!+����������E�3�'��������h�h�"�"�$��������Z�%J�%J�Krc��PUOmUOOPP2UOO2UOO	2oUOUO[O2P!r!r�r�s& r�test_send_blank�&BaseHTTPServerTestCase.test_send_blanks^��!#����������B��#��������h�h�"�"�$��������Z�%;�%;�<rc�4�UOOQQ2UOOQQ2UOO2UOO	2oUOUO[O2P!)rvr�r�r�)	r�r��	putheaderr�r}r�r�rr�r�s& r�test_header_close�(BaseHTTPServerTestCase.test_header_closesf�������E�3�'������<��1��������h�h�"�"�$��������Z�%?�%?�@rc�V�QUOmUOOQQ2UOOQQ2UOO	2UOO2oUO
UO[O2P!)r�rvr�r�r�)
r�r�r�r�r�r}r�r�rr�r�s& r�test_header_keep_alive�-BaseHTTPServerTestCase.test_header_keep_alivesr��!+����������E�3�'������<��6��������h�h�"�"�$��������Z�%?�%?�@rc���UOOQQ2UOO2oUOUO[
O2P!)�TESTr�)r�r|r}r�r�rr�r�s& r�test_handler�#BaseHTTPServerTestCase.test_handlersB���������%��h�h�"�"�$��������Z�%:�%:�;rc�8�UOOQQ2UOO2oUOUO	Q2Q2UOOQQ2UOUOO2P!)�KEEPr�r�r�r)r�r|r}r��	getheader�
addCleanupr�r�s& r�test_return_header_keep_alive�4BaseHTTPServerTestCase.test_return_header_keep_alive si���������%��h�h�"�"�$��������|�4�l�C��������%���������'rc��UOOQQ2UOO2oUOUOQ2P!)�KEYERRORr�r��r�r|r}r�r�r�s& r�test_internal_key_error�.BaseHTTPServerTestCase.test_internal_key_error's<��������S�)��h�h�"�"�$��������S�)rc��UOOQQ2UOO2oUOUOQ2P!)r�r�r�rr�s& r�test_return_custom_status�0BaseHTTPServerTestCase.test_return_custom_status,s<��������3�'��h�h�"�"�$��������S�)rc��UOOQQ2UOO2oUOUOQ2UO[
UOQ222P!)�EXPLAINERRORr�r��Content-Length)r�r|r}r�r��
assertTruer�rr�s& r�test_return_explain_error�0BaseHTTPServerTestCase.test_return_explain_error1sW���������-��h�h�"�"�$��������S�)�����C�M�M�*:�;�<�=rc��UOOQQQQ-Q5UOO2oUOUO	Q2Q2UOUO2QO
Q22P!)�LATINONEHEADERr�zX-Special-IncominguÄrger mit Unicode�r�r�r�r�)r�r|r}r�rr$r�r�s& r�test_latin1_header�)BaseHTTPServerTestCase.test_latin1_header7sw�������)�3� �(<�9
��	��h�h�"�"�$��������{�3�5F�G��������%9�%@�%@��%I�Jrc�N�UOOQQ2UOO2oUOUO[
O2UO2oUO[UOQ22[U22P!)�NOTFOUNDr�r)r�r|r}r�r�rr�r$r�r�len)rr��datas&  r�test_error_content_length�0BaseHTTPServerTestCase.test_error_content_length?sp��������S�)��h�h�"�"�$��������Z�%9�%9�:��x�x�z������S�]�]�+;�<�=�s�4�y�Irc���[O[O1o[O[O[O[O[O
1FD�oUOOQQOU22UOO2oUOV#O2UOPUOQ22UOPUOQ22V!7c"UOPUOQ22UO2oUOQU2J�	P!)�
SEND_ERROR�/{}rr��Transfer-Encodingr)r�NOT_MODIFIED�
RESET_CONTENTr��
PROCESSING�SWITCHING_PROTOCOLSr�r|�formatr}r�r�rr$�r�allow_transfer_encoding_codes�coder�rs&    r�test_send_error�&BaseHTTPServerTestCase.test_send_errorHs��)3�)@�)@�)3�)A�)A�)C�%��*�*�J�,C�,C��*�*�J�,D�,D��3�3�5�D�
�H�H���\�5�<�<��+=�>��(�(�&�&�(�C����T�:�:�.����T�3�=�=�1A�#B�C����T�3�=�=��#@�A��8�� � ��s�}�}�5H�'I�J��8�8�:�D����S�$�'�5rc	��[O[O1o[O[O[O[O[O
1FCDRoUOOQQOU22UOO2oUOV#O2U[O6XcOUO[UOQ22]6�2UOQUOQ22LBUOPUOQ22UOPUOQ22V!7c"UOPUOQ22UO!2oUOQU2CJU	P!)�HEADr$rr�r�r%r)rr&r'�OKr�r)r�r|r*r}r�r�rr�r�assertInr$r+s&    r�test_head_via_send_error�/BaseHTTPServerTestCase.test_head_via_send_errorYsF��)3�)@�)@�)3�)A�)A�)C�%��]�]�J�$9�$9��,�,�j�.F�.F��3�3�5�D�
�H�H���V�U�\�\�$�%7�8��(�(�&�&�(�C����T�:�:�.��z�}�}�$�����C�M�M�2B�$C� D�q� H�I��
�
�k�3�=�=��+H�I�� � ��s�}�}�5E�'F�G�� � ��s�}�}�^�'D�E��8�� � ��s�}�}�5H�'I�J��8�8�:�D����S�$�'�!5r�r�) r&r'r(r)rrr2ror�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr r.r4r*r+r,s@rr�r��s�����,0�-�/E�,0�\�
A�
A�=�=�=�=�=�A�=�L�=�A�A�<�
(�*�
*�
>�K�J�(�"(�(rr�c�^``�\sQsQsnQQ\\2sU1QksQsQs	Qs
QsUsU9s
!)	�HTTP09ServerTestCase�oc�,`�\sQsQsnQsQsQsUsP!)�$HTTP09ServerTestCase.request_handler�qz$Request handler for HTTP/0.9 server.c�v�UOOQUOQ0O22P!)zOK: here is z
)r�r�r�r�r`s&r�do_GET�+HTTP09ServerTestCase.request_handler.do_GETts*���J�J���|�D�I�I�;�d�;�B�B�D�Err)r&r'r(r)�__doc__r>r*r+r,s@rr2r;qs����2�	F�	Frr2c�8:�[RU_2[O[O[O2UmUO
UO
2UmUO
OUOUO12P!r)
�superrorS�AF_INET�SOCK_STREAM�sock�enterContextr�rUrV�r�	__class__s&�rro�HTTP09ServerTestCase.setUpws]���
��
���M�M�&�.�.�&�2D�2D�E��	��%�%�d�i�i�0��	��	�	���4�9�9�d�i�i�0�1rc��UOOQ2UOOQ2oUOUQ2P!)sGET /index.html
�sOK: here is /index.html
)rE�send�recvr�r�s& r�test_simple_get�$HTTP09ServerTestCase.test_simple_get}s6���	�	���-�.��i�i�n�n�T�"������<�=rc��UOOQ2UOOQ2oUOUQ2UO	QU2P!)sPOST /index.html
rKs
HTTP/1.0 400 s"Bad HTTP/0.9 request type ('POST'))rErLrM�assertStartsWithr3r�s& r�test_invalid_request�)HTTP09ServerTestCase.test_invalid_request�sE���	�	���.�/��i�i�n�n�T�"�����c�#3�4��
�
�;�S�Arc��UOOQ2UOOQ2oUOUQ2[O
[29^tt^2UOOQ2UOOQ2oUOUQ2PPP2P!)%fhP!9h)sGET /foo.html
rKsOK: here is /foo.html
sGET /bar.html
r)rErLrMr��
contextlib�suppress�OSErrorr�s& r�test_single_request�(HTTP09ServerTestCase.test_single_request�s����	�	���+�,��i�i�n�n�T�"������:�;��
 �
 ��
)�
)��I�I�N�N�/�0��)�)�.�.��&�C����S�#�&�	*�
)�
)�
)�s�,A	B?�?C	�C	)rE)r&r'r(r)rrr2rorNrRrXr*r+�
__classcell__�rHr-s@@rr8r8os1����F�-�/E�F�2�>�
B�'�'rr8c��[OO[OO[2Q,UN3!)�certdata)rir�r_�dirname�__file__)r�s*rrArA�s)��
�7�7�<�<�������1�:�E��E�Er�requires sslc��`�\sQsQsn\Q2s\Q2s\Q2s\Q2s\Q2s	\Q2s
\Q2sQ	sQ
s
\\P1s\sQsQP-1Q
ksQsQsQsUsP!)�BaseHTTPSServerTestCase�r=�ssl_cert.pem�ssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemznullcert.pemzbadcert.pem�somepass�badpassc�~�UOQ2oUOUO[O2P!)r�)r|r�r�rr2�r�responses& r�test_get� BaseHTTPSServerTestCase.test_get�s(���<�<��$��������*�-�-�8rrvc��[O2o[OO	UO
UOUQ5UmUOOV!V42UOO2!)��context)
r<�_create_unverified_contextrxry�HTTPSConnectionrUrVr{r|r})rr~rr�r�ros&&&&& rr|�BaseHTTPSServerTestCase.request�sc���0�0�2���+�+�5�5��I�I�t�y�y�'�6�
���	
������T�;����*�*�,�,rc	��UOPP1UOUOP1UOPUO1UOUOUO1,oSFD]vq#oUOV#UQ59^tt^2[
V#U2oUOU[2UO2PPP2J_	P!)%fhJt9h�Nr4)
�CERTFILE�CERTFILE_PROTECTED�KEY_PASSWORD�ONLYCERT�ONLYKEY_PROTECTED�subTestr8�assertIsInstancerrZ)r�valid_certdatar5r6r7rs&     r�test_valid_certdata�+BaseHTTPSServerTestCase.test_valid_certdata�s���
�]�]�D�$�'�
�]�]�D�M�M�4�0�
�
$�
$�d�D�,=�,=�>�
�]�]�D�2�2�D�4E�4E�F�	
��,:�'�H�x����!�X����-�X��I���%�%�f�k�:��#�#�%���,:����s�4C
	�
C
�C
c��UOPP1UOPP1UOPP1UOPP1UOUOP1UOPUO
1,oSFDfvq#oUO
V#UQ59^tt^2UO[O29^tt^2[V#U2PPP2PPP2Jh	P!)%fhK9h)%fhJ�9hrt)�BADCERT�	EMPTYCERTrx�ONLYKEYrv�BADPASSWORDrzrBr<�SSLErrorr8)r�invalid_certdatar5r6r7s&    r�test_invalid_certdata�-BaseHTTPSServerTestCase.test_invalid_certdata�s���
�\�\�4��&�
�^�^�T�4�(�
�]�]�D�$�'�
�\�\�4��&�
�\�\�4�=�=�$�/�
�
$�
$�d�D�,<�,<�=�

��,<�'�H�x����!�X�����&�&�s�|�|�4�4�'��8�D�5���,<�5�4�����s0�(C.	�8
C
�C.	�C+�$C+�&C.	�.C?
�7C?
)r{)r&r'r(r)rArurxr�rvryr�r�rwr�rMr/r2rkr|r}r�r*r+r,s@rrbrb�s������]�+�H��^�,�H��M�*�G�&�';�<��%�&:�;���n�-�I��M�*�G��L��K��W�d�
#�C�)�O�9�#(�d�B�-�
&�E�Errbc�X`�\sQsQsnQQ\2s\Q2s\Q2sQs	Us
P!)�RequestHandlerLoggingTestCase��c�6`�\sQsQsnQsQsQsQsQsUs	P!)�-RequestHandlerLoggingTestCase.request_handler��r�c�f�UO[O2UO2P!r)r�rr2r�r`s&rr>�4RequestHandlerLoggingTestCase.request_handler.do_GET�s �����z�}�}�-����rc�H�UO[OQ2P!)zFile not foundr�r`s&r�do_ERROR�6RequestHandlerLoggingTestCase.request_handler.do_ERROR�s���O�O�J�0�0�2B�Crr)
r&r'r(r)r�r�r>r�r*r+r,s@rr2r��s"����%��",��	�	D�	Drr2c���[OOUOUO2UmUO
O
2[O29^tt^2oUO
OQQ2UO
O2PPP2UOWO2Q2P!)%fhK29h)rvr�z"GET / HTTP/1.1" 200 -
)
rxryrzrUrVr�r�r�captured_stderrr|r}�assertEndsWith�getvalue)r�errs& rrk�&RequestHandlerLoggingTestCase.test_get�s����;�;�-�-�d�i�i����C���������
�
$�
$�
&�
&�#��H�H���U�C�(��H�H� � �"�'�	
���C�L�L�N�,F�G�	'�
&�s�27C�C#	�C#	c�.�[OOUOUO2UmUO
O
2[O29^tt^2oUO
OQQ2UO
O2PPP2WO2OQ2oUOU]*Q2UOU]*Q2P!)%fhKc9h)�ERRORr��
� code 404, message File not foundz"ERROR / HTTP/1.1" 404 -)rxryrzrUrVr�r�rr�r|r}r��splitr�)rr��liness&  r�test_err�&RequestHandlerLoggingTestCase.test_err�s����;�;�-�-�d�i�i����C���������
�
$�
$�
&�
&�#��H�H���W�c�*��H�H� � �"�'�����$�$�T�*�����E�!�H�&H�I����E�!�H�&@�A�
'�
&�s�27D�D	�
D	r6)r&r'r(r)rr2rrkr�r*r+r,s@rr�r��s@����	D�0�	D��H��H��
B��
Brr�c�.`�\sQsQsnQsQsQsUsP!)�&RequestHandlerColorizedLoggingTestCase�c��[P	Q5Oo[OO	UO
UO2UmUOO2[O29^tt^2oUOOQQ2UOO2PPP2WO2oUOUOQUO 0U2UOUO"Q0U2UOUO U2P!)%fhK�9h)T��force_colorrvr��200)r
�http_serverrxryrzrUrVr�r�rr�r|r}r�r3r��reset�	status_ok)r�tr��outputs&   rrk�/RequestHandlerColorizedLoggingTestCase.test_gets����$�'�3�3���;�;�-�-�d�i�i����C���������
�
$�
$�
&�
&�#��H�H���U�C�(��H�H� � �"�'�������
�
������!�'�'��+�V�4��
�
����
�S�)�6�2��
�
�a�g�g�v�&�'�
&�s�7D?�?E	�E	c��[P	Q5Oo[OO	UO
UO2UmUOO2[O29^tt^2oUOOQQ2UOO2PPP2WO2OQ2oUOUO QUO"0U]*2UOUO$Q0U]*2P!)%fhK�9h)Tr�r�r�r�r��404)r
r�rxryrzrUrVr�r�rr�r|r}r�r�r3�errorr��status_client_error)rr�r�r�s&   rr��/RequestHandlerColorizedLoggingTestCase.test_errs����$�'�3�3���;�;�-�-�d�i�i����C���������
�
$�
$�
&�
&�#��H�H���W�c�*��H�H� � �"�'�����$�$�T�*���
�
��w�w�i�7����y�A�5��8�	
�	
�
�
��.�.�/�s�3�U�1�X�>�'�
&�s�7E�E	�	E	r6)r&r'r(r)rkr�r*r+r,s@rr�r�s����'�
?�
?rr�c�8``�\sQsQsnPsU1QksQsUsU9s!)�$CustomHeaderSimpleHTTPRequestHandler�!c�d:�UOQUO2[RU_U-U@P!)�extra_response_headers)�
setdefaultr�rBrK)rr�kwargsrHs&*,�rrK�-CustomHeaderSimpleHTTPRequestHandler.__init__$s,������2�D�4O�4O�P�
���$�)�&�)rr)	r&r'r(r)r�rKr*r+rZr[s@@rr�r�!s����!��*�*rr�c�p``�\sQsQsnQQ\\2sU1QksU1QksQ)Qks	Q)Qks
Q)QksQ	s\
O\O Q
2Q2s\
O\O Q
2Q2s\
O&\Q
2\
O&\O,Q6HQ2\
O\O.Q2Q222s\
O&\Q
2\
O&\O,Q6HQ2\
O\O.Q2Q222sQs\
O\O6Q2Q2s\
O\O6Q2Q2sQsQsQs Qs!Qs"Qs#Qs$Qs%Qs&Q s'Q!s(Q"s)Q#s*Q$s+Q%s,Q&s-Q's.Q(s/Us0U9s1!)*�SimpleHTTPServerTestCase�)c��\sQsQsQsP!)�(SimpleHTTPServerTestCase.request_handler�*rr0rrrr2r�*s��rr2c��:�[RU_2[O2Um[
O2o[OU2QUm[
OUQ5Um
[OOUO2Um
QUO*Um[OOUOQ2o[!UQ29^tt^2oUO#UO2UO%2PPP2[O&U2O(o[*O*O-U[*O.O02oUO3]Q5Um[6O8O;UO=2P	Q5UmP!)%fhK�9h)sWe are the knights who say Ni!)�dirr��test�wb)�microsecond��usegmt) rBrori�getcwd�cwd�tempfile�
gettempdir�chdirr�mkdtemp�tempdirr��basename�tempdir_name�base_urlr_�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_modifrHs&     �rro�SimpleHTTPServerTestCase.setUp-sD���
��
���9�9�;����)�)�+��
�����5��	��'�'�K�8����G�G�,�,�T�\�\�:����d�/�/�/��
��7�7�<�<����f�5��
�(�D�
!�
!�T��J�J�t�y�y�!��J�J�L�"�����!�*�*���&�&�4�4�U����!�!�#�
�#-�#5�#5�!�#5�#D�� �!&���!7�!7�� � �"�4�"8�"1���"�
!�s�=,G�G&	�G&	c��:�[OUO2[RU_2[
OUO2P![RS_2h9hP!9hr)rir�r�rBrt�shutil�rmtreer�rGs&�rrt�!SimpleHTTPServerTestCase.tearDownBsP���	��H�H�T�X�X���G���	��M�M�$�,�,�'��
�G����	��s� A� A(�A%�(A-c�``�UU1QkoPnURmRO2oUOR2UOROU2UORO2U%cUOV52UORO]
2UOROOQQ2Q2UORO]2QQ2RO2U!)c�0:�ROnPRmP!)zKDon't close reader yet so we can check if there was leftover
buffered input)�fp)�readerrjs��r�
close_conn�DSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_connMs����[�[�F��H�Krr�r�rzConnection should be closed)�_close_connr$rr�r��assertIsNotNone�reason�version�msg�getr�)rrjr�rr�r�r�s&f&&  @r�check_status_and_reason�0SimpleHTTPServerTestCase.check_status_and_reasonLs����	���)����}�}�������!�������&�1����X�_�_�-�����T�(�	
����)�)�2�.�������)�)�,��@�'�J�������R��#�/L�M������rc���UO2UOUOU2U%c>UO2FD&vqEUOUO	U2U2J(	P!P!r)r$r�r��itemsr)rrjr�r��name�values&&&&  r�check_status_and_headers�1SimpleHTTPServerTestCase.check_status_and_headersesV��	�
�
��������&�1��&�}�}����� � ��!3�!3�D�!9�5�A� /�rc�*�[OOUOU2o[O[OOUOU22Ue"[OOUQQ5oUOUOQ*U*Q*2oUOU[O2o[ O"UOQUQ0P
Q5o[$O&2oQUQ0O)UQ2oUO+UQ	*U2UO+UQ
*U2P![
[1cSOQS8Q02CK&h9h)zCan not create directory � on current file system�
surrogatepass��errorsr���quote�listing for z</�surrogateescape�title>�h1>)rir�r_r��mkdirrW�UnicodeEncodeError�skipTest�urllib�parserr|r�r�rr2�html�escaper?�getfilesystemencodingr�r3)	rr^�
quotedname�fullpathrjr��displaypath�enc�prefixs	&&&      r�check_list_dir_dirname�/SimpleHTTPServerTestCase.check_list_dir_dirnamens;���7�7�<�<����g�6��	5��H�H�R�W�W�\�\�$�,�,��8�9�
�����+�+�G�O�+�L�J��<�<��
�
�� 3�j� @�3� F�G���+�+�H�j�m�m�D���k�k�T�]�]�O�1�W�I�Q�"?�u�M���'�'�)����}�B�/�6�6�s�<M�N���
�
�f�y�(�$�/��
�
�f�v�o�t�,���+�,�	5��M�M�5�g�[�A3�4�
5�	5�s�>E'�'F�7F�Fc��[OOUOU2o[	U2O2[O9%fQ*o[UQ29^tt^2oUOU2PPP2UOUOQ*2oUOU[O 2o["O$O'UQQ5oUO(O+2oUO-U2UO/QUQ0OQ	2U2[0O2UP
Q
5o	UO/QU	Q0OUQ
2U2UOUOQ*U*2oUOU[O UQ5P!)%fhCKO9h[cSOQS8Q02CKvh9h)��r�zCan not create file rr�rrzhref="�"�asciir�>�<r�r)rir�r_r�rr�r�TESTFN_UNDECODABLEr�r�rWrr|r�r�rr2r
rrr��get_content_charsetr�r3rr)
r�filenamer�content�frjr�rr�displaynames
&&        r�check_list_dir_filename�0SimpleHTTPServerTestCase.check_list_dir_filename�s����7�7�<�<����h�7����/�(�(�*�i�.J�.J�.U�.U�g�V��	5��h��%�%������ �&��<�<��
�
�� 3�4���+�+�H�j�m�m�D���\�\�'�'���'�I�
����2�2�4�����S�!��
�
��
�|�1�-�5�5�g�>��E��k�k�(�%�8���
�
��+��a�(�/�/��5F�G��N��<�<��
�
�� 3�j� @�A���$�$�X�z�}�}�7�$�K�!&�%�%���	5��M�M�0���=3�4�
5�	5�s<�%G%�9G�G%�G"	�G"	�G%�"G%�%	H
�/H
�	H
zneed os_helper.TESTFN_NONASCIIc�X�[OQ*oUOU2P!��.dir)r�TESTFN_NONASCIIr�rr^s& r�test_list_dir_nonascii_dirname�7SimpleHTTPServerTestCase.test_list_dir_nonascii_dirname�s"���+�+�f�4���#�#�G�,rc�X�[OQ*oUOU2P!��.txt)rr+r&�rr"s& r�test_list_dir_nonascii_filename�8SimpleHTTPServerTestCase.test_list_dir_nonascii_filename�s"���,�,�v�5���$�$�X�.rz<undecodable name cannot always be decoded on Apple platforms�win32z+undecodable name cannot be decoded on win32z!need os_helper.TESTFN_UNDECODABLEc��[O[O2Q*oUO	U2P!r))ri�fsdecoderr rr,s& r�!test_list_dir_undecodable_dirname�:SimpleHTTPServerTestCase.test_list_dir_undecodable_dirname�s+���+�+�i�:�:�;�f�D���#�#�G�,rc��[O[O2Q*oUO	U2P!r0)rir7rr r&r2s& r�"test_list_dir_undecodable_filename�;SimpleHTTPServerTestCase.test_list_dir_undecodable_filename�s+���;�;�y�;�;�<�v�E���$�$�X�.rc�2�QoUOUQQ5P!)u�.dirz%ff.dir�r)rr,s& r�"test_list_dir_undecodable_dirname2�;SimpleHTTPServerTestCase.test_list_dir_undecodable_dirname2�s�����#�#�G�	�#�Brz!need os_helper.TESTFN_UNENCODABLEc�X�[OQ*oUOU2P!r))r�TESTFN_UNENCODABLErr,s& r�!test_list_dir_unencodable_dirname�:SimpleHTTPServerTestCase.test_list_dir_unencodable_dirname�s"���.�.��7���#�#�G�,rc�X�[OQ*oUOU2P!r0)rrBr&r2s& r�"test_list_dir_unencodable_filename�;SimpleHTTPServerTestCase.test_list_dir_unencodable_filename�s"���/�/�&�8���$�$�X�.rc��QFDaoUOUQ59^tt^2UQ*oUOU[OO	UQQ5Q5PPP2Jc	P!)%fhJx9h)�q?�r�r*z&<>'")�safer>�	rIzf#z&amp;z&ampz<i>z"dq"z'sq'z%A4z	%E2%82%AC)rzrr
rr)rr�r^s&  r�test_list_dir_escape_dirname�5SimpleHTTPServerTestCase.test_list_dir_escape_dirname�sg��)�D����4��(�(���-���+�+�G�#)�<�<�#5�#5�g�H�#5�#M�,�O�)�(�)�(�(�(�s�<A,	�,A=
�5A=
c
�:�QFD~oUOUQ59^tt^2UQ*oUOU2[O[O
O
UOU22PPP2J�	P!)%fhJ�9h)rIrJr1rL)rzr&r�unlinkrir�r_r�)rr�r"s&  r�test_list_dir_escape_filename�6SimpleHTTPServerTestCase.test_list_dir_escape_filename�si��)�D����4��(�(��&�=���,�,�X�6�� � ������d�l�l�H�!E�F�)�(�)�(�(�(�s�AB		�	B
�B
c���QUOQ0OQ2oUOUOQ*2O2oUO	UQ*U2UO	UQ*U2UOUOQ*2O2oUO	UQ*U2UO	UQ*U2P!)rz/</�latin1z/#123rr	z/?x=123)r�r�r|r$r3)rrrjs&  r�%test_list_dir_with_query_and_fragment�>SimpleHTTPServerTestCase.test_list_dir_with_query_and_fragment�s�����
�
��c�2�9�9�(�C���<�<��
�
�� 7�8�=�=�?���
�
�f�y�(�(�3��
�
�f�v�o�x�0��<�<��
�
�	� 9�:�?�?�A���
�
�f�y�(�(�3��
�
�f�v�o�x�0rc��[O[OOUOQ22QUO
Q0oUQ0oUO
U2oUOU[O2UOQ2oUOVBQQ5QU0oUO
U2oUOU[O2UOQ2oUOUQ2UOVBQ	Q5QU0oUO
U2oUOU[O2UOUOQ2U2Q
U0oUQ0oUO
U2oUOU[O2UOQ2oUOUQ
2P!)a!Ensure //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�z//zcExpected Location header to start with a single / and end with a / as this is a directory redirect.zhttps://pypi.org/)rir
r�r_r�r�r|r�r�MOVED_PERMANENTLYrr��assertNotStartsWithrQ)	r�url�expected_locationrj�location�
attack_url�attack3_url�attack_scheme_netloc_2slash_url�expected_scheme_netloc_locations	&        r�3test_get_dir_redirect_location_domain_injection_bug�LSimpleHTTPServerTestCase.test_get_dir_redirect_location_domain_injection_bug�s���	��������d�l�l�,@�A�B�B�4�CT�CT�BU�Uh�i��"�e�1�I���<�<��$���$�$�X�z�/K�/K�L��%�%�j�1������:N��O����Y�
��<�<�
�+���$�$�X�z�/K�/K�L��%�%�j�1��� � ��4�0�����@�	�	A�
�3�%�j���<�<��,���$�$�X�z�/K�/K�L�����+�+�J�7�9J�K�->�c�U�*C�'�-L�,M�Q�*O�'��<�<� ?�@���$�$�X�z�/K�/K�L��%�%�j�1��	
���h�(;�<rc�$�UOUOQ*2oUOU[OUO
Q5UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUO2oUOU[O2UOUOQ2UOQ*2UOUOQ	2Q
2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ2UOQ
*2UOQ2oUOU[O2UOQ2oUOU[O2[O[OOUOQQ22UOUOQ*2oUOU[O2Qo[[OOUO Q2Q29^tt^2oUO#U2PPP2UOUOQ*2oUOU[OU2[O$Q6Xc�[O&2]6wc�[O(UO]2UOUOQ*2oUOU[O2[O(UOQ2P!P!P!)%fhCK9h[O(SOQ2h9h)�/testr�/test/z/test%2fz/test%2Fr�z%2fz%2FrYr�0�/?hi=2�?hi=1�/?hi=1z/ThisDoesNotExist�spam�
index.htmlz/spam/�Dummy index file
r��posix��z/ThisDoesNotExist/)r|r�r�rr2rr�rZr�rri�makedirsr�r_r�r�r�r�r��geteuid�chmod)rrjrr$s&   rrk�!SimpleHTTPServerTestCase.test_gets����<�<��
�
�� 7�8���$�$�X�z�}�}�4�9�9�$�M��<�<��
�
�� 8�9���$�$�X�z�/C�/C�D��<�<��
�
�
� :�;���$�$�X�z�/C�/C�D��<�<��
�
�
� :�;���$�$�X�z�/C�/C�D��<�<��
�
�� 3�4���$�$�X�z�}�}�=��<�<��
�
�� 5�6���$�$�X�z�}�}�=��<�<��
�
�� 5�6���$�$�X�z�}�}�=��<�<��
�
�.���$�$�X�z�/K�/K�L�����+�+�J�7�����9L�M�����+�+�,<�=�s�C��<�<��
�
�� 8�9���$�$�X�z�}�}�=��<�<��
�
�� 7�8���$�$�X�z�/K�/K�L�����+�+�J�7�����1�	3��<�<� 3�4���$�$�X�z�/C�/C�D��<�<� >�?���$�$�X�z�/C�/C�D�
���B�G�G�L�L����v�|�D�E��<�<��
�
�� 8�9���$�$�X�z�}�}�=�&��
�"�'�'�,�,�t�0�0�,�?��
F�
F�!�
�G�G�D�M�G��<�<��
�
�� 3�4���$�$�X�z�}�}�d�C��7�7�g��"�*�*�,�!�"3��H�H�T�\�\�1�%�
.��<�<��
�
��(;�<���,�,�X�z�7K�7K�L�������u�-�
#4��G�
F�
F��������u�-�s�U�/AU,�U)	�!U)	�,#Vc�L�UOUOQ*QQ5oUOU[O2UOUO
Q2[[UO222UOUO
Q2Q2P!)rfr1�rzcontent-lengthzcontent-type�application/octet-stream)
r|r�r�rr2r�r�strrrris& r�	test_head�"SimpleHTTPServerTestCase.test_headEs����<�<��M�M�G�#�F� �4���$�$�X�z�}�}�=�����+�+�,<�=��S����^�,�	.�����+�+�N�;�3�	5rc�F�[OO2oUOUQ$UO	UO
Q*UQ5oUO
U[O2UO[O]Q5*o[OO2o[OOUP	Q5UQ$UO	UO
Q*UQ5oUO
U[O2P!)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-Sincerfr)�hoursr�)r��message�Messager�r|r�r�rr&r�r��	timedeltar��format_datetime)rr�rj�new_dts&   r�test_browser_cache�+SimpleHTTPServerTestCase.test_browser_cacheNs���
�-�-�'�'�)��'+�'=�'=��#�$��<�<��
�
�� 7��<�I���$�$�X�z�/F�/F�G��)�)�H�,>�,>�Q�,G�G���-�-�'�'�)��',�{�{�'B�'B�6��(C�(��#�$��<�<��
�
�� 7��<�I���$�$�X�z�/F�/F�Grc�h�UOoU[OQQ5*
o[OO2o[OOUP	Q5UQ$UOUOQ*UQ5oUOU[O2P!)�m)�daysr�r|rfr)
r�r�r�r�r~rr�r�r|r�r�rr2)r�dt�old_dtr�rjs&    r�test_browser_cache_file_changed�8SimpleHTTPServerTestCase.test_browser_cache_file_changed`s���
�
%�
%���h�(�(�c�2�2���-�-�'�'�)��',�{�{�'B�'B�6��(C�(��#�$��<�<��
�
�� 7��<�I���$�$�X�z�}�}�=rc���[OO2oUOUQ$QUQ$UO	UO
Q*UQ5oUO
U[O2P!)r|�*z
If-None-Matchrfr)	r�r~rr�r|r�r�rr2)rr�rjs&  r�,test_browser_cache_with_If_None_Match_header�ESimpleHTTPServerTestCase.test_browser_cache_with_If_None_Match_headerks`���-�-�'�'�)��'+�'=�'=��#�$�#&��� ��<�<��
�
�� 7��<�I���$�$�X�z�}�}�=rc�:�UOQQQ5oUOU[O2UOQQQ5oUOU[O2UOQQQ5oUOU[O2P!)r��FOOrv�custom�GETs)r|r�rr�ris& r�test_invalid_requests�.SimpleHTTPServerTestCase.test_invalid_requeststsz���<�<��E�<�2���$�$�X�z�/I�/I�J��<�<��H�<�5���$�$�X�z�/I�/I�J��<�<��F�<�3���$�$�X�z�/I�/I�Jrc��UOUOQ*2oUOU[OUO
Q5UOQ*oUOV O2P!)z�Checks that the datetime returned in Last-Modified response header
is the actual datetime of last modification, rounded to the second
rfrz
Last-modified)	r|r�r�rr2rr�r�r�)rrjr�s&  r�test_last_modified�+SimpleHTTPServerTestCase.test_last_modified}s^���<�<��
�
�� 7�8���$�$�X�z�}�}�4�9�9�$�M�$�,�,�_�=�����*�,B�,B�Crc���UOUOQ*2oUOU[OUO
Q5UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUO2oUOU[O2UOUOQ2UOQ*2UOUOQ*2oUOU[O2UOUOQ*2oUOU[O2UOUOQ2UOQ*2P!)rfrrgr�rYrirjrk)
r|r�r�rr2rr�rZr�rris& r�test_path_without_leading_slash�8SimpleHTTPServerTestCase.test_path_without_leading_slash�sl���<�<�� 1� 1�G� ;�<���$�$�X�z�}�}�4�9�9�$�M��<�<�� 1� 1�H� <�=���$�$�X�z�/C�/C�D��<�<�� 1� 1�C� 7�8���$�$�X�z�}�}�=��<�<�� 1� 1�2���$�$�X�z�/K�/K�L�����+�+�J�7��*�*�S�0�	2��<�<�� 1� 1�H� <�=���$�$�X�z�}�}�=��<�<�� 1� 1�G� ;�<���$�$�X�z�/K�/K�L�����+�+�J�7��*�*�X�5�	7rc
�:�[OOUOQQQ,29^tt^2UO	UO
Q*2oUO
U[OQQQQ-2PPP2P!)%fhP!9h)r��X-Test1�test1�X-Test2�test2r�)r�r�)r�r�)	r�patch�objectr2r|r�r�rr2ris& r�$test_extra_response_headers_list_dir�=SimpleHTTPServerTestCase.test_extra_response_headers_list_dir�s���
�Z�Z�
�
�t�3�3�5M� � �P
����|�|�D�M�M�C�$7�8�H��)�)�(�J�M�M��7��7�D�
�����s�AB	�	B	�B	c
��[OOUOQ,Q	N29^tt^2Qo[	[
OOUOQ2Q29^tt^2oUOU2PPP2UOUOQ*2oUOU[OQQQQ-2PPP2P!)%fhKa9h)%fhP!9h)
r��
Set-Cookier��value3rnrmr�r�ztest1=value1, test2=value2))r�ztest1=value1)r�ztest2=value2)r�r�)rr�r�r2r�rir�r_r�r�r|r�r�rr2)rrr$rjs&   r�$test_extra_response_headers_get_file�=SimpleHTTPServerTestCase.test_extra_response_headers_get_file�s���
�Z�Z�
�
�t�3�3�5M�P
���
+�D��b�g�g�l�l�4�#4�#4�l�C�T�J�J�a�����
�K��|�|�D�M�M�C�$7�8�H��)�)�(�J�M�M��:��8�D�
���K�J��
���s0�?C4�6C!	�AC4�!C1
�*C1
�,C4�4D	�=D	c�4�[OOUOQQ,29^tt^2UO	UO
Q*2oUO
U[OQP-2PPP2P!)%fhP!9h)r�r�z
/missing.html)r�r�)	rr�r�r2r|r�r�rr�ris& r�*test_extra_response_headers_missing_on_404�CSimpleHTTPServerTestCase.test_extra_response_headers_missing_on_404�s~��
�Z�Z�
�
�t�3�3�5M� �P
����|�|�D�M�M�O�$C�D�H��)�)�(�J�4H�4H��4�K�
�	����s�AB�B	�B	c��[OOUOQ,QN29^tt^2UO	UO
Q*2oUO
U[OQQ-2UOUOQ2Q2UOUOQ2Q2PPP2P!)%fhP!9h)	r�r��test/not_allowed�Server�not_allowedr��test=allowedr�))r�r�)r�r�)r�r�)rr�r�r2r|r�r�rr2�assertNotEqualrris& r�:test_extra_response_headers_dont_overwrite_default_headers�SSimpleHTTPServerTestCase.test_extra_response_headers_dont_overwrite_default_headers�s���
�Z�Z�
�
�t�3�3�5M�P
����|�|�D�M�M�C�$7�8�H��)�)�(�J�M�M��n�D�
�
���� 2� 2�>� B�DV�W����� 2� 2�8� <�m�L�����s�BC	�	C	�C	c
�Z�[OOUOQQ,29^tt^2[	]2FDHoUOUOQ*2oUOU[OQQ-2JJ	PPP2P!)%fhP!9h)r��x-test�
test-valuer�)r�r�)
rr�r�r2�ranger|r�r�rr2)r�_rjs&  r�<test_multiple_requests_dont_duplicate_extra_response_headers�USimpleHTTPServerTestCase.test_multiple_requests_dont_duplicate_extra_response_headers�s���
�Z�Z�
�
�t�3�3�5M�$�P
����1�X���<�<��
�
��(;�<���-�-�h�
�
�
��l�H�������s�AB�B*	�"B*	)r�r�rr�r�r�r�r)2r&r'r(r)rr�r2rortr�r�rr&�unittest�
skipUnlessrr+r-r3�skipIfr
r?�platformr r8r;r?rBrCrFrMrQrUrcrkryr�r�r�r�r�r�r�r�r�r�r�r*r+rZr[s@@rr�r�)s����
�-�/S�
�1�*��2B�-�$L�,����2�2�9�;�-�;�-�����2�2�9�;�/�;�/��_�_�X�S�U�
�_�_�S�\�\�W�,�B�D�
����5�5�<�>�-�>�D�U�-��_�_�X�S�U�
�_�_�S�\�\�W�,�B�D�
����5�5�<�>�/�>�D�U�/�C�����5�5�<�>�-�>�-�����5�5�<�>�/�>�/�O�G�1�/=�b1.�f5�H�$	>�>�K�D�7�$	�
��M� �rr�c�D``�\sQsQsnQU1QkksQsQsQsUsU9s	!)�SocketlessRequestHandler��c�:�[O2o[2UOm[
RU_UPPUQ5P
UmQUmP!)N��	directoryr�)	r�Mockr�makefile�return_valuerBrK�
get_calledr�)rr�r|rHs&& �rrK�!SocketlessRequestHandler.__init__�sC����)�)�+��(/�	����%�
����$��	��B���� *��rc���P	UmUO[O2UO	QQ2UO2UOOQ2P!)Tr�r�� <html><body>Data</body></html>
)r�r�rr2r�r�r�r�r`s&rr>�SocketlessRequestHandler.do_GET�sJ��������:�=�=�)������5������
�
���>�?rc��P!rr)rr*rs&&*rr�$SocketlessRequestHandler.log_message�s��r)r�r�r)
r&r'r(r)rKr>rr*r+rZr[s@@rr�r��s����+�@�
�
rr�c�(`�\sQsQsnQsQsUsP!)�!RejectingSocketlessRequestHandler��c�F�UO[O2P
!)F)r�r�EXPECTATION_FAILEDr`s&r�handle_expect_100�3RejectingSocketlessRequestHandler.handle_expect_100�s�����
�5�5�6�rr)r&r'r(r)r�r*r+r,s@rr�r��s�����rr�c�D`�\sQsQsnQsQsQs\Q2sQs	Us
P!)�AuditableBytesIO��c��,UmP!r��datasr`s&rrK�AuditableBytesIO.__init__�s	����
rc�>�UOOU2P!r)r��append)rrs&&rr��AuditableBytesIO.write�s���
�
���$�rc�:�QOUO2!)r)r_r�r`s&r�getData�AuditableBytesIO.getData�s���x�x��
�
�#�#rc�.�[UO2!r)rr�r`s&r�	numWrites�AuditableBytesIO.numWrites�s���4�:�:��rr�)r&r'r(r)rKr�r��propertyr�r*r+r,s@rr�r��s(����� �$����rr�c�`�\sQsQsnQs\OQ2sQsQs	Qs
QsQs\
Q	2sQ
sQsQs\O&Q
,QN2Q2sQsQsQsQsQsQsQsQsQsQsQsQs Qs!Qs"Qs#Us$P!)�BaseHTTPRequestHandlerTestCaserKzdTest the functionality of the BaseHTTPServer.

Test the support for the Expect 100-continue header.
sHTTP/1.[0-9]+ 200 OKc�&�[2UmP!r)r��handlerr`s&rro�$BaseHTTPRequestHandlerTestCase.setUps��/�1��rc���[U2o[2oV OmV0OmUOO	2UO]2UO
2!�rR)rr��rfiler��handle_one_request�seek�	readlines)rr~�inputr�s&&  r�send_typical_request�3BaseHTTPRequestHandlerTestCase.send_typical_requestsQ���� �����"����#�������'�'�)����A�����!�!rc�R�UOUOO2P!r)rr�r�r`s&r�verify_get_called�0BaseHTTPRequestHandlerTestCase.verify_get_calleds��������/�/�0rc�f`�QFD'nUO[U1QkU22]2J)	P!)�Server: c3�P:�SF �DpOR2w�	J	P!3hr)�
startswith)�.0�h�	fieldNames& �r�	<genexpr>�IBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>s��'���'�Q���i�!8�!8�'�s�&)r�sDate: sContent-Type: )r��sum)rr�r�s&&@r�verify_expected_headers�6BaseHTTPRequestHandlerTestCase.verify_expected_headerss)���B�I����S� J�'� J�J�A�N�Crc�`�UOOU2oUOU2P!r)�HTTPResponseMatch�searchr�)rrj�matchs&& r�verify_http_server_response�:BaseHTTPRequestHandlerTestCase.verify_http_server_responses&���&�&�-�-�h�7�����U�#rc�0�QUOm[Oo[O
O
[Q[229^tt^2oUUOQ2UUOQ2UUOQQ2UUOQQ2UUOQ2PPP2WO2oUOQU2UOQ	U2UO2oUOQU]*2UOQ
U]*2UOQU]*2UOQU]*2UOQ
U]*2P!)%fhK�9h)�	127.0.0.1�stderr�/fooz/barz	/spam %s.�auŸ beansz"GET /foo\b"ar HTTP/1.0"��z/\x1bbar\x00\x1bz/spam a.u/spam \x1b\x7f\x9f beans.z"GET /foo\\b"ar\x07 HTTP/1.0")ri9)
r��client_addressrrrr�r�r?r	r��assertNotIn�
splitlinesr3)rr�fake_stderrr
r�s&    r�test_unprintable_not_logged�:BaseHTTPRequestHandlerTestCase.test_unprintable_not_loggeds.��':����#�,�8�8��
�Z�Z�
�
�s�H�h�j�
9�
9�[�����f�-�����&8�9�����k�3�7�����k�3J�K�����&E�F�:��%�%�'�������(������(��!�!�#���
�
�f�e�A�h�'��
�
�)�5��8�4��
�
�j�%��(�+��
�
�7��q��B��
�
�6��a��A�:�
9�s�A"F�F	�F	c�l�UOQ2oUOU]*2UOU]P2UO2UO	UP*Q2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2UOUO
OO2Q2P!)�GET / HTTP/1.1

r��GET / HTTP/1.1rvr�r�r�
r�r	rr�r�r��requestline�commandr��request_version�assertSequenceEqualr�r��r�results& r�
test_http_1_1�,BaseHTTPRequestHandlerTestCase.test_http_1_15�����*�*�+D�E���(�(����3��$�$�V�A�b�\�2���� �������%J�K�������1�1�3C�D�������-�-�u�5�������*�*�C�0�������5�5�z�B�� � ����!5�!5�!;�!;�!=�r�Brc�l�UOQ2oUOU]*2UOU]P2UO2UO	UP*Q2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2UOUO
OO2Q2P!)sGET / HTTP/1.0

r��GET / HTTP/1.0rvr��HTTP/1.0rrr s& r�
test_http_1_0�,BaseHTTPRequestHandlerTestCase.test_http_1_0Ar$rc��UOQ2oUO[U2]2UOU]*Q2UO2P!)sGET / HTTP/0.9

r�)r�r�rr�r s& r�
test_http_0_9�,BaseHTTPRequestHandlerTestCase.test_http_0_9MsH���*�*�+D�E������V��a�(�������$I�J���� rzrequest,codec��[2UmUOU2oUOU]*QU*2UO	U]UOQ22UO
UOO2P!)rRsHTTP/1.1 %d �
)r�r�r�rQr�index�assertFalser�)rr|r-r!s&&& r�'test_request_line_error_has_status_line�FBaseHTTPRequestHandlerTestCase.test_request_line_error_has_status_lineSsm��0�1����*�*�7�3�����f�Q�i��4�)?�@��$�$�V�A�f�l�l�7�.C�%D�E�������0�0�1rc���UOQ2oUOU]*Q2UOU]UOQ22UO	UO
O2P!)s)GET /spaced out HTTP/1.1
Host: dummy

s
HTTP/1.1 400 r.)r�rQrr/r0r�r�r s& r�test_extra_space�/BaseHTTPRequestHandlerTestCase.test_extra_space`sd���*�*�
�
��
	
���f�Q�i�)9�:��$�$�V�A�f�l�l�7�.C�%D�E�������0�0�1rc�p�UOQ2oUOU]*2UOU]P2UO2UO	UP*Q2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2UO	UO
OQ2QoUOUO
OO2U2P!)s(GET / HTTP/1.0
Expect: 100-continue

r�r&rvr�r'�)�Expectz100-continuer�rr!r�s&  r�test_with_continue_1_0�5BaseHTTPRequestHandlerTestCase.test_with_continue_1_0js����*�*�+\�]���(�(����3��$�$�V�A�b�\�2���� �������%J�K�������1�1�3C�D�������-�-�u�5�������*�*�C�0�������5�5�z�B�/��� � ����!5�!5�!;�!;�!=�w�Grc���UOQ2oUOU]*Q2UOU]*Q2UOU]*Q2UOU]P2UO2UOUP*Q2UOUOO
Q2UOUOOQ2UOUOOQ2UOUOOQ2Q	oUOUOOO2U2P!)
�(GET / HTTP/1.1
Expect: 100-continue

sHTTP/1.1 100 Continue
r.sHTTP/1.1 200 OK
r�rrvr�r�r7)r�r�rr�r�rrr�rrr�r�r9s&  r�test_with_continue_1_1�5BaseHTTPRequestHandlerTestCase.test_with_continue_1_1ws���*�*�+\�]��������$@�A�������G�,�������$:�;��$�$�V�A�b�\�2���� �������%J�K�������1�1�3C�D�������-�-�u�5�������*�*�C�0�������5�5�z�B�/��� � ����!5�!5�!;�!;�!=�w�Grc���[Q2o[2o[2oVmV#mQUmPUmPUmUOQ2UOUO]2P!�rr��)rr�r�r�r�rrrr�r�r��rr�r�r�s&   r�#test_header_buffering_of_send_error�BBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_error�sb���1�2��!�#��*�,���
��
�",��� ���������3������)�)�1�-rc��[Q2o[2o[2oVmV#mQUmUO
Q2UOUO]2UO2UOUO]2P!rA)
rr�r�r�r�r�send_response_onlyr�r�r�rCs&   r�+test_header_buffering_of_send_response_only�JBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_only�su���1�2��!�#��*�,���
��
�",����"�"�3�'�����)�)�1�-���������)�)�1�-rc��[Q2o[2o[2oVmV#mQUmUO
QQ2UO
QQ2UOUO]2UO2UOUO2Q2UOUO]2P!)rr��Foo�foo�barsFoo: foo
bar: bar

)rr�r�r�r�rr�r�r�r�r�rCs&   r�$test_header_buffering_of_send_header�CBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_header�s����1�2��!�#��*�,���
��
�",������E�5�)����E�5�)�����)�)�1�-�����������)�+J�K�����)�)�1�-rc���Qo[Q2o[2oV OmV0OmQUOmUOO2UO
UU2Q2UU2OQ2oUOU]*Q2UOU]*Q2UOU]*Q2P!)c��UO2oUO]2UO2oUOU2U!r�)�tellr�r$)r$�posrs&  r�_readAndReseek�[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseek�s3���&�&�(�C�
�F�F�1�I��6�6�8�D�
�F�F�3�K��Krr=r�rr.sHTTP/1.1 100 ContinuesHTTP/1.1 200 OK)	rr�r�r�rr�r�r�r�)rrTr�r�r!s&    r�$test_header_unbuffered_when_continue�CBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue�s���	��I�J�����"����#����'1����$����'�'�)����N�6�2�C�8���'�-�-�g�6��������$<�=�������C�(�������$6�7rc�X�UOo[2UmUOQ2oUOU]*Q2UO	U]P2UOUOO2UO[QU]P22]2VmP!)r=s!HTTP/1.1 417 Expectation Failed
c3�6�SF �D
pQ6Hw�	J	P!3h)sConnection: close
r)r��rs& rr�MBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>�s��L���L�q�":�:�L�s�)r�r�r�r�rr0r�r)r�
usual_handlerr!s&  r�test_with_continue_rejected�:BaseHTTPRequestHandlerTestCase.test_with_continue_rejected�s������
�8�:����*�*�+\�]��������$J�K��$�$�V�A�b�\�2�	
������0�0�1�����Q�F�1�R�L�Q�Q�ST�U�$�rc��UOQQQ**2oUOU]*Q2UOUOO2UOUOO[2P!)sGET �x�sHTTP/1.1 414 URI Too Long
)r�r�r0r�r�r{rrxr s& r�test_request_length�2BaseHTTPRequestHandlerTestCase.test_request_length�sd���*�*�7�T�E�\�+A�B��������$D�E�������0�0�1����d�l�l�6�6��<rc��UOQQQ**Q*2oUOU]*Q2UOUOO2UOUOO
Q2P!)sGET / HTTP/1.1
X-Foo: bar�rras

sHTTP/1.1 431 Line too long
r�r�r�r0r�r�rr s& r�test_header_length�1BaseHTTPRequestHandlerTestCase.test_header_length�sl���*�*�+�d�U�l�:�[�H�J��������$E�F�������0�0�1�������1�1�3C�Drc���UOQ2oUOU]*Q2UOUOO2UOUOO
Q2P!)sGET / HTTP/1.1
sHTTP/1.1 431 Too many headers
rs�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

rfr s& r�test_too_many_headers�4BaseHTTPRequestHandlerTestCase.test_too_many_headers�s^���*�*�E�G��������$H�I�������0�0�1�������1�1�3C�Drc��UOQ2oQOU2oQoUO[OUP
Q5OQ2U2P!)s*<script>alert("hello")</script> / HTTP/1.1rz<script>alert("hello")</script>rr)r�r_r3rrr�)rr!�texts&  r�test_html_escape_on_error�8BaseHTTPRequestHandlerTestCase.test_html_escape_on_error�sL���*�*�9�;�����&�!��0���
�
�d�k�k�$�e�4�;�;�G�D�f�Mrc�<``�UU1QkoUROm[Q2nROO2RO	[
[R2[Q2nROO2RO	[
[R2P!)c�>:�[R2ROmP!r)�nextr��close_connection)�close_valuesrs��rr��PBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_request�s���,0��,>�D�L�L�)r)T)FFT)r�r��iter�handlerB�
StopIterationrr)rr�rtsf @r�test_close_connection�4BaseHTTPRequestHandlerTestCase.test_close_connection�sl���	?�*<����'��G�}�����������-��|�<��0�1�����������-��|�<rc	�J�[O2o[OU2v	q#qEqgq�o
QUOOU*UUOOU*V%Vg1*oUOUOO
UQ5U2P!)z#%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�z�expecteds&           r�test_date_time_string�4BaseHTTPRequestHandlerTestCase.test_date_time_strings����i�i�k��15���S�1A�.��S�b�b�Q�8��L�L�$�$�R�(���L�L�"�"�5�)��b�	<
�
��	
������6�6��6�E�x�Pr)r�))sGET / FUBAR

�)sGET / HTTP/2.0

�)sGET
r�)sPOST /
r�)%r&r'r(r)r@�re�compilerror�r�rr	rrr"r(r+r�subTestsr1r4r:r>rDrHrNrVr]rbrgrjrnryr�r*r+r,s@rr�r�s������
�
�
�#:�;��2�"�1�O�$��B��B�*
C�
C�!�
���n�'��2�
�2�2�H�
H�.�.�.� 8�,
%�=�E�E�N�
=�
Q�
Qrr�c�>`�\sQsQsnQsQsQsQsQsQs	Us
P!)� SimpleHTTPRequestHandlerTestCaseizTest url parsing c��[OO[O2Q2Um[OOQQ2Um[OOQQ2Um[2Um[QQ5Um	[[OQ2Q5UmP!)r"rLrMr�)
rir�r_r��translated_1�translated_2�translated_3r��	handler_1�	handler_2�pathlib�PurePath�	handler_3r`s&rro�&SimpleHTTPRequestHandlerTestCase.setUpsz���G�G�L�L�����j�A����G�G�L�L��
�;����G�G�L�L��
�;���1�3���1�E�B���1�G�<L�<L�U�<S�T��rc���UOOQ2oUOVO2UOOQ2oUOVO
2UOOQ2oUOVO2UOOQ2oUOVO2UOOQ2oUOVO
2UOOQ2oUOVO2UOOQ2oUOVO2UOOQ2oUOVO
2UOOQ2oUOVO2P!)z	/filenamez/filename?foo=barz/filename?a=b&spam=eggs#zot�r��translate_pathr�r�r�r�r�r��rr�s& r�test_query_arguments�5SimpleHTTPRequestHandlerTestCase.test_query_argumentssp���~�~�,�,�[�9������0�0�1��~�~�,�,�[�9������0�0�1��~�~�,�,�[�9������0�0�1��~�~�,�,�-@�A������0�0�1��~�~�,�,�-@�A������0�0�1��~�~�,�,�-@�A������0�0�1��~�~�,�,�-J�K������0�0�1��~�~�,�,�-J�K������0�0�1��~�~�,�,�-J�K������0�0�1rc��UOOQ2oUOVO2UOOQ2oUOVO
2UOOQ2oUOVO2UOOQ2oUOVO2UOOQ2oUOVO
2UOOQ2oUOVO2P!)z
//filenamez//filename?foo=barr�r�s& r�test_start_with_double_slash�=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slash.s����~�~�,�,�\�:������0�0�1��~�~�,�,�\�:������0�0�1��~�~�,�,�\�:������0�0�1��~�~�,�,�-A�B������0�0�1��~�~�,�,�-A�B������0�0�1��~�~�,�,�-A�B������0�0�1rc�
�[O[OQ[29^tt^2UO
O
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UO
O
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UO
O
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UO
O
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2UOO
Q2oUO[O[O2oUOVO2PPP2P!)%fhP!9h)r�zc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filename)r�	swap_attrrri�ntpathr�r�r��sepr�r�r�r�r�r�r�s& r�test_windows_colon�3SimpleHTTPRequestHandlerTestCase.test_windows_colon=s7��
�
�
�v�y�y�&�&�
9�
9��>�>�0�0�1E�F�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1E�F�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1E�F�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1B�C�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1B�C�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1B�C�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1I�J�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1I�J�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1I�J�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1L�M�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1L�M�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5��>�>�0�0�1L�M�D��<�<��
�
�B�F�F�3�D����T�#4�#4�5�O:�
9�
9�
9�s�R1S/�/T	�8T	)r�r�r�r�r�r�)r&r'r(r)r@ror�r�r�r*r+r,s@rr�r�s"�����U�2�,
2�(6�(6rr�c�(`�\sQsQsnQsQsUsP!)�MiscTestCaseihc�*�,o.Qlo[[2FDWoUOQ2%fV27cJ"[[U2o[UQP2Q6XfJFUO	U2JY	UO[OU2P!)�
executabler�r'�http.server>r�r��
nobody_uid)r�rr��getattrr��assertCountEqual�__all__)rr��denylistr��
module_objects&    r�test_all�MiscTestCase.test_allisp����7����K�D����s�#�#�t�'7��#�F�D�1�M��}�l�D�9�]�J�����%� �	
���f�n�n�h�7rr)r&r'r(r)r�r*r+r,s@rr�r�hs����	8�	8rr�c��`�\sQsQsnQs\OQ2Q2s\OQ2Q2sQ	s	Q
s
\OQ2Q2s\OQ2Q2sQs
UsP!)�ScriptTestCaseiuc���[O[O[O[O[OQQ5Q5Q5Q5Q5!)c��Q!)r")r"rRrrrr�<lambda>�2ScriptTestCase.mock_server_class.<locals>.<lambda>}s��r)rT)rS)r�)�	__enter__)r�	MagicMockr`s&r�mock_server_class� ScriptTestCase.mock_server_classwsF���~�~�����.�.�!%���#�~�~�(7� �"���

�
	
rzbuiltins.printc���UO2o[OUPQ5UOUO[
O[
O12P!)N��ServerClass�bind�r�rr�r3�address_familyrS�AF_INET6rC�rr��mock_servers&& r�test_server_test_unspec�&ScriptTestCase.test_server_test_unspec�sC���,�,�.������$�7��
�
��&�&�
�_�_�f�n�n�-�	
rc���UO2o[OUQQ5UOUO[
O[
O12P!)rQr�r�r�s&& r�test_server_test_localhost�)ScriptTestCase.test_server_test_localhost�sC���,�,�.������+�>��
�
��&�&�
�_�_�f�n�n�-�	
rc���UOFDToUO2o[OV2Q5UO	UO
[O2JV	P!�r�)�
ipv6_addrsr�rr�r�r�rSr��rr�r�r�s&&  r�test_server_test_ipv6�$ScriptTestCase.test_server_test_ipv6�sD���O�O�D��0�0�2�K��K�K�K�;����[�7�7����I�$rc���UOFDToUO2o[OV2Q5UO	UO
[O2JV	P!r�)�
ipv4_addrsr�rr�r�r�rSrCr�s&&  r�test_server_test_ipv4�$ScriptTestCase.test_server_test_ipv4�sD���O�O�D��0�0�2�K��K�K�K�;����[�7�7����H�$rr)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334�::1)�0.0.0.0�8.8.8.8r)r&r'r(r)r�rr�r�r�r�r�r�r�r*r+r,s@rr�r�us�����
�
�Z�Z� �!�
�"�
�
�Z�Z� �!�
�"�
��J��J�
�Z�Z� �!�J�"�J�
�Z�Z� �!�I�"�Irr�c�L``�\sQsQsnQsPsQs\s\	OOs\
Q2s\
Q2sQsQ,sQ,sQ	,sQ
\Q\Q\Q
\Q\QQQPQPQP-	sU1QksQPQP-Qks\
O.Q2Q2s\
O.Q2Q2s\
O.Q2Q2s\
O.Q2Q2s\
O.Q2Q2s\
O.Q2Q2sQsQ s\	O@\!PIQ!2\
O.Q2Q"22s"\	O@\!PIQ!2\
O.Q2Q#22s#\	O@\!PIQ!2\
O.Q2Q$22s$\	O@\!PIQ!2\
O.Q2Q%22s%\
O.Q2Q&2s&\
O.Q2Q'2s'\
O.Q2Q(2s(\
O.Q2Q)2s)Q*s*Us+U9s,!)+�CommandLineTestCasei��@r'rdrerf�
--tls-cert�	--tls-key�--tls-password-file�HandlerClassr��protocol�portr��content_typerw�tls_cert�tls_key�tls_passwordc�t:�[RU_2[O2Um[UOQ29^tt^2oUO
UOO22PPP2UO[OUO2P!)%fhK<9h�r�)rBror��mktemp�tls_password_filer�r�r�r�rrrP)rr$rHs& �rro�CommandLineTestCase.setUp�ss���
��
��!)���!2���
�$�(�(�$�
/�
/�1�
�G�G�D�%�%�,�,�.�/�0����	�(�(�$�*@�*@�A�0�
/�s�	*B'�'B7	�0B7	�stdoutr
c	��Ue[2LSoUe[2LSo[OU29^tt^2[OU29^tt^2[O
U2PPP2PPP2UO
2UO
21!)%fhK89h)%fhKC9hr)r	rU�redirect_stdout�redirect_stderrr�_mainr�)rr�r
rs&$$*r�invoke_httpd� CommandLineTestCase.invoke_httpd�s���%�~���6��%�~���6��
�
'�
'��
/�
/��&�&�v�.�.��L�L���
/�0���� �&�/�/�"3�3�3�
/�.��0�
/�s0�B9�B&	�6B9�&B6
�/B6
�1B9�9C		�C		zhttp.server.testc	�F�QQ,oSFD�oUOUQ59^tt^2UO[U22UO[	UQ5*oUO
Q-U@UO
2PPP2J�	P!)%fhJ�9h)r�i��)r�r)rzr�rxr�dict�assert_called_once_with�
reset_mock)r�	mock_func�portsr��	call_argss&&   r�test_port_flag�"CommandLineTestCase.test_port_flag�sy���u�
���D����4��(�(��!�!�#�d�)�,� �I�I��$��7�	��1�1�>�I�>��$�$�&�	)�(��(�(�(�s�AB	�B 
�B 
c�*�QQ,o,QNoSFDnoSFDdoUOVEQ59^tt^2UOVE2UOQ-UO@UO	2PPP2Jf	Jp	P!)%fhJ9h)z-dz--directory)�flagr�)
�.rz\barr�zC:\zC:\foozC:\barz
/home/userz
./foo/foo2z
D:\foo\barr)rzr�r�rr�)rr��options�directoriesrr�s&&    r�test_directory_flag�'CommandLineTestCase.test_directory_flag�s}����'��C���D�(�	��\�\�t�\�A�A��%�%�d�6��5�5�B��	�	�B��(�(�*�B�A�)��A�A�A�s�?B
�B�
Bc�P�QQ,o,QNoSFD�oSFDwoUOVEQ59^tt^2UOVE2UO[UQ5*oUOQ-U@UO2PPP2Jy	J�	P!)%fhJ�9h)�-bz--bind)r�bind_address)r�)rQrr�r�r�r�rzr�rr�r�r�)rr�r�bind_addressesrrr�s&&     r�test_bind_flag�"CommandLineTestCase.test_bind_flag�s�����"��0���D� .���\�\�t�\�G�G��%�%�d�9� $�	�	�D�l�,C� C�I��5�5�B�	�B��(�(�*�	H�G�!/��G�G�G���AB
�B%�B%c�P�QQ,o,QNoSFD�oSFDwoUOVEQ59^tt^2UOVE2UO[UQ5*oUOQ-U@UO2PPP2Jy	J�	P!)%fhJ�9h)z-pz
--protocol)rr�)r�)r'r�zHTTP/2.0zHTTP/3.0rr)rr�r�	protocolsrr�r�s&&     r�test_protocol_flag�&CommandLineTestCase.test_protocol_flag�s�����&��D�	��D�%���\�\�t�\�?�?��%�%�d�5� $�	�	�D�(�,C� C�I��5�5�B�	�B��(�(�*�	@�?�&��?�?�?�rc	�6�,QNoSFDxoUOUQ59^tt^2UOQU2UO[UQ5*oUOQ-U@UO2PPP2Jz	P!)%fhJ�9h)r�)r�z--content-type)r�z
text/plainzapplication/jsonrr)rr��
content_typesr�r�s&&   r�test_content_type_flag�*CommandLineTestCase.test_content_type_flagsu��G�
�)�L����<��8�8��!�!�"2�L�A� �I�I��,�(G�G�	��1�1�>�I�>��$�$�&�	9�8�*�8�8�8�s�AB	�B
�B
c��UOoUOQQQQQQ2UOQ-U@UO2P!)�--header�h1�v1�-H�h2�v2r)rr�r�r�)rr�r�s&& r�test_header_flag�$CommandLineTestCase.test_header_flags@���I�I�	����*�d�D�$��d�C��)�)�6�I�6����rc��UO[29^tt^2UOQQ2PPP2P!)%fhP!9h)rr�rB�
SystemExitr�r`s&r�#test_extra_header_flag_too_few_args�7CommandLineTestCase.test_extra_header_flag_too_few_argss2��
�
�
�z�
*�
*����j�$�/�+�
*�
*�
*�s�<�A
	�A
	c��UO[29^tt^2UOQQQQ2PPP2P!)%fhP!9h)rrrrr#r`s&r�$test_extra_header_flag_too_many_args�8CommandLineTestCase.test_extra_header_flag_too_many_argss6��
�
�
�z�
*�
*����j�$��d�;�+�
*�
*�
*�s�>�A	�A	r`c
�@�UOFD�oUOFDwoUOV OV0O2UO
QUOQUO-*oUOQ-U@UO2Jy	J�	P!)r�r�r)�tls_cert_options�tls_key_optionsr�r�r�rr�r�)rr��tls_cert_option�tls_key_optionr�s&&   r�test_tls_cert_and_key_flags�/CommandLineTestCase.test_tls_cert_and_key_flags!s��� $�4�4�O�"&�"6�"6���!�!�/�=�=�"0�,�,�@� �I�I���
�
��t�|�|�)��	��1�1�>�I�>��$�$�&�#7� 5rc��UOFD�oUOFD�oUOFD�oUOUUOUUO
UUO2UOQUOQUO
QUO-*oUOQ-U@UO2J�	J�	J�	P!)r�r�r�r)r+r,�tls_password_optionsr�r�r�r�rr�r�r�)rr�r-r.�tls_password_optionr�s&&    r�(test_tls_cert_and_key_and_password_flags�<CommandLineTestCase.test_tls_cert_and_key_and_password_flags/s��� $�4�4�O�"&�"6�"6��+/�+D�+D�'��%�%�o�&*�m�m�&4�&*�l�l�&9�&*�&<�&<�>�!%�	�	�"�D�M�M�!�4�<�<�&��(9�(9�-�!�I�
�5�5�B�	�B��(�(�*�,E�#7� 5rc	���UOFDToUO[29^tt^2UOV O2PPP2UO2JV	UOFDToUO[29^tt^2UOV0O2PPP2UO2JV	P!)%fhK�9h)%fhK99hr)r,rBr$r�r�r�r2r�)rr�r.r3s&&  r�test_missing_tls_cert_flag�.CommandLineTestCase.test_missing_tls_cert_flagCs���#�2�2�N��"�"�:�.�.��!�!�.�,�,�?�/�� � �"�3�
$(�#<�#<���"�"�:�.�.��!�!�"5�7H�7H�I�/�� � �"�$=�	/�.��
/�.�s#�C	�C!	�C
�C
�!C1
�*C1
c��QoUOFD[oUOFDGoUO[29^tt^2UO	UUO
UU2PPP2JI	J]	P!)%fhJb9h)�non_existent_file)r2r+rBr$r�r�)rr�r:r3r-s&&   r�test_invalid_password_file�.CommandLineTestCase.test_invalid_password_filePsk��0��#'�#<�#<��#'�#8�#8���&�&�z�2�2��%�%�o�&*�m�m�&9�&7�9�3�2�$9�$=�2�2�2�s�A2
�2B�;Bc��UO2UOQ-UO@UO2P!)Nr)r�r�rr�)rr�s&&r�test_no_arguments�%CommandLineTestCase.test_no_arguments\s/�������)�)�6�D�I�I�6����rc
�b�QQ,oSFD�o[2[2qTUO[29^tt^2UOV4UQ5PPP2UO	QUO22UO
UO2P2J�	P!)%fhKV9h)z-hz--help�r�r
�usage)r	rBr$r�r3r�r�)rr�r�optionr�r
s&&    r�test_help_flag�"CommandLineTestCase.test_help_flagbs}����"���F�%�Z���F��"�"�:�.�.��!�!�&��!�G�/��M�M�'�6�?�?�#4�5����V�_�_�.��3��.�.�s�B	�B.
�'B.
c�F�[2[2q2UO[29^tt^2UOQV#Q5PPP2UO	UO2P2UO
QUO22P!)%fhKR9h)z--unknown-flagrAr�)r	rBr$r�r�r�r3)rr�r�r
s&&  r�test_unknown_flag�%CommandLineTestCase.test_unknown_flaglsl��!��X�Z��
�
�
�z�
*�
*����.�v��M�+�������*�B�/��
�
�g�v���0�1�+�
*�s�B�B 	�B 	c	��[O,QN2UOvq#UQ*o[O2o[O
2oVVmUOU[O
2Q2UO[O[OU[OQQ,QQ,,Q5P!)rr��k=v�k2=v2:v3 v4r�r)r�r�)rr�rJrr�rK�8080)
rr�r�rr�r��RequestHandlerClass�finish_requestr��ANY)r�	mock_testr�r��server_class�mock_handler_classr�s&&     r�test_extra_response_headers_arg�3CommandLineTestCase.test_extra_response_headers_argts���	���R�	
��'�'�	���m�,��!�^�^�-���i�i�k��*<�'��#�#�K�����k�J��2�2��H�H�d�h�h���h�h��u�%��m�'D�$�	3�	
r)r�)-r&r'r(r)�default_port�default_bind�default_protocolr�default_handlerr�rrO�default_serverrAr�r�r�r+r,r2rror�r�rrrrrr r%r(r�r<r/r4r7r;r>rDrGrSr*r+rZr[s@@rr�r��s������L��L�!��.�O��]�]�&�&�N��^�,�H��M�*�G��L�$�~��"�m�O�1�2�����~��$������2��D��4���
�D�B�4��4�d�4�
�Z�Z�"�#�'�$�'�
�Z�Z�"�#�
+�$�
+�
�Z�Z�"�#�
+�$�
+�
�Z�Z�"�#�	+�$�	+�
�Z�Z�"�#�'�$�'�
�Z�Z�"�#��$��0�<��_�_�S�D�[�.�1�	�Z�Z�"�#�
'�$�2�
'��_�_�S�D�[�.�1�	�Z�Z�"�#�+�$�2�+�$�_�_�S�D�[�.�1�	�Z�Z�"�#�	#�$�2�	#��_�_�S�D�[�.�1�	�Z�Z�"�#�9�$�2�9�
�Z�Z�"�#��$��

�Z�Z�"�#�4�$�4�
�Z�Z�"�#�2�$�2�
�Z�Z�"�#�
�$�
�
rr�c��``�\sQsQsn\O
] 2sQs\Q2s	\Q2s
QsQsU1Qks
QQksQ	sQ
sQs\O&\PIQ2Q
2sQsUsU9s!)�CommandLineRunTimeTestCasei��served_filenamerdressomepass�ssl_key_passwordc��:�[RU_2[O2oUO	U2o[UOQ29^tt^2oUOUO2PPP2[UOQ29^tt^2oUOUO2PPP2P!)%fhKT9h)%fhP!9hr�)rBror�temp_cwdrFr�r\r��served_datar�r�)r�server_dir_context�
server_dirr$rHs&   �rro� CommandLineRunTimeTestCase.setUp�s����
��
��&�/�/�1���&�&�'9�:�
�
�$�&�&��
-�
-��
�G�G�D�$�$�%�.�
�$�(�(�$�
/�
/�1�
�G�G�D�%�%�&�0�
/�.�
-��
/�
/�
/�s$�B=�C�=C
	�C
	�C!	�C!	c���[OOUQQ5o[OOV2Q59^tt^2oUO	2ttPPP2!)%fhP!9h)rvrvrn)r
r|�Request�urlopenr$)rr�ro�reqr�s&&&  r�
fetch_file�%CommandLineRunTimeTestCase.fetch_file�sM���n�n�$�$�T�%�$�8��
�^�^�
#�
#�C�
#�
9�
9�S��8�8�:�:�
9�
9�
9�s�A&�&A7	�/A7	c���[OQU2oUeQ!UO]2O2UO]2[	UO]221!)z'Serving (HTTP|HTTPS) on (.+) port (\d+))NNN)r�r�group�lowerr�)rr�rs&& r�parse_cli_output�+CommandLineRunTimeTestCase.parse_cli_output�sQ���	�	�D�f�M���=�#�#��{�{�1�~�#�#�%�u�{�{�1�~�s�5�;�;�q�>�7J�J�Jrc���UOO2O2o[O%c[2[QU2UO
U2V#U16H!)z4Check that the server has been successfully started.zpython -m http.server: )r��readline�stripr�verbose�printrm)r�procr�r�r��lines&&&&& r�wait_for_server�*CommandLineRunTimeTestCase.wait_for_server�sQ���{�{�#�#�%�+�+�-���?�?�?��G��+�T�2��$�$�T�*�x�t�.D�D�Drc�z�Q[2q![QQQ[U2QU]P	Q5oUO[U2UOUO
2UO
UOUQV22UOQUQUQ	UO02oUOV@O2P!)
r�-u�-mr�r
��bufsizermrxzhttp://�:r�)rrrxrr�	terminaterrvrhr\r�r`)rr�r�rtr�s&    r�test_http_client�+CommandLineRunTimeTestCase.test_http_client�s��� �"2�"4�d��D�$�
�s�4�y�$��$%�D�2������T�*�������'�����,�,�T�6�4�F�G��o�o���v�Q�t�f�A�d�6J�6J�5K�L�M������.�.�/rr`c�*�[O2oP
Um[OUmQ[2q2[
QQQ[U2QUQUOQUOQUO]P	Q	5oUO[U2UOUO2UOUOUQ
V#22QUQUQ
UO 0oUO#VQQ5oUO%V`O&2P!)Frryrzr�r
r�r�r�r{�httpszhttps://r}r�rn)r<�create_default_context�check_hostname�	CERT_NONE�verify_moderrrxr�r�r�rrr~rrvr\rhr�r`)rror�r�rtr\r�s&      r�test_https_client�,CommandLineRunTimeTestCase.test_https_client�s����,�,�.��!&���!�m�m��� �"2�"4�d��D�$�
�s�4�y�$��(�$�-�-�'����1�4�3I�3I�$%�D�	2��
	
����T�*�������'�����,�,�T�7�D�G�H����a��v�Q�t�';�';�&<�=���o�o�c�o�3������.�.�/rrr)r&r'r(r)ri�urandomr`r\rAr�r�r�r�rorhrmrvrr�r�r<r�r*r+rZr[s@@rr[r[�sy�����*�*�R�.�K�'�O��^�,�H��M�*�G��L�*��'��
K�E�0��_�_�S�D�[�.�1�0�2�0�0rr[c�(`�\sQsQsnQsQsUsP!)�
TestModulei�c���UO[Q29^tt^2o[[OQ2PPP2UOWO[2P!)%fhK29h)zA'__version__' is deprecated and slated for removal in Python 3.20�__version__)�assertWarnsRegex�DeprecationWarningr�rxrr�r"r_)r�cms& r�test_deprecated__version__�%TestModule.test_deprecated__version__�sT��
�
"�
"��O�
�
���D�K�K��/�	
�
	
������h�/�
�
�s�A%�%A5	�.A5	r)r&r'r(r)r�r*r+r,s@rr�r��s����0�0rr�c�x�[O[O[O22P!r)r��addModuleCleanuprir�r�rrr�setUpModuler��s�����b�h�h��	�	��4r�__main__)NNrP)Sr@�http.serverrrrrrxrrrUrirSr?r�r�r�r��
email.messager��email.utilsr�http.client�urllib.parser
�urllib.requestr�r|r�rIr�r�iorr	�	_colorizer
r�r�test.supportrr
rrr�test.support.script_helperrr�test.support.socket_helperrr<�ImportError�requires_working_socketrr/r8�TestCaser:rJrGrdr�r8rAr�rbr��force_colorized_test_classr�r�r�r�r�r�r�r�r�r�r�r[r�r�r&�mainrrr�<module>r�su�����#��	�
�
�	�
��
������������ ������A�7������t�,���	�-�/G�	��

��(�
�.�h�'�'�.��y�'�'��:-�8�$�$�-�2a(�\�a(�H%'�<�%'�PF�
������n�-�<E�l�<E�.�<E�~"B�L�"B�J	�#�#�?�-J�?�$�?�@*�+C�*�j�|�j�Z

�7�
�(�(@��
�
� KQ�X�%6�%6�KQ�\W6�x�'8�'8�W6�t
8�8�$�$�
8�9I�X�&�&�9I�xY
�(�+�+�Y
�x@0��!2�!2�@0�F0��"�"�0�5��z���M�M�O���e5��
�C��s�I�I,�%I,�+I,

Youez - 2016 - github.com/yon3zu
LinuXploit