403Webshell
Server IP : 54.37.205.81  /  Your IP : 216.73.216.76
Web Server : nginx/1.22.1
System : Linux vps-249481fa 6.1.0-50-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-07-02) x86_64
User : debian ( 1000)
PHP Version : 8.2.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/tornado/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/tornado/test/__pycache__/httpserver_test.cpython-311.pyc
�

���ic�����ddlmZmZddlmZmZmZmZmZm	Z	ddl
mZddlm
Z
ddlmZddlmZmZmZmZddlmZddlmZdd	lmZdd
lmZddlmZddlm Z m!Z!m"Z"m#Z#m$Z$dd
l%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl-Z-ddl.Z.ddl/Z/ddl0Z0ddl1Z1ddl2Z2ddl3Z3ddl4Z4ddl5Z5ddl6Z6ddl7Z8ddl9m:Z:ddl;Z;e;j<rddl;m=Z=m>Z>d�Z?Gd�de ��Z@Gd�de)��ZAe6jBeCe3dd��dkd��ZDGd�de!��ZEGd�deF��ZGGd �d!eEeG��ZHeDGd"�d#eEeG����ZIeDGd$�d%eEeG����ZJGd&�d'eEeG��ZKGd(�d)e6jL��ZMGd*�d+e)��ZNGd,�d-e ��ZOGd.�d/e)��ZPGd0�d1e)��ZQGd2�d3e)��ZRGd4�d5eR��ZSGd6�d7e ��ZTGd8�d9e ��ZUGd:�d;e@��ZVGd<�d=e!e@��ZWGd>�d?e@��ZXe6jBeYe2d@��p
e4jZdAkdB��e6jBe4jZdCkdD��GdE�dFe"������Z[GdG�dHe ��Z\GdI�dJe ��Z]GdK�dLe]e ��Z^GdM�dNe]e ��Z_GdO�dPe ��Z`GdQ�dRe ��Zae&GdS�dTe ����ZbGdU�dVe ��ZcGdW�dXe ��ZddS)Y�)�gen�netutil)�json_decode�json_encode�utf8�_unicode�recursive_unicode�
native_str)�HTTP1Connection)�	HTTPError)�
HTTPServer)�HTTPHeaders�HTTPMessageDelegate�HTTPServerConnectionDelegate�ResponseStartLine)�IOStream)�Event)�gen_log)�ssl_options_to_context��SimpleAsyncHTTPClient)�AsyncHTTPTestCase�AsyncHTTPSTestCase�
AsyncTestCase�	ExpectLog�gen_test)�skipOnTravis)�Application�RequestHandler�stream_request_body)�closingN)�BytesIO)�Dict�Listc�����K�g�G��fd�dt��}t|d���|��}��|���d{V��|j|jd����fS)zaReads an HTTP response from `stream` and returns a tuple of its
    start_line, headers and body.c�*��eZdZd�Z�fd�Z�fd�ZdS)�"read_stream_body.<locals>.Delegatec�"�||_||_dS�N)�headers�
start_line��selfr+r*s   �>/usr/lib/python3/dist-packages/tornado/test/httpserver_test.py�headers_receivedz3read_stream_body.<locals>.Delegate.headers_received<s��"�D�L�(�D�O�O�O�c�2����|��dSr))�append)r-�chunk�chunkss  �r.�
data_receivedz0read_stream_body.<locals>.Delegate.data_received@s����M�M�%� � � � � r0c�0������dSr))�detach�r-�conns �r.�finishz)read_stream_body.<locals>.Delegate.finishCs����K�K�M�M�M�M�Mr0N)�__name__�
__module__�__qualname__r/r5r:)r4r9s��r.�Delegater';sV�������	)�	)�	)�	!�	!�	!�	!�	!�	�	�	�	�	�	�	r0r>TNr0)rr�
read_responser+r*�join)�streamr>�delegater4r9s   @@r.�read_stream_bodyrC6s��������F�	�	�	�	�	�	�	�	�&�	�	�	��6�4�(�(�D��x�z�z�H�
�
�
�X�
&�
&�&�&�&�&�&�&�&���� 0�#�(�(�6�2B�2B�B�Br0c��eZdZdZd�Zd�ZdS)�HandlerBaseTestCaseNc�:�td|jjfg��S�N�/)r�	__class__�Handler�r-s r.�get_appzHandlerBaseTestCase.get_appOs���S�$�.�"8�9�:�;�;�;r0c�l�|j|i|��}|���t|j��Sr))�fetch�rethrowr�body)r-�args�kwargs�responses    r.�
fetch_jsonzHandlerBaseTestCase.fetch_jsonRs:���4�:�t�.�v�.�.���������8�=�)�)�)r0)r;r<r=rJrLrT�r0r.rErELs7�������G�<�<�<�*�*�*�*�*r0rEc�"�eZdZdd�Zd�Zd�ZdS)�HelloWorldRequestHandler�httpc��||_dSr))�expected_protocol)r-�protocols  r.�
initializez#HelloWorldRequestHandler.initializeYs��!)����r0c�x�|jj|jkrtd���|�d��dS)Nzunexpected protocol�Hello world)�requestr[rZ�	Exceptionr:rKs r.�getzHelloWorldRequestHandler.get\s<���<� �D�$:�:�:��1�2�2�2����M�"�"�"�"�"r0c�d�|�dt|jj��z��dS)NzGot %d bytes in POST)r:�lenr_rPrKs r.�postzHelloWorldRequestHandler.postas-�����*�S���1B�-C�-C�C�D�D�D�D�Dr0N)rX)r;r<r=r\rardrUr0r.rWrWXsK������*�*�*�*�#�#�#�
E�E�E�E�Er0rW�OPENSSL_VERSION_INFO)rr)�rz(old version of ssl module and/or opensslc��eZdZd�ZdS)�BaseSSLTestc�N�tdttd���fg��S)NrH�https�r[)rrW�dictrKs r.rLzBaseSSLTest.get_appqs&���S�":�D�'�<R�<R�<R�S�T�U�U�Ur0N)r;r<r=rLrUr0r.rhrhps(������V�V�V�V�Vr0rhc�r�eZdZd�Zd�Zdejfd�Zdejfd�Zdejfd�Z	dejfd�Z
dS)	�SSLTestMixinc�d�tdd|���itj����S)N�ssl_versionrU)rl�get_ssl_versionr�default_ssl_optionsrKs r.�get_ssl_optionszSSLTestMixin.get_ssl_optionsvs>���
�
��,�,�.�.�
� �4�6�6�
�
�	
r0c��t���r))�NotImplementedErrorrKs r.rqzSSLTestMixin.get_ssl_version|s��!�#�#�#r0r-c�f�|�d��}|�|jd��dS)NrH�Hello world�rN�assertEqualrP�r-rSs  r.�test_sslzSSLTestMixin.test_ssls/���:�:�c�?�?��������7�7�7�7�7r0c�r�|�ddddz���}|�|jd��dS)NrH�POST�Ai���methodrPsGot 5000 bytes in POSTrxrzs  r.�test_large_postzSSLTestMixin.test_large_post�s<���:�:�c�&�s�T�z�:�B�B�������(A�B�B�B�B�Br0c	��ttd��5ttdd���5|�ttf��5|�|�d���dd��ddd	�
��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)Nz(SSL Error|uncaught exception)zUncaught exceptionF��requiredrH�https:�http:�T)�request_timeout�connect_timeout�raise_error)rr�assertRaises�IOErrorrrN�get_url�replacerKs r.�test_non_ssl_requestz!SSLTestMixin.test_non_ssl_request�s����w� @�
A�
A�	�	��7�$8�5�I�I�I�
�
��&�&���';�<�<����J�J����S�)�)�1�1�(�G�D�D�(,�(,�$(�	����������������������
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	sY�C�"B4�AB�B4�B!�!B4�$B!�%B4�(C�4B8	�8C�;B8	�<C�C�Cc��ttd��5}|�ttf��5|�|�d���dd��d���ddd��n#1swxYwYddd��n#1swxYwY|�|j	��dS)Nz	SSL ErrorrHr�r�T)r�)
rrr�r�rrNr�r��assertFalse�logged_stack)r-�
expect_logs  r.�test_error_loggingzSSLTestMixin.test_error_logging�s-��
�w��
,�
,�	�
��"�"�G�Y�#7�8�8�
�
��
�
��L�L��%�%�-�-�h��@�@�d�����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
	
����0�1�1�1�1�1s4�"B�?B�7B�B	�B�
B	�B�B�!BN)r;r<r=rsrq�typing�Anyr{r�r�r�rUr0r.rnrnus�������
�
�
�$�$�$�8�v�z�8�8�8�8�C�f�j�C�C�C�C��6�:�����2���2�2�2�2�2�2r0rnc��eZdZd�ZdS)�
SSLv23Testc��tjSr))�ssl�PROTOCOL_SSLv23rKs r.rqzSSLv23Test.get_ssl_version�s���"�"r0N�r;r<r=rqrUr0r.r�r��s#������#�#�#�#�#r0r�c��eZdZd�ZdS)�	SSLv3Testc��tjSr))r��PROTOCOL_SSLv3rKs r.rqzSSLv3Test.get_ssl_version�����!�!r0Nr�rUr0r.r�r���#������"�"�"�"�"r0r�c��eZdZd�ZdS)�	TLSv1Testc��tjSr))r��PROTOCOL_TLSv1rKs r.rqzTLSv1Test.get_ssl_version�r�r0Nr�rUr0r.r�r��r�r0r�c��eZdZd�ZdS)�SSLContextTestc��ttj|��d���}t|tj��sJ�|S)NT)�server_side)rrrs�
isinstancer��
SSLContext)r-�contexts  r.rszSSLContextTest.get_ssl_options�sE��(��.�t�4�4�$�
�
�
���'�3�>�2�2�2�2�2��r0N)r;r<r=rsrUr0r.r�r��s#����������r0r�c��eZdZd�Zd�ZdS)�BadSSLOptionsTestc�l�t��}|�tt|ddi���dS)N�keyfilez/__missing__.crt��ssl_options)rr��KeyErrorr
)r-�applications  r.�test_missing_argumentsz(BadSSLOptionsTest.test_missing_arguments�sD��!�m�m��������"�$6�7�		�	
�	
�	
�	
�	
r0c���t��}tj�t��}tj�|d��}tj�|d��}|�ttft|ddi���|�ttft||dd����t|||d����dS)	z6A missing SSL key should cause an immediate exception.ztest.crtztest.key�certfilez/__mising__.crtr�z/__missing__.key)r�r�N)
r�os�path�dirname�__file__r@r��
ValueErrorr�r
)r-r��
module_dir�existing_certificate�existing_keys     r.�test_missing_keyz"BadSSLOptionsTest.test_missing_key�s���"�m�m���W�_�_�X�.�.�
�!�w�|�|�J�
�C�C���w�|�|�J�
�;�;�����
��!���#�%6�7�		�	
�	
�	
�	
���
��!���0�-���		�	
�	
�	
�	��%9�l�S�S�	
�	
�	
�	
�	
�	
r0N)r;r<r=r�r�rUr0r.r�r��s2������
�
�
�
�
�
�
�
r0r�c��eZdZd�ZdS)�MultipartTestHandlerc	��|�|jjd|�d��|jjddjt
|jjddd��d���dS)NzX-Header-Encoding-Test�argument�filesrrP)�headerr��filename�filebody)r:r_r*�get_argumentr�r�rrKs r.rdzMultipartTestHandler.post�s������,�.�/G�H� �-�-�j�9�9� �L�.�w�7��:�C�$�T�\�%7��%@��%C�F�%K�L�L�	
�
�	
�	
�	
�	
�	
r0N�r;r<r=rdrUr0r.r�r��s#������
�
�
�
�
r0r�c�D�eZdZd�Zd�Zd	d�Zd�Zd�Zed���Z	dS)
�HTTPConnectionTestc�&�dtfdtfgS)Nz
/multipart�/hello)r�rWrKs r.�get_handlerszHTTPConnectionTest.get_handlers�s��
�/�0�
�/�0�
�	
r0c�D�t|�����Sr))rr�rKs r.rLzHTTPConnectionTest.get_app�s���4�,�,�.�.�/�/�/r0�
c����tttj������5��j���fd�����|�|tdt|��z��gz��|z|z|z���j��fd���\}}}|cddd��S#1swxYwYdS)Nc�V����d����f��S�N�	127.0.0.1)�connect�
get_http_port�r-rAs��r.�<lambda>z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>s$�������T�5G�5G�5I�5I�'J�K�K�r0zContent-Length: %dc�"��t���Sr))rC)rAs�r.r�z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>s���(��0�0�r0)	r!r�socket�io_loop�run_sync�writer@rrc)r-r*rP�newliner+rAs`    @r.�	raw_fetchzHTTPConnectionTest.raw_fetch�s8����
�X�f�m�o�o�.�.�
/�
/�
	�6��L�!�!�K�K�K�K�K�
�
�
�
�L�L����W��-A�C��I�I�-M�(N�(N�'O�O�P�P�������
�
�
�)-��(=�(=�0�0�0�0�)�)�%�J����
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	����
	�
	�
	�
	�
	�
	s�BC�C�Cc���|�gd�d�ddd�d��dd�d	��dd
�d��ddg	����}t|��}|�d|d
��|�d|d��|�d|d��|�d
|d��dS)N)sPOST /multipart HTTP/1.0s6Content-Type: multipart/form-data; boundary=1234567890sX-Header-encoding-test: �r�s-Content-Disposition: form-data; name=argumentr0�ázutf-8s--1234567890u;Content-Disposition: form-data; name="files"; filename="ó"r�ús--1234567890--�ér�r��ór�r�)r�r@�encoderry�r-rS�datas   r.�test_multipart_formz&HTTPConnectionTest.test_multipart_forms
���>�>�
�
�
�

�L�L�D���$�$�W�-�-�#�V�]�]������$�$�W�-�-�%���
�
�

�
��,�8�$�$������D��N�3�3�3�����D��$4�5�5�5�����D��$4�5�5�5�����D��$4�5�5�5�5�5r0c�n�dD]1}|�dgd|���}|�|d���2dS)N)r��
sGET /hello HTTP/1.0r0)r�rw)r�ry)r-r�rSs   r.�
test_newlinesz HTTPConnectionTest.test_newlines.sO��'�	7�	7�G��~�~�'=�&>��W�~�U�U�H����X�~�6�6�6�6�	7�	7r0c#�`K�ttj����}|�d|���f��V�|�d�gd�����V�|�d��V�}|�|�d��|��|�d��|�d��V�}|�|�d��|��|�d��V�}tj
t|�d������}|�
t|d	����V�}|�|d
��|���dS)Nr�r�)sPOST /hello HTTP/1.1sContent-Length: 1024sExpect: 100-continuesConnection: closer��

s
HTTP/1.1 100 saaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�HTTP/1.1 200�latin1�Content-LengthsGot 1024 bytes in POST)rr�r�r�r�r@�
read_until�
assertTrue�
startswithr�parser
�decode�
read_bytes�intry�close)r-rAr��
first_line�header_datar*rPs       r.�test_100_continuez$HTTPConnectionTest.test_100_continue4s�����
�&�-�/�/�*�*���n�n�k�4�+=�+=�+?�+?�@�A�A�A�A�A��l�l��L�L����
�
�

�

�
	
�
	
�
	
��&�&�{�3�3�3�3��������(8�9�9�4�@�@�@����[�!�!�!�!�,�,�W�5�5�5�5�
����
�-�-�o�>�>�
�K�K�K�"�-�-�k�:�:�:�:���#�J�{�/A�/A�(�/K�/K�$L�$L�M�M���&�&�s�7�3C�+D�'E�'E�F�F�F�F������8�9�9�9��������r0N)r�)
r;r<r=r�rLr�r�r�rr�rUr0r.r�r��s������
�
�
�0�0�0����� 6�6�6�>7�7�7�����X���r0r�c��eZdZd�Zd�ZdS)�EchoHandlerc�^�|�t|jj����dSr)�r�r	r_�	argumentsrKs r.razEchoHandler.getS�(���
�
�$�T�\�%;�<�<�=�=�=�=�=r0c�^�|�t|jj����dSr)rrKs r.rdzEchoHandler.postVrr0N�r;r<r=rardrUr0r.r�r�Rs2������>�>�>�>�>�>�>�>r0r�c�&�eZdZd�Zd�Zd�Zd�ZdS)�TypeCheckHandlerc	��i|_dtfdtfdtfdtfdtfdtfdtfdtfg}|D]/\}}|�|t|j|��|���0|�d	t|jj�����d
t��|�dt|jj�����d
t��|�dt|jj	�����d
t��|�d
t|jj	�����d
j
t��|�dt|jj�����d
t��|�dt|jj�����d
d
t��dS)Nr��uri�version�	remote_ipr[�hostr��query�
header_keyr�header_value�
cookie_key�cookie_value�arg_key�	arg_value)
�errors�str�
check_type�getattrr_�listr*�keys�values�cookies�valuer�bytes)r-�fields�field�
expected_types    r.�preparezTypeCheckHandler.prepare[s������
�s�O�
�C�L�
���
�#��
���
�S�M�
�S�M�
�c�N�	
��%+�	P�	P� �E�=��O�O�E�7�4�<��#?�#?��O�O�O�O�����d�4�<�+?�+D�+D�+F�+F�&G�&G��&J�C�P�P�P������T�\�-A�-H�-H�-J�-J�(K�(K�A�(N�PS�T�T�T�����d�4�<�+?�+D�+D�+F�+F�&G�&G��&J�C�P�P�P�����D���!5�!<�!<�!>�!>�?�?��B�H�#�	
�	
�	
�
	
���	�4���(>�(C�(C�(E�(E�#F�#F�q�#I�3�O�O�O�����T�$�,�*@�*G�*G�*I�*I�%J�%J�1�%M�a�%P�RW�X�X�X�X�Xr0c��|�d|jjt��|�|j��dS)NrP)rr_rPrr�rrKs r.rdzTypeCheckHandler.postvs7�������� 1�5�9�9�9��
�
�4�;�����r0c�:�|�|j��dSr))r�rrKs r.razTypeCheckHandler.getzs���
�
�4�;�����r0c�T�t|��}||krd|�d|��|j|<dSdS)Nz	expected z, got )�typer)r-�name�objr �actual_types     r.rzTypeCheckHandler.check_type}s@���3�i�i���K�'�'�'�9F����� T�D�K�����(�'r0N)r;r<r=r!rdrarrUr0r.rrZsX������Y�Y�Y�6 � � � � � �U�U�U�U�Ur0rc��eZdZd�ZdS)�PostEchoHandlerc�r�|�t|�d�������dS)Nr�)�echo)r�rlr�)r-�	path_argss  r.rdzPostEchoHandler.post�s3���
�
�4�T�.�.�v�6�6�7�7�7�8�8�8�8�8r0Nr�rUr0r.r*r*�s#������9�9�9�9�9r0r*c��eZdZdd�ZdS)�PostEchoGBKHandlerNc�p�	|�d��S#t$rtdd|z���wxYw)N�gbk�zinvalid gbk bytes: %r)r�r`r)r-rr&s   r.�decode_argumentz"PostEchoGBKHandler.decode_argument�sO��	B��<�<��&�&�&���	B�	B�	B��C�!8�5�!@�A�A�A�	B���s��5r))r;r<r=r3rUr0r.r/r/�s.������B�B�B�B�B�Br0r/c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�HTTPServerTestc�p�tdtfdtfdtfdtfdtfg��S)N�/echo�
/typecheck�
//doubleslashz
/post_utf8z	/post_gbk)rr�rr*r/rKs r.rLzHTTPServerTest.get_app�sC����+�&��/�0� �+�.���/��0�1�
�
�
�	
r0c��|�d��}t|j��}|�|ddgi��dS)Nz/echo?foo=%C3%A9�foor��rNrrPryr�s   r.�test_query_string_encodingz)HTTPServerTest.test_query_string_encoding�sF���:�:�0�1�1���8�=�)�)���������4�5�5�5�5�5r0c��|�d��}t|j��}|�|dddgi��dS)Nz/echo?foo=&foo=r;�r<r�s   r.�test_empty_query_stringz&HTTPServerTest.test_empty_query_string�sH���:�:�/�0�0���8�=�)�)��������c�
�3�4�4�4�4�4r0c��|�ddd���}t|j��}|�|dgdgd���dS)Nr7r}z	foo=&bar=rr?)r;�barr<r�s   r.�test_empty_post_parametersz)HTTPServerTest.test_empty_post_parameters�sP���:�:�g�f�;�:�G�G���8�=�)�)���������u�=�=�>�>�>�>�>r0c��ddi}|�d|���}t|j��}|�|i��|�ddd|���}t|j��}|�|i��dS)N�Cookie�foo=barz/typecheck?foo=bar�r*r8r}�r�rPr*r<)r-r*rSr�s    r.�
test_typeszHTTPServerTest.test_types�s����Y�'���:�:�2�G�:�D�D���8�=�)�)������r�"�"�"��:�:���i���
�
���8�=�)�)������r�"�"�"�"�"r0c��|�d��}|�d|j��|�t|j��i��dS)Nr9��)rNry�coderrPrzs  r.�test_double_slashz HTTPServerTest.test_double_slash�sS���:�:�o�.�.������h�m�,�,�,�����X�]�3�3�R�8�8�8�8�8r0c
��ddi}d}dD]�}dD]�}|�||���5|�|��}|r2tj�|���d��}|�d|zd	|d
|z���}|�t|j��d|i��ddd��n#1swxYwY��dS)
NzContent-Typez!application/x-www-form-urlencodeduchinese: 张三)rr1)TF)�enc�quote�asciiz/post_r}sdata=)r�r*rPr,)	�subTestr��urllibr�rPrNryrrP)r-r*�uni_textrOrP�bin_textrSs       r.�test_post_encodingsz"HTTPServerTest.test_post_encodings�sT��!�#F�G��*��"�	U�	U�C�&�
U�
U���\�\�c��\�7�7�
U�
U�'���s�3�3�H��P�#)�<�#5�#5�h�#?�#?�#F�#F�w�#O�#O��#�z�z� �3��%� '�&��1�	 *� � �H��$�$�[���%?�%?�&�(�AS�T�T�T�
U�
U�
U�
U�
U�
U�
U�
U�
U�
U�
U����
U�
U�
U�
U��
U�	U�	Us�BC�C	�C	N)
r;r<r=rLr=r@rCrIrMrVrUr0r.r5r5�s�������	
�	
�	
�6�6�6�
5�5�5�
?�?�?�

#�
#�
#�9�9�9�U�U�U�U�Ur0r5c�h��eZdZd�Z�fd�Z�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zed
���Z
�xZS)�HTTPServerRawTestc�0�tdtfg��S)Nr7�rr�rKs r.rLzHTTPServerRawTest.get_app�s���W�k�2�3�4�4�4r0c�����t�����ttj�����_�j��fd���dS)Nc�`���j�d����f��Sr�)rAr�r�rKs�r.r�z)HTTPServerRawTest.setUp.<locals>.<lambda>�s(���D�K�'�'��d�6H�6H�6J�6J�(K�L�L�r0)�super�setUprr�rAr�r��r-rIs`�r.r^zHTTPServerRawTest.setUp�sZ����
���
�
�����v�}���/�/�������L�L�L�L�	
�	
�	
�	
�	
r0c�z��|j���t�����dSr))rAr�r]�tearDownr_s �r.razHTTPServerRawTest.tearDown�s3����������
���������r0c���|j���|j�t	jd���|j��|���dS)N���MbP?��seconds)rAr�r��add_timeout�datetime�	timedelta�stop�waitrKs r.�test_empty_requestz$HTTPServerRawTest.test_empty_request�sO����������� � ��!3�E�!B�!B�!B�D�I�N�N�N��	�	�����r0c���ttdtj���5�j�d���j��fd���\}}}��d|j	����d|j
����d|j��ddd��dS#1swxYwYdS)N�.*Malformed HTTP request line��level�asdf

c�,��t�j��Sr)�rCrArKs�r.r�zFHTTPServerRawTest.test_malformed_first_line_response.<locals>.<lambda>�s���(���5�5�r0�HTTP/1.1r2zBad Request)rr�logging�INFOrAr�r�r�ryr
rL�reason�r-r+r*rSs`   r.�"test_malformed_first_line_responsez4HTTPServerRawTest.test_malformed_first_line_response�s���
�w� ?�w�|�
T�
T�
T�	?�	?��K���o�.�.�.�,0�L�,A�,A�5�5�5�5�-�-�)�J���
���Z��);�<�<�<����S�*�/�2�2�2����]�J�,=�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?s�B
B=�=C�Cc�<�ttdtj���5|j�d��|j�tj	d���|j
��|���ddd��dS#1swxYwYdS)Nrmrnrp皙�����?rd�rrrtrurAr�r�rfrgrhrirjrKs r.�test_malformed_first_line_logz/HTTPServerRawTest.test_malformed_first_line_log�s���
�w� ?�w�|�
T�
T�
T�	�	��K���o�.�.�.�
�L�$�$�X�%7��%E�%E�%E�t�y�Q�Q�Q��I�I�K�K�K�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��A"B�B�Bc�<�ttdtj���5|j�d��|j�tj	d���|j
��|���ddd��dS#1swxYwYdS)Nz1.*Malformed HTTP message.*no colon in header linernsGET / HTTP/1.0
asdf

rzrdr{rKs r.�test_malformed_headersz(HTTPServerRawTest.test_malformed_headers�s���
��?��,�
�
�
�	�	�

�K���?�@�@�@��L�$�$�X�%7��%E�%E�%E�t�y�Q�Q�Q��I�I�K�K�K�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r}c�����j�d�dd�����j��fd���\}}}��t
|��ddgi��dS)NspPOST /echo HTTP/1.1
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r�r�c�,��t�j��Sr)rrrKs�r.r�z=HTTPServerRawTest.test_chunked_request_body.<locals>.<lambda>����$�T�[�1�1�r0r;rB�rAr�r�r�r�ryrrws`   r.�test_chunked_request_bodyz+HTTPServerRawTest.test_chunked_request_body����	
����
��G��w���	
�	
�	
� )-��(=�(=�1�1�1�1�)
�)
�%�
�G�X�	
����X�.�.��&��0B�C�C�C�C�Cr0c�����j�d�dd�����j��fd���\}}}��t
|��ddgi��dS)NspPOST /echo HTTP/1.1
Transfer-Encoding: Chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r�r�c�,��t�j��Sr)rrrKs�r.r�zBHTTPServerRawTest.test_chunked_request_uppercase.<locals>.<lambda>-r�r0r;rBr�rws`   r.�test_chunked_request_uppercasez0HTTPServerRawTest.test_chunked_request_uppercaser�r0c#�K�ttdtj���5|j�d�dd����|j���V�ddd��dS#1swxYwYdS)Nz(.*Only integer Content-Length is allowedrns.POST /echo HTTP/1.1
Content-Length: foo

bar

r�r�)rrrtrurAr�r��read_until_closerKs r.�test_invalid_content_lengthz-HTTPServerRawTest.test_invalid_content_length1s�����
��?�w�|�
�
�
�	1�	1�
�K�����G��7���

�

�

��+�.�.�0�0�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�A
A;�;A?�A?)r;r<r=rLr^rarkrxr|rr�r�rr��
__classcell__�rIs@r.rXrX�s��������5�5�5�
�
�
�
�
���������
?�?�?�������D�D�D�0D�D�D�0�1�1��X�1�1�1�1�1r0rXc�B�eZdZGd�de��Zd�Zd�Zd�Zd�ZdS)�XHeaderTestc��eZdZd�ZdS)�XHeaderTest.Handlerc��|�d|jj��|�t	|jj|jj�����dS)N�request-version)r�remote_protocol)�
set_headerr_r
r�rlrr[rKs r.razXHeaderTest.Handler.getFs^���O�O�-�t�|�/C�D�D�D��J�J��"�l�4�$(�L�$9����
�
�
�
�
r0N�r;r<r=rarUr0r.rJr�Es#������	�	�	�	�	r0rJc�&�tddg���S)NTz5.5.5.5)�xheaders�trusted_downstream�rlrKs r.�get_httpserver_optionsz"XHeaderTest.get_httpserver_optionsOs���T�y�k�B�B�B�Br0c�J�|�|�d��dd��ddi}|�|�d|���dd��ddi}|�|�d|���dd��dd	i}|�|�d|���dd	��dd
i}|�|�d|���dd	��ddi}|�|�d|���dd��ddi}|�|�d|���dd��dd
i}|�|�d|���dd��dS)NrHrr�z	X-Real-IP�4.4.4.4rG�X-Forwarded-Forz127.0.0.1, 4.4.4.4z2620:0:1cfe:face:b00c::3z::1, 2620:0:1cfe:face:b00c::3z4.4.4.4<script>z4.4.4.4, 5.5.5.5<script>zwww.google.com�ryrT)r-�
valid_ipv4�valid_ipv4_list�
valid_ipv6�valid_ipv6_list�
invalid_chars�invalid_chars_list�invalid_hosts        r.�test_ip_headerszXHeaderTest.test_ip_headersRs����������-�-�k�:�K�H�H�H�!�9�-�
�����O�O�C��O�4�4�[�A�9�	
�	
�	
�-�.B�C������O�O�C��O�9�9�+�F�	�	
�	
�	
�"�#=�>�
�����O�O�C��O�4�4�[�A�&�	
�	
�	
�
-�.M�N������O�O�C��O�9�9�+�F�&�	
�	
�	
�
%�&7�8�
�����O�O�C��O�7�7��D�k�	
�	
�	
�0�1K�L������O�O�C�);�O�<�<�[�I�;�	
�	
�	
�$�%5�6������O�O�C��O�6�6�{�C�[�	
�	
�	
�	
�	
r0c��ddi}|�d|���}|jd�d��r|�d��t	|j��}|�|dd	��dS)
Nr�z127.0.0.1, 4.4.4.4, 5.5.5.5rHrGr�zHTTP/2�requires HTTP/1.xrr�)rNr*r��skipTestrrPry)r-r��resp�results    r.�test_trusted_downstreamz#XHeaderTest.test_trusted_downstreamzs���,�.K�L���z�z�#��z�7�7���<�)�*�5�5�h�?�?�	/�
�M�M�-�.�.�.��T�Y�'�'�������,�i�8�8�8�8�8r0c�v�|�|�d��dd��ddi}|�|�d|���dd��ddi}|�|�d|���dd��ddi}|�|�d|���dd��dd	i}|�|�d|���dd��dd
i}|�|�d|���dd��dS)NrHr�rX�X-SchemerjrGzX-Forwarded-Protozhttps , httpz
http,https�unknownr�)r-�https_scheme�https_forwarded�https_multi_forwarded�http_multi_forwarded�
bad_forwardeds      r.�test_scheme_headerszXHeaderTest.test_scheme_headers�ss���������-�-�.?�@�&�I�I�I�"�G�,������O�O�C��O�6�6�7H�I�7�	
�	
�	
�/��8������O�O�C��O�9�9�:K�L�g�	
�	
�	
�"5�n� E������O�O�C�)>�O�?�?�@Q�R��	
�	
�	
�
!4�\�B������O�O�C�)=�O�>�>�?P�Q��	
�	
�	
�
-�i�8�
�����O�O�C��O�7�7�8I�J�F�	
�	
�	
�	
�	
r0N)	r;r<r=rrJr�r�r�r�rUr0r.r�r�Ds~�����������.����C�C�C�&
�&
�&
�P9�9�9�
�
�
�
�
r0r�c�*��eZdZd�Z�fd�Zd�Z�xZS)�SSLXHeaderTestc�:�tdtjfg��SrG)rr�rJrKs r.rLzSSLXHeaderTest.get_app�s���S�+�"5�6�7�8�8�8r0c�R��t�����}d|d<|S)NTr�)r]r�)r-�outputrIs  �r.r�z%SSLXHeaderTest.get_httpserver_options�s'������/�/�1�1��!��z���
r0c�8�|�|�d��dd��ddi}|�|�d|���dd��ddi}|�|�d|���dd��dS)NrHr�rjr�rXrGr�r�)r-�http_scheme�
bad_schemes   r.�test_request_without_xprotocolz-SSLXHeaderTest.test_request_without_xprotocol�s����������-�-�.?�@�'�J�J�J�!�6�*������O�O�C��O�5�5�6G�H�&�	
�	
�	
�!�)�,�
�����O�O�C��O�4�4�5F�G��	
�	
�	
�	
�	
r0)r;r<r=rLr�r�r�r�s@r.r�r��sV�������9�9�9������

�
�
�
�
�
�
r0r�c�6�eZdZGd�de��Zd�Zd�ZdS)�ManualProtocolTestc��eZdZd�ZdS)�ManualProtocolTest.Handlerc�`�|�t|jj�����dS)Nrk)r�rlr_r[rKs r.razManualProtocolTest.Handler.get�s*���J�J�t�T�\�%:�;�;�;�<�<�<�<�<r0Nr�rUr0r.rJr��s#������	=�	=�	=�	=�	=r0rJc�"�td���S)Nrjrkr�rKs r.r�z)ManualProtocolTest.get_httpserver_options�s���W�%�%�%�%r0c�d�|�|�d��dd��dS)NrHr[rjr�rKs r.�test_manual_protocolz'ManualProtocolTest.test_manual_protocol�s/���������-�-�j�9�7�C�C�C�C�Cr0N)r;r<r=rrJr�r�rUr0r.r�r��sa������=�=�=�=�=�.�=�=�=�&�&�&�D�D�D�D�Dr0r��AF_UNIX�cygwinz+unix sockets not supported on this platform�gnu0z=unix sockets with SO_REUSEADDR not supported on this platformc�X��eZdZdZ�fd�Z�fd�Zed���Zed���Z�xZ	S)�UnixSocketTesta�HTTPServers can listen on Unix sockets too.

    Why would you want to do this?  Nginx can proxy to backends listening
    on unix sockets, for one thing (and managing a namespace for unix
    sockets can be easier than managing a bunch of TCP port numbers).

    Unfortunately, there's no way to specify a unix socket in a url for
    an HTTP client, so we have to test this by hand.
    c�$���t�����tj���_t
j��jd���_tj
�j��}tdtfg��}t|���_�j�|��t!t#jt"j�����_�j��fd���dS)Nz	test.sockr�c�B���j��j��Sr))rAr��sockfilerKs�r.r�z&UnixSocketTest.setUp.<locals>.<lambda>�s���d�k�&9�&9�$�-�&H�&H�r0)r]r^�tempfile�mkdtemp�tmpdirr�r�r@r�r�bind_unix_socketrrWr
�server�
add_socketrr�r�rAr�r�)r-�sock�apprIs`  �r.r^zUnixSocketTest.setUp�s�����
���
�
�����&�(�(�������T�[�+�>�>��
��'��
�6�6���H�&>�?�@�A�A�� ��o�o�������t�$�$�$��v�}�V�^�<�<�=�=�������H�H�H�H�I�I�I�I�Ir0c�&��|j���|j�|jj��|j���tj|j	��t�����dSr))rAr�r�r�r��close_all_connectionsri�shutil�rmtreer�r]rar_s �r.razUnixSocketTest.tearDown�st��������������d�k�?�@�@�@���������
�d�k�"�"�"�
���������r0c#�K�|j�d��|j�d��V�}|�|d��|j�d��V�}t	j|�d����}|j�t|d����V�}|�|d��dS)NsGET /hello HTTP/1.0

r�sHTTP/1.1 200 OK
r�r�r�rw)	rAr�r�ryrr�r�r�r�)r-rSr�r*rPs     r.�test_unix_socketzUnixSocketTest.test_unix_socket�s���������8�9�9�9���/�/��8�8�8�8������#9�:�:�:� �K�2�2�;�?�?�?�?���#�K�$6�$6�x�$@�$@�A�A���[�+�+�C��8H�0I�,J�,J�K�K�K�K������~�.�.�.�.�.r0c#�K�ttd��5|j�d��|j���V�}ddd��n#1swxYwY|�|d��dS)NzMalformed HTTP message fromsgarbage

�HTTP/1.1 400 Bad Request

)rrrAr�r�ryrzs  r.�test_unix_socket_bad_requestz+UnixSocketTest.test_unix_socket_bad_request�s������w� =�
>�
>�	<�	<��K���0�1�1�1�!�[�9�9�;�;�;�;�H�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	
����#F�G�G�G�G�Gs�6A�A�!A)
r;r<r=�__doc__r^rarr�r�r�r�s@r.r�r��s����������	J�	J�	J�	J�	J�������/�/��X�/��H�H��X�H�H�H�H�Hr0r�c���eZdZdZd�Z�fd�Z�fd�Zejd���Z	ejd���Z
ejd���Zd�Ze
d	���Ze
d
���Ze
d���Ze
d���Ze
d
���Ze
d���Ze
d���Ze
d���Ze
d���Ze
d���Ze
d���Z�xZS)�
KeepAliveTestz�Tests various scenarios for HTTP 1.1 keep-alive support.

    These tests don't use AsyncHTTPClient because we want to control
    connection reuse and closing.
    c
��Gd�dt��}Gd�dt��}Gd�dt��}Gd�dt��}t��|_td	|fd
|fd|fd|t	|j�
��fg��S)Nc��eZdZd�Zd�ZdS)�+KeepAliveTest.get_app.<locals>.HelloHandlerc�0�|�d��dS�Nr^�r:rKs r.raz/KeepAliveTest.get_app.<locals>.HelloHandler.get������M�*�*�*�*�*r0c�0�|�d��dSr�r�rKs r.rdz0KeepAliveTest.get_app.<locals>.HelloHandler.post	r�r0NrrUr0r.�HelloHandlerr�s2������
+�
+�
+�
+�
+�
+�
+�
+r0r�c��eZdZd�ZdS)�+KeepAliveTest.get_app.<locals>.LargeHandlerc��|�d�d�td��D������dS)Nr?c3�@K�|]}t|dz��dzV��dS)��N)�chr)�.0�is  r.�	<genexpr>zBKeepAliveTest.get_app.<locals>.LargeHandler.get.<locals>.<genexpr>s1����"K�"K�1�3�q�3�w�<�<�$�#6�"K�"K�"K�"K�"K�"Kr0i)r�r@�rangerKs r.raz/KeepAliveTest.get_app.<locals>.LargeHandler.get
s=���
�
�2�7�7�"K�"K��c�
�
�"K�"K�"K�K�K�L�L�L�L�Lr0Nr�rUr0r.�LargeHandlerr�s(������
M�
M�
M�
M�
Mr0r�c�.�eZdZejd���ZdS)�=KeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandlerc3�`K�|�d��|���V�dSr�)r��flushrKs r.�headzBKeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandler.heads2�����
�
�=�)�)�)��j�j�l�l�"�"�"�"�"r0N)r;r<r=r�	coroutiner�rUr0r.�TransferEncodingChunkedHandlerr�s/������
�]�
#�
#��]�
#�
#�
#r0r�c�:�eZdZd�Zejd���Zd�ZdS)�3KeepAliveTest.get_app.<locals>.FinishOnCloseHandlerc��||_dSr)��
cleanup_event)r-rs  r.r\z>KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.initializes��%2��"�"�"r0c3�hK�|���|j���V�dSr))r�rrjrKs r.raz7KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.gets4�����
�
�����(�-�-�/�/�/�/�/�/�/r0c�0�|�d��dS)N�closedr�rKs r.�on_connection_closezGKeepAliveTest.get_app.<locals>.FinishOnCloseHandler.on_connection_close!s�����H�%�%�%�%�%r0N)r;r<r=r\rr�rarrUr0r.�FinishOnCloseHandlerrsO������
3�
3�
3��]�
0�
0��]�
0�
&�
&�
&�
&�
&r0r	rHz/largez/chunkedz/finish_on_closer)rrrrrl)r-r�r�r�r	s     r.rLzKeepAliveTest.get_apps��	+�	+�	+�	+�	+�>�	+�	+�	+�	M�	M�	M�	M�	M�>�	M�	M�	M�	#�	#�	#�	#�	#�^�	#�	#�	#�
	&�
	&�
	&�
	&�
	&�>�
	&�
	&�
	&�#�W�W�����l�#��<�(��;�<�&�(��t�'9�:�:�:��		
�
�
�	
r0c�V��t�����d|_dS)NsHTTP/1.1)r]r^�http_versionr_s �r.r^zKeepAliveTest.setUp5s"���
���
�
����'����r0c�(��|j�tjd���|j��|���t
|d��r|j���t���
��dS)NrcrdrA)r�rfrgrhrirj�hasattrrAr�r]rar_s �r.razKeepAliveTest.tearDown9s|���	
�� � ��!3�E�!B�!B�!B�D�I�N�N�N��	�	�����4��"�"�	 ��K������
���������r0c#�K�ttj����|_|j�d|���f��V�dSr�)rr�rAr�r�rKs r.r�zKeepAliveTest.connectDsN�����v�}���/�/����k�!�!�;��0B�0B�0D�0D�"E�F�F�F�F�F�F�Fr0c#�>K�|j�d��V�}|�|�d��|��|j�d��V�}t	j|�d����}tj|���)Nr�r�r�r�)	rAr�r�r�rr�r�r�Return)r-r��header_bytesr*s    r.�read_headerszKeepAliveTest.read_headersIs������;�1�1�'�:�:�:�:�
����
�-�-�o�>�>�
�K�K�K�!�[�3�3�K�@�@�@�@���#�L�$7�$7��$A�$A�B�B���j��!�!�!r0c#��K�|���V�|_|j�t	|jd����V�}|�d|��dS)Nr�rw)rr*rAr�r�ry)r-rPs  r.r?zKeepAliveTest.read_responseQsf����!�.�.�0�0�0�0����[�+�+�C���=M�0N�,O�,O�P�P�P�P�������.�.�.�.�.r0c�<�|j���|`dSr))rAr�rKs r.r�zKeepAliveTest.closeWs����������K�K�Kr0c#�K�|���V�|j�d��|���V�|j�d��|���V�|���dS)N�GET / HTTP/1.1

�r�rAr�r?r�rKs r.�test_two_requestszKeepAliveTest.test_two_requests[s������l�l�n�n��������3�4�4�4�� � �"�"�"�"�"�����3�4�4�4�� � �"�"�"�"�"��
�
�����r0c#�bK�|���V�|j�d��|���V�|j���V�}|�|��|�|jdd��|���dS)Ns%GET / HTTP/1.1
Connection: close

�
Connectionr�)	r�rAr�r?r�r�ryr*r��r-r�s  r.�test_request_closez KeepAliveTest.test_request_closeds������l�l�n�n��������H�I�I�I�� � �"�"�"�"�"��[�1�1�3�3�3�3�����D��!�!�!������l�3�W�=�=�=��
�
�����r0c#�fK�d|_|���V�|j�d��|���V�|j���V�}|�|��|�d|jv��|���dS)N�HTTP/1.0sGET / HTTP/1.0

r)	rr�rAr�r?r�r�r*r�rs  r.�test_http10zKeepAliveTest.test_http10os�����'����l�l�n�n��������3�4�4�4�� � �"�"�"�"�"��[�1�1�3�3�3�3�����D��!�!�!�����D�L�8�9�9�9��
�
�����r0c#�K�d|_|���V�|j�d��|���V�|�|jdd��|j�d��|���V�|�|jdd��|���dS)Nr�*GET / HTTP/1.0
Connection: keep-alive

r�
Keep-Alive�rr�rAr�r?ryr*r�rKs r.�test_http10_keepalivez#KeepAliveTest.test_http10_keepalivezs�����'����l�l�n�n��������M�N�N�N�� � �"�"�"�"�"������l�3�\�B�B�B�����M�N�N�N�� � �"�"�"�"�"������l�3�\�B�B�B��
�
�����r0c#�K�d|_|���V�|j�d��|���V�|�|jdd��|j�d��|���V�|�|jdd��|���dS)Nrs,GET / HTTP/1.0
Connection: keep-alive


rr"r!r#rKs r.� test_http10_keepalive_extra_crlfz.KeepAliveTest.test_http10_keepalive_extra_crlf�s�����'����l�l�n�n��������Q�R�R�R�� � �"�"�"�"�"������l�3�\�B�B�B�����M�N�N�N�� � �"�"�"�"�"������l�3�\�B�B�B��
�
�����r0c#��K�|���V�|j�d��|���V�|���V�|���dS�Ns$GET / HTTP/1.1

GET / HTTP/1.1

rrKs r.�test_pipelined_requestsz%KeepAliveTest.test_pipelined_requests�sr�����l�l�n�n��������I�J�J�J�� � �"�"�"�"�"�� � �"�"�"�"�"��
�
�����r0c#�K�|���V�|j�d��|���V�|���dSr(rrKs r.�test_pipelined_cancelz#KeepAliveTest.test_pipelined_cancel�sZ�����l�l�n�n��������I�J�J�J�� � �"�"�"�"�"��
�
�����r0c#�K�|���V�|j�d��|���V�|j�d��V�|���dS)NsGET /large HTTP/1.1

r�)r�rAr�rr�r�rKs r.�test_cancel_during_downloadz)KeepAliveTest.test_cancel_during_download�sv�����l�l�n�n��������8�9�9�9����!�!�!�!�!��k�$�$�T�*�*�*�*�*��
�
�����r0c#��K�|���V�|j�d��|���V�|���|j���dS)Ns!GET /finish_on_close HTTP/1.1

)r�rAr�rr�r�setrKs r.�test_finish_while_closedz&KeepAliveTest.test_finish_while_closed�sq�����l�l�n�n��������B�C�C�C����!�!�!�!�!��
�
�������� � � � � r0c#�K�d|_|���V�|j�d��|���V�|�|jdd��|j�d��|���V�|�|jdd��|���dS)NrsLPOST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

rr"r!r#rKs r.�test_keepalive_chunkedz$KeepAliveTest.test_keepalive_chunked�s�����'����l�l�n�n��������
�	
�	
�	
�� � �"�"�"�"�"������l�3�\�B�B�B�����M�N�N�N�� � �"�"�"�"�"������l�3�\�B�B�B��
�
�����r0c#�K�|���V�|j�d��|���V�|j�d��|���V�|���dS)NsHEAD /chunked HTTP/1.1

)r�rAr�rr�rKs r.�#test_keepalive_chunked_head_no_bodyz1KeepAliveTest.test_keepalive_chunked_head_no_body�s������l�l�n�n��������;�<�<�<����!�!�!�!�!�����;�<�<�<����!�!�!�!�!��
�
�����r0)r;r<r=r�rLr^rarr�r�rr?r�rrrrr$r&r)r+r-r0r2r4r�r�s@r.r�r��s����������/
�/
�/
�b(�(�(�(�(������	�]�G�G��]�G�	�]�"�"��]�"�	�]�/�/��]�/�
�������X������X������X���	�	��X�	��	�	��X�	�����X������X������X���!�!��X�!�����X��$����X�����r0r�c� �eZdZd�Zd�Zd�ZdS)�GzipBaseTestc�0�tdtfg��SrGrZrKs r.rLzGzipBaseTest.get_app�s���S�+�.�/�0�0�0r0c��t��}tjd|���}|�t	|����|���|���}|�dd|ddi���S)N�w��mode�fileobjrHr}�Content-Encoding�gziprH)r"r>�GzipFiler�rr��getvaluerN)r-rP�bytesio�	gzip_file�compressed_bodys     r.�	post_gzipzGzipBaseTest.post_gzip�s����)�)���M�s�G�<�<�<�	�����T�
�
�#�#�#�������!�*�*�,�,���z�z��� �'��0�	�
�
�	
r0c��|�ddd���}|�t|j��ddgi��dS)NrHr}rFrr;rB)rNryrrPrzs  r.�test_uncompressedzGzipBaseTest.test_uncompressed�sF���:�:�c�&�y�:�A�A������X�]�3�3�f�v�h�5G�H�H�H�H�Hr0N)r;r<r=rLrDrFrUr0r.r6r6�sF������1�1�1�
�
�
�I�I�I�I�Ir0r6c� �eZdZd�Zd�Zd�ZdS)�GzipTestc�"�td���S)NT)�decompress_requestr�rKs r.r�zGzipTest.get_httpserver_options�s���t�,�,�,�,r0c��|�d��}|�t|j��ddgi��dS)NrFr;rB)rDryrrPrzs  r.�	test_gzipzGzipTest.test_gzip�s@���>�>�)�,�,������X�]�3�3�f�v�h�5G�H�H�H�H�Hr0c�n�t��}tjd|���}|�t	d����|���|���}|�dd|ddi���}|�t|j
��d	d
gi��dS)Nr9r:rFrHr}r=�GZIPrHr;rB)r"r>r?r�rr�r@rNryrrP)r-rArBrCrSs     r.�test_gzip_case_insensitivez#GzipTest.test_gzip_case_insensitive�s����)�)���M�s�G�<�<�<�	�����Y���(�(�(�������!�*�*�,�,���:�:��� �'��0�	�
�
��	
����X�]�3�3�f�v�h�5G�H�H�H�H�Hr0N)r;r<r=r�rLrOrUr0r.rHrH�sI������-�-�-�I�I�I�
I�
I�
I�
I�
Ir0rHc��eZdZd�ZdS)�GzipUnsupportedTestc��ttd��5|�d��}ddd��n#1swxYwY|�|jd��dS)Nz.*Unsupported Content-EncodingrFr2)rrrDryrLrzs  r.�test_gzip_unsupportedz)GzipUnsupportedTest.test_gzip_unsupporteds����w� @�
A�
A�	1�	1��~�~�i�0�0�H�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�������,�,�,�,�,s�8�<�<N)r;r<r=rSrUr0r.rQrQ�s#������-�-�-�-�-r0rQc�h�eZdZdZdZd�Zd�ZGd�de��Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�ZdS)�StreamingChunkSizeTests201234567890123456789012345678901234567890123456789�c��t��Sr)rrKs r.�get_http_clientz&StreamingChunkSizeTest.get_http_client���%�&�&�&r0c�.�t|jd���S)NT)�
chunk_sizerJ)rl�
CHUNK_SIZErKs r.r�z-StreamingChunkSizeTest.get_httpserver_optionss���t��4�H�H�H�Hr0c�&�eZdZd�Zd�Zd�Zd�ZdS)�&StreamingChunkSizeTest.MessageDelegatec��||_dSr))�
connection)r-r`s  r.�__init__z/StreamingChunkSizeTest.MessageDelegate.__init__s
��(�D�O�O�Or0c��g|_dSr))�
chunk_lengthsr,s   r.r/z7StreamingChunkSizeTest.MessageDelegate.headers_receiveds��!#�D���r0c�T�|j�t|����dSr))rcr2rc)r-r3s  r.r5z4StreamingChunkSizeTest.MessageDelegate.data_receiveds%����%�%�c�%�j�j�1�1�1�1�1r0c�T�tt|j����}|j�tddd��t
dtt|����i����|j�	|��|j�
��dS)NrsrK�OKr�)rrrcr`�
write_headersrrrrcr�r:)r-�
response_bodys  r.r:z-StreamingChunkSizeTest.MessageDelegate.finish s��� ��T�-?�!@�!@�A�A�M��O�)�)�!�*�c�4�8�8��-�s�3�}�3E�3E�/F�/F�G�H�H�
�
�
�
�O�!�!�-�0�0�0��O�"�"�$�$�$�$�$r0N)r;r<r=rar/r5r:rUr0r.�MessageDelegater^sP������	)�	)�	)�	$�	$�	$�	2�	2�	2�	%�	%�	%�	%�	%r0ric�<�Gd�dt��}|��S)Nc��eZdZd�ZdS)�+StreamingChunkSizeTest.get_app.<locals>.Appc�6�t�|��Sr))rUri)r-�server_conn�request_conns   r.�
start_requestz9StreamingChunkSizeTest.get_app.<locals>.App.start_request+s��-�=�=�l�K�K�Kr0N)r;r<r=rprUr0r.�Apprl*s(������
L�
L�
L�
L�
Lr0rq)r)r-rqs  r.rLzStreamingChunkSizeTest.get_app)sB��	L�	L�	L�	L�	L�.�	L�	L�	L��s�u�u�r0c	��|jdddi|��}|���t|j��}|�t|j��t|����|D]U}|�||j	dt|��z��|�|ddt|��z���V|S)NrHr�r}zoversized chunk: rz
empty chunk: )rH)rNrOrrPryrc�BODY�sum�assertLessEqualr\r�
assertGreater)r-rRrSr4r[s     r.�fetch_chunk_sizesz(StreamingChunkSizeTest.fetch_chunk_sizes0s����4�:�;�;�&�;�F�;�;���������X�]�+�+������T�Y����V���5�5�5� �	M�	M�J�� � ��D�O�-@�3�v�;�;�-N�
�
�
�
���z�1�o��F���.K�L�L�L�L��
r0c�&�t��}tjd|���}|�|��|���|���}t
|��t
|��krtd���|S)Nr9r:z#body did not shrink when compressed)r"r>r?r�r�r@rcr`)r-rPrA�gzfile�
compresseds     r.�compresszStreamingChunkSizeTest.compress<s{���)�)����C��9�9�9�����T�����������%�%�'�'�
��z�?�?�c�$�i�i�'�'��A�B�B�B��r0c�l�|�|j���}|�gd�|��dS)N)rP)rVrVrV�)rwrsry)r-r4s  r.�test_regular_bodyz(StreamingChunkSizeTest.test_regular_bodyFs:���'�'�T�Y�'�7�7��������&�1�1�1�1�1r0c�h�|�|�|j��ddi���dS)Nr=r>)rPr*)rwr{rsrKs r.�test_compressed_bodyz+StreamingChunkSizeTest.test_compressed_bodyKsB��������t�y�)�)�4F��3O�	�	
�	
�	
�	
�	
r0c�n���fd�}��|���}��gd�|��dS)Nc�h��|�jdd���|�jdd���dS�N�)rs)r�r-s �r.�
body_producerz?StreamingChunkSizeTest.test_chunked_body.<locals>.body_producerSs=����E�$�)�C�R�C�.�!�!�!��E�$�)�B�C�C�.�!�!�!�!�!r0)r�)rV�rV�)rwry)r-r�r4s`  r.�test_chunked_bodyz(StreamingChunkSizeTest.test_chunked_bodyRsT���	"�	"�	"�	"�	"��'�'�m�'�D�D��������&�1�1�1�1�1r0c���|�|j���|�t���d���fd�}|�|ddi���dS)Nr�c�T��|�dd���|�dd���dSr�rU)r�rzs �r.r�zEStreamingChunkSizeTest.test_chunked_compressed.<locals>.body_producer_s9����E�*�S�b�S�/�"�"�"��E�*�R�S�S�/�"�"�"�"�"r0r=r>)r�r*)r{rsrvrcrw)r-r�rzs  @r.�test_chunked_compressedz.StreamingChunkSizeTest.test_chunked_compressed[s����]�]�4�9�-�-�
����3�z�?�?�B�/�/�/�	#�	#�	#�	#�	#�	
���'�2D�f�1M�	�	
�	
�	
�	
�	
r0N)r;r<r=rsr\rXr�rrirLrwr{r~r�r�r�rUr0r.rUrU	s�������@�D��J�'�'�'�
I�I�I�%�%�%�%�%�-�%�%�%�&���
�
�
����2�2�2�

�
�
�2�2�2�

�

�

�

�

r0rUc�&�eZdZd�Zd�Zd�Zd�ZdS)�MaxHeaderSizeTestc�0�tdtfg��SrG�rrWrKs r.rLzMaxHeaderSizeTest.get_appi����S�":�;�<�=�=�=r0c�"�td���S)Nr�)�max_header_sizer�rKs r.r�z(MaxHeaderSizeTest.get_httpserver_optionsls���D�)�)�)�)r0c��|�dddi���}|���|�|jd��dS)NrH�X-Filler�daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarGrw)rNrOryrPrzs  r.�test_small_headersz$MaxHeaderSizeTest.test_small_headersosL���:�:�c�J�	�+B�:�C�C��������������7�7�7�7�7r0c�D�ttdd���5	|�dddid���|�d	��n>#t$r1}|j� |�|jjd
��Yd}~nd}~wwxYwddd��dS#1swxYwYdS)NzUnsatisfiable readFr�rHr���aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT)r*r�z did not raise expected exception)i�iW)rrrN�failrrS�assertInrL)r-�es  r.�test_large_headersz$MaxHeaderSizeTest.test_large_headersts���
�w� 4�u�
E�
E�
E�		?�		?�
?��
�
�3��Z�(@�d�
�S�S�S��	�	�<�=�=�=�=���
?�
?�
?��:�)��M�M�!�*�/�:�>�>�>����������
?����			?�		?�		?�		?�		?�		?�		?�		?�		?�		?�		?�		?����		?�		?�		?�		?�		?�		?s:�B�/A
�	B�

B�'B�;B�B�B�B�BN)r;r<r=rLr�r�r�rUr0r.r�r�hsP������>�>�>�*�*�*�8�8�8�

?�
?�
?�
?�
?r0r�c���eZdZd�Zd�Z�fd�Z�fd�Zejd���Z	e
d���Ze
d���Z�xZ
S)�IdleTimeoutTestc�0�tdtfg��SrGr�rKs r.rLzIdleTimeoutTest.get_app�r�r0c�"�td���S)Ng�������?)�idle_connection_timeoutr�rKs r.r�z&IdleTimeoutTest.get_httpserver_options�s���C�0�0�0�0r0c�V��t�����g|_dSr))r]r^�streamsr_s �r.r^zIdleTimeoutTest.setUp�s���
���
�
��������r0c���t�����|jD]}|����dSr))r]rar�r�)r-rArIs  �r.razIdleTimeoutTest.tearDown�sC���
���������l�	�	�F��L�L�N�N�N�N�	�	r0c#�K�ttj����}|�d|���f��V�|j�|��t
j|���r�)rr�r�r�r�r2rrr�s  r.r�zIdleTimeoutTest.connect�sh�����&�-�/�/�*�*���n�n�k�4�+=�+=�+?�+?�@�A�A�A�A�A�����F�#�#�#��j�� � � r0c#�K�|���V�}t��}|�|j��|���V�dSr))r�r�set_close_callbackr/rj)r-rA�events   r.�test_unused_connectionz&IdleTimeoutTest.test_unused_connection�sR�����|�|�~�~�%�%�������!�!�%�)�,�,�,��j�j�l�l�����r0c#�K�|���V�}t��}|�|j��t	d��D][}|�d��|�d��V�|�d��V�}|�|d���\|�	��V�dS)Nr}rr��rw)
r�rr�r/r�r�r�r�ryrj)r-rAr�r�r�s     r.�test_idle_after_usez#IdleTimeoutTest.test_idle_after_use�s������|�|�~�~�%�%�������!�!�%�)�,�,�,��q���	3�	3�A��L�L�2�3�3�3��#�#�K�0�0�0�0�0��*�*�2�.�.�.�.�D����T�>�2�2�2�2��j�j�l�l�����r0)r;r<r=rLr�r^rarr�r�rr�r�r�r�s@r.r�r��s��������>�>�>�1�1�1�����������
	�]�!�!��]�!�����X���
�
��X�
�
�
�
�
r0r�c��eZdZd�Zd�Zd�Zd�Zd�Zej	e
jdkd��d���Zd	�Z
ej	e
jdkd��d
���Zd�Zd�Zed
���Zed���ZdS)�BodyLimitsTestc��Gd�dt��}tGd�dt����}td|fd|fg��S)Nc��eZdZd�ZdS)�/BodyLimitsTest.get_app.<locals>.BufferedHandlerc�x�|�tt|jj������dSr))r�rrcr_rPrKs r.�putz3BodyLimitsTest.get_app.<locals>.BufferedHandler.put�s/���
�
�3�s�4�<�#4�5�5�6�6�7�7�7�7�7r0N)r;r<r=r�rUr0r.�BufferedHandlerr��s#������
8�
8�
8�
8�
8r0r�c�&�eZdZd�Zd�Zd�Zd�ZdS)�0BodyLimitsTest.get_app.<locals>.StreamingHandlerc��d|_dS)Nr)�
bytes_readrKs r.r\z;BodyLimitsTest.get_app.<locals>.StreamingHandler.initialize�s
��"#����r0c�^�tjt|jj��}d|jjvr5|�t|�d������d|jjvr7|�	t|�d������dSdS)N�
expected_size�body_timeout)r��castrr_r`r�set_max_body_sizer�r��set_body_timeout�floatr8s  r.r!z8BodyLimitsTest.get_app.<locals>.StreamingHandler.prepare�s����{�?�D�L�4K�L�L��"�d�l�&<�<�<��*�*�3�t�/@�/@��/Q�/Q�+R�+R�S�S�S�!�T�\�%;�;�;��)�)�%��0A�0A�.�0Q�0Q�*R�*R�S�S�S�S�S�<�;r0c�@�|xjt|��z
c_dSr))r�rcrs  r.r5z>BodyLimitsTest.get_app.<locals>.StreamingHandler.data_received�s�����3�t�9�9�,����r0c�T�|�t|j����dSr))r�rr�rKs r.r�z4BodyLimitsTest.get_app.<locals>.StreamingHandler.put�s$���
�
�3�t��/�/�0�0�0�0�0r0N)r;r<r=r\r!r5r�rUr0r.�StreamingHandlerr��sS������
$�
$�
$�
T�
T�
T�
-�
-�
-�
1�
1�
1�
1�
1r0r��	/buffered�
/streaming)rr r)r-r�r�s   r.rLzBodyLimitsTest.get_app�s���	8�	8�	8�	8�	8�n�	8�	8�	8�
�	1�	1�	1�	1�	1�~�	1�	1�
�	�	1�"��?�
+�l�<L�-M�N�
�
�	
r0c�$�tdd���S)Nr�i)r��
max_body_sizer�rKs r.r�z%BodyLimitsTest.get_httpserver_options�s����T�:�:�:�:r0c��t��Sr)rrKs r.rXzBodyLimitsTest.get_http_client�rYr0c���|�ddd���}|�|jd��|�ddd���}|�|jd��dS)Nr��PUTsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaars4096r�rxrzs  r.�test_small_bodyzBodyLimitsTest.test_small_body�sf���:�:�k�%�k�:�J�J��������0�0�0��:�:�l�5�{�:�K�K��������0�0�0�0�0r0c���ttdtj���5|�ddddz���}ddd��n#1swxYwY|�|jd��dS)	N�.*Content-Length too longrnr�r��a�(rr2�rrrtrurNryrLrzs  r.�test_large_body_bufferedz'BodyLimitsTest.test_large_body_buffered�s���
�w� ;�7�<�
P�
P�
P�	P�	P��z�z�+�e�$��,�z�O�O�H�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P�������,�,�,�,�,��A
�
A�A�ntzflaky on windowsc���ttdtj���5|�ddd����}ddd��n#1swxYwY|�|jd��dS)N�.*chunked body too largernr�r�c��|ddz��S�Nr�r�rU�r�s r.r�zABodyLimitsTest.test_large_body_buffered_chunked.<locals>.<lambda>����E�E�$��,�,?�,?�r0�r�r�r2r�rzs  r.� test_large_body_buffered_chunkedz/BodyLimitsTest.test_large_body_buffered_chunked�s����w� :�'�,�
O�
O�
O�	�	��z�z���?�?�"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,��A�A�Ac���ttdtj���5|�ddddz���}ddd��n#1swxYwY|�|jd��dS)	Nr�rnr�r�r�r�rr2r�rzs  r.�test_large_body_streamingz(BodyLimitsTest.test_large_body_streaming�s���
�w� ;�7�<�
P�
P�
P�	Q�	Q��z�z�,�u�4�%�<�z�P�P�H�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q�	Q����	Q�	Q�	Q�	Q�������,�,�,�,�,r�c���ttdtj���5|�ddd����}ddd��n#1swxYwY|�|jd��dS)Nr�rnr�r�c��|ddz��Sr�rUr�s r.r�zBBodyLimitsTest.test_large_body_streaming_chunked.<locals>.<lambda>�r�r0r�r2r�rzs  r.�!test_large_body_streaming_chunkedz0BodyLimitsTest.test_large_body_streaming_chunked�s���
�w� :�'�,�
O�
O�
O�	�	��z�z���?�?�"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,r�c�r�|�ddddz���}|�|jd��dS)N�/streaming?expected_size=10240r�r�r�r�10240rxrzs  r.�"test_large_body_streaming_overridez1BodyLimitsTest.test_large_body_streaming_override�sE���:�:�,�U�����
�
��	
������1�1�1�1�1r0c�n�|�ddd����}|�|jd��dS)Nr�r�c��|ddz��Sr�rUr�s r.r�zKBodyLimitsTest.test_large_body_streaming_chunked_override.<locals>.<lambda>s����d�U�l�(;�(;�r0r�r�rxrzs  r.�*test_large_body_streaming_chunked_overridez9BodyLimitsTest.test_large_body_streaming_chunked_overridesF���:�:�,��;�;��
�
��
	
������1�1�1�1�1r0c#��K�ttj����}	|�d|���f��V�|�d��ttdtj���5|�	��V�}ddd��n#1swxYwY|�
|d��|���dS#|���wxYw)Nr�s@PUT /streaming?body_timeout=0.1 HTTP/1.0
Content-Length: 42

zTimeout reading bodyrnr0)rr�r�r�r�rrrtrur�ryr�)r-rArSs   r.�test_timeoutzBodyLimitsTest.test_timeouts#�����&�-�/�/�*�*��	��.�.�+�t�/A�/A�/C�/C�!D�E�E�E�E�E�
�L�L�.�
�
�
��7�$:�'�,�O�O�O�
;�
;�!'�!8�!8�!:�!:�:�:��
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;����X�s�+�+�+��L�L�N�N�N�N�N��F�L�L�N�N�N�N���s0�A!C�B(�C�(B,�,C�/B,�0C�C5c#�K�ttj����}	|�d|���f��V�|�d��|�ddz��t|��V�\}}}|�|d��|�d��ttdtj
���5|���V�}ddd��n#1swxYwY|�|d	��|���dS#|���wxYw)
Nr�sFPUT /streaming?expected_size=10240 HTTP/1.1
Content-Length: 10240

r�r�r�s2PUT /streaming HTTP/1.1
Content-Length: 10240

r�rnr�)
rr�r�r�r�rCryrrrtrur�r�)r-rAr+r*rSr�s      r.�test_body_size_override_resetz,BodyLimitsTest.test_body_size_override_resets������&�-�/�/�*�*��	��.�.�+�t�/A�/A�/C�/C�!D�E�E�E�E�E��L�L�1�
�
�
�
�L�L����&�&�&�2B�6�2J�2J�,J�,J�)�J������X�x�0�0�0��L�L�O�
�
�
��7�$?�w�|�T�T�T�
7�
7�#�4�4�6�6�6�6��
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7����T�#F�G�G�G��L�L�N�N�N�N�N��F�L�L�N�N�N�N���s0�B9D7�D�4D7�D�D7�D�D7�7E
N)r;r<r=rLr�rXr�r��unittest�skipIfr�r&r�r�r�r�r�rr�r�rUr0r.r�r��s$������
�
�
�6;�;�;�'�'�'�
1�1�1�-�-�-�
�X�_�R�W��_�&8�9�9�-�-�:�9�-�-�-�-�
�X�_�R�W��_�&8�9�9�-�-�:�9�-�2�2�2�2�2�2�����X�� ����X���r0r�c��eZdZd�Zd�ZdS)�LegacyInterfaceTestc����fd�}|S)Nc����|j�d���_�jsQ|j�tddd��t
����|j���dSd}|j�tdt|��z����|j�|��|j���dS)NzHTTP/1.r?rKrfrwz'HTTP/1.1 200 OK
Content-Length: %d

)r
r��http1r`rgrrr:r�rrc)r_�messager-s  �r.�handle_requestz3LegacyInterfaceTest.get_app.<locals>.handle_request7s���� ��3�3�I�>�>�D�J��:�
��"�0�0�%�b�#�t�4�4�k�m�m�����"�)�)�+�+�+���$�G���$�$��G�#�g�,�,�V�W�W�
�
�
�
��$�$�W�-�-�-���%�%�'�'�'�'�'r0rU)r-r�s` r.rLzLegacyInterfaceTest.get_app3s$���	(�	(�	(�	(�	(�"�r0c��|�d��}|js|�d��|�|jd��dS)NrHr�rw)rNr�r�ryrPrzs  r.�test_legacy_interfacez)LegacyInterfaceTest.test_legacy_interfaceJsL���:�:�c�?�?���z�	/��M�M�-�.�.�.�������7�7�7�7�7r0N)r;r<r=rLr�rUr0r.r�r�2s2���������.8�8�8�8�8r0r�)e�tornadorr�tornado.escaperrrrr	r
�tornado.http1connectionr�tornado.httpclientr�tornado.httpserverr
�tornado.httputilrrrr�tornado.iostreamr�
tornado.locksr�tornado.logr�tornado.netutilr�tornado.simple_httpclientr�tornado.testingrrrrr�tornado.test.utilr�tornado.webrrr �
contextlibr!rgr>rtr�r�r�r��sysr�r��urllib.parserS�ior"r��
TYPE_CHECKINGr#r$rCrErWr�r�skipIfOldSSLrh�objectrnr�r�r�r��TestCaser�r�r�r�rr*r/r5rXr�r�r�r
�platformr�r�r6rHrQrUr�r�r�r�rUr0r.�<module>rs��� � � � � � � � �����������������4�3�3�3�3�3�(�(�(�(�(�(�)�)�)�)�)�)�������������&�%�%�%�%�%�������������2�2�2�2�2�2�;�;�;�;�;�;���������������+�*�*�*�*�*�H�H�H�H�H�H�H�H�H�H�������������������	�	�	�	�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�������������������
�
�
�
�	��"�!�!�!�!�!�!�!�!�C�C�C�,	*�	*�	*�	*�	*�+�	*�	*�	*�
E�
E�
E�
E�
E�~�
E�
E�
E�$�x���G�C�'��0�0�6�9�.����V�V�V�V�V�$�V�V�V�
'2�'2�'2�'2�'2�6�'2�'2�'2�`#�#�#�#�#��l�#�#�#�
�"�"�"�"�"��\�"�"���"�
�"�"�"�"�"��\�"�"���"�
�����[�,����&
�&
�&
�&
�&
��)�&
�&
�&
�R	
�	
�	
�	
�	
�>�	
�	
�	
�Z�Z�Z�Z�Z�*�Z�Z�Z�z>�>�>�>�>�.�>�>�>�&U�&U�&U�&U�&U�~�&U�&U�&U�R9�9�9�9�9�n�9�9�9�
B�B�B�B�B��B�B�B�>U�>U�>U�>U�>U�&�>U�>U�>U�Bp1�p1�p1�p1�p1�)�p1�p1�p1�f\
�\
�\
�\
�\
�%�\
�\
�\
�~
�
�
�
�
�'�)<�
�
�
�.	D�	D�	D�	D�	D�,�	D�	D�	D�������	�"�"�"�>�c�l�h�&>�1���������'�P�R�R�.H�.H�.H�.H�.H�]�.H�.H�R�R�	��.H�bQ�Q�Q�Q�Q�%�Q�Q�Q�hI�I�I�I�I�$�I�I�I�,I�I�I�I�I�|�.�I�I�I�0-�-�-�-�-�,�(9�-�-�-�\
�\
�\
�\
�\
�.�\
�\
�\
�~?�?�?�?�?�)�?�?�?�2�,�,�,�,�,�'�,�,���,�^~�~�~�~�~�&�~�~�~�B8�8�8�8�8�+�8�8�8�8�8r0

Youez - 2016 - github.com/yon3zu
LinuXploit