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__/web_test.cpython-311.pyc
�

���i�����
�ddlmZddlmZddlmZmZmZmZm	Z	m
Z
ddlmZddl
mZddlmZddlmZddlmZdd	lmZmZdd
lmZddlmZddlmZmZmZmZdd
l m!Z!m"Z"ddl#m$Z$m%Z%m&Z&m'Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddl<Z=ddl>Z>ddl?m@Z@ddlAZAddlBZBddlCZCddlDZDddlEZEddlFZFddlGZGddlHZId�ZJGd�de��ZKGd�deK��ZLGd�de%��ZMGd�de%��ZNGd�deGjO��ZPGd�deGjO��ZQGd�deK��ZRGd �d!eK��ZSGd"�d#e%��ZTGd$�d%eK��ZUGd&�d'e%��ZVGd(�d)eK��ZWGd*�d+e%��ZXGd,�d-eK��ZYGd.�d/e%��ZZGd0�d1e%��Z[Gd2�d3e%��Z\Gd4�d5e%��Z]Gd6�d7e%��Z^Gd8�d9e%��Z_Gd:�d;e%��Z'Gd<�d=e%��Z`Gd>�d?e%��ZaGd@�dAe%��ZbGdB�dCe%��ZcGdD�dEeK��ZdGdF�dGeK��ZeGdH�dIeK��ZfGdJ�dKeK��ZgGdL�dMeK��ZhGdN�dOeK��ZiGdP�dQeK��ZjGdR�dSeK��ZkGdT�dUeK��ZlGdV�dWeK��ZmGdX�dYeK��ZnGdZ�d[eL��ZoGd\�d]eL��ZpGd^�d_eL��ZqGd`�daeL��ZrGdb�dceL��ZsGdd�deeL��ZtGdf�dgeK��ZuGdh�dieL��ZvGdj�dkeK��ZwGdl�dmeL��ZxGdn�doey��ZzGdp�dqeL��Z{Gdr�dseL��Z|Gdt�dueL��Z}Gdv�dweL��Z~Gdx�dyeL��ZGdz�d{eK��Z�Gd|�d}eL��Z�Gd~�deL��Z�Gd��d�eL��Z�Gd��d�eL��Z�Gd��d�eL��Z�Gd��d�eK��Z�Gd��d�eK��Z�Gd��d�eK��Z�Gd��d�eK��Z�Gd��d�eK��Z�e4Gd��d�e%����Z�Gd��d�e���Z�Gd��d�e�eK��Z�Gd��d�e�eK��Z�Gd��d�eL��Z�Gd��d�eL��Z�Gd��d�eGjO��Z�Gd��d�eL��Z�Gd��d�eL��Z�Gd��d�eL��Z�Gd��d�eK��Z�Gd��d�eK��Z�Gd��d�eL��Z�Gd��d�eGjO��Z�Gd��d�e��Z�Gd��d�eGjO��Z�Gd��d�eK��Z�Gd��d�eK��Z�dS)��)�Future)�gen)�json_decode�utf8�
to_unicode�recursive_unicode�
native_str�
to_basestring)�HTTPClientError)�format_timestamp)�IOStream)�locale)�Event)�app_log�gen_log��SimpleAsyncHTTPClient��
DictLoader)�AsyncHTTPTestCase�
AsyncTestCase�	ExpectLog�gen_test)�
ObjectDict�unicode_type)�Application�RequestHandler�StaticFileHandler�RedirectHandler�	HTTPError�MissingArgumentError�ErrorHandler�
authenticated�url�_create_signature_v1�create_signed_value�decode_signed_value�get_signature_key_version�UIModule�Finish�stream_request_body�removeslash�addslash�GZipContentEncodingN)�BytesIOc�t�tjjtj�t��g|�R�S�N)�os�path�join�dirname�__file__)�as �7/usr/lib/python3/dist-packages/tornado/test/web_test.py�relpathr9<s*��
�7�<������1�1�6�A�6�6�6�6�c�$�eZdZdZd�Zd�Zd�ZdS)�WebTestCasez�Base class for web tests that also supports WSGI mode.

    Override get_handlers and get_app_kwargs instead of get_app.
    This class is deprecated since WSGI mode is no longer supported.
    c�|�t|���fi|�����|_|jSr1)r�get_handlers�get_app_kwargs�app��selfs r8�get_appzWebTestCase.get_appGs8���t�0�0�2�2�L�L�d�6I�6I�6K�6K�L�L����x�r:c��t���r1��NotImplementedErrorrAs r8r>zWebTestCase.get_handlersKs��!�#�#�#r:c��iSr1�rAs r8r?zWebTestCase.get_app_kwargsN����	r:N)�__name__�
__module__�__qualname__�__doc__rCr>r?rHr:r8r<r<@sK�����������$�$�$�����r:r<c��eZdZdZdZd�ZdS)�SimpleHandlerTestCasez�Simplified base class for tests that work with a single handler class.

    To use, define a nested class named ``Handler``.
    Nc��d|jfgS)N�/��HandlerrAs r8r>z"SimpleHandlerTestCase.get_handlersZs���d�l�#�$�$r:)rJrKrLrMrSr>rHr:r8rOrORs4��������
�G�%�%�%�%�%r:rOc��eZdZd�ZdS)�HelloHandlerc�0�|�d��dS�N�hello��writerAs r8�getzHelloHandler.get_s���
�
�7�����r:N�rJrKrLr[rHr:r8rUrU^s#����������r:rUc�$�eZdZdd�Zd�Zdd�ZdS)�CookieTestRequestHandler�
0123456789Nc��i|_|�%tt|������|_dStt||������|_dS)N)�
cookie_secret)�settings�ra�key_version)�_cookiesr�dict�application)rBrards   r8�__init__z!CookieTestRequestHandler.__init__esi����
���)��M�:�:�:� � � �D���� *��M�{�S�S�S� � � �D���r:c�6�|j�|��Sr1)rer[)rB�names  r8�
get_cookiez#CookieTestRequestHandler.get_cookieqs���}� � ��&�&�&r:c��||j|<dSr1)re)rBrj�value�expires_dayss    r8�
set_cookiez#CookieTestRequestHandler.set_cookiets��#��
�d���r:)r_Nr1)rJrKrLrhrkrorHr:r8r^r^csK������
�
�
�
�'�'�'�$�$�$�$�$�$r:r^c� �eZdZd�Zd�Zd�ZdS)�SecureCookieV1Testc��t��}|�ddd���|�|�dd���d��dS)N�foo�bar���version��min_version�r^�set_secure_cookie�assertEqual�get_secure_cookie�rB�handlers  r8�test_round_tripz"SecureCookieV1Test.test_round_tripz�W��*�,�,���!�!�%���!�;�;�;�����2�2�5�a�2�H�H�&�Q�Q�Q�Q�Qr:c	��t��}|�dtjd��d���|jd}tjd|��}|�J�|�d��}|�d��}|�t|j
jddd|��|��|�t|j
jddd	d
|z��|��tdt|���dt|������|jd<ttd
��5|�|�dd���du��ddd��dS#1swxYwYdS)Nrssd76df8e7aefcrurvs12345678\|([0-9]+)\|([0-9a-f]+)�ra�12345678�1234s5678z	1234|5678�|zCookie timestamp in futurerx)r^r{�binascii�a2b_hexre�re�match�groupr|r%rgrbrr
rr�
assertTruer})rBr�cookier��	timestamp�sigs      r8�&test_cookie_tampering_future_timestampz9SecureCookieV1Test.test_cookie_tampering_future_timestamps���*�,�,���!�!�%��)9�/�)J�)J�TU�!�V�V�V��!�%�(����<�f�E�E��� � � ��K�K��N�N�	��k�k�!�n�n����� ��#�,�_�=����	
�
�
�	
�	
�	
�	
��� ��#�,�_�=����)�#�	
�
�
�	
�	
�	
�#'�$� -�i� 8� 8� 8� 8�-��:L�:L�:L�M�#
�#
������w� <�
=�
=�	U�	U��O�O�G�5�5�e��5�K�K�t�S�T�T�T�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U����	U�	U�	U�	U�	U�	Us�-E>�>F�Fc��t��}|�ddd���|�|�dd���d��dS)Nrs��rurvrxrzr~s  r8�test_arbitrary_bytesz'SecureCookieV1Test.test_arbitrary_bytes�sY��+�,�,���!�!�%��!�!�<�<�<�����2�2�5�a�2�H�H�'�R�R�R�R�Rr:N)rJrKrLr�r�r�rHr:r8rqrqysM������R�R�R�
$U�$U�$U�LS�S�S�S�Sr:rqc�6�eZdZddd�Zd�Zd�Zd�Zd�Zd�Zd	S)
�SecureCookieV2Test�ajklasdf0ojaisdf�aslkjasaolwkjsdf)rruc��t��}|�ddd���|�|�dd���d��dS)Nrsrtr�rvrxrzr~s  r8r�z"SecureCookieV2Test.test_round_trip�r�r:c��t|jd���}|�dd��|�|�d��d��dS)Nrrcrsrt�r^�KEY_VERSIONSr{r|r}r~s  r8�test_key_version_roundtripz-SecureCookieV2Test.test_key_version_roundtrip��`��*��+��
�
�
��	�!�!�%��0�0�0�����2�2�5�9�9�6�B�B�B�B�Br:c��t|jd���}|�dd��|�|�d��d��dS)Nrurcrsrtr�r~s  r8�,test_key_version_roundtrip_differing_versionz?SecureCookieV2Test.test_key_version_roundtrip_differing_version�r�r:c���t|jd���}|�dd��t|jd���}|j|_|�|�d��d��dS�Nrrcrsrtru)r^r�r{rer|r})rBr�new_handlers   r8�"test_key_version_increment_versionz5SecureCookieV2Test.test_key_version_increment_version�s���*��+��
�
�
��	�!�!�%��0�0�0�.��+��
�
�
�� '�/�������6�6�u�=�=�v�F�F�F�F�Fr:c�F�t|jd���}|�dd��|j���}|�d��t|d���}|j|_|�|�d��d��dSr�)r^r�r{�copy�poprer|r})rBr�new_key_versionsr�s    r8�#test_key_version_invalidate_versionz6SecureCookieV2Test.test_key_version_invalidate_version�s���*��+��
�
�
��	�!�!�%��0�0�0��,�1�1�3�3�����Q����.�*��
�
�
�� '�/�������6�6�u�=�=�t�D�D�D�D�Dr:N)	rJrKrLr�r�r�r�r�r�rHr:r8r�r��s~������)�.@�A�A�L�R�R�R�
C�C�C�C�C�C�	G�	G�	G�E�E�E�E�Er:r�c�*�eZdZdZd�Zd�Zd�Zd�ZdS)�FinalReturnTestNc�l��|�G�fd�dt��}G�fd�dt��}d|fd|fgS)Nc�X��eZdZej�fd���Zej�fd���ZdS)�3FinalReturnTest.get_handlers.<locals>.FinishHandlerc3�P�K�|����_�jV�dSr1)�finish�final_return�rB�tests �r8r[z7FinalReturnTest.get_handlers.<locals>.FinishHandler.get�s,�����$(�K�K�M�M��!��'�'�'�'�'�'r:c3��K�|�d��|���V�|�d���_�jV�dS)Nzhello,�world)rZ�flushr�r�r�s �r8�postz8FinalReturnTest.get_handlers.<locals>.FinishHandler.post�sV������
�
�8�$�$�$��j�j�l�l�"�"�"�$(�K�K��$8�$8��!��'�'�'�'�'�'r:N)rJrKrLr�	coroutiner[r��r�s�r8�
FinishHandlerr��sa�������
�]�
(�
(�
(�
(��]�
(��]�
(�
(�
(�
(��]�
(�
(�
(r:r�c�:��eZdZd�Zej�fd���ZdS)�3FinalReturnTest.get_handlers.<locals>.RenderHandlerc�$�tddi��S)N�foo.html�hir�rBr3s  r8�create_template_loaderzJFinalReturnTest.get_handlers.<locals>.RenderHandler.create_template_loader�s��!�:�t�"4�5�5�5r:c�<��|�d���_dS�Nr�)�renderr�r�s �r8r[z7FinalReturnTest.get_handlers.<locals>.RenderHandler.get�s���$(�K�K�
�$;�$;��!�!�!r:N)rJrKrLr�rr�r[r�s�r8�
RenderHandlerr��sK�������
6�
6�
6��]�
<�
<�
<�
<��]�
<�
<�
<r:r��/finish�/render�r)rBr�r�r�s   @r8r>zFinalReturnTest.get_handlers�s������	(�	(�	(�	(�	(�	(�	(�N�	(�	(�	(�	<�	<�	<�	<�	<�	<�	<�N�	<�	<�	<��M�*�Y�
�,F�G�Gr:c�"�td���S)Nr�)�
template_path�rfrAs r8r?zFinalReturnTest.get_app_kwargs�s���"3�4�4�4�4r:c�H�|�|�d����}|�|jd��|�|jt��|�|j�����|�|�d��dd���}|�|jd��|�|jt��|�|j�����dS)Nr����POSTr:��method�body)	�fetch�get_urlr|�code�assertIsInstancer�rr��done�rB�responses  r8� test_finish_method_return_futurez0FinalReturnTest.test_finish_method_return_future�s����:�:�d�l�l�9�5�5�6�6��������,�,�,����d�/��8�8�8�����)�.�.�0�0�1�1�1��:�:�d�l�l�9�5�5�f�3�:�O�O��������,�,�,����d�/��8�8�8�����)�.�.�0�0�1�1�1�1�1r:c���|�|�d����}|�|jd��|�|jt��dS)Nr�r�)r�r�r|r�r�r�rr�s  r8� test_render_method_return_futurez0FinalReturnTest.test_render_method_return_futuresV���:�:�d�l�l�9�5�5�6�6��������,�,�,����d�/��8�8�8�8�8r:)rJrKrLr�r>r?r�r�rHr:r8r�r��sX�������L�H�H�H�45�5�5�	2�	2�	2�9�9�9�9�9r:r�c�D�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�
CookieTestc	�f�Gd�dt��}Gd�dt��}Gd�dt��}Gd�dt��}Gd	�d
t��}Gd�dt��}Gd
�dt��}Gd�dt��}d|fd|fd|fd|fd|fd|fd|fd|fgS)Nc��eZdZd�ZdS)�1CookieTest.get_handlers.<locals>.SetCookieHandlerc��|�dd��|�dd��|�dd��dS)N�str�asdf�unicode�qwer�bytesszxcv�rorAs r8r[z5CookieTest.get_handlers.<locals>.SetCookieHandler.getsF������v�.�.�.����	�7�3�3�3������1�1�1�1�1r:Nr\rHr:r8�SetCookieHandlerr�s#������
2�
2�
2�
2�
2r:r�c��eZdZd�ZdS)�1CookieTest.get_handlers.<locals>.GetCookieHandlerc�d�|�dd��}|�J�|�|��dS)Nrs�default)rkrZ)rBr�s  r8r[z5CookieTest.get_handlers.<locals>.GetCookieHandler.gets9������	�:�:���)�)�)��
�
�6�"�"�"�"�"r:Nr\rHr:r8�GetCookieHandlerr�s#������
#�
#�
#�
#�
#r:r�c��eZdZd�ZdS)�7CookieTest.get_handlers.<locals>.SetCookieDomainHandlerc�8�|�dddd���dS)N�unicode_args�blahzfoo.com�/foo)�domainr3r�rAs r8r[z;CookieTest.get_handlers.<locals>.SetCookieDomainHandler.gets%�������z�PW��X�X�X�X�Xr:Nr\rHr:r8�SetCookieDomainHandlerr�s(������
Y�
Y�
Y�
Y�
Yr:r�c��eZdZd�ZdS)�<CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandlerc��|�dd��|�dd��|�dd��dS)N�equals�a=b�	semicolon�a;b�quote�a"br�rAs r8r[z@CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandler.get%sD������%�0�0�0�����U�3�3�3������/�/�/�/�/r:Nr\rHr:r8�SetCookieSpecialCharHandlerr�$s#������
0�
0�
0�
0�
0r:r�c��eZdZd�ZdS)�:CookieTest.get_handlers.<locals>.SetCookieOverwriteHandlerc��|�ddd���|�ddd���|�dd��dS)Nr7�bzexample.com)r��c�d�er�rAs r8r[z>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.get+sN������S���?�?�?�����S���?�?�?�����S�)�)�)�)�)r:Nr\rHr:r8�SetCookieOverwriteHandlerr*s#������
*�
*�
*�
*�
*r:rc��eZdZd�ZdS)�7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerc�6�|�ddd���dS)Nrs�bar�
)�max_ager�rAs r8r[z;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.get3s ������u�b��9�9�9�9�9r:Nr\rHr:r8�SetCookieMaxAgeHandlerr2s#������
:�
:�
:�
:�
:r:r
c��eZdZd�ZdS)�<CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandlerc�6�|�ddd���dS)Nrsr
r)rnr�rAs r8r[z@CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandler.get7s ������u�2��>�>�>�>�>r:Nr\rHr:r8�SetCookieExpiresDaysHandlerr6s#������
?�
?�
?�
?�
?r:rc��eZdZd�ZdS)�4CookieTest.get_handlers.<locals>.SetCookieFalsyFlagsc���|�ddd���|�ddd���|�ddd���|�d	dd���dS)
Nr7�1T)�securerFr)�httponlyrr�rAs r8r[z8CookieTest.get_handlers.<locals>.SetCookieFalsyFlags.get;sh������S���6�6�6�����S���7�7�7�����S�4��8�8�8�����S�5��9�9�9�9�9r:Nr\rHr:r8�SetCookieFalsyFlagsr:s#������
:�
:�
:�
:�
:r:r�/set�/get�/set_domain�
/special_char�/set_overwrite�/set_max_age�/set_expires_days�/set_falsy_flagsr�)	rBr�r�r�r�rr
rrs	         r8r>zCookieTest.get_handlerss���	2�	2�	2�	2�	2�~�	2�	2�	2�	#�	#�	#�	#�	#�~�	#�	#�	#�	Y�	Y�	Y�	Y�	Y�^�	Y�	Y�	Y�	0�	0�	0�	0�	0�.�	0�	0�	0�	*�	*�	*�	*�	*��	*�	*�	*�	:�	:�	:�	:�	:�^�	:�	:�	:�	?�	?�	?�	?�	?�.�	?�	?�	?�	:�	:�	:�	:�	:�.�	:�	:�	:��%�&�
�%�&�
�2�3�
�9�:�
�8�9�
�3�4�
 �"=�>�
�!4�5�	
�		
r:c��|�d��}|�t|j�d����gd���dS)Nr�
Set-Cookie)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)r�r|�sorted�headers�get_listr�s  r8�test_set_cookiezCookieTest.test_set_cookieLsZ���:�:�f�%�%������8�#�,�,�\�:�:�;�;�N�N�N�	
�	
�	
�	
�	
r:c�>�|�dddi���}|�|jd��|�dddi���}|�|jd��|�dddi���}|�|jd��dS)	Nr�Cookie�foo=bar�r$rtz	foo="bar"z/=exception;�default�r�r|r�r�s  r8�test_get_cookiezCookieTest.test_get_cookieSs����:�:�f�x��.C�:�D�D��������/�/�/��:�:�f�x��.E�:�F�F��������/�/�/��:�:�f�x��.H�:�I�I�������
�3�3�3�3�3r:c��|�d��}|�|j�d��dg��dS)Nrr"z,unicode_args=blah; Domain=foo.com; Path=/foo�r�r|r$r%r�s  r8�test_set_cookie_domainz!CookieTest.test_set_cookie_domain]sO���:�:�m�,�,�������%�%�l�3�3�
;�<�	
�	
�	
�	
�	
r:c�@�|�d��}t|j�d����}|�t|��d��|�|dd��|�|dd��|�|dd	v|d��gd
�}|D][\}}tjd|��|�dd
|i���}|�|j	t|�����\dS)Nrr"�rzequals="a=b"; Path=/ruzquote="a\"b"; Path=/r�)zsemicolon="a;b"; Path=/zsemicolon="a\073b"; Path=/))zfoo=a=br�)z	foo="a=b"r�)z	foo="a;b"z"a)z
foo=a\073bza\073b)zfoo="a\073b"r�)z
foo="a\"b"r�z	trying %rrr(r*)r�r#r$r%r|�lenr��logging�debugr�r)rBr�r$�data�header�expecteds      r8�test_cookie_special_charz#CookieTest.test_cookie_special_chards+���:�:�o�.�.����)�2�2�<�@�@�A�A������W���q�)�)�)�������%;�<�<�<�������%<�=�=�=�����A�J�T�T��A�J�	
�	
�	
�

�
�
��!%�	<�	<��F�H��M�+�v�.�.�.��z�z�&�8�V�2D�z�E�E�H����X�]�D��N�N�;�;�;�;�	<�	<r:c��|�d��}|j�d��}|�t	|��ddg��dS)Nrr"za=e; Path=/zc=d; Domain=example.com; Path=/�r�r$r%r|r#�rBr�r$s   r8�test_set_cookie_overwritez$CookieTest.test_set_cookie_overwrite}s]���:�:�.�/�/���"�+�+�L�9�9������7�O�O�m�-N�O�	
�	
�	
�	
�	
r:c��|�d��}|j�d��}|�t	|��dg��dS)Nrr"zfoo=bar; Max-Age=10; Path=/r;r<s   r8�test_set_cookie_max_agez"CookieTest.test_set_cookie_max_age�sO���:�:�n�-�-���"�+�+�L�9�9���������+H�*I�J�J�J�J�Jr:c��|�d��}|j�d��}|�J�tjd|��}|�J�t
j���tjd���z}tj	�
|���d��}|�J�tj|dd��}|�t||z
�����dk��dS)Nrr"z(foo=bar; expires=(?P<expires>.+); Path=/r��days�expires�)r�r$r[r�r��datetime�utcnow�	timedelta�email�utils�	parsedate�	groupdictr��abs�
total_seconds�rBr�r7r�rC�parsed�header_expiress       r8�test_set_cookie_expires_daysz'CookieTest.test_set_cookie_expires_days�s����:�:�1�2�2���!�%�%�l�3�3���!�!�!���C�V�L�L��� � � ��#�*�*�,�,�x�/A�r�/J�/J�/J�J����&�&�u���'8�'8��'C�D�D���!�!�!�!�*�F�2�A�2�J�7������W�~�5�D�D�F�F�G�G�"�L�M�M�M�M�Mr:c���|�d��}t|j�d����}|�|d���d��|�|d���d��|�|d���d��|�|d	���d
��dS)Nr r"rza=1; path=/; secureruzb=1; path=/r�zc=1; httponly; path=/r2zd=1; path=/)r�r#r$r%r|�lowerr<s   r8�test_set_cookie_false_flagsz&CookieTest.test_set_cookie_false_flags�s����:�:�0�1�1����)�2�2�<�@�@�A�A��	
������)�)�+�+�-B�C�C�C�������)�)�+�+�]�;�;�;�������)�)�+�+�-D�E�E�E�������)�)�+�+�]�;�;�;�;�;r:N)rJrKrLr>r&r-r0r9r=r?rQrTrHr:r8r�r�s�������;
�;
�;
�z
�
�
�4�4�4�
�
�
�<�<�<�2
�
�
�K�K�K�
N�N�N�<�<�<�<�<r:r�c�0�eZdZd�Zd�Zed���ZdS)�AuthRedirectRequestHandlerc��||_dSr1��	login_url)rBrYs  r8�
initializez%AuthRedirectRequestHandler.initialize�s
��"����r:c��|jSr1rXrAs r8�
get_login_urlz(AuthRedirectRequestHandler.get_login_url�s
���~�r:c�0�|�d��dS)N��)�
send_errorrAs r8r[zAuthRedirectRequestHandler.get�s��	
��������r:N)rJrKrLrZr\r#r[rHr:r8rVrV�sM������#�#�#��������]���r:rVc� �eZdZd�Zd�Zd�ZdS)�AuthRedirectTestc�b�dttd���fdttd���fgS)N�	/relativez/loginrX�	/absolutezhttp://example.com/login)rVrfrAs r8r>zAuthRedirectTest.get_handlers�s<��
�4�d�X�6N�6N�6N�O��*��9�:�:�:�
�
�	
r:c���|�|�d��d���}|�|jd��|�|jdd��dS)NrcF��follow_redirects�.�Locationz/login?next=%2Frelative)r�r�r|r�r$r�s  r8�test_relative_auth_redirectz,AuthRedirectTest.test_relative_auth_redirect�s`���:�:�d�l�l�;�7�7�%�:�P�P��������,�,�,�����)�*�5�7P�Q�Q�Q�Q�Qr:c��|�|�d��d���}|�|jd��|�tjd|jd��|jd��dS)NrdFrfrhzIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluteri)r�r�r|r�r�r�r�r$r�s  r8�test_absolute_auth_redirectz,AuthRedirectTest.test_absolute_auth_redirect�s����:�:�d�l�l�;�7�7�%�:�P�P��������,�,�,�����H�\�� ��,�
�
�
��Z�(�	
�	
�	
�	
�	
r:N)rJrKrLr>rjrlrHr:r8rara�sD������
�
�
�R�R�R�
	
�	
�	
�	
�	
r:rac�:�eZdZd�Zejd���Zd�ZdS)�ConnectionCloseHandlerc��||_dSr1r�r�s  r8rZz!ConnectionCloseHandler.initialize�s
����	�	�	r:c#�|K�|j���|jj���V�dSr1)r��on_handler_waiting�
cleanup_event�waitrAs r8r[zConnectionCloseHandler.get�s=�����	�$�$�&�&�&��i�%�*�*�,�,�,�,�,�,�,r:c�8�|j���dSr1)r��on_connection_closerAs r8ruz*ConnectionCloseHandler.on_connection_close�s���	�%�%�'�'�'�'�'r:N)rJrKrLrZrr�r[rurHr:r8rnrn�sO���������	�]�-�-��]�-�(�(�(�(�(r:rnc�&�eZdZd�Zd�Zd�Zd�ZdS)�ConnectionCloseTestc�Z�t��|_dtt|���fgS)NrQr�)rrrrnrfrAs r8r>z ConnectionCloseTest.get_handlers�s'��"�W�W����,�d��o�o�o�>�?�?r:c��tjtjtjd��}|�d|���f��t|��|_|j�d��|���|j	�
��|j�d���dS)Nr�	127.0.0.1sGET / HTTP/1.0

c�*�tjd��S�Nr)r�sleeprHr:r8�<lambda>z;ConnectionCloseTest.test_connection_close.<locals>.<lambda>�s��c�i��l�l�r:)
�socket�AF_INET�SOCK_STREAM�connect�
get_http_portr
�streamrZrsrr�set�io_loop�run_sync)rB�ss  r8�test_connection_closez)ConnectionCloseTest.test_connection_close�s����M�&�.�&�*<�a�@�@��	�	�	�;�� 2� 2� 4� 4�5�6�6�6��q�k�k�������3�4�4�4��	�	�������� � � �����2�2�3�3�3�3�3r:c�`�tjd��|j���dS)Nzhandler waiting)r4r5r��closerAs r8rqz&ConnectionCloseTest.on_handler_waiting�s-���
�'�(�(�(���������r:c�V�tjd��|���dS)Nzconnection closed)r4r5�stoprAs r8ruz'ConnectionCloseTest.on_connection_close�s$���
�)�*�*�*��	�	�����r:N)rJrKrLr>r�rqrurHr:r8rwrw�sS������@�@�@�4�4�4��������r:rwc��eZdZd�ZdS)�EchoHandlerc	���|jjD]�}t|��tkrt	dt|��z���|jj|D]9}t|��t
krt	dt|��z����:|�|��D]9}t|��tkrt	dt|��z����:��|D]9}t|��tkrt	dt|��z����:|�t|jj
|t|jj�������dS)Nzincorrect type for key: %rzincorrect type for value: %rzincorrect type for path arg: %r�r3�	path_args�args)�request�	arguments�typer��	Exceptionr��
get_argumentsrrZrfr3r)rBr��key�bvalue�svalue�args      r8r[zEchoHandler.get�su��
�<�)�	S�	S�C��C�y�y�C���� <�t�C�y�y� H�I�I�I��,�0��5�
S�
S����<�<�5�(�(�#�$B�T�&�\�\�$Q�R�R�R�)��,�,�S�1�1�
S�
S����<�<�<�/�/�#�$B�T�&�\�\�$Q�R�R�R�0�
S��	O�	O�C��C�y�y�L�(�(�� A�D��I�I� M�N�N�N�)��
�
���\�&�#�&�t�|�'=�>�>�
�
�
�	
�	
�	
�	
�	
r:Nr\rHr:r8r�r��s#������
�
�
�
�
r:r�c�2�eZdZd�Zd�Zd�Zd�Zd�Zd�ZdS)�RequestEncodingTestc�&�dtfdtfgS)Nz/group/(.*)z/slashes/([^/]*)/([^/]*))r�rAs r8r>z RequestEncodingTest.get_handlerss����,�/I�;�.W�X�Xr:c�P�t|�|��j��Sr1)rr�r�r�s  r8�
fetch_jsonzRequestEncodingTest.fetch_jsons���4�:�:�d�+�+�0�1�1�1r:c	���|�|�d��tddgi�����|�|�d��tddgddgi�����dS)Nz
/group/%3F�?r�z/group/%3F?%3F=%3F�r|r�rfrAs r8�test_group_question_markz,RequestEncodingTest.test_group_question_marks�������O�O�L�)�)��l�s�e�"�=�=�=�	
�	
�	
�	
����O�O�0�1�1��l�s�e�3���,�G�G�G�	
�	
�	
�	
�	
r:c�h�|�|�d��ddgddgid���dS)Nz/group/%C3%A9?arg=%C3%A9z
/group/%C3%A9�ér�r��r|r�rAs r8�test_group_encodingz'RequestEncodingTest.test_group_encodingsP������O�O�6�7�7�)�(�k� �9�+�.�
�
�	
�	
�	
�	
�	
r:c���|�|�d��tdddgi�����|�|�d��tdddgi�����dS)Nz/slashes/foo/barrsr
r�z/slashes/a%2Fb/c%2Fdza/bzc/dr�rAs r8�test_slashesz RequestEncodingTest.test_slashes's���	
����O�O�.�/�/��(�U�E�N��L�L�L�	
�	
�	
�	
����O�O�2�3�3��,����R�P�P�P�	
�	
�	
�	
�	
r:c��ttd��5|�d��ddd��dS#1swxYwYdS)Nz.*Invalid unicodez/group/?arg=%25%e9)rrr�rAs r8�
test_errorzRequestEncodingTest.test_error3s����w� 3�
4�
4�	-�	-��J�J�+�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�	-�	-�
�9�=�=N)	rJrKrLr>r�r�r�r�r�rHr:r8r�r�
sq������Y�Y�Y�2�2�2�	
�	
�	
�	
�	
�	
�

�

�

�-�-�-�-�-r:r�c�&�eZdZd�Zd�Zd�Zd�ZdS)�TypeCheckHandlerc��i|_|�d|���t��|�d|�d��t
��|�dt
|j�����dt��|�dt
|j�
����djt��t
|j�����dgkr)td|j���z���|�d	|�
d��t��|�d
|�d��t��|�d|jt��|�d|���t��|�d
|�dd��t��|�d|���t��dS)N�status�argumentrs�
cookie_keyr�cookie_valuer�z%unexpected values for cookie keys: %rr}rk�
xsrf_token�xsrf_form_html�reverse_url�	typecheck�request_summary)�errors�
check_type�
get_status�int�get_argumentr�list�cookies�keysr��valuesrmr�r}r�rkr�r�r��_request_summaryrAs r8�preparezTypeCheckHandler.prepare;s����������$�/�/�"3�"3�S�9�9�9�	
���
�D�$5�$5�e�$<�$<�l�K�K�K�����d�4�<�+<�+<�+>�+>�&?�&?��&B�C�H�H�H������T�\�-@�-@�-B�-B�(C�(C�A�(F�(L�c�R�R�R����!�!�#�#�$�$���0�0��7�$�,�:K�:K�:M�:M�M���
�	
���+�T�-C�-C�F�-K�-K�U�S�S�S�����d�o�o�f�&=�&=�s�C�C�C�����d�o�u�=�=�=����(�$�*=�*=�*?�*?��E�E�E����
�t�'7�'7��U�'K�'K�S�Q�Q�Q����)�4�+@�+@�+B�+B�C�H�H�H�H�Hr:c�r�|�d|t��|�|j��dS�N�path_component�r�rrZr��rBr�s  r8r[zTypeCheckHandler.getVs5��	
���(�.�,�G�G�G��
�
�4�;�����r:c�r�|�d|t��|�|j��dSr�r�r�s  r8r�zTypeCheckHandler.post\s3�����(�.�,�G�G�G��
�
�4�;�����r:c�T�t|��}||krd|�d|��|j|<dSdS)Nz	expected z, got )r�r�)rBrj�obj�
expected_type�actual_types     r8r�zTypeCheckHandler.check_type`s@���3�i�i���K�'�'�'�9F����� T�D�K�����(�'r:N)rJrKrLr�r[r�r�rHr:r8r�r�:sX������I�I�I�6 � � � � � �U�U�U�U�Ur:r�c��eZdZdd�Zd�ZdS)�DecodeArgHandlerNc��t|��tkrtdt|��z���d|jjvr8|�t
|jjdd����S|S)Nzunexpected type for value: %r�encodingr)r�r�r�r�r��decoder)rBrmrjs   r8�decode_argumentz DecodeArgHandler.decode_argumentgsk����;�;�%����;�d�5�k�k�I�J�J�J����/�/�/��<�<�
�4�<�+A�*�+M�a�+P� Q� Q�R�R�R��Lr:c��d�}|�||��||�d����d���dS)Nc���t|��tkr#dttj|����gSt|��t
krd|gSt
d���)Nr�r�zunknown type)r�r�r	r��b2a_hexrr�)r�s r8�describez&DecodeArgHandler.get.<locals>.describeqsZ���A�w�w�%�����H�,<�Q�,?�,?�!@�!@�A�A��a���L�(�(�!�1�~�%��N�+�+�+r:rs�r3�query)rZr�)rBr�r�s   r8r[zDecodeArgHandler.getpsS��	,�	,�	,�	
�
�
�H�H�S�M�M�H�H�T�=N�=N�u�=U�=U�4V�4V�W�W�X�X�X�X�Xr:r1)rJrKrLr�r[rHr:r8r�r�fs<����������Y�Y�Y�Y�Yr:r�c��eZdZd�ZdS)�LinkifyHandlerc�4�|�dd���dS)N�linkify.htmlzhttp://example.com)�message�r�rAs r8r[zLinkifyHandler.get|s�����N�,@��A�A�A�A�Ar:Nr\rHr:r8r�r�{s(������B�B�B�B�Br:r�c��eZdZd�ZdS)�UIModuleResourceHandlerc�8�|�dddg���dS)N�	page.htmlrur�)�entriesr�rAs r8r[zUIModuleResourceHandler.get�s"�����K�!�Q���0�0�0�0�0r:Nr\rHr:r8r�r��s#������1�1�1�1�1r:r�c��eZdZd�ZdS)�OptionalPathHandlerc�4�|�d|i��dS)Nr3rYr�s  r8r[zOptionalPathHandler.get�s���
�
�F�D�>�"�"�"�"�"r:Nr\rHr:r8r�r��s#������#�#�#�#�#r:r�c��eZdZd�ZdS)�MultiHeaderHandlerc��|�dd��|�dd��|�dd��|�dd��dS)	N�x-overwriterzX-Overwriter��x-multir2zX-Multi�4)�
set_header�
add_headerrAs r8r[zMultiHeaderHandler.get�sX�����
�s�+�+�+����
�q�)�)�)����	�1�%�%�%����	�3�'�'�'�'�'r:Nr\rHr:r8r�r��s#������(�(�(�(�(r:r�c��eZdZd�ZdS)rc
�v�|�dd���F|�dtt|�d���������dS|�dd���9|�dt|�d�������dSt	d���)N�	permanentrQ)r�r�)r�z(didn't get permanent or status arguments)r��redirect�boolr�r�rAs r8r[zRedirectHandler.get�s������[�$�/�/�;��M�M�#��c�$�2C�2C�K�2P�2P�.Q�.Q�)R�)R�M�S�S�S�S�S�
�
�
�x��
.�
.�
:��M�M�#�c�$�*;�*;�H�*E�*E�&F�&F�M�G�G�G�G�G��F�G�G�Gr:Nr\rHr:r8rr�s(������H�H�H�H�Hr:rc�.�eZdZejd���ZdS)�EmptyFlushCallbackHandlerc#�K�|���V�|���V�|�d��|���V�|���V�|�d��dS)N�o�k)r�rZr�rAs r8r[zEmptyFlushCallbackHandler.get�s����
�j�j�l�l�����j�j�l�l�����
�
�3�����j�j�l�l�����j�j�l�l�������C�����r:N)rJrKrLrr�r[rHr:r8r�r��s/�������]�	�	��]�	�	�	r:r�c��eZdZd�ZdS)�HeaderInjectionHandlerc���	|�dd��td���#t$r3}dt|��vr|�d��n�Yd}~dSd}~wwxYw)NzX-Foozfoo
X-Bar: bazzDidn't get expected exceptionzUnsafe header value�ok)r�r��
ValueErrorr�r��rBrs  r8r[zHeaderInjectionHandler.get�s���	��O�O�G�%8�9�9�9��;�<�<�<���	�	�	�$��A���.�.����E�"�"�"�"��#�"�"�"�"�"�����	���s�%'�
A$�(A�A$Nr\rHr:r8r�r��s#����������r:r�c��eZdZd�ZdS)�GetArgumentHandlerc���|�dd��dkr|j}n)|�dd��dkr|j}n|j}|�|dd����dS)N�sourcer�r�rsr�)r��get_query_argument�get_body_argumentr��rBr�s  r8r�zGetArgumentHandler.prepare�sx�����X�t�,�,��7�7��,�F�F�
�
�
�x��
.�
.�&�
8�
8��+�F�F��&�F����F�F�5�)�,�,�-�-�-�-�-r:N�rJrKrLr�rHr:r8rr�s#������.�.�.�.�.r:rc��eZdZd�ZdS)�GetArgumentsHandlerc	���|�t|�d��|�d��|�d�������dS)Nrs�r�r�r�)r�rfr��get_query_arguments�get_body_argumentsrAs r8r�zGetArgumentsHandler.prepare�sg�������*�*�5�1�1��.�.�u�5�5��,�,�U�3�3�
�
�
�	
�	
�	
�	
�	
r:Nr	rHr:r8rr�s#������
�
�
�
�
r:rc���eZdZdZd�Z�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�WSGISafeWebTestzWebTest.COOKIE_SECRETc�V�tdddd���}t|d|j���S)Nz{% module linkify(message) %}zv<html><head></head><body>
{% for e in entries %}
{% module Template("entry.html", entry=e) %}
{% end %}
</body></html>aY{{ set_resources(embedded_css=".entry { margin-bottom: 1em; }",
                 embedded_javascript="js_embed()",
                 css_files=["/base.css", "/foo.css"],
                 javascript_files="/common.js",
                 html_head="<meta>",
                 html_body='<script src="/analytics.js"/>') }}
<div class="entry">...</div>)r�r�z
entry.html�xhtml_escape)�template_loader�
autoescapera)rrf�
COOKIE_SECRET)rB�loaders  r8r?zWSGISafeWebTest.get_app_kwargs�sM��� ?�� �
�
�
�
��&�"�%��,�
�
�
�	
r:c���t�����tj���dSr1��super�tearDownr�_template_loaders�clear�rB�	__class__s �r8rzWSGISafeWebTest.tearDown��4���
���������(�.�.�0�0�0�0�0r:c�V�tdtd���tdtd���tdt��tdt��tdt��td	t
��td
t��tdt��tdtd
di��tdtddd���tdtd
di��tdt��tdt��tdt��g}|S)Nz/typecheck/(.*)r�)rjz/decode_arg/(.*)�
decode_argz/decode_arg_kw/(?P<arg>.*)�/linkify�/uimodule_resourcesz/optional_path/(.+)?�
/multi_headerz	/redirect�/web_redirect_permanentr$�/web_redirect_newpath�
/web_redirectF)r$r��//web_redirect_double_slash�/header_injection�
/get_argumentz/get_arguments)r$r�r�r�r�r�r�r�WebRedirectHandlerr�rr)rB�urlss  r8r>zWSGISafeWebTest.get_handlers�s���!�#3�+�F�F�F��"�$4�<�H�H�H��,�.>�?�?��
�N�+�+��%�'>�?�?��&�(;�<�<���!3�4�4���_�-�-��)�"��/�0�
�
�

��"�/�e�D�D�
�
�

�-�"��/�0�
�
�

�#�%;�<�<���!3�4�4�� �"5�6�6�5
��8�r:c�l�|j|i|��}|���t|j��Sr1)r��rethrowrr�)rBr��kwargsr�s    r8r�zWSGISafeWebTest.fetch_json
s:���4�:�t�.�v�.�.���������8�=�)�)�)r:c��tt|jdd����}|�ddd|zi���}t	|j��}|�|i��|�dddd|zid�	��}dS)
Nr�r�z/typecheck/asdf?foo=barr(zasdf=r*r�r)�r�r$r�)rr&rr�rr�r|)rBr�r�r6s    r8�
test_typeszWSGISafeWebTest.test_typess���!��� 2�F�F�C�C�
�
���:�:�%��'�L�:P�/Q��
�
���8�=�)�)������r�"�"�"��:�:�%���w��5�6��	�
�
���r:c��gd�}|D]\}|�|��}|���t|j��}|�|ddgddgd����]|�d��}|���t|j��}|�|ddgddgd���dS)N)z,/decode_arg/%C3%A9?foo=%C3%A9&encoding=utf-8z'/decode_arg/%E9?foo=%E9&encoding=latin1z*/decode_arg_kw/%E9?foo=%E9&encoding=latin1r�r�r�z/decode_arg/%C3%A9?foo=%C3%A9r��c3a9�r�r/rr�r|�rBr-�req_urlr�r6s     r8�test_decode_argumentz$WSGISafeWebTest.test_decode_argument#s���
�
�
��
�	�	�G��z�z�'�*�*�H��������x�}�-�-�D�����%�y�1�j�)�=T�U�U�
�
�
�
�
�:�:�=�>�>���������8�=�)�)������X�w�/�H�g�;N�O�O�	
�	
�	
�	
�	
r:c�"�ttd��5|�d��}|�|jd��|�d��}|�|jd��ddd��dS#1swxYwYdS)Nz.*Invalid unicode.*z/typecheck/invalid%FF�z/typecheck/invalid?foo=%FF�rrr�r|r�r�s  r8�$test_decode_argument_invalid_unicodez4WSGISafeWebTest.test_decode_argument_invalid_unicode:s���
�w� 5�
6�
6�	1�	1��z�z�"9�:�:�H����X�]�C�0�0�0��z�z�">�?�?�H����X�]�C�0�0�0�		1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�A!B�B�Bc���ddg}|D]\}|�|��}|���t|j��}|�|ddgddgd����]dS)Nz6/decode_arg/1%20%2B%201?foo=1%20%2B%201&encoding=utf-8z0/decode_arg/1%20+%201?foo=1+%2B+1&encoding=utf-8r��1 + 1r�r6r7s     r8�test_decode_argument_plusz)WSGISafeWebTest.test_decode_argument_plusBs���
E�>�
���	�	�G��z�z�'�*�*�H��������x�}�-�-�D�����%�x�0�Z��<R�S�S�
�
�
�
�		�	r:c���|�|j�dd��d��|�|j�dd��d��|�|j�dd��d��|�|j�dd��d	��|�|j�dd
��d��dS)Nr"rsz/decode_arg/foo�*z/decode_arg/42r�z/decode_arg/%E9r�z/decode_arg/%C3%A9r?z/decode_arg/1%20%2B%201)r|r@r�rAs r8�test_reverse_urlz WSGISafeWebTest.test_reverse_urlQs��������-�-�l�E�B�B�DU�V�V�V������-�-�l�B�?�?�AQ�R�R�R������-�-�l�G�D�D�FW�X�X�X�����H� � ��y�9�9�;O�	
�	
�	
�	
����H� � ��w�7�7�9R�	
�	
�	
�	
�	
r:c�f�|�d��}|�|jd��dS)Nr#s3<a href="http://example.com">http://example.com</a>r,r�s  r8�test_uimodule_unescapedz'WSGISafeWebTest.test_uimodule_unescaped\s=���:�:�j�)�)������M�Q�	
�	
�	
�	
�	
r:c�f�|�d��}|�|jd��dS)Nr$s�<html><head><link href="/base.css" type="text/css" rel="stylesheet"/><link href="/foo.css" type="text/css" rel="stylesheet"/>
<style type="text/css">
.entry { margin-bottom: 1em; }
</style>
<meta>
</head><body>


<div class="entry">...</div>


<div class="entry">...</div>

<script src="/common.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
js_embed()
//]]>
</script>
<script src="/analytics.js"/>
</body></html>r,r�s  r8�test_uimodule_resourcesz'WSGISafeWebTest.test_uimodule_resourcesbs@���:�:�3�4�4������M�
�	
�	
�	
�	
�	
r:c��|�|�d��ddi��|�|�d��ddi��dS)Nz/optional_path/foor3rsz/optional_path/r�rAs r8�test_optional_pathz"WSGISafeWebTest.test_optional_path~sW��������)=�>�>��&�@Q�R�R�R�������):�;�;�g�t�_�M�M�M�M�Mr:c���|�d��}|�|jdd��|�|j�d��ddg��dS)Nr%r��2r��3r�r/r�s  r8�test_multi_headerz!WSGISafeWebTest.test_multi_header�sb���:�:�o�.�.������)�-�8�#�>�>�>�����)�2�2�9�=�=��S�z�J�J�J�J�Jr:c�2�|�dd���}|�|jd��|�dd���}|�|jd��|�dd���}|�|jd��dS)	Nz/redirect?permanent=1Frf�-z/redirect?permanent=0rhz/redirect?status=307i3�r�r|r�r�s  r8�
test_redirectzWSGISafeWebTest.test_redirect�s����:�:�5��:�N�N��������,�,�,��:�:�5��:�N�N��������,�,�,��:�:�4�u�:�M�M��������,�,�,�,�,r:c�R�|�dd���}|�|jd��|�|jdd��|�dd���}|�|jd��|�|jdd��dS)	Nr&FrfrOrir'r(rh�r�r|r�r$r�s  r8�test_web_redirectz!WSGISafeWebTest.test_web_redirect�s����:�:�7�%�:�P�P��������,�,�,�����)�*�5�7N�O�O�O��:�:�o��:�F�F��������,�,�,�����)�*�5�7N�O�O�O�O�Or:c��|�dd���}|�|jd��|�|jdd��dS)Nr)FrfrOrir'rSr�s  r8�test_web_redirect_double_slashz.WSGISafeWebTest.test_web_redirect_double_slash�sU���:�:�;�e�:�T�T��������,�,�,�����)�*�5�7N�O�O�O�O�Or:c�f�|�d��}|�|jd��dS)Nr*r�r,r�s  r8�test_header_injectionz%WSGISafeWebTest.test_header_injection�s2���:�:�1�2�2��������.�.�.�.�.r:c��|�d��}|�|jd��|�d��}|�|jd��|�d��}|�|jd��tj�t
d�����}|�dd	|�
��}|�|jd��|�dd	|�
��}|�t|j��t
d
dgd
gdg�����dS)Nz/get_argument?foo=barrtz/get_argument?foo=r:r+r+rX�rsr�r��helloz/get_arguments?foo=barr
r
)r�r|r��urllib�parse�	urlencoderfr)rBr�r�s   r8�test_get_argumentz!WSGISafeWebTest.test_get_argument�s3���:�:�5�6�6��������/�/�/��:�:�2�3�3��������,�,�,��:�:�o�.�.�������
�3�3�3��|�%�%�d�w�&7�&7�&7�8�8���:�:�5�f�4�:�P�P��������1�1�1��:�:�6�v�D�:�Q�Q�������
�&�&��%��)�%���y�I�I�I�	
�	
�	
�	
�	
r:c��tj�td�����}|�dd|���}|�|jd��|�dd|���}|�|jd��|�d	d|���}|�|jd
��dS)NrXrZz"/get_argument?source=query&foo=barr�r�rtz/get_argument?source=query&foo=r:z/get_argument?source=queryr+�r\r]r^rfr�r|r��rBr�r�s   r8�test_get_query_argumentsz(WSGISafeWebTest.test_get_query_arguments�s����|�%�%�d�w�&7�&7�&7�8�8���:�:�0��d��
�
��	
������/�/�/��:�:�-�f�4��
�
��	
������,�,�,��:�:�:�6�PT�:�U�U�������
�3�3�3�3�3r:c�B�tj�td�����}|�dd|���}|�|jd��tj�td�����}|�dd|���}|�|jd��tj�t����}|�dd|���}|�|jd	��dS)
Nr
rZz#/get_argument?source=body&foo=hellor�r�rt�r:r+rarbs   r8�test_get_body_argumentsz'WSGISafeWebTest.test_get_body_arguments�s���|�%�%�d�u�o�o�o�6�6���:�:�1�&�t��
�
��	
������/�/�/��|�%�%�d�r�l�l�l�3�3���:�:�1�&�t��
�
��	
������,�,�,��|�%�%�d�f�f�-�-���:�:�1�&�t��
�
��	
�����
�3�3�3�3�3r:c���|�d��}|�d|j�dd����|�d|j�dd����dS)Nr+�Accept-Encoding�Varyre�gzip�Content-Encoding)r��assertNotInr$r[r�s  r8�test_no_gzipzWSGISafeWebTest.test_no_gzip�sm���:�:�o�.�.�����*�H�,<�,@�,@���,L�,L�M�M�M������!1�!5�!5�6H�"�!M�!M�N�N�N�N�Nr:)rJrKrLrr?rr>r�r3r9r=r@rCrErGrIrMrQrTrVrXr_rcrfrm�
__classcell__�rs@r8rr�s|�������+�M�
�
�
�41�1�1�1�1����>*�*�*�

�
�
�"
�
�
�.1�1�1�
�
�
�	
�	
�	
�
�
�
�
�
�
�8N�N�N�K�K�K�
-�-�-�P�P�P�P�P�P�
/�/�/�
�
�
�(
4�
4�
4�4�4�4�&O�O�O�O�O�O�Or:rc��eZdZd�Zd�ZdS)�NonWSGIWebTestsc��dtfgS)N�/empty_flush)r�rAs r8r>zNonWSGIWebTests.get_handlers�s���!:�;�<�<r:c�f�|�d��}|�|jd��dS)Nrsr�r,r�s  r8�test_empty_flushz NonWSGIWebTests.test_empty_flush�s1���:�:�n�-�-��������.�.�.�.�.r:N)rJrKrLr>rurHr:r8rqrq�s2������=�=�=�/�/�/�/�/r:rqc�&�eZdZd�Zd�Zd�Zd�ZdS)�ErrorResponseTestc���Gd�dt��}Gd�dt��}Gd�dt��}td|��td|��td	|��gS)
Nc��eZdZd�ZdS)�6ErrorResponseTest.get_handlers.<locals>.DefaultHandlerc��|�dd��r/tt|�d�������ddzdS�Nr�rur)r�r r�rAs r8r[z:ErrorResponseTest.get_handlers.<locals>.DefaultHandler.get�sL���$�$�X�t�4�4�F�#�C��(9�(9�(�(C�(C�$D�$D�E�E�E��A����r:Nr\rHr:r8�DefaultHandlerrz�s#������
�
�
�
�
r:r}c��eZdZd�Zd�ZdS)�9ErrorResponseTest.get_handlers.<locals>.WriteErrorHandlerc��|�dd��r7|�t|�d������dSddzdSr|)r�r_r�rAs r8r[z=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.get�sU���$�$�X�t�4�4���O�O�C��(9�(9�(�(C�(C�$D�$D�E�E�E�E�E���E�E�E�Er:c��|�dd��d|vr+|�d|ddjz��dS|�d|z��dS)N�Content-Type�
text/plain�exc_infoz
Exception: %srz
Status: %d)r�rZrJ�rB�status_coder0s   r8�write_errorzEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_error�sh�������=�=�=���'�'��J�J���
�1C�A�1F�1O�O�P�P�P�P�P��J�J�|�k�9�:�:�:�:�:r:N�rJrKrLr[r�rHr:r8�WriteErrorHandlerr�s2������
�
�
�
;�
;�
;�
;�
;r:r�c��eZdZd�Zd�ZdS)�?ErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandlerc��ddzdS�NrurrHrAs r8r[zCErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.get�s���A����r:c� �td���)Nzexception in write_error�r�r�s   r8r�zKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_error�s��� :�;�;�;r:Nr�rHr:r8�FailedWriteErrorHandlerr��s2������
�
�
�
<�
<�
<�
<�
<r:r��/default�/write_error�/failed_write_error)rr$)rBr}r�r�s    r8r>zErrorResponseTest.get_handlers�s���	�	�	�	�	�^�	�	�	�	;�	;�	;�	;�	;��	;�	;�	;�	<�	<�	<�	<�	<�n�	<�	<�	<�
�
�N�+�+��� 1�2�2��%�'>�?�?�
�	
r:c�*�ttd��5|�d��}|�|jd��|�d|jv��|�d��}|�|jd��|�d|jv��|�d��}|�|jd	��|�d
|jv��ddd��dS#1swxYwYdS)N�Uncaught exceptionr�r^s500: Internal Server Errorz/default?status=503�s503: Service Unavailablez/default?status=435i�s435: Unknown)rrr�r|r�r�r�r�s  r8�test_defaultzErrorResponseTest.test_defaultsA��
�w� 4�
5�
5�	>�	>��z�z�*�-�-�H����X�]�C�0�0�0��O�O�9�X�]�J�K�K�K��z�z�"7�8�8�H����X�]�C�0�0�0��O�O�7�8�=�H�I�I�I��z�z�"7�8�8�H����X�]�C�0�0�0��O�O�O�x�}�<�=�=�=�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	>�	>s�C%D�D�Dc��ttd��5|�d��}|�|jd��|�d|j��|�d��}|�|jd��|�d|j��ddd��dS#1swxYwYdS)Nr�r�r^sException: ZeroDivisionErrorz/write_error?status=503r�sStatus: 503�rrr�r|r�r�r�s  r8�test_write_errorz"ErrorResponseTest.test_write_errors���
�w� 4�
5�
5�	<�	<��z�z�.�1�1�H����X�]�C�0�0�0����<�h�m�L�L�L��z�z�";�<�<�H����X�]�C�0�0�0����^�X�]�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s�BB:�:B>�B>c��ttd��5|�d��}|�|jd��|�d|j��ddd��dS#1swxYwYdS)Nr�r�r^r:r�r�s  r8�test_failed_write_errorz)ErrorResponseTest.test_failed_write_error s���
�w� 4�
5�
5�	1�	1��z�z�"7�8�8�H����X�]�C�0�0�0����S�(�-�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�AA/�/A3�6A3N)rJrKrLr>r�r�r�rHr:r8rwrw�sQ������ 
� 
� 
�D>�>�>�<�<�<�1�1�1�1�1r:rwc��eZdZdZej�ej�e��d��Z	d�Z
d�Zd�Zd�Z
d�Zd�Zd	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d�Z&d �Z'd!�Z(d"�Z)d#�Z*e+j,ej-d$kd%��d&���Z.d'S)(�StaticFileTests�63a36e950e134b5217e33c763e88840c10a07d80e6057d92b9ac97508de7fb1fa6f0e9b7531e169657165ea764e8963399cb6d921ffe6078425aaafe54c04563�staticc��Gd�dt��}Gd�d|��}Gd�dt��}d|fd|fd	|fd
ttd���fgS)
Nc��eZdZd�ZdS)�5StaticFileTest.get_handlers.<locals>.StaticUrlHandlerc��t|�dd����}|�|�||�����dS)N�include_versionr)r�)r�r�rZ�
static_url)rBr3�with_vs   r8r[z9StaticFileTest.get_handlers.<locals>.StaticUrlHandler.get2sH���T�.�.�/@�#�F�F�G�G���
�
�4�?�?�4��?�H�H�I�I�I�I�Ir:Nr\rHr:r8�StaticUrlHandlerr�1s(������
J�
J�
J�
J�
Jr:r�c��eZdZdZdS)�=StaticFileTest.get_handlers.<locals>.AbsoluteStaticUrlHandlerTN)rJrKrL�include_hostrHr:r8�AbsoluteStaticUrlHandlerr�6s�������L�L�Lr:r�c��eZdZd�ZdS)�=StaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandlerc��t|�d����}||_|�|��}|�||���}||kr"|�td����S|jjdz}t|��}|�	|d|��}|�	|d|��}|r
|dko|dk}	n|dko|dk}	|�t|	����dS)Nr�)r�Fz://r���)
r�r�r�r�rZr�r��protocolr3�find)
rBr3�
do_include�regular_url�override_urlr��protocol_length�
check_regular�check_override�results
          r8r[zAStaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandler.get:s	��!�$�"3�"3�N�"C�"C�D�D�
�(2�N��!�"�o�o�d�3�3��#���t�*��M�M���;�.�.��:�:�c�%�j�j�1�1�1��<�0�5�8��"%�h�-�-�� +� 0� 0��1�o� N� N�
�!-�!2�!2�8�Q��!P�!P���I�+�q�0�H�]�b�5H�F�F�+�r�1�H�m�q�6H�F��
�
�3�v�;�;�'�'�'�'�'r:Nr\rHr:r8�OverrideStaticUrlHandlerr�9s#������
(�
(�
(�
(�
(r:r��/static_url/(.*)z/abs_static_url/(.*)z/override_static_url/(.*)z/root_static/(.*)rQ)r3)rrrf)rBr�r�r�s    r8r>zStaticFileTest.get_handlers0s���	J�	J�	J�	J�	J�~�	J�	J�	J�
	 �	 �	 �	 �	 �'7�	 �	 �	 �	(�	(�	(�	(�	(�~�	(�	(�	(�, �!1�2�
#�%=�>�
(�*B�C�
 �"3�T�s�^�^�^�D�	
�	
r:c�<�ttd�����S)Nr�)�static_path�rfr9rAs r8r?zStaticFileTest.get_app_kwargsUs����� 1� 1�2�2�2�2r:c�&�|�d��}|�d|jv��|�d��}|�d|jv��|�|j�d��d��dS)N�/robots.txtsDisallow: /�/static/robots.txtr�r�)r�r�r�r|r$r[r�s  r8�test_static_filesz StaticFileTest.test_static_filesXs����:�:�m�,�,������(�-�7�8�8�8��:�:�2�3�3������(�-�7�8�8�8�����)�-�-�n�=�=�|�L�L�L�L�Lr:c��|�d��}|�|j�d��d��|�d��}|�|j�d��d��|�d��}|�|j�d��td��v��dS)Nz/static/sample.xml.gzr�zapplication/gzipz/static/sample.xml.bz2zapplication/octet-streamz/static/sample.xml)ztext/xmlzapplication/xml)r�r|r$r[r�r�r�s  r8�test_static_compressed_filesz+StaticFileTest.test_static_compressed_files`s����:�:�5�6�6������)�-�-�n�=�=�?Q�R�R�R��:�:�6�7�7������� � ��0�0�2L�	
�	
�	
��:�:�2�3�3������� � ��0�0�C�8W�4X�4X�X�	
�	
�	
�	
�	
r:c�v�|�d��}|�|jd|jz��dS)Nz/static_url/robots.txts/static/robots.txt?v=)r�r|r��robots_txt_hashr�s  r8�test_static_urlzStaticFileTest.test_static_urlms;���:�:�6�7�7�������(@�4�CW�(W�X�X�X�X�Xr:c��|�d��}|�|jt|�d����dz|jz��dS)Nz/abs_static_url/robots.txtrQsstatic/robots.txt?v=)r�r|r�rr�r�r�s  r8�test_absolute_static_urlz'StaticFileTest.test_absolute_static_urlqs`���:�:�:�;�;������M�
�$�,�,�s�#�#�
$�
$�'>�
>��AU�
U�	
�	
�	
�	
�	
r:c�f�|�d��}|�|jd��dS)Nz(/static_url/robots.txt?include_version=0s/static/robots.txtr,r�s  r8�test_relative_version_exclusionz.StaticFileTest.test_relative_version_exclusionxs3���:�:�H�I�I�������(=�>�>�>�>�>r:c��|�d��}|�|jt|�d��dz����dS)Nz,/abs_static_url/robots.txt?include_version=0rQ�static/robots.txt)r�r|r�rr�r�s  r8�test_absolute_version_exclusionz.StaticFileTest.test_absolute_version_exclusion|sL���:�:�L�M�M��������T�\�\�#�->�->�AT�-T�(U�(U�V�V�V�V�Vr:c�Z�|�d��|�d��dS)NFT)�_trigger_include_host_checkrAs r8�test_include_host_overridez)StaticFileTest.test_include_host_override�s0���(�(��/�/�/��(�(��.�.�.�.�.r:c��d}|�|t|��z��}|�|jt	td������dS)Nz//override_static_url/robots.txt?include_host=%sT)r�r�r|r�rr�)rBr�r3r�s    r8r�z*StaticFileTest._trigger_include_host_check�sO��@���:�:�d�S��%6�%6�6�7�7��������S��Y�Y���8�8�8�8�8r:c��|j|ddi|��}|j|ddi|��}t��}tj|j|j��D],}|�d��r|�|���-|D]�}|�|j�|��|j�|��|�d|j�|���d|j�|���d�����|S)z�Performs a GET and HEAD request and returns the GET response.

        Fails if any ``Content-*`` headers returned by the two requests
        differ.
        r��HEAD�GETzContent-z differs between GET (z) and HEAD (�))	r�r��	itertools�chainr$�
startswith�addr|r[)rBr�r0�
head_response�get_response�content_headers�hs       r8�get_and_headzStaticFileTest.get_and_head�s(��#��
�D�B��B�6�B�B�
�!�t�z�4�@��@��@�@���%�%�����!6��8L�M�M�	'�	'�A��|�|�J�'�'�
'��#�#�A�&�&�&�� �	�	�A�����%�)�)�!�,�,��$�(�(��+�+��1�1�m�+�/�/��2�2�2�2�L�4H�4L�4L�Q�4O�4O�4O�4O�Q�
�
�
�
��r:c���|�d��}|�dd|jdi���}|�|jd��|�d|jv��dS)Nr��If-Modified-Since�
Last-Modifiedr*�0�Content-Length)r�r$r|r�r��rB�	response1�	response2s   r8�!test_static_304_if_modified_sincez0StaticFileTest.test_static_304_if_modified_since�s~���%�%�&:�;�;�	��%�%� �(�)�*;�O�*L�M�&�
�
�	�	
������-�-�-����(�	�0A�A�B�B�B�B�Br:c��|�d��}|�dd|jdi���}|�|jd��dS)Nr��
If-None-Match�Etagr*r��r�r$r|r�r�s   r8�test_static_304_if_none_matchz,StaticFileTest.test_static_304_if_none_match�sb���%�%�&:�;�;�	��%�%� �?�I�<M�f�<U�*V�&�
�
�	�	
������-�-�-�-�-r:c��|�d��}|�dd|jdd����}|�|jd��dS)Nr�z
"MISMATCH"r�)r�r�r*r�r�r�s   r8�!test_static_304_etag_modified_bugz0StaticFileTest.test_static_304_etag_modified_bug�sk���%�%�&:�;�;�	��%�%� �!-�%.�%6��%G���&�
�
�	�	
������-�-�-�-�-r:c�n�|�dddi���}|�|jd��dS)Nr�r�zFri, 01 Jan 1960 00:00:00 GMTr*r��r�r|r�r�s  r8�'test_static_if_modified_since_pre_epochz6StaticFileTest.test_static_if_modified_since_pre_epoch�sJ���$�$� �(�*I�J�%�
�
��	
������,�,�,�,�,r:c�l�tjtd����}|�ddt	|jdz
��i���}|�|jd��|�ddt	|jdz��i���}|�|jd��dS)Nr�r�r�rur*r�r�)r2�statr9r�r�st_mtimer|r�)rBr�r�s   r8�'test_static_if_modified_since_time_zonez6StaticFileTest.test_static_if_modified_since_time_zone�s���
�w�w�2�3�3�4�4���$�$� �(�*:�4�=�1�;L�*M�*M�N�%�
�
��	
������,�,�,��$�$� �(�*:�4�=�1�;L�*M�*M�N�%�
�
��	
������,�,�,�,�,r:c��|�d��}|�t|j�d����d|jzdz��dS)Nr�r��")r�r|rr$r[r�r�s  r8�test_static_etagzStaticFileTest.test_static_etag�sc���$�$�%9�:�:�������!�%�%�f�-�-�.�.��t�7K�0K�d�0R�	
�	
�	
�	
�	
r:c���|�dddi���}|�|jd��|�|jd��|�t	|j�d����d|jzdz��|�|j�d	��d
��|�|j�d��d��dS)
Nr��Rangez	bytes=0-9r*��s
User-agentr�r�r��10�
Content-Rangezbytes 0-9/26)r�r|r�r�rr$r[r�r�s  r8�test_static_with_rangez%StaticFileTest.test_static_with_range�s����$�$� �7�K�*@�%�
�
��	
������,�,�,������
�6�6�6������!�%�%�f�-�-�.�.��t�7K�0K�d�0R�	
�	
�	
�	
����)�-�-�.>�?�?��F�F�F�����)�-�-�o�>�>��O�O�O�O�Or:c�2�|�dddi���}|�|jd��tj�|jd��}t|��5}|�|jt|�
������ddd��n#1swxYwY|�|j�d��d��|�|j�d	��d��dS)
Nr�r�zbytes=0-r*r��
robots.txtr��26r��
r�r|r�r2r3r4�
static_dir�openr�r�readr$r[�rBr��robots_file_path�fs    r8� test_static_with_range_full_filez/StaticFileTest.test_static_with_range_full_file�s4���$�$� �7�J�*?�%�
�
��
	
������,�,�,��7�<�<����F�F��
�"�
#�
#�	<�q����X�]�D������N�N�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�����)�-�-�.>�?�?��F�F�F�����)�-�-�o�>�>��E�E�E�E�E��);B0�0B4�7B4c�2�|�dddi���}|�|jd��tj�|jd��}t|��5}|�|jt|�
������ddd��n#1swxYwY|�|j�d��d��|�|j�d	��d��dS)
Nr�r�zbytes=0-10000000r*r�rr�rr�rrs    r8�$test_static_with_range_full_past_endz3StaticFileTest.test_static_with_range_full_past_end�s5���$�$� �7�4F�*G�%�
�
��	
������,�,�,��7�<�<����F�F��
�"�
#�
#�	<�q����X�]�D������N�N�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�����)�-�-�.>�?�?��F�F�F�����)�-�-�o�>�>��E�E�E�E�Er
c	�B�|�dddi���}|�|jd��tj�|jd��}t|��5}|�|jt|�
��dd�����ddd��n#1swxYwY|�|j�d��d	��|�|j�d
��d��dS)Nr�r�zbytes=1-10000000r*r�rrur��25r�z
bytes 1-25/26rrs    r8�'test_static_with_range_partial_past_endz6StaticFileTest.test_static_with_range_partial_past_end�sO���$�$� �7�4F�*G�%�
�
��	
������,�,�,��7�<�<����F�F��
�"�
#�
#�	@�q����X�]�D������!�"�"��,>�,>�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�����)�-�-�.>�?�?��F�F�F�����)�-�-�o�>�>��P�P�P�P�Ps�)AB8�8B<�?B<c�&�|�dddi���}|�|jd��|�|j�d��d��|�|j�d��d	��dS)
Nr�r�z	bytes=22-r*�: /
r�r�r��bytes 22-25/26�r�r|r�r$r[r�s  r8�test_static_with_range_end_edgez.StaticFileTest.test_static_with_range_end_edge
s����$�$� �7�K�*@�%�
�
��	
������1�1�1�����)�-�-�.>�?�?��E�E�E�����)�-�-�o�>�>�@P�Q�Q�Q�Q�Qr:c�&�|�dddi���}|�|jd��|�|j�d��d��|�|j�d��d	��dS)
Nr�r�zbytes=-4r*rr�r�r�rrr�s  r8�test_static_with_range_neg_endz-StaticFileTest.test_static_with_range_neg_ends����$�$� �7�J�*?�%�
�
��	
������1�1�1�����)�-�-�.>�?�?��E�E�E�����)�-�-�o�>�>�@P�Q�Q�Q�Q�Qr:c�2�|�dddi���}|�|jd��tj�|jd��}t|��5}|�|jt|�
������ddd��n#1swxYwY|�|j�d��d��|�|j�d	��d��dS)
Nr�r�zbytes=-1000000r*r�rr�rr�rrs    r8�%test_static_with_range_neg_past_startz4StaticFileTest.test_static_with_range_neg_past_starts5���$�$� �7�4D�*E�%�
�
��	
������,�,�,��7�<�<����F�F��
�"�
#�
#�	<�q����X�]�D������N�N�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�����)�-�-�.>�?�?��F�F�F�����)�-�-�o�>�>��E�E�E�E�Er
c�n�|�dddi���}|�|jd��dS)Nr�r�r�r*r�r�r�s  r8�test_static_invalid_rangez(StaticFileTest.test_static_invalid_range%s>���$�$�%9�G�V�CT�$�U�U��������,�,�,�,�,r:c���|�dddi���}|�|j�d��d��|�|jd��dS)Nr�r�zbytes=-0r*r��
bytes */26�)r�r|r$r[r�r�s  r8�+test_static_unsatisfiable_range_zero_suffixz:StaticFileTest.test_static_unsatisfiable_range_zero_suffix)sm���$�$� �7�J�*?�%�
�
��	
����)�-�-�o�>�>��M�M�M�������,�,�,�,�,r:c���|�dddi���}|�|jd��|�|j�d��d��dS)Nr�r�zbytes=26r*rr�r�r�r|r�r$r[r�s  r8�-test_static_unsatisfiable_range_invalid_startz<StaticFileTest.test_static_unsatisfiable_range_invalid_start0sm���$�$� �7�J�*?�%�
�
��	
������,�,�,�����)�-�-�o�>�>��M�M�M�M�Mr:c���|�dddi���}|�|jd��|�|j�d��d��dS)Nr�r�z
bytes=10-3r*rr�rr r�s  r8�3test_static_unsatisfiable_range_end_less_than_startzBStaticFileTest.test_static_unsatisfiable_range_end_less_than_start7sm���$�$� �7�L�*A�%�
�
��	
������,�,�,�����)�-�-�o�>�>��M�M�M�M�Mr:c�T�|�dd���}|�|jd��|�|jd��|�|jdd��|�t|jd��d	|jzd	z��dS)
Nr�r��r�r�r:r�rr�r��r�r|r�r�r$rr�r�s  r8�test_static_headzStaticFileTest.test_static_head>s����:�:�2�6�:�B�B��������,�,�,�������,�,�,�����)�*:�;�T�B�B�B������!�&�)�*�*�D�4�3G�,G�$�,N�	
�	
�	
�	
�	
r:c�Z�|�ddddi���}|�|jd��|�|jd��|�|jdd	��|�t|jd
��d|jzdz��dS)Nr�r�r��	bytes=1-4)r�r$r�r:r�r�r�r�r&r�s  r8�test_static_head_rangez%StaticFileTest.test_static_head_rangeHs����:�:� ��'�;�9O��
�
��	
������,�,�,�������,�,�,�����)�*:�;�S�A�A�A������!�&�)�*�*�D�4�3G�,G�$�,N�	
�	
�	
�	
�	
r:c�f�|�ddd|jzdzd����}|�|jd��|�|jd��|�d|jv��|�t|jd	��d|jzdz��dS)
Nr�r)r�)r�r�r*r�r:r�r�)r�r�r|r�r�r�r$rr�s  r8�test_static_range_if_none_matchz.StaticFileTest.test_static_range_if_none_matchSs����$�$� �$�!%��(<�!<�t�!C���%�
�
��	
������,�,�,�������,�,�,����(��0@�@�A�A�A������!�&�)�*�*�D�4�3G�,G�$�,N�	
�	
�	
�	
�	
r:c�f�|�d��}|�|jd��dS)Nz
/static/blarg�r�r�s  r8�test_static_404zStaticFileTest.test_static_404bs3���$�$�_�5�5��������,�,�,�,�,r:c��|j���t��|_ttd��5|�d��}ddd��n#1swxYwY|�|jd��dS)Nz.*not in root static directoryz/static/../static_foo.txt�)�http_clientr�rrrr�r|r�r�s  r8�test_path_traversal_protectionz-StaticFileTest.test_path_traversal_protectionfs���	
���� � � �0�2�2���
�w� @�
A�
A�	F�	F��(�(�)D�E�E�H�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�	
������,�,�,�,�,s�A$�$A(�+A(�posixznon-posix OSc�d�tj�tj�tj�t
����d��}|�dtj�	|��z��}|�
|jd��dS)Nr�z/root_staticr�)r2r3r4r5�abspathr6r�r\r]r�r|r�)rBr3r�s   r8�test_root_static_pathz$StaticFileTest.test_root_static_pathss����w�|�|��G�O�O�B�G�O�O�H�5�5�6�6�8K�
�
���$�$�^�f�l�6H�6H��6N�6N�%N�O�O��������,�,�,�,�,r:N)/rJrKrLr�r2r3r4r5r6rr>r?r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	rrrrrrrr!r#r'r*r,r/r3�unittest�skipIfrjr7rHr:r8r�r�'s�������	L������b�g�o�o�h�7�7��B�B�J�#
�#
�#
�J3�3�3�M�M�M�
�
�
�Y�Y�Y�
�
�
�?�?�?�W�W�W�/�/�/�9�9�9�
���*C�C�C�.�.�.�	.�	.�	.�-�-�-�-�-�-�$
�
�
�
P�
P�
P�F�F�F�	F�	F�	F�	Q�	Q�	Q�R�R�R�R�R�R�	F�	F�	F�-�-�-�-�-�-�N�N�N�N�N�N�
�
�
�	
�	
�	
�

�

�

�-�-�-�-�-�-��X�_�R�W��'��8�8�	-�	-�9�8�	-�	-�	-r:r�c�&�eZdZd�Zd�Zd�Zd�ZdS)�StaticDefaultFilenameTestc�Z�ttd��td������S�Nr��
index.html��default_filename)r��static_handler_argsr�rAs r8r?z(StaticDefaultFilenameTest.get_app_kwargs��2�����)�)� $�l� C� C� C�
�
�
�	
r:c��gSr1rHrAs r8r>z&StaticDefaultFilenameTest.get_handlers�rIr:c��|�dd���}|�|jd��|�d|j��dS)N�/static/dir/Frfr�sthis is the index
�r�r|r�r�r�s  r8�test_static_default_filenamez6StaticDefaultFilenameTest.test_static_default_filename�sN���:�:�n�u�:�E�E��������,�,�,����/���?�?�?�?�?r:c���|�dd���}|�|jd��|�|jd�d����dS)N�/static/dirFrfrOrirE)r�r|r�r�r$�endswithr�s  r8�test_static_default_redirectz6StaticDefaultFilenameTest.test_static_default_redirect�s]���:�:�m�e�:�D�D��������,�,�,�����(��4�=�=�n�M�M�N�N�N�N�Nr:N)rJrKrLr?r>rGrKrHr:r8r;r;�sX������
�
�
����@�@�@�
O�O�O�O�Or:r;c�&�eZdZd�Zd�Zd�Zd�ZdS)�StaticDefaultFilenameRootTestc��ttj�t	d����td���d���S)Nr�r>r?rQ)r�rA�static_url_prefix)rfr2r3r6r9rAs r8r?z,StaticDefaultFilenameRootTest.get_app_kwargs�sC���������(9�(9�:�:� $�l� C� C� C�!�
�
�
�	
r:c��gSr1rHrAs r8r>z*StaticDefaultFilenameRootTest.get_handlers�rIr:c��t��Sr1rrAs r8�get_http_clientz-StaticDefaultFilenameRootTest.get_http_client�s��%�&�&�&r:c��ttd��5|�dtj�t���d�d���}ddd��n#1swxYwY|�|jd��dS)Nz/.*cannot redirect path with two initial slashesz//evil.com/../rIFrfr1)	rrr�r2r3r5r6r|r�r�s  r8�test_no_open_redirectz3StaticDefaultFilenameRootTest.test_no_open_redirect�s���
�w� Q�
R�
R�	�	��z�z�G������!:�!:�G�G�G�!&�"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
	
������,�,�,�,�,s�>A � A$�'A$N)rJrKrLr?r>rRrTrHr:r8rMrM�sP������
�
�
����'�'�'�

-�
-�
-�
-�
-r:rMc� �eZdZd�Zd�Zd�ZdS)�StaticFileWithPathTestc�Z�ttd��td������Sr=r�rAs r8r?z%StaticFileWithPathTest.get_app_kwargs�rBr:c�6�dtdtd��ifgS)Nz	/foo/(.*)r3z
templates/)rr9rAs r8r>z#StaticFileWithPathTest.get_handlers�s ���/�&�'�,�:O�:O�1P�Q�R�Rr:c�f�|�d��}|�|jd��dS)Nz/foo/utf8.htmlsHéllo
r,r�s  r8�
test_servez!StaticFileWithPathTest.test_serve�s3���:�:�.�/�/�������(9�:�:�:�:�:r:N)rJrKrLr?r>rZrHr:r8rVrV�sD������
�
�
�S�S�S�;�;�;�;�;r:rVc�&�eZdZd�Zd�Zd�Zd�ZdS)�CustomStaticFileTestc�f�Gd�dt��}Gd�dt��}||_d|fgS)Nc��eZdZed���Zd�Zed���Zd�Zed
d���Zd�Z	d�Z
ed	���ZdS)�>CustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandlerc��|�||��}|�d��}|d|�}||dzd�}d|�d|�d|��S)N�.ruz/static/)�get_version�rindex)�clsrbr3�version_hash�extension_index�before_version�
after_versions       r8�make_static_urlzNCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.make_static_url�sj��"���x��>�>��"&�+�+�c�"2�"2��!%�&6��&6�!7�� $�o��&9�%<�%<� =�
�
�"�N�N� �L�L�!�M��r:c��|�d��}|�dd|��}|d|��||d���S)Nrar)rc)rB�url_pathrf�
version_indexs    r8�parse_url_pathzMCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.parse_url_path�sM��"*�/�/�#�"6�"6�� (����Q�� H� H�
�!)�.�=�.�!9�!9�8�O�DT�DT�;U�;U�V�Vr:c��d|zS)NzCustomStaticFileTest:rH�rdrbr3s   r8�get_absolute_pathzPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_absolute_path�s
��.��5�5r:c��|Sr1rH)rB�root�
absolute_paths   r8�validate_absolute_pathzUCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.validate_absolute_path�s��$�$r:Nc�B�|�|�J�|dkrdStd|z���)N�CustomStaticFileTest:foo.txtrt�unexpected path %rr�)rBr3�start�ends    r8�get_contentzJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content�s4���}������9�9�9�!�6�� 4�t� ;�<�<�<r:c�J�|jdkrdStd|jz���)Nrvr2rw)rsr�rAs r8�get_content_sizezOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_size�s-���%�)G�G�G��1�� 4�t�7I� I�J�J�Jr:c��dSr1rHrAs r8�get_modified_timezPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_modified_time�s���tr:c��dS)N�42rHros   r8rbzJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_version�s���tr:�NN)rJrKrL�classmethodrirmrprtrzr|r~rbrHr:r8�MyStaticFileHandlerr_�s�������
�	
�	
��[�	
�
W�
W�
W�
�
6�
6��[�
6�
%�
%�
%��
=�
=�
=��[�
=�
K�
K�
K�

�
�
��
�
��[�
�
�
r:r�c��eZdZd�ZdS)�;CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandlerc�V�|�|�|����dSr1)rZr�r�s  r8r[z?CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandler.get�s&���
�
�4�?�?�4�0�0�1�1�1�1�1r:Nr\rHr:r8r�r��s#������
2�
2�
2�
2�
2r:r�r�)rr�static_handler_class)rBr�r�s   r8r>z!CustomStaticFileTest.get_handlers�sq��*	�*	�*	�*	�*	�"3�*	�*	�*	�X	2�	2�	2�	2�	2�~�	2�	2�	2�%8��!�#�%5�6�7�7r:c�.�td|j���S)N�dummy)r�r�)rfr�rAs r8r?z#CustomStaticFileTest.get_app_kwargs�s����d�>W�X�X�X�Xr:c�f�|�d��}|�|jd��dS)Nz/static/foo.42.txtrtr,r�s  r8rZzCustomStaticFileTest.test_serve�s2���:�:�2�3�3��������/�/�/�/�/r:c���ttdd���5|�d��}|�|jd��ddd��dS#1swxYwYdS)NzCould not open static fileF)�requiredz/static_url/foo.txts/static/foo.42.txt)rrr�r|r�r�s  r8r�z$CustomStaticFileTest.test_static_url�s���
�w� <�u�
M�
M�
M�	C�	C��z�z�"7�8�8�H����X�]�,A�B�B�B�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cs�1A�A�AN)rJrKrLr>r?rZr�rHr:r8r\r\�sY������38�38�38�jY�Y�Y�0�0�0�C�C�C�C�Cr:r\c�6�eZdZGd�de��Zd�Zd�ZdS)�HostMatchingTestc��eZdZd�Zd�ZdS)�HostMatchingTest.Handlerc��||_dSr1)�reply)rBr�s  r8rZz#HostMatchingTest.Handler.initializes
���D�J�J�Jr:c�:�|�|j��dSr1)rZr�rAs r8r[zHostMatchingTest.Handler.get	s���J�J�t�z�"�"�"�"�"r:N)rJrKrLrZr[rHr:r8rSr�s2������	�	�	�	#�	#�	#�	#�	#r:rSc�&�dtjddifgS)Nr�r��wildcard)r�rSrAs r8r>zHostMatchingTest.get_handlerss���)�1�G�Z�3H�I�J�Jr:c��|j�ddtjddifg��|j�ddtjddifg��|j�ddtjdd	ifg��|j�d
dtjddifg��|�d��}|�|jd��|�d��}|�|jd
��|�d��}|�|jd
��|�dddi���}|�|jd��|�dddi���}|�|jd��|�dddi���}|�|jd��|�dddi���}|�|jd��dS)N�www.example.comr�r��[0]�www\.example\.com�/bar�[1]�/baz�[2]zwww.e.*e.comz[3]swildcardr.�Hostr*�[0]�[1]�[2]zwww.exe.coms[3])r@�add_handlersr�rSr�r|r�r�r�s  r8�test_host_matchingz#HostMatchingTest.test_host_matchings��������)9�)A�G�U�CS� T�U�	
�	
�	
�	
���� �F�,<�,D�w�PU�FV�#W�"X�	
�	
�	
�	
������)9�)A�G�U�CS� T�U�	
�	
�	
�	
�����f�&6�&>��%�@P�Q�R�	
�	
�	
��:�:�f�%�%��������4�4�4��:�:�f�%�%��������,�,�,��:�:�f�%�%��������,�,�,��:�:�f�v�7H�.I�:�J�J��������/�/�/��:�:�f�v�7H�.I�:�J�J��������/�/�/��:�:�f�v�7H�.I�:�J�J��������/�/�/��:�:�f�v�}�.E�:�F�F��������/�/�/�/�/r:N)rJrKrLrrSr>r�rHr:r8r�r�s_������#�#�#�#�#�.�#�#�#�K�K�K�0�0�0�0�0r:r�c� �eZdZd�Zd�Zd�ZdS)�DefaultHostMatchingTestc��gSr1rHrAs r8r>z$DefaultHostMatchingTest.get_handlers/rIr:c�
�ddiS)N�default_hostr�rHrAs r8r?z&DefaultHostMatchingTest.get_app_kwargs2s��� 1�2�2r:c��|j�ddtjddifg��|j�ddtjddifg��|j�dd	tjdd
ifg��|�d��}|�|jd��|�d��}|�|jd��|�d	��}|�|jd
��|�dddi���}|�|jd
��d|j_|�d	��}|�|jd��dS)Nr�r�r�r�r�r�r�zwww.test.comr�r�r�r�r.z	X-Real-Iprzr*r�)	r@r�r�rSr�r|r�r�r�r�s  r8�test_default_host_matchingz2DefaultHostMatchingTest.test_default_host_matching5s���������)9�)A�G�U�CS� T�U�	
�	
�	
�	
���� �F�,<�,D�w�PU�FV�#W�"X�	
�	
�	
�	
�����f�&6�&>��%�@P�Q�R�	
�	
�	
��:�:�f�%�%��������/�/�/��:�:�f�%�%��������/�/�/��:�:�f�%�%��������,�,�,��:�:�f�{�K�.H�:�I�I��������,�,�,� .�����:�:�f�%�%��������/�/�/�/�/r:N)rJrKrLr>r?r�rHr:r8r�r�.sA���������3�3�3�0�0�0�0�0r:r�c��eZdZd�Zd�ZdS)�NamedURLSpecGroupsTestc�8�Gd�dt��}d|fd|fgS)Nc��eZdZd�ZdS)�8NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandlerc�0�|�|��dSr1rYr�s  r8r[z<NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandler.getSs���
�
�4� � � � � r:Nr\rHr:r8r�r�Rs#������
!�
!�
!�
!�
!r:r�z/str/(?P<path>.*)z/unicode/(?P<path>.*)r�)rBr�s  r8r>z#NamedURLSpecGroupsTest.get_handlersQsH��	!�	!�	!�	!�	!�.�	!�	!�	!�
!�+�.�
%�{�3�
�	
r:c���|�d��}|�|jd��|�d��}|�|jd��dS)Nz/str/foosfooz/unicode/barrtr,r�s  r8�test_named_urlspec_groupsz0NamedURLSpecGroupsTest.test_named_urlspec_groups[sZ���:�:�j�)�)��������/�/�/��:�:�n�-�-��������/�/�/�/�/r:N)rJrKrLr>r�rHr:r8r�r�Ps2������
�
�
�0�0�0�0�0r:r�c�0�eZdZGd�de��Zd�ZdS)�ClearHeaderTestc��eZdZd�ZdS)�ClearHeaderTest.Handlerc��|�dd��|�dd��|�d��|�d��dS)N�h1rs�h2r
�nonexistent)r��clear_headerrAs r8r[zClearHeaderTest.Handler.getesX���O�O�D�%�(�(�(��O�O�D�%�(�(�(����d�#�#�#����m�,�,�,�,�,r:Nr\rHr:r8rSr�ds#������	-�	-�	-�	-�	-r:rSc��|�d��}|�d|jv��|�|jdd��dS)NrQr�r�r
)r�r�r$r|r�s  r8�test_clear_headerz!ClearHeaderTest.test_clear_headerksO���:�:�c�?�?������H�$4�4�5�5�5�����)�$�/��7�7�7�7�7r:N)rJrKrLrrSr�rHr:r8r�r�csM������-�-�-�-�-�.�-�-�-�8�8�8�8�8r:r�c�0�eZdZGd�de��Zd�ZdS)�
Header204Testc��eZdZd�ZdS)�Header204Test.Handlerc�X�|�d��|���dS)N��)�
set_statusr�rAs r8r[zHeader204Test.Handler.getss%���O�O�C� � � ��K�K�M�M�M�M�Mr:Nr\rHr:r8rSr�rs#������	�	�	�	�	r:rSc���|�d��}|�|jd��|�d|j��|�d|j��dS)NrQr�r��Transfer-Encoding)r�r|r�rlr$r�s  r8�test_204_headerszHeader204Test.test_204_headerswsc���:�:�c�?�?��������,�,�,����)�8�+;�<�<�<����,�h�.>�?�?�?�?�?r:N)rJrKrLrrSr�rHr:r8r�r�qsR�����������.����
@�@�@�@�@r:r�c�0�eZdZGd�de��Zd�ZdS)�
Header304Testc��eZdZd�ZdS)�Header304Test.Handlerc�\�|�dd��|�d��dS)N�Content-Language�en_USrX)r�rZrAs r8r[zHeader304Test.Handler.get�s/���O�O�.��8�8�8��J�J�w�����r:Nr\rHr:r8rSr�s#������	 �	 �	 �	 �	 r:rSc���|�d��}|�|jdd��|�|jdd��|�dd|jdi���}|�|jd	��|�d|jv��|�d|jv��|�d
|jv��dS)NrQr��5r�r�r�r�r*r�r�)r�r|r$r�r�r�s   r8�test_304_headerszHeader304Test.test_304_headers�s����J�J�s�O�O�	�����*�+;�<�c�B�B�B�����*�+=�>��H�H�H��J�J��/�9�+<�V�+D�E��
�
�	�	
������-�-�-����(�	�0A�A�B�B�B����*�)�2C�C�D�D�D����+�9�3D�D�E�E�E�E�Er:N)rJrKrLrrSr�rHr:r8r�r�~sR������ � � � � �.� � � �
F�F�F�F�Fr:r�c�B�eZdZGd�de��Zd�Zd�Zd�Zd�ZdS)�StatusReasonTestc��eZdZd�ZdS)�StatusReasonTest.Handlerc���|jj�dg��}tt	|�d����|rt
|d��nd����)N�reasonr�r�r�)r�r�r[r r�r�r)rBr�s  r8r[zStatusReasonTest.Handler.get�se���\�+�/�/��"�=�=�F���D�%�%�f�-�-�.�.�06�@�z�&��)�,�,�,�D����
r:Nr\rHr:r8rSr��s#������	�	�	�	�	r:rSc��t��Sr1rrAs r8rRz StatusReasonTest.get_http_client����$�&�&�&r:c�^�|�d��}|�|jd��|�|jd��|�d��}|�|jd��|�|jd��|�d��}|�|jd��|�|jd��|�d	��}|�|jd��|�|jd
��dS)Nz
/?code=304r�zNot Modifiedz/?code=304&reason=Foo�Fooz/?code=682&reason=Bar��Barz
/?code=682�Unknown)r�r|r�r�r�s  r8�test_statuszStatusReasonTest.test_status�s���:�:�l�+�+��������,�,�,������.�9�9�9��:�:�5�6�6��������,�,�,������%�0�0�0��:�:�5�6�6��������,�,�,������%�0�0�0��:�:�l�+�+��������,�,�,������)�4�4�4�4�4r:c���|�d��}|�|jd��|�|jd��|�d|j��dS)Nz./?code=200&reason=OK%0D%0AX-Injection:injectedr�r�zX-Injection)r�r|r�r�rlr$r�s  r8rXz&StatusReasonTest.test_header_injection�sc���:�:�N�O�O��������,�,�,������)�4�4�4������(8�9�9�9�9�9r:c��|�d��}|�|jd��|�|jd��|�d|j��|�d|j��dS)Nz+/?code=400&reason=<script>alert(1)</script>r;r�sscriptsUnknown)r�r|r�r�rlr��assertInr�s  r8�test_reason_xssz StatusReasonTest.test_reason_xss�sx���:�:�K�L�L��������,�,�,������)�4�4�4�����H�M�2�2�2��
�
�j�(�-�0�0�0�0�0r:N)	rJrKrLrrSrRr�rXr�rHr:r8r�r��sz�����������.����'�'�'�5�5�5�:�:�:�1�1�1�1�1r:r�c�0�eZdZGd�de��Zd�ZdS)�DateHeaderTestc��eZdZd�ZdS)�DateHeaderTest.Handlerc�0�|�d��dSrWrYrAs r8r[zDateHeaderTest.Handler.get�����J�J�w�����r:Nr\rHr:r8rSr��s#������	 �	 �	 �	 �	 r:rSc�N�|�d��}tj�|jd��}|�J�tj|dd��}|�|t
j���z
tjd���k��dS)NrQ�DaterDr�)�seconds)	r�rHrIrJr$rEr�rFrG)rBr�rO�header_dates    r8�test_date_headerzDateHeaderTest.test_date_header�s����:�:�c�?�?����&�&�x�'7��'?�@�@���!�!�!��'������4������(�+�2�2�4�4�4�x�7I�RS�7T�7T�7T�T�	
�	
�	
�	
�	
r:N)rJrKrLrrSr�rHr:r8r�r��sM������ � � � � �.� � � �
�
�
�
�
r:r�c�B�eZdZGd�de��Zd�Zd�Zd�Zd�ZdS)�RaiseWithReasonTestc��eZdZd�ZdS)�RaiseWithReasonTest.Handlerc�$�tdd����)Nr�r�r��r rAs r8r[zRaiseWithReasonTest.Handler.get�s���C��.�.�.�.r:Nr\rHr:r8rSr��s#������	/�	/�	/�	/�	/r:rSc��t��Sr1rrAs r8rRz#RaiseWithReasonTest.get_http_client�r�r:c���|�d��}|�|jd��|�|jd��|�d|j��dS)NrQr�r�s682: Foo)r�r|r�r�r�r�r�s  r8�test_raise_with_reasonz*RaiseWithReasonTest.test_raise_with_reason�s]���:�:�c�?�?��������,�,�,������%�0�0�0��
�
�k�8�=�1�1�1�1�1r:c�j�|�ttdd�����d��dS)Nr�r�r�z
HTTP 682: Foo�r|r�r rAs r8�test_httperror_strz&RaiseWithReasonTest.test_httperror_str�s3������Y�s�5�9�9�9�:�:�O�L�L�L�L�Lr:c�f�|�ttd����d��dS)Nr�zHTTP 682: Unknownr�rAs r8� test_httperror_str_from_httputilz4RaiseWithReasonTest.test_httperror_str_from_httputil�s-������Y�s�^�^�,�,�.A�B�B�B�B�Br:N)	rJrKrLrrSrRr�r�r�rHr:r8r�r��s�������/�/�/�/�/�.�/�/�/�'�'�'�2�2�2�M�M�M�C�C�C�C�Cr:r�c�&�eZdZd�Zd�Zd�Zd�ZdS)�ErrorHandlerXSRFTestc�4�dttd���fgS)N�/error��r�)r"rfrAs r8r>z!ErrorHandlerXSRFTest.get_handlers�s���<��#�)>�)>�)>�?�@�@r:c�"�td���S�NT)�xsrf_cookiesr�rAs r8r?z#ErrorHandlerXSRFTest.get_app_kwargs������&�&�&�&r:c�l�|�ddd���}|�|jd��dS)Nrr�rer�rrPr�s  r8�test_error_xsrfz$ErrorHandlerXSRFTest.test_error_xsrf�s7���:�:�h�v�B�:�?�?��������,�,�,�,�,r:c�l�|�ddd���}|�|jd��dS)Nz/404r�rer�r.rPr�s  r8�
test_404_xsrfz"ErrorHandlerXSRFTest.test_404_xsrf�s7���:�:�f�V�"�:�=�=��������,�,�,�,�,r:N)rJrKrLr>r?r	rrHr:r8r�r��sS������A�A�A�'�'�'�-�-�-�-�-�-�-�-r:r�c�T�eZdZGd�de��Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�GzipTestCasec��eZdZd�ZdS)�GzipTestCase.Handlerc��|�d��D]}|�d|���|�ddtjzz��dS)N�varyrizhello world�!)r�r�rZr.�
MIN_LENGTH)rB�vs  r8r[zGzipTestCase.Handler.get�s\���'�'��/�/�
+�
+�������*�*�*�*��J�J�}��.A�.L�(L�M�N�N�N�N�Nr:Nr\rHr:r8rSr�s(������	O�	O�	O�	O�	Or:rSc��tdtj�tj�t
��d�����S)NTr�)rjr�)rfr2r3r4r5r6rAs r8r?zGzipTestCase.get_app_kwargs�s<����2�7�<�<������0I�0I�8�#T�#T�
�
�
�	
r:c��|�|j�d|j�d����d��dS)NrkzX-Consumed-Content-Encodingrj)r|r$r[r�s  r8�assert_compressedzGzipTestCase.assert_compressedsX��	
����� � �"�H�$4�$8�$8�9V�$W�$W�
�
�
�		
�	
�	
�	
�	
r:c��|�d��}|�|��|�|jdd��dS)NrQrirh�r�rr|r$r�s  r8�	test_gzipzGzipTestCase.test_gzipsJ���:�:�c�?�?�����x�(�(�(�����)�&�1�3D�E�E�E�E�Er:c��|�d��}|�|��|�|jdd��dS)Nr�rirhrr�s  r8�test_gzip_staticzGzipTestCase.test_gzip_staticsN���:�:�m�,�,�����x�(�(�(�����)�&�1�3D�E�E�E�E�Er:c��|�dd���}|�d|j��|�|jdd��dS)NrQF)�use_gziprkrirh)r�rlr$r|r�s  r8�test_gzip_not_requestedz$GzipTestCase.test_gzip_not_requestedsV���:�:�c�E�:�2�2�����+�X�-=�>�>�>�����)�&�1�3D�E�E�E�E�Er:c���|�d��}|�|��|�d�|jd�d��D��ddg��dS)Nz/?vary=Accept-Languagec�6�g|]}|�����SrH��strip��.0r�s  r8�
<listcomp>z:GzipTestCase.test_vary_already_present.<locals>.<listcomp> � ��D�D�D�1�Q�W�W�Y�Y�D�D�Dr:ri�,�Accept-Languagerh�r�rr|r$�splitr�s  r8�test_vary_already_presentz&GzipTestCase.test_vary_already_presentsz���:�:�6�7�7�����x�(�(�(����D�D�� 0�� 8� >� >�s� C� C�D�D�D�
� 1�2�	
�	
�	
�	
�	
r:c���|�d��}|�|��|�d�|jd�d��D��gd���dS)Nz"/?vary=Accept-Language&vary=Cookiec�6�g|]}|�����SrHr"r$s  r8r&zCGzipTestCase.test_vary_already_present_multiple.<locals>.<listcomp>)r'r:rir()r)r(rhr*r�s  r8�"test_vary_already_present_multiplez/GzipTestCase.test_vary_already_present_multiple$sz���:�:�B�C�C�����x�(�(�(����D�D�� 0�� 8� >� >�s� C� C�D�D�D�<�<�<�	
�	
�	
�	
�	
r:N)rJrKrLrrSr?rrrrr,r/rHr:r8r
r
�s�������O�O�O�O�O�.�O�O�O�
�
�
�

�
�
�F�F�F�
F�F�F�F�F�F�

�
�
�
�
�
�
�
r:r
c�<�eZdZGd�de��Zd�Zd�Zd�ZdS)�PathArgsInPrepareTestc��eZdZd�Zd�ZdS)�PathArgsInPrepareTest.Handlerc�b�|�t|j|j�����dS)N�r�r0)rZrfr��path_kwargsrAs r8r�z%PathArgsInPrepareTest.Handler.prepare0s,���J�J�t����8H�I�I�I�J�J�J�J�Jr:c�>�|dksJ�|���dS)Nrs�r�r�s  r8r[z!PathArgsInPrepareTest.Handler.get3s ���5�=�=�=�=��K�K�M�M�M�M�Mr:N�rJrKrLr�r[rHr:r8rSr3/s5������	K�	K�	K�	�	�	�	�	r:rSc�&�d|jfd|jfgS)Nz	/pos/(.*)z/kw/(?P<path>.*)rRrAs r8r>z"PathArgsInPrepareTest.get_handlers7s���d�l�+�.@�$�,�-O�P�Pr:c��|�d��}|���t|j��}|�|dgid���dS)Nz/pos/foorsr5r6�rBr�r6s   r8�test_poszPathArgsInPrepareTest.test_pos:sZ���:�:�j�)�)���������8�=�)�)��������2�>�>�?�?�?�?�?r:c��|�d��}|���t|j��}|�|gddid���dS)Nz/kw/foor3rsr5r6r<s   r8�test_kwzPathArgsInPrepareTest.test_kw@s\���:�:�i�(�(���������8�=�)�)�������v�u�o�F�F�G�G�G�G�Gr:N)rJrKrLrrSr>r=r?rHr:r8r1r1.sv�����������.����Q�Q�Q�@�@�@�H�H�H�H�Hr:r1c�0�eZdZGd�de��Zd�ZdS)�ClearAllCookiesTestc��eZdZd�ZdS)�ClearAllCookiesTest.Handlerc�X�|���|�d��dS�N�ok)�clear_all_cookiesrZrAs r8r[zClearAllCookiesTest.Handler.getIs,���"�"�$�$�$��J�J�t�����r:Nr\rHr:r8rSrCHs#������	�	�	�	�	r:rSc��|�dddi���}t|j�d����}|�|d�d��p|d�d����|�|d	�d
��p|d	�d����dS)NrQr(zfoo=bar; baz=xyzzyr*r"rzbaz=;zbaz="";ruzfoo=;zfoo="";)r�r#r$r%r�r�)rBr��set_cookiess   r8�test_clear_all_cookiesz*ClearAllCookiesTest.test_clear_all_cookiesMs����:�:�c�H�6J�+K�:�L�L���X�-�6�6�|�D�D�E�E�������N�%�%�g�.�.�V�+�a�.�2K�2K�I�2V�2V�	
�	
�	
�	
�����N�%�%�g�.�.�V�+�a�.�2K�2K�I�2V�2V�	
�	
�	
�	
�	
r:N)rJrKrLrrSrJrHr:r8rArAGsM�����������.����
	
�	
�	
�	
�	
r:rAc��eZdZdS)�PermissionErrorN�rJrKrLrHr:r8rLrLYs�������Dr:rLc�<�eZdZGd�de��Zd�Zd�Zd�ZdS)�ExceptionHandlerTestc� �eZdZd�Zd�Zd�ZdS)�ExceptionHandlerTest.Handlerc��|�d��}|dkrtdd���|dkrddzdS|dkrtd	���dS)
N�exc�http�zno longer here�zerorur�
permissionznot allowed)r�r rL)rBrSs  r8r[z ExceptionHandlerTest.Handler.get_sf���#�#�E�*�*�C��f�}�}���%5�6�6�6������A�������$�$�%�m�4�4�4�%�$r:c���d|vrM|d\}}}t|t��r,|�d��|�d��dSt	j||fi|��dS)Nr�r1rL)�
isinstancerLr�rZrr�)rBr�r0�typrm�tbs      r8r�z(ExceptionHandlerTest.Handler.write_errorhsz���V�#�#�!'�
�!3���U�B��e�_�5�5���O�O�C�(�(�(��J�J�0�1�1�1��F��&�t�[�C�C�F�C�C�C�C�Cr:c��t|t��r"tjd|jd��dStj||||��dS)Nz&custom logging for PermissionError: %sr)rYrLr�warningr�r�
log_exception�rBrZrmr[s    r8r^z*ExceptionHandlerTest.Handler.log_exceptionqsR���%��1�1�
C��� H�%�*�UV�-�X�X�X�X�X��,�T�3��r�B�B�B�B�Br:N)rJrKrLr[r�r^rHr:r8rSrQ^sI������	5�	5�	5�	D�	D�	D�	C�	C�	C�	C�	Cr:rSc���ttd��5|�d��}|�|jd��ddd��dS#1swxYwYdS)Nz.*no longer herez
/?exc=httprUr<r�s  r8�test_http_errorz$ExceptionHandlerTest.test_http_errorws����w� 2�
3�
3�	1�	1��z�z�,�/�/�H����X�]�C�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1��1A�A�Ac���ttd��5|�d��}|�|jd��ddd��dS#1swxYwYdS)Nr�z
/?exc=zeror^�rrr�r|r�r�s  r8�test_unknown_errorz'ExceptionHandlerTest.test_unknown_error~s���
�w� 4�
5�
5�	1�	1��z�z�,�/�/�H����X�]�C�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1rbc���ttd��5|�d��}|�|jd��ddd��dS#1swxYwYdS)Nz/custom logging for PermissionError: not allowedz/?exc=permissionr1rdr�s  r8�test_known_errorz%ExceptionHandlerTest.test_known_error�s����w� Q�
R�
R�	1�	1��z�z�"4�5�5�H����X�]�C�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1rbN)rJrKrLrrSrarergrHr:r8rOrO]ss������C�C�C�C�C�.�C�C�C�21�1�1�1�1�1�1�1�1�1�1r:rOc�0�eZdZGd�de��Zd�ZdS)�BuggyLoggingTestc��eZdZd�Zd�ZdS)�BuggyLoggingTest.Handlerc��ddzdSr�rHrAs r8r[zBuggyLoggingTest.Handler.get����
��E�E�E�Er:c��ddzdSr�rHr_s    r8r^z&BuggyLoggingTest.Handler.log_exception�rmr:N)rJrKrLr[r^rHr:r8rSrk�s2������	�	�	�	�	�	�	�	r:rSc��ttd��5|�d��ddd��dS#1swxYwYdS)Nz.*rQ)rrr�rAs r8�test_buggy_log_exceptionz)BuggyLoggingTest.test_buggy_log_exception�s����w��
%�
%�	�	��J�J�s�O�O�O�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�N)rJrKrLrrSrprHr:r8riri�sM�����������.��������r:ric�J��eZdZdZGd�de��Zd�Z�fd�Zd�Z�xZ	S)�UIMethodUIModuleTestz`Test that UI methods and modules are created correctly and
    associated with the handler.
    c��eZdZd�Zd�ZdS)�UIMethodUIModuleTest.Handlerc�0�|�d��dSr�r�rAs r8r[z UIMethodUIModuleTest.Handler.get�s���K�K�
�#�#�#�#�#r:c�,�|�d��S)Nrm)r�rAs r8rmz"UIMethodUIModuleTest.Handler.value�s���$�$�W�-�-�-r:N)rJrKrLr[rmrHr:r8rSrt�s2������	$�	$�	$�	.�	.�	.�	.�	.r:rSc�|�d�}Gd�dt��}tddi��}t|d|id|i���S)Nc�8�d|�d|����d�S)NzIn my_ui_method(�) with handler value ra)rm)r�xs  r8�my_ui_methodz9UIMethodUIModuleTest.get_app_kwargs.<locals>.my_ui_method�s���CD�1�1�g�m�m�o�o�o�o�V�Vr:c��eZdZd�ZdS)�5UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModulec�|�d|�dtjtj|j������d�S)NzIn MyModule(ryra)�typing�castrrrSrrm)rBrzs  r8r�z<UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModule.render�s<����A�A��K� 4� <�d�l�K�K�Q�Q�S�S�S�S��r:N�rJrKrLr�rHr:r8�MyModuler}�s#������
�
�
�
�
r:r�r�z1{{ my_ui_method(42) }} {% module MyModule(123) %}r{)r�
ui_methods�
ui_modules�r)rrf)rBr{r�rs    r8r?z#UIMethodUIModuleTest.get_app_kwargs�s���	W�	W�	W�	�	�	�	�	�x�	�	�	��
�L�M�
�
���"�&��5�"�H�-�
�
�
�	
r:c���t�����tj���dSr1rrs �r8rzUIMethodUIModuleTest.tearDown�s4���
���������(�.�.�0�0�0�0�0r:c�f�|�d��}|�|jd��dS)Nz/?value=asdfsVIn my_ui_method(42) with handler value asdf. In MyModule(123) with handler value asdf.r,r�s  r8�test_ui_methodz#UIMethodUIModuleTest.test_ui_method�s?���:�:�n�-�-������M�
9�	
�	
�	
�	
�	
r:)
rJrKrLrMrrSr?rr�rnros@r8rrrr�s����������.�.�.�.�.�.�.�.�.�
�
�
�(1�1�1�1�1�

�
�
�
�
�
�
r:rrc�0�eZdZGd�de��Zd�ZdS)�GetArgumentErrorTestc��eZdZd�ZdS)�GetArgumentErrorTest.Handlerc���	|�d��|�i��dS#t$r-}|�|j|jd���Yd}~dSd}~wwxYw)Nrs��arg_name�log_message)r�rZr!r�r�rs  r8r[z GetArgumentErrorTest.Handler.get�s���
S��!�!�%�(�(�(��
�
�2�������'�
S�
S�
S��
�
��
�1�=�Q�Q�R�R�R�R�R�R�R�R�R�����
S���s�*.�
A%�"A � A%Nr\rHr:r8rSr��s(������	S�	S�	S�	S�	Sr:rSc��|�d��}|�t|j��ddd���dS)NrQrszMissing argument foor�)r�r|rr�r�s  r8�test_catch_errorz%GetArgumentErrorTest.test_catch_error�sL���:�:�c�?�?�������
�&�&��/E�F�F�	
�	
�	
�	
�	
r:N)rJrKrLrrSr�rHr:r8r�r��sU������S�S�S�S�S�.�S�S�S�
�
�
�
�
r:r�c�0�eZdZGd�de��Zd�ZdS)�SetLazyPropertiesTestc�&�eZdZd�Zd�Zd�Zd�ZdS)�SetLazyPropertiesTest.Handlerc�F�d|_tjd��|_dS)N�Benr�)�current_userrr[rAs r8r�z%SetLazyPropertiesTest.Handler.prepare�s�� %�D�� �*�W�-�-�D�K�K�Kr:c��t���r1rErAs r8�get_user_localez-SetLazyPropertiesTest.Handler.get_user_locale����%�'�'�'r:c��t���r1rErAs r8�get_current_userz.SetLazyPropertiesTest.Handler.get_current_user�r�r:c�\�|�d|j�d|jj�d���dS)NzHello z (r�)rZr�rr�rAs r8r[z!SetLazyPropertiesTest.Handler.get�s5���J�J�J�$�*;�*;�*;�T�[�=M�=M�=M�N�O�O�O�O�Or:N)rJrKrLr�r�r�r[rHr:r8rSr��sU������	.�	.�	.�	(�	(�	(�	(�	(�	(�	P�	P�	P�	P�	Pr:rSc�f�|�d��}|�|jd��dS)NrQsHello Ben (en_US)r,r�s  r8�test_set_propertiesz)SetLazyPropertiesTest.test_set_properties�s2���:�:�c�?�?�������(<�=�=�=�=�=r:N)rJrKrLrrSr�rHr:r8r�r��sU������P�P�P�P�P�.�P�P�P�>�>�>�>�>r:r�c�n��eZdZd�Z�fd�Zd�Zejd��d���Zd�Z	d�Z
d�Z�xZS)	�GetCurrentUserTestc��Gd�dt��}Gd�dt��}tddddd	���}t|||d
����S)Nc��eZdZd�ZdS)�<GetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModulec��dS)NrerHrAs r8r�zCGetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModule.render�s���rr:Nr�rHr:r8�WithoutUserModuler��s#������
�
�
�
�
r:r�c��eZdZd�ZdS)�9GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModulec�*�t|j��Sr1)r�r�rAs r8r�z@GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModule.render�s���4�,�-�-�-r:Nr�rHr:r8�WithUserModuler��s#������
.�
.�
.�
.�
.r:r�rez{{ current_user }}z {% module WithoutUserModule() %}z{% module WithUserModule() %})�without_user.html�with_user.html�without_user_module.html�with_user_module.html)r�r�)rr�r�)rBr�r�rs    r8r?z!GetCurrentUserTest.get_app_kwargs�s���	�	�	�	�	��	�	�	�	.�	.�	.�	.�	.�X�	.�	.�	.��%'�"6�,N�)H�	
�
�
�
���"�"0�%6���
�
�
�	
r:c���t�����tj���dSr1rrs �r8rzGetCurrentUserTest.tearDown
r r:c���Gd�dt��}Gd�d|��}Gd�d|��}Gd�d|��}Gd	�d
|��}Gd�d|��}d
|fd|fd|fd|fgS)Nc��eZdZd�Zd�ZdS)�;GetCurrentUserTest.get_handlers.<locals>.CurrentUserHandlerc��d|_dS)NF��has_loaded_current_userrAs r8r�zCGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.prepares��/4��,�,�,r:c��d|_dS)NTrer�rAs r8r�zLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_users��/3��,��rr:N)rJrKrLr�r�rHr:r8�CurrentUserHandlerr�s2������
5�
5�
5�
�
�
�
�
r:r�c��eZdZd�ZdS)�;GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandlerc�~�|�d��|�t|j����dS)Nr���
render_stringr�r�r�rAs r8r[z?GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandler.gets:���"�"�#6�7�7�7����C�� <�=�=�>�>�>�>�>r:Nr\rHr:r8�WithoutUserHandlerr��#������
?�
?�
?�
?�
?r:r�c��eZdZd�ZdS)�8GetCurrentUserTest.get_handlers.<locals>.WithUserHandlerc�~�|�d��|�t|j����dS)Nr�r�rAs r8r[z<GetCurrentUserTest.get_handlers.<locals>.WithUserHandler.gets:���"�"�#3�4�4�4����C�� <�=�=�>�>�>�>�>r:Nr\rHr:r8�WithUserHandlerr�r�r:r�c��eZdZd�ZdS)�AGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandlerc��|jSr1)�uirAs r8�get_template_namespacezXGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandler.get_template_namespace"s���w�r:N)rJrKrLr�rHr:r8�CurrentUserModuleHandlerr�!s#������
�
�
�
�
r:r�c��eZdZd�ZdS)�AGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandlerc�~�|�d��|�t|j����dS)Nr�r�rAs r8r[zEGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandler.get)s:���"�"�#=�>�>�>����C�� <�=�=�>�>�>�>�>r:Nr\rHr:r8�WithoutUserModuleHandlerr�(r�r:r�c��eZdZd�ZdS)�>GetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandlerc�~�|�d��|�t|j����dS)Nr�r�rAs r8r[zBGetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandler.get.s:���"�"�#:�;�;�;����C�� <�=�=�>�>�>�>�>r:Nr\rHr:r8�WithUserModuleHandlerr�-r�r:r��
/without_user�
/with_user�/without_user_module�/with_user_moduler�)rBr�r�r�r�r�r�s       r8r>zGetCurrentUserTest.get_handlerss2��	�	�	�	�	��	�	�	�	?�	?�	?�	?�	?�!3�	?�	?�	?�
	?�	?�	?�	?�	?�0�	?�	?�	?�
	�	�	�	�	�'9�	�	�	�	?�	?�	?�	?�	?�'?�	?�	?�	?�
	?�	?�	?�	?�	?�$<�	?�	?�	?��0�1�
�?�+�
#�%=�>�
 �"7�8�	
�	
r:z	needs fixc�f�|�d��}|�|jd��dS)Nr��Falser,r�s  r8�test_get_current_user_is_lazyz0GetCurrentUserTest.test_get_current_user_is_lazy9s3���:�:�o�.�.��������1�1�1�1�1r:c�f�|�d��}|�|jd��dS)Nr��Truer,r�s  r8�test_get_current_user_worksz.GetCurrentUserTest.test_get_current_user_works?s1���:�:�l�+�+��������0�0�0�0�0r:c�f�|�d��}|�|jd��dS)Nr�r�r,r�s  r8�,test_get_current_user_from_ui_module_is_lazyz?GetCurrentUserTest.test_get_current_user_from_ui_module_is_lazyCs2���:�:�4�5�5��������1�1�1�1�1r:c�f�|�d��}|�|jd��dS)Nr�r�r,r�s  r8�*test_get_current_user_from_ui_module_worksz=GetCurrentUserTest.test_get_current_user_from_ui_module_worksGs2���:�:�1�2�2��������0�0�0�0�0r:)
rJrKrLr?rr>r8�skipr�r�r�r�rnros@r8r�r��s��������
�
�
�21�1�1�1�1�)
�)
�)
�V�X�]�;���2�2� ��2�
1�1�1�2�2�2�1�1�1�1�1�1�1r:r�c�0�eZdZGd�de��Zd�ZdS)�UnimplementedHTTPMethodsTestc��eZdZdS)�$UnimplementedHTTPMethodsTest.HandlerNrMrHr:r8rSr�Ms�������r:rSc���dD]4}|�d|���}|�|jd���5dD]5}|�d|d���}|�|jd���6dS)N)r�r��DELETE�OPTIONSrQr%��r��PUTr:r�rP)rBr�r�s   r8�#test_unimplemented_standard_methodsz@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methodsPs���:�	1�	1�F��z�z�#�f�z�5�5�H����X�]�C�0�0�0�0�%�	1�	1�F��z�z�#�f�3�z�?�?�H����X�]�C�0�0�0�0�	1�	1r:N)rJrKrLrrSr�rHr:r8r�r�LsM������
�
�
�
�
�.�
�
�
�1�1�1�1�1r:r�c�6�eZdZGd�de��Zd�Zd�ZdS)�#UnimplementedNonStandardMethodsTestc��eZdZd�ZdS)�+UnimplementedNonStandardMethodsTest.Handlerc�0�|�d��dS�N�otherrYrAs r8r�z1UnimplementedNonStandardMethodsTest.Handler.other[s��
�J�J�w�����r:N)rJrKrLr�rHr:r8rSr�Zs#������	 �	 �	 �	 �	 r:rSc�l�|�ddd���}|�|jd��dS)NrQ�PATCHr:r�r�rPr�s  r8�test_unimplemented_patchz<UnimplementedNonStandardMethodsTest.test_unimplemented_patch`s9���:�:�c�'��:�<�<��������,�,�,�,�,r:c�l�|�ddd���}|�|jd��dS)NrQ�OTHERT�r��allow_nonstandard_methodsr�rPr�s  r8�test_unimplemented_otherz<UnimplementedNonStandardMethodsTest.test_unimplemented_otherfs7���:�:�c�'�T�:�R�R��������,�,�,�,�,r:N)rJrKrLrrSr�r�rHr:r8r�r�Ys\������ � � � � �.� � � �-�-�-�-�-�-�-�-r:r�c�0�eZdZGd�de��Zd�ZdS)�AllHTTPMethodsTestc�(�eZdZd�ZexZxZxZxZZdS)�AllHTTPMethodsTest.Handlerc�`�|jj�J�|�|jj��dSr1)r�r�rZrAs r8r�z!AllHTTPMethodsTest.Handler.methodms0���<�&�2�2�2��J�J�t�|�*�+�+�+�+�+r:N)	rJrKrLr�r[�delete�optionsr��putrHr:r8rSr�ls8������	,�	,�	,�/5�4��4�f�4�w�4����r:rSc�|�|�dd���}|�|jd��dD]A}|�d|���}|�|jt|�����BdD]B}|�d|d���}|�|jt|�����CdS)NrQr�r%r:)r�r�r�r�r�)r�r|r�r)rBr�r�s   r8�test_standard_methodsz(AllHTTPMethodsTest.test_standard_methodsss����:�:�c�&�:�1�1��������,�,�,�2�	:�	:�F��z�z�#�f�z�5�5�H����X�]�D��L�L�9�9�9�9�%�	:�	:�F��z�z�#�f�3�z�?�?�H����X�]�D��L�L�9�9�9�9�	:�	:r:N)rJrKrLrrSrrHr:r8r�r�ksM������5�5�5�5�5�.�5�5�5�:�:�:�:�:r:r�c�6�eZdZGd�de��Zd�Zd�ZdS)�PatchMethodTestc�.�eZdZejdzZd�Zd�ZdS)�PatchMethodTest.Handler)r�c�0�|�d��dS)N�patchrYrAs r8rzPatchMethodTest.Handler.patch�r�r:c�0�|�d��dSr�rYrAs r8r�zPatchMethodTest.Handler.other�r�r:N)rJrKrLr�SUPPORTED_METHODSrr�rHr:r8rSr	sF������*�<�@
�
��	 �	 �	 �	 �	 �	 �	 �	 r:rSc�l�|�ddd���}|�|jd��dS)NrQr�r:r�spatchr,r�s  r8�
test_patchzPatchMethodTest.test_patch�s7���:�:�c�'��:�<�<��������1�1�1�1�1r:c�l�|�ddd���}|�|jd��dS)NrQr�Tr�sotherr,r�s  r8�
test_otherzPatchMethodTest.test_other�s7���:�:�c�'�T�:�R�R��������1�1�1�1�1r:N)rJrKrLrrSrrrHr:r8rr~s\������	 �	 �	 �	 �	 �.�	 �	 �	 �2�2�2�2�2�2�2�2r:rc�0�eZdZGd�de��Zd�ZdS)�FinishInPrepareTestc��eZdZd�Zd�ZdS)�FinishInPrepareTest.Handlerc�0�|�d��dS)Nr�r8rAs r8r�z#FinishInPrepareTest.Handler.prepare�s���K�K������r:c� �td���)Nzshould not reach this methodr�rAs r8r[zFinishInPrepareTest.Handler.get�s���:�;�;�;r:Nr9rHr:r8rSr�s2������	 �	 �	 �	<�	<�	<�	<�	<r:rSc�f�|�d��}|�|jd��dS)NrQsdoner,r�s  r8�test_finish_in_preparez*FinishInPrepareTest.test_finish_in_prepare�s/���:�:�c�?�?��������0�0�0�0�0r:N)rJrKrLrrSrrHr:r8rr�sM������<�<�<�<�<�.�<�<�<�1�1�1�1�1r:rc��eZdZd�Zd�ZdS)�Default404Testc��dtfgS�Nr�r�rAs r8r>zDefault404Test.get_handlers�s����(�)�)r:c��|�d��}|�|jd��|�|jd��dS)NrQr.sE<html><title>404: Not Found</title><body>404: Not Found</body></html>rFr�s  r8�test_404zDefault404Test.test_404�sU���:�:�c�?�?��������,�,�,�����M�
2�	
�	
�	
�	
�	
r:N)rJrKrLr>rrHr:r8rr�s2������*�*�*�
�
�
�
�
r:rc� �eZdZd�Zd�Zd�ZdS)�
Custom404Testc��dtfgSrr�rAs r8r>zCustom404Test.get_handlers������(�)�)r:c�H�Gd�dt��}t|���S)Nc��eZdZd�ZdS)�6Custom404Test.get_app_kwargs.<locals>.Custom404Handlerc�Z�|�d��|�d��dS)Nr.zcustom 404 response)r�rZrAs r8r[z:Custom404Test.get_app_kwargs.<locals>.Custom404Handler.get�s-������$�$�$��
�
�0�1�1�1�1�1r:Nr\rHr:r8�Custom404Handlerr&�s#������
2�
2�
2�
2�
2r:r()�default_handler_class)rrf)rBr(s  r8r?zCustom404Test.get_app_kwargs�s@��	2�	2�	2�	2�	2�~�	2�	2�	2�
�*:�;�;�;�;r:c��|�d��}|�|jd��|�|jd��dS)NrQr.scustom 404 responserFr�s  r8rzCustom404Test.test_404�sH���:�:�c�?�?��������,�,�,������(>�?�?�?�?�?r:N)rJrKrLr>r?rrHr:r8r!r!�sF������*�*�*�<�<�<�@�@�@�@�@r:r!c� �eZdZd�Zd�Zd�ZdS)�DefaultHandlerArgumentsTestc��dtfgSrr�rAs r8r>z(DefaultHandlerArgumentsTest.get_handlers�r#r:c�J�tttd������S)Nr1r)r)�default_handler_args)rfr"rAs r8r?z*DefaultHandlerArgumentsTest.get_app_kwargs�s*���".�!%�#�!6�!6�!6�
�
�
�	
r:c�f�|�d��}|�|jd��dS)NrQr1rPr�s  r8�test_403z$DefaultHandlerArgumentsTest.test_403�s/���:�:�c�?�?��������,�,�,�,�,r:N)rJrKrLr>r?r1rHr:r8r,r,�sA������*�*�*�
�
�
�-�-�-�-�-r:r,c��eZdZd�Zd�ZdS)�HandlerByNameTestc�6�dtfdtdd��gS)N�/hello1)�/hello2�"tornado.test.web_test.HelloHandler�/hello3r7)rUr$rAs r8r>zHandlerByNameTest.get_handlers�s'����%�=��	�?�@�@�
�	
r:c�&�|�d��}|�|jd��|�d��}|�|jd��|�d��}|�|jd��dS)Nr5r[r6r8r,�rB�resps  r8�test_handler_by_namez&HandlerByNameTest.test_handler_by_name�s����z�z�)�$�$�������H�-�-�-��z�z�)�$�$�������H�-�-�-��z�z�)�$�$�������H�-�-�-�-�-r:N)rJrKrLr>r<rHr:r8r3r3�s2������
�
�
�.�.�.�.�.r:r3c�r�eZdZd�Zd�Zed���Zed���Zed���Zed���Z	dS)�StreamingRequestBodyTestc��tGd�dt����}tGd�dt����}tGd�dt����}d|t|���fd	|fd
|t|���fgS)Nc�&�eZdZd�Zd�Zd�Zd�ZdS)�CStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandlerc��||_dSr1r�r�s  r8rZzNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initialize��
�� ��	�	�	r:c�D�|jj�d��dSr1)r��prepared�
set_resultrAs r8r�zKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.prepare�s!���	�"�-�-�d�3�3�3�3�3r:c�D�|jj�|��dSr1)r�r6rF�rBr6s  r8�
data_receivedzQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_received�s ���	��)�)�$�/�/�/�/�/r:c�n�|jj�d��|�i��dSr1)r��finishedrFrZrAs r8r[zGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.get�s.���	�"�-�-�d�3�3�3��
�
�2�����r:N)rJrKrLrZr�rIr[rHr:r8�StreamingBodyHandlerrA�sP������
!�
!�
!�
4�
4�
4�
0�
0�
0�
�
�
�
�
r:rLc��eZdZd�ZdS)�AStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandlerc� �td���)N�r�rAs r8r�zIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.prepare�s�� ��n�n�$r:Nr	rHr:r8�EarlyReturnHandlerrN�s#������
%�
%�
%�
%�
%r:rQc�$��eZdZd�Z�fd�Z�xZS)�DStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandlerc��||_dSr1r�r�s  r8rZzOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initialize�rCr:c���t�����|jj�d��dSr1)rrur��close_futurerFrs �r8ruzXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_close	s8������+�+�-�-�-��	�&�1�1�$�7�7�7�7�7r:)rJrKrLrZrurnros@r8�CloseDetectionHandlerrS�sG�������
!�
!�
!�
8�
8�
8�
8�
8�
8�
8�
8�
8r:rWz/stream_bodyr�z
/early_returnz/close_detection)r+rrf)rBrLrQrWs    r8r>z%StreamingRequestBodyTest.get_handlers�s���	�	�	�	�	�	�>�	�	�
�	�	�
�	%�	%�	%�	%�	%��	%�	%�
�	�	%�
�	8�	8�	8�	8�	8�N�	8�	8�
�	�	8��1�4�T�?�?�?�C�
�0�1�
�!6��$����H�
�	
r:c�X�tjtjtjd��}|�d|���f��t|��}|�d|zdz��|r|�d��|�d��|S)NrrzsGET s HTTP/1.1
sConnection: close
sTransfer-Encoding: chunked

)rr�r�r�r�r
rZ)rBr$�connection_closer�r�s     r8r�z StreamingRequestBodyTest.connect	s����M�&�.�&�*<�a�@�@��	�	�	�;�� 2� 2� 4� 4�5�6�6�6��!�������W�s�]�%5�5�6�6�6��	3��L�L�1�2�2�2����:�;�;�;��
r:c#�K�t��|_t��|_t��|_|�dd���}|jV�|�d��|jV�}|�|d��t��|_|�d��|jV�}|�|d��|�d��|jV�|���V�}|�|�	d	����|�
��dS)
Ns/stream_bodyT�rY�	4
asdf
sasdfs	4
qwer
sqwers0

s{})rrEr6rKr�rZr|�read_until_closer�rJr��rBr�r6s   r8�test_streaming_bodyz,StreamingRequestBodyTest.test_streaming_body	s#��������
��H�H��	�����
����o���E�E���m�������%�&�&�&��Y��������w�'�'�'��H�H��	����%�&�&�&��Y��������w�'�'�'����\�"�"�"��m�����,�,�.�.�.�.������
�
�e�,�,�-�-�-��������r:c#�K�|�dd���}|���V�}|�|�d����dS)N�
/early_returnFr[�HTTP/1.1 401)r�r]r�r�r^s   r8�test_early_returnz*StreamingRequestBodyTest.test_early_return.	sW�������.���G�G���,�,�.�.�.�.���������8�8�9�9�9�9�9r:c#��K�|�dd���}|�d��|���V�}|�|�d����dS)NraFr[r\rb)r�rZr]r�r�r^s   r8�test_early_return_with_dataz4StreamingRequestBodyTest.test_early_return_with_data4	sj�������.���G�G�����%�&�&�&��,�,�.�.�.�.���������8�8�9�9�9�9�9r:c#�K�t��|_|�dd���}|���|jV�dS)Ns/close_detectionFr[)rrVr�r�)rBr�s  r8�test_close_during_uploadz1StreamingRequestBodyTest.test_close_during_upload;	sJ����"�H�H������1�E��J�J��������������r:N)
rJrKrLr>r�rr_rcrergrHr:r8r>r>�s�������$
�$
�$
�L	�	�	�����X��,�:�:��X�:�
�:�:��X�:�� � ��X� � � r:r>c�t�eZdZd�Zejd���Zejd���Z	ejd���Z
dS)�BaseFlowControlHandlerc�0�||_d|_g|_dSr1)r�r��methodsr�s  r8rZz!BaseFlowControlHandler.initializeI	s����	��������r:c#��K�|j�%|j�d|�d|j����||_|j�|��	dV�d|_dS#d|_wxYw)Nzentered method z
 while in )r�r��failrk�appendrs  r8�	in_methodz BaseFlowControlHandler.in_methodN	sz�����;�"��I�N�N�N�f�f�f�d�k�k�R�S�S�S��������F�#�#�#�	��E�E�E��D�K�K�K��$�D�K����s�A�	A'c#�ZK�|j�d��tjV�dS)Nr�)rkrnr�momentrAs r8r�zBaseFlowControlHandler.prepareY	s2����	
����I�&�&�&��j�����r:c#��K�|�d��5tjV�ddd��n#1swxYwY|�t	|j�����dS)Nr��rk)rorrqrZrfrkrAs r8r�zBaseFlowControlHandler.post`	s�����
�^�^�F�
#�
#�	�	��*����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
�
�4���-�-�-�.�.�.�.�.s�3�7�7N)rJrKrLrZ�
contextlib�contextmanagerrorr�r�r�rHr:r8ririG	s|���������
�������	�]����]��	�]�/�/��]�/�/�/r:ric�\�eZdZd�Zd�Zdejfd�Zdejfd�Zdejfd�Z	dS)�#BaseStreamingRequestFlowControlTestc�$�tdd���S)NrT)�
chunk_size�decompress_requestr�rAs r8�get_httpserver_optionsz:BaseStreamingRequestFlowControlTest.get_httpserver_optionsh	s���r�d�;�;�;�;r:c��t��Sr1rrAs r8rRz3BaseStreamingRequestFlowControlTest.get_http_clientm	r�r:rBc���|�ddd���}|���|�t|j��tgd������dS)NrQ�abcdefghijklmnopqrstuvwxyzr�)r�r��r�rIrIrIr�rs)r�r/r|rr�rfr�s  r8�test_flow_control_fixed_bodyz@BaseStreamingRequestFlowControlTest.test_flow_control_fixed_bodyr	s|���:�:�c�(D�V�:�T�T�������������
�&�&�����
�
�
�	
�	
�	
�	
�	
r:c���gd��tj�fd���}|�d|d���}|���|�t|j��tgd������dS)N)sabcdsefghsijklc3�0�K��D]}||��V��dSr1rH)rZ�i�chunkss  �r8�
body_producerzYBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body.<locals>.body_producer�	s3������
�
���e�A�h�h�����
�
r:rQr�)r�r�rrs)rr�r�r/r|rr�rf)rBr�r�r�s   @r8�test_flow_control_chunked_bodyzBBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body�	s����,�,�,��	��	�	�	�	�
��	��:�:�c��v�:�N�N�������������
�&�&�����
�
�
�	
�	
�	
�	
�	
r:c��t��}tjd|���}|�d��|���|���}|�d|dddi���}|���|�t|j
��tgd	��
����dS)N�w)�mode�fileobjsabcdefghijklmnopqrstuvwxyzrQr�rkrj)r�r�r$rrs)r/rj�GzipFilerZr��getvaluer�r/r|rr�rf)rB�bytesio�	gzip_file�compressed_bodyr�s     r8�!test_flow_control_compressed_bodyzEBaseStreamingRequestFlowControlTest.test_flow_control_compressed_body�	s����)�)���M�s�G�<�<�<�	����5�6�6�6�������!�*�*�,�,���:�:�� ��'��0�	�
�
��	�����������
�&�&�����
�
�
�	
�	
�	
�	
�	
r:N)
rJrKrLr{rRr�Anyr�r�r�rHr:r8rwrwg	s�������<�<�<�
'�'�'�

�6�:�
�
�
�
� 
�V�Z�
�
�
�
�.
��
�
�
�
�
�
�
r:rwc��eZdZd�ZdS)�(DecoratedStreamingRequestFlowControlTestc�P�Gd�dt��}d|t|���fgS)Nc�.�eZdZejd���ZdS)�ZDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandlerc3�K�|�d��5tjV�ddd��dS#1swxYwYdS)NrI)rorrqrHs  r8rIzhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_received�	s������^�^�O�4�4�%�%��*�$�$�$�%�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%�%�%s�4�8�8N)rJrKrLrr�rIrHr:r8�DecoratedFlowControlHandlerr��	s/������
�]�
%�
%��]�
%�
%�
%r:r�rQr��rirf)rBr�s  r8r>z5DecoratedStreamingRequestFlowControlTest.get_handlers�	sH��	%�	%�	%�	%�	%�*@�	%�	%�	%��1�4�T�?�?�?�C�D�Dr:N�rJrKrLr>rHr:r8r�r��	s(������E�E�E�E�Er:r�c��eZdZd�ZdS)�%NativeStreamingRequestFlowControlTestc�P�Gd�dt��}d|t|���fgS)Nc��eZdZd�ZdS)�TNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandlerc��K�|�d��5ddl}|�d���d{V��ddd��dS#1swxYwYdS)NrIr)ro�asyncior})rBr6r�s   r8rIzbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_received�	s������^�^�O�4�4�+�+�"�N�N�N�!�-�-��*�*�*�*�*�*�*�*�*�+�+�+�+�+�+�+�+�+�+�+�+����+�+�+�+�+�+s� A�A	�A	N)rJrKrLrIrHr:r8�NativeFlowControlHandlerr��	s#������
+�
+�
+�
+�
+r:r�rQr�r�)rBr�s  r8r>z2NativeStreamingRequestFlowControlTest.get_handlers�	sH��	+�	+�	+�	+�	+�'=�	+�	+�	+��.��$����@�A�Ar:Nr�rHr:r8r�r��	s(������B�B�B�B�Br:r�c� �eZdZd�Zd�Zd�ZdS)�IncorrectContentLengthTestc�z��|�d|_G�fd�dt��}G�fd�dt��}d|fd|fgS)Nc���eZdZ�fd�ZdS)�8IncorrectContentLengthTest.get_handlers.<locals>.TooHighc���|�dd��	|�d��dS#t$r
}|�_�d}~wwxYw)Nr�r�rF�r�r�r��server_error�rBrr�s  �r8r[z<IncorrectContentLengthTest.get_handlers.<locals>.TooHigh.get�	s_������ 0�$�7�7�7���K�K��%�%�%�%�%�� ����()�D�%�����������0�
A�A�ANr\r�s�r8�TooHighr��	�.�������
�
�
�
�
�
�
r:r�c���eZdZ�fd�ZdS)�7IncorrectContentLengthTest.get_handlers.<locals>.TooLowc���|�dd��	|�d��dS#t$r
}|�_�d}~wwxYw)Nr�rKrXr�r�s  �r8r[z;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.get�	s_������ 0�#�6�6�6���K�K��(�(�(�(�(�� ����()�D�%���������r�Nr\r�s�r8�TooLowr��	r�r:r��/high�/low)r�r)rBr�r�r�s   @r8r>z'IncorrectContentLengthTest.get_handlers�	s������ ���	�	�	�	�	�	�	�n�	�	�	�	�	�	�	�	�	�	�^�	�	�	��'�"�V�V�$4�5�5r:c��ttd��5ttd��5|�t��5|�dd���ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|�t|j��d��dS)N�*(Uncaught exception|Exception in callback)�S(Cannot send error response after headers written|Failed to flush partial response)r�T��raise_errorz0Tried to write 40 bytes less than Content-Length�	rrr�assertRaisesrr�r|r�r�rAs r8�test_content_length_too_highz7IncorrectContentLengthTest.test_content_length_too_high�	s����w� L�
M�
M�	:�	:���5���
:�
:�
�&�&��7�7�:�:��J�J�w�D�J�9�9�9�:�:�:�:�:�:�:�:�:�:�:����:�:�:�:�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:����
:�
:�
:�
:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�	
�����!�"�"�$V�	
�	
�	
�	
�	
�X�B�B�A+�B�+A/�/B�2A/�3B�6B�B	�B�	B	�
B�B� Bc��ttd��5ttd��5|�t��5|�dd���ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|�t|j��d��dS)Nr�r�r�Tr�z,Tried to write more data than Content-Lengthr�rAs r8�test_content_length_too_lowz6IncorrectContentLengthTest.test_content_length_too_low�	s����w� L�
M�
M�	9�	9���5���
9�
9�
�&�&��7�7�9�9��J�J�v�4�J�8�8�8�9�9�9�9�9�9�9�9�9�9�9����9�9�9�9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	
�����!�"�"�$R�	
�	
�	
�	
�	
r�N)rJrKrLr>r�r�rHr:r8r�r��	sA������6�6�6�2
�
�
� 
�
�
�
�
r:r�c�0�eZdZGd�de��Zd�ZdS)�ClientCloseTestc��eZdZd�ZdS)�ClientCloseTest.Handlerc���|jj�d��r:|jjj���|�d��dS|�d��dS)NzHTTP/1rX�requires HTTP/1.x)r�rwr��
connectionr�r�rZrAs r8r[zClientCloseTest.Handler.get
sl���|�#�.�.�x�8�8�

0���'�.�4�4�6�6�6��
�
�7�#�#�#�#�#��
�
�.�/�/�/�/�/r:Nr\rHr:r8rSr�
s#������	0�	0�	0�	0�	0r:rSc�(�|�ttjf��5|�dd���}|jdkr|�d��|�|jd��ddd��dS#1swxYwYdS)NrQTr�srequires HTTP/1.xr�iW)	r�rr8�SkipTestr�r��skipTestr|r�r�s  r8�test_client_closez!ClientCloseTest.test_client_close
s���
�
�
���1B�C�
D�
D�	1�	1��z�z�#�4�z�8�8�H��}� 4�4�4��
�
�1�2�2�2����X�]�C�0�0�0�		1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�AB�B�BN)rJrKrLrrSr�rHr:r8r�r�

sM������0�0�0�0�0�.�0�0�0�1�1�1�1�1r:r�c�f�eZdZdZdddd�Zd�Zd�Zd�Zd	�Zd
�Z	d�Z
d�Zd
�Zd�Z
d�Zd�Zd�ZdS)�SignedValueTestzIt's a secret to everybody�	asdfbasdf�12312312�2342342)rrur�c�0�|���dz
S)Ni0*)�presentrAs r8�pastzSignedValueTest.past%
s���|�|�~�~�
�*�*r:c��dS)Nim|MrHrAs r8r�zSignedValueTest.present(
s���zr:c�>�ttjddd|j���}|�|d��ttjddd|j���}|�|d��ttjdd|j���}|�||��ttjd|d|j�	��}|�|d
��ttjd|d|j�	��}|�|d
��dS)Nr�rmru)rw�clocks<dmFsdWU=|1300000000|31c934969f53e48164c50768b40cbd7e2daaaa4fr�se2|1:0|10:1300000000|3:key|8:dmFsdWU=|3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152�r�)ryr��value)r&r��SECRETr�r|r')rB�	signed_v1�	signed_v2�signed_default�
decoded_v1�
decoded_v2s      r8�test_known_valuesz!SignedValueTest.test_known_values+
sI��'��"�E�7�A�T�\�
�
�
�	�	
����V�	
�	
�	
�(��"�E�7�A�T�\�
�
�
�	�	
����
P�	
�	
�	
�-��"�E�7�$�,�
�
�
��	
�����3�3�3�(��"�E�9�!�4�<�
�
�
�
�	
����X�.�.�.�(��"�E�9�!�4�<�
�
�
�
�	
����X�.�.�.�.�.r:c�n�ttjdd|j���}ttjdd|j���}t	tjd||j���}|�|d��t	tjd||j���}|�|d��dS)N�key1rmr��key2)r&r�r�r�r'�assertIs)rB�signed1�signed2�decoded1�decoded2s     r8�test_name_swapzSignedValueTest.test_name_swapK
s���%��"�F�G�4�<�
�
�
��&��"�F�G�4�<�
�
�
��'��"�F�G�4�<�
�
�
��	
�
�
�h��%�%�%�&��"�F�G�4�<�
�
�
��	
�
�
�h��%�%�%�%�%r:c�*�ttjdd|j���}t	tjd||j���}|�|d��t	tjd||j���}|�|d��dS)Nr�rmr�r�)r&r�r�r�r'r|r�r�)rB�signed�decoded_past�decoded_presents    r8�test_expiredzSignedValueTest.test_expired\
s���$��"�F�G�4�9�
�
�
��+��"�F�F�$�)�
�
�
��	
����x�0�0�0�-��"�F�F�$�,�
�
�
��	
�
�
�o�t�,�,�,�,�,r:c�
���d���fd�}��|d������|d������|d������|d����dS)N�@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152c�V��dttjd|�z�j���kS�Nr�r�r��r'r�r�r�)�prefixrBr�s ��r8�validatez8SignedValueTest.test_payload_tampering.<locals>.validatem
�4����2��&��v��|�4�<� � � ��
r:�%2|1:0|10:1300000000|3:key|8:dmFsdWU=|z%2|1:1|10:1300000000|3:key|8:dmFsdWU=|z$2|1:0|10:130000000|3:key|8:dmFsdWU=|z&2|1:0|10:1300000000|3:keey|8:dmFsdWU=|�r��assertFalse)rBr�r�s` @r8�test_payload_tamperingz&SignedValueTest.test_payload_tamperingi
s�����P��	�	�	�	�	�	�
	
�����!H�I�I�J�J�J������"I�J�J�K�K�K������"H�I�I�J�J�J������"J�K�K�L�L�L�L�Lr:c����d���fd�}��|d������|d������|d������|d������|d������|d����dS)	Nr�c�V��dttjd�|z�j���kSr�r�)r�r�rBs ��r8r�z:SignedValueTest.test_signature_tampering.<locals>.validate}
r�r:r�� 00000000000000000000000000000000�@4d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152�@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e153�?3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e15�A3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e1538r�)rBr�r�s` @r8�test_signature_tamperingz(SignedValueTest.test_signature_tamperingz
s����8��	�	�	�	�	�	�
	
����H�W�X�X�	
�	
�	
�	
�����(�+�+�,�,�,�����H�W�X�X�	
�	
�	
�	
����H�W�X�X�	
�	
�	
�	
����H�V�W�W�	
�	
�	
�	
����H�S�
�
�	
�	
�	
�	
�	
r:c��d}ttjd||j���}t	tjd||j���}|�||��dS)Nr�r�r�)r&r�r�r�r'r|�rBrmr��decodeds    r8�test_non_asciizSignedValueTest.test_non_ascii�
sk����$��"�E�5���
�
�
��&��"�E�6���
�
�
��	
�����(�(�(�(�(r:c��d}ttjd||jd���}t	tjd||j���}|�||��dS�Nr�r�r�r�rdr��r&r��SECRET_DICTr�r'r|rs    r8�*test_key_versioning_read_write_default_keyz:SignedValueTest.test_key_versioning_read_write_default_key�
�n����$��'���T�\�WX�
�
�
��&��'���d�l�
�
�
��	
�����(�(�(�(�(r:c��d}ttjd||jd���}t	tjd||j���}|�||��dS)Nr�r�rurr�rrs    r8�.test_key_versioning_read_write_non_default_keyz>SignedValueTest.test_key_versioning_read_write_non_default_key�
rr:c��d}ttjd||jd���}tj���}|�d��t
|d||j���}|�d|��dSr)r&r�r	r�r�r�r'r|)rBrmr��newkeysrs     r8�test_key_versioning_invalid_keyz/SignedValueTest.test_key_versioning_invalid_key�
s�����$��'���T�\�WX�
�
�
��"�-�2�2�4�4�����A����%�g�u�f�D�L�Q�Q�Q������w�'�'�'�'�'r:c��d}ttjd||jd���}t	|��}|�d|��dS)Nr�r�rur)r&r�r	r�r(r|)rBrmr�rds    r8�test_key_version_retrievalz*SignedValueTest.test_key_version_retrieval�
sW����$��'���T�\�WX�
�
�
��0��7�7������K�(�(�(�(�(r:N)rJrKrLr�r	r�r�r�r�r�r�rrr
r
rrrHr:r8r�r�!
s�������
)�F�!�j�Y�?�?�K�+�+�+����/�/�/�@&�&�&�"-�-�-�M�M�M�"
�
�
�@)�)�)�)�)�)�)�)�)�(�(�(�)�)�)�)�)r:r�c���eZdZGd�de��Zd�Z�fd�Zdd�Zdd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�XSRFTestc��eZdZd�Zd�ZdS)�XSRFTest.Handlerc��t|�dd����}||jd<|�|j��dS)NrwrK�xsrf_cookie_version)r�r�rbrZr�)rBrws  r8r[zXSRFTest.Handler.get�
sH���$�+�+�I�s�;�;�<�<�G�4;�D�M�/�0��J�J�t��'�'�'�'�'r:c�0�|�d��dSrErYrAs r8r�zXSRFTest.Handler.post�
s���J�J�t�����r:N)rJrKrLr[r�rHr:r8rSr�
s2������	(�	(�	(�	�	�	�	�	r:rSc�"�td���Srr�rAs r8r?zXSRFTest.get_app_kwargs�
rr:c�z��t�����|���|_dSr1)r�setUp�	get_tokenr�rs �r8rzXSRFTest.setUp�
s)���
���
�
�����.�.�*�*����r:Nc���|�|�|��}nd}|�|�dnd|z|���}|���t|j��S)NrQz/?version=%dr*)�cookie_headersr�r/r	r�)rB�	old_tokenrwr$r�s     r8rzXSRFTest.get_token�
sp��� ��)�)�)�4�4�G�G��G��:�:��?�C�C��'�)A�G��
�
��	�������(�-�(�(�(r:c�"�|�|j}dd|ziS)Nr(z_xsrf=)r�)rB�tokens  r8rzXSRFTest.cookie_headers�
s���=��O�E��(�U�*�+�+r:c���ttd��5|�ddd���}ddd��n#1swxYwY|�|jd��dS)N�.*'_xsrf' argument missingrQr�r:r�r1r<r�s  r8�test_xsrf_fail_no_tokenz XSRFTest.test_xsrf_fail_no_token�
s���
�w� <�
=�
=�	@�	@��z�z�#�f�3�z�?�?�H�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�������,�,�,�,�,s
�;�?�?c
�&�ttd��5|�ddtj�t
|j��������}ddd��n#1swxYwY|�|j	d��dS)N�!.*XSRF cookie does not match POSTrQr���_xsrfr�r1)
rrr�r\r]r^rfr�r|r�r�s  r8�test_xsrf_fail_body_no_cookiez&XSRFTest.test_xsrf_fail_body_no_cookie�
s���
�w� C�
D�
D�	�	��z�z����\�+�+�D�t��,G�,G�,G�H�H�"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,s�A	A+�+A/�2A/c�B�ttd��5|�dd|���tj�td��������}ddd��n#1swxYwY|�|j	d��dS)Nz%.*'_xsrf' argument has invalid formatrQr��3|r(r2r1)
rrr�rr\r]r^rfr|r�r�s  r8�&test_xsrf_fail_argument_invalid_formatz/XSRFTest.test_xsrf_fail_argument_invalid_format�
s���
�w� G�
H�
H�	�	��z�z����+�+�-�-��\�+�+�D�t�,<�,<�,<�=�=�	"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,s�AA9�9A=�A=c�P�ttd��5|�dd|�d���tj�t|j��������}ddd��n#1swxYwY|�	|j
d��dS)	Nr'rQr�r,�r"r(r2r1)rrr�rr\r]r^rfr�r|r�r�s  r8�$test_xsrf_fail_cookie_invalid_formatz-XSRFTest.test_xsrf_fail_cookie_invalid_formats���
�w� C�
D�
D�	�	��z�z����+�+�$�+�7�7��\�+�+�D�t��,G�,G�,G�H�H�	"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,s�AB�B�Bc���ttd��5|�ddd|������}ddd��n#1swxYwY|�|jd��dS)Nr$rQr�r:�r�r�r$r1)rrr�rr|r�r�s  r8�test_xsrf_fail_cookie_no_bodyz&XSRFTest.test_xsrf_fail_cookie_no_bodys���
�w� <�
=�
=�	�	��z�z��F��d�6I�6I�6K�6K�"���H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
������,�,�,�,�,s�,A�A�Ac	���|�ddtj�t	d�����|�d������}|�|jd��dS)NrQr��deadbeefr(r/r2r��r�r\r]r^rfrr|r�r�s  r8�test_xsrf_success_short_tokenz&XSRFTest.test_xsrf_success_short_tokensr���:�:�����'�'��:�(>�(>�(>�?�?��'�'�j�'�9�9�	�
�
��	
������,�,�,�,�,r:c	���|�ddtj�t	d�����|�d������}|�|jd��dS)NrQr��xoxor(r/r2r�r6r�s  r8�test_xsrf_success_non_hex_tokenz(XSRFTest.test_xsrf_success_non_hex_token sr���:�:�����'�'��6�(:�(:�(:�;�;��'�'�f�'�5�5�	�
�
��	
������,�,�,�,�,r:c	���|�ddtj�t	|j�����|������}|�|jd��dS)NrQr�r(r2r��	r�r\r]r^rfr�rr|r�r�s  r8�test_xsrf_success_post_bodyz$XSRFTest.test_xsrf_success_post_body)so���:�:�����'�'��4�?�(C�(C�(C�D�D��'�'�)�)�	�
�
��	
������,�,�,�,�,r:c��|�dtj�t	|j�����zdd|������}|�|jd��dS)Nz/?r(r�r:r2r�r<r�s  r8�test_xsrf_success_query_stringz'XSRFTest.test_xsrf_success_query_string2st���:�:��6�<�)�)�$�T�_�*E�*E�*E�F�F�F����'�'�)�)�	�
�
��	
������,�,�,�,�,r:c��|�dddtd|jifi|��������}|�|jd��dS)NrQr�r:zX-Xsrftokenr2r�)r�rfr�rr|r�r�s  r8�test_xsrf_success_headerz!XSRFTest.test_xsrf_success_header;ss���:�:��������0����%�%�'�'���	�
�
��	
������,�,�,�,�,r:c���d}t��}t|��D])}|�|������*|�t|��|��dS)Nr)r��ranger�rr|r3)rB�
NUM_TOKENS�tokensr�s    r8�test_distinct_tokenszXSRFTest.test_distinct_tokensGsh���
������z�"�"�	)�	)�A��J�J�t�~�~�'�'�(�(�(�(�����V���j�1�1�1�1�1r:c��|���}|j|fD]t}|�ddtj�t
|�����|�|�����}|�|j	d���u|j|f||jffD]�\}}ttd��5|�ddtj�t
|�����|�|�����}ddd��n#1swxYwY|�|j	d����dS)NrQr�r(r2r�r'r1)rr�r�r\r]r^rfrr|r�rr)rB�token2r"r��cookie_token�
body_tokens      r8�test_cross_userzXSRFTest.test_cross_userOs������!�!���o�v�.�	1�	1�E��z�z����\�+�+�D�u�,=�,=�,=�>�>��+�+�E�2�2�	"���H�
���X�]�C�0�0�0�0��_�f�%�
�T�_�%�)
�	1�	1�$�L�*��7�$G�H�H�
�
��:�:��!���/�/��:�0F�0F�0F�G�G� �/�/��=�=�	&����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
���X�]�C�0�0�0�0�	1�	1s�?AD#�#D'	�*D'	c
���|j}t|g��}td��D]�}|�|��}|�|��|�ddtj�t|j�����|�
|�����}|�|jd����|�t|��d��dS)N�rQr�r(r2r�rD)r�r�rCrr�r�r\r]r^rfrr|r�r3)rBr"�tokens_seenr�r�s     r8�test_refresh_tokenzXSRFTest.test_refresh_tokenhs�������5�'�l�l��
�q���
	1�
	1�A��N�N�5�)�)�E��O�O�E�"�"�"��z�z����\�+�+�D�t��,G�,G�,G�H�H��+�+�E�2�2�	"���H�
���X�]�C�0�0�0�0�����[�)�)�1�-�-�-�-�-r:c
���|�|�d���|�d�����|�d���}td��D]-}|�|�|d���|���.|�|��}|�||��|�||�|����||f||ffD]w\}}|�ddt
j�t|�����|�	|�����}|�|j
d���xdS)	NrurvrMrQr�r(r2r�)�assertNotEqualrrCr|r�r\r]r^rfrr�)rB�v1_tokenr��v2_tokenrIrJr�s       r8�test_versioningzXSRFTest.test_versioning|sm�����D�N�N�1�N�5�5�t�~�~�a�~�7P�7P�Q�Q�Q��>�>�!�>�,�,���q���	L�	L�A����T�^�^�H�a�^�@�@�(�K�K�K�K��>�>�(�+�+�����H�h�/�/�/����H�d�n�n�X�&>�&>�?�?�?�+3�H�)=��(�?S�(T�	1�	1�$�L�*��z�z����\�+�+�D�z�,B�,B�,B�C�C��+�+�L�9�9�	"���H�
���X�]�C�0�0�0�0�	1�	1r:r�r1)rJrKrLrrSr?rrrr%r*r-r0r3r7r:r=r?rArFrKrOrTrnros@r8rr�
sk�������	�	�	�	�	�.�	�	�	�'�'�'�+�+�+�+�+�	)�	)�	)�	)�,�,�,�,�
-�-�-�
-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�
-�
-�
-�2�2�2�1�1�1�2.�.�.�(1�1�1�1�1�1�1r:rc�6�eZdZGd�de��Zd�Zd�ZdS)�XSRFCookieKwargsTestc��eZdZd�ZdS)�XSRFCookieKwargsTest.Handlerc�:�|�|j��dSr1)rZr�rAs r8r[z XSRFCookieKwargsTest.Handler.get�s���J�J�t��'�'�'�'�'r:Nr\rHr:r8rSrX�s#������	(�	(�	(�	(�	(r:rSc�B�tdtdd������S)NTr�)rrn)r�xsrf_cookie_kwargsr�rAs r8r?z#XSRFCookieKwargsTest.get_app_kwargs�s,����$��ST�2U�2U�2U�
�
�
�	
r:c���|�d��}|�d|jd�����|�d|jd�����|j�d��}|�J�tjd|��}|�J�tj���tj	d���z}tj�|�
��d��}|�J�tj|dd	��}|�t||z
�����d
k��dS)NrQz	httponly;r"zexpires=z.*; expires=(?P<expires>.+);.*r�rArCrDr)r�r�r$rSr[r�r�rErFrGrHrIrJrKr�rLrMrNs       r8�test_xsrf_httponlyz'XSRFCookieKwargsTest.test_xsrf_httponly�sC���:�:�c�?�?���
�
�k�8�#3�L�#A�#G�#G�#I�#I�J�J�J��
�
�j�(�"2�<�"@�"F�"F�"H�"H�I�I�I��!�%�%�l�3�3���!�!�!���9�6�B�B��� � � ��#�*�*�,�,�x�/A�q�/I�/I�/I�I����&�&�u���'8�'8��'C�D�D���!�!�!�!�*�F�2�A�2�J�7������W�~�5�D�D�F�F�G�G�"�L�M�M�M�M�Mr:N)rJrKrLrrSr?r]rHr:r8rVrV�sa������(�(�(�(�(�.�(�(�(�
�
�
�

N�
N�
N�
N�
Nr:rVc�0�eZdZGd�de��Zd�ZdS)�FinishExceptionTestc��eZdZd�ZdS)�FinishExceptionTest.Handlerc���|�d��|�dd��|�dd��rtd���|�d��t���)NrP�WWW-Authenticate�Basic realm="something"�finish_valuerezauthentication required)r�r�r�r*rZrAs r8r[zFinishExceptionTest.Handler.get�sm���O�O�C� � � ��O�O�.�0I�J�J�J�� � ���4�4�
��6�7�7�7��
�
�4�5�5�5��h�h�r:Nr\rHr:r8rSra�s#������	�	�	�	�	r:rSc��dD]{}|�|��}|�|jd��|�d|j�d����|�d|j���|dS)N)rQz/?finish_value=1rPrdrcsauthentication required)r�r|r�r$r[r�)rB�ur�s   r8�test_finish_exceptionz)FinishExceptionTest.test_finish_exception�s���*�	H�	H�A��z�z�!�}�}�H����X�]�C�0�0�0����)�8�+;�+?�+?�@R�+S�+S�
�
�
�
���7���G�G�G�G�
	H�	Hr:N)rJrKrLrrSrhrHr:r8r_r_�sR�����������.����H�H�H�H�Hr:r_c� �eZdZd�Zd�Zd�ZdS)�
DecoratorTestc�^�Gd�dt��}Gd�dt��}d|fd|fgS)Nc�$�eZdZed���ZdS)�6DecoratorTest.get_handlers.<locals>.RemoveSlashHandlerc��dSr1rHrAs r8r[z:DecoratorTest.get_handlers.<locals>.RemoveSlashHandler.get�����r:N)rJrKrLr,r[rHr:r8�RemoveSlashHandlerrm�s-������
�
�
��[�
�
�
r:rpc�$�eZdZed���ZdS)�3DecoratorTest.get_handlers.<locals>.AddSlashHandlerc��dSr1rHrAs r8r[z7DecoratorTest.get_handlers.<locals>.AddSlashHandler.get�ror:N)rJrKrLr-r[rHr:r8�AddSlashHandlerrr�s-������
�
�
��X�
�
�
r:rt�
/removeslash/�	/addslashr�)rBrprts   r8r>zDecoratorTest.get_handlers�sn��	�	�	�	�	��	�	�	�
	�	�	�	�	�n�	�	�	�
!�"4�5��_�7U�V�Vr:c�R�|�dd���}|�|jd��|�|jdd��|�dd���}|�|jd��|�|jdd��dS)	NruFrfrOriz/removeslashz/removeslash/?foo=barz/removeslash?foo=barrSr�s  r8�test_removeslashzDecoratorTest.test_removeslash�s����:�:�o��:�F�F��������,�,�,�����)�*�5�~�F�F�F��:�:�5��:�N�N��������,�,�,�����)�*�5�7M�N�N�N�N�Nr:c�R�|�dd���}|�|jd��|�|jdd��|�dd���}|�|jd��|�|jdd��dS)	NrvFrfrOriz
/addslash/z/addslash?foo=barz/addslash/?foo=barrSr�s  r8�
test_addslashzDecoratorTest.test_addslash�s����:�:�k�E�:�B�B��������,�,�,�����)�*�5�|�D�D�D��:�:�1�E�:�J�J��������,�,�,�����)�*�5�7K�L�L�L�L�Lr:N)rJrKrLr>rxrzrHr:r8rjrj�sL������W�W�W�O�O�O�M�M�M�M�Mr:rjc�P�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dS)
�	CacheTestc�2�Gd�dt��}d|fgS)Nc��eZdZd�Zd�ZdS)�+CacheTest.get_handlers.<locals>.EtagHandlerc�0�|�|��dSr1rY)rB�
computed_etags  r8r[z/CacheTest.get_handlers.<locals>.EtagHandler.get�s���
�
�=�)�)�)�)�)r:c��|jdSr|)�
_write_bufferrAs r8�compute_etagz8CacheTest.get_handlers.<locals>.EtagHandler.compute_etag�s���)�!�,�,r:N)rJrKrLr[r�rHr:r8�EtagHandlerr�s2������
*�
*�
*�
-�
-�
-�
-�
-r:r�z
/etag/(.*)r�)rBr�s  r8r>zCacheTest.get_handlers�s<��	-�	-�	-�	-�	-�.�	-�	-�	-��{�+�,�,r:c�<�d}d}|�||d��dS)N�"xyzzy"�*r���
_test_etag�rBr��etagss   r8�test_wildcard_etagzCacheTest.test_wildcard_etag�s(��!�
������
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)Nr�r�r�r�s   r8�test_strong_etag_matchz CacheTest.test_strong_etag_match�s(��!�
������
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)N�"xyzzy1"�"xyzzy1", "xyzzy2"r�r�r�s   r8�test_multiple_strong_etag_matchz)CacheTest.test_multiple_strong_etag_match�s(��"�
�$�����
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)Nr�r�r�r�r�s   r8�test_strong_etag_not_matchz$CacheTest.test_strong_etag_not_matchs(��!�
������
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)Nr�r�r�r�r�s   r8�#test_multiple_strong_etag_not_matchz-CacheTest.test_multiple_strong_etag_not_matchs(��!�
�$�����
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)Nr��
W/"xyzzy1"r�r�r�s   r8�test_weak_etag_matchzCacheTest.test_weak_etag_match
�(��"�
������
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)N�"xyzzy2"�W/"xyzzy1", W/"xyzzy2"r�r�r�s   r8�test_multiple_weak_etag_matchz'CacheTest.test_multiple_weak_etag_match�(��"�
�(�����
�u�c�2�2�2�2�2r:c�<�d}d}|�||d��dS)Nr�r�r�r�r�s   r8�test_weak_etag_not_matchz"CacheTest.test_weak_etag_not_matchr�r:c�<�d}d}|�||d��dS)Nz"xyzzy3"r�r�r�r�s   r8�!test_multiple_weak_etag_not_matchz+CacheTest.test_multiple_weak_etag_not_matchr�r:c�t�|�d|zd|i���}|�|j|��dS)Nz/etag/r�r*rP)rBr�r�r�r�s     r8r�zCacheTest._test_etagsI���:�:��}�$���.F��
�
��	
������4�4�4�4�4r:N)rJrKrLr>r�r�r�r�r�r�r�r�r�r�rHr:r8r|r|�s�������-�-�-�3�3�3�
3�3�3�
3�3�3�
3�3�3�
3�3�3�
3�3�3�
3�3�3�
3�3�3�
3�3�3�
5�5�5�5�5r:r|c�0�eZdZGd�de��Zd�ZdS)�RequestSummaryTestc��eZdZd�ZdS)�RequestSummaryTest.Handlerc�l�d|j_|�|�����dSr1)r��	remote_ipr�r�rAs r8r[zRequestSummaryTest.Handler.get's2��&*�D�L�"��K�K��-�-�/�/�0�0�0�0�0r:Nr\rHr:r8rSr�&s#������	1�	1�	1�	1�	1r:rSc�f�|�d��}|�|jd��dS)NrQsGET / (None)r,r:s  r8�test_missing_remote_ipz)RequestSummaryTest.test_missing_remote_ip.s/���z�z�#���������O�4�4�4�4�4r:N)rJrKrLrrSr�rHr:r8r�r�%sM������1�1�1�1�1�.�1�1�1�5�5�5�5�5r:r�c��eZdZd�ZdS)�
HTTPErrorTestc��tdd���}tj|��}|�||��|�|j|j��|�|j|j��dS)Nr1zGo awayr�)r r��assertIsNotr|r�r�)rBr�e2s   r8�	test_copyzHTTPErrorTest.test_copy4sq���c�)�,�,�,��
�Y�q�\�\������B�����������7�7�7������2�9�-�-�-�-�-r:N)rJrKrLr�rHr:r8r�r�3s#������.�.�.�.�.r:r�c��eZdZd�ZdS)�ApplicationTestc�z�tg��}|�dd���}|���dS)Nrrz)�address)r�listenr�)rBr@�servers   r8�test_listenzApplicationTest.test_listen=s3���"�o�o�����A�{��3�3�����
�
�
�
�
r:N)rJrKrLr�rHr:r8r�r�<s#����������r:r�c� �eZdZd�Zd�Zd�ZdS)�URLSpecReverseTestc���|�dtdd�������|�dtdd�������dS)Nz/favicon.icoz
/favicon\.icoz^/favicon\.ico$�r|r$�reverserAs r8�test_reversezURLSpecReverseTest.test_reverseDsb�������-=�t�)D�)D�)L�)L�)N�)N�O�O�O������-?��)F�)F�)N�)N�)P�)P�Q�Q�Q�Q�Qr:c��dg}|D]R}t|d��}	|���}|�d|�d|�����C#t$rY�OwxYwdS)Nz^/api/v\d+/foo/(\w+)$z.did not get expected exception when reversing z
. result: )r$r�rmr)rB�pathsr3�url_specr�s     r8�test_non_reversiblez&URLSpecReverseTest.test_non_reversibleHs���
*�*���
	�
	�D��4����H�
�!�)�)�+�+���	�	�	�$(�D�D�&�&�2�������
�
�
���
����
	�
	s�/A	�	
A�Ac���|�dtdd���d����|�dtdd���d����dS)Nz/api/v1/foo/barz^/api/v1/foo/(\w+)$r
z/api.v1/foo/5/icon.pngz/api\.v1/foo/([0-9]+)/icon\.pngrMr�rAs r8�test_reverse_argumentsz)URLSpecReverseTest.test_reverse_argumentsZs{������s�#9�4�@�@�H�H��O�O�	
�	
�	
�	
���$��2�D�9�9�A�A�!�D�D�	
�	
�	
�	
�	
r:N)rJrKrLr�r�r�rHr:r8r�r�CsD������R�R�R����$
�
�
�
�
r:r�c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�RedirectHandlerTestc�H�dtddifdtddifdtddifgS)N�/srcr$�/dstz/src2z
/dst2?foo=barz/(.*?)/(.*?)/(.*)z/{1}/{0}/{2})r,rAs r8r>z RedirectHandlerTest.get_handlerses;��
�'�%���9�
�(�5�/�*B�C�
!�#5��~�7N�O�
�	
r:c��|�dd���}|�|jd��|�|jdd��dS)Nr�FrfrOrir�rSr�s  r8�test_basic_redirectz'RedirectHandlerTest.test_basic_redirectlsS���:�:�f�u�:�=�=��������,�,�,�����)�*�5�v�>�>�>�>�>r:c��|�dd���}|�|jd��|�|jdd��dS)Nz/src?foo=barFrfrOriz/dst?foo=barrSr�s  r8�test_redirect_with_argumentz/RedirectHandlerTest.test_redirect_with_argumentqsS���:�:�n�u�:�E�E��������,�,�,�����)�*�5�~�F�F�F�F�Fr:c��|�dd���}|�|jd��|�|jdd��dS)Nz/src2?foo2=bar2FrfrOriz/dst2?foo=bar&foo2=bar2rSr�s  r8�%test_redirect_with_appending_argumentz9RedirectHandlerTest.test_redirect_with_appending_argumentvsU���:�:�/�%�:�H�H��������,�,�,�����)�*�5�7P�Q�Q�Q�Q�Qr:c��|�dd���}|�|jd��|�|jdd��dS)Nz/a/b/cFrfrOriz/b/a/crSr�s  r8�test_redirect_patternz)RedirectHandlerTest.test_redirect_pattern{sS���:�:�h��:�?�?��������,�,�,�����)�*�5�x�@�@�@�@�@r:N)rJrKrLr>r�r�r�r�rHr:r8r�r�dsj������
�
�
�?�?�?�
G�G�G�
R�R�R�
A�A�A�A�Ar:r�c�*�eZdZdZd�Zd�Zd�Zd�ZdS)�AcceptLanguageTestz)Test evaluation of Accept-Language headerc���tjtj�tj�t��d��d��Gd�dt��}d|fgS)N�gettext_translations�tornado_testc��eZdZd�ZdS)�>AcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandlerc��|�d|���j�dd����|�d��dS)Nr��_�-r:)r��get_browser_localer��replacer�rAs r8r[zBAcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandler.get�sW�����&��(?�(?�(A�(A�(F�(N�(N�s�TW�(X�(X�������C� � � � � r:Nr\rHr:r8�AcceptLanguageHandlerr��s#������
!�
!�
!�
!�
!r:r�rQ)r�load_gettext_translationsr2r3r4r5r6r)rBr�s  r8r>zAcceptLanguageTest.get_handlers�s{���(��G�L�L������2�2�4J�K�K��	
�	
�	
�
	!�	!�	!�	!�	!�N�	!�	!�	!��'�(�
�	
r:c���|�dddi���}|�|jdd��|�dddi���}|�|jdd��dS)NrQr)zfr-FR;q=0.9r*r�zfr-FRzfr-FR; q=0.9�r�r|r$r�s  r8�test_accept_languagez'AcceptLanguageTest.test_accept_language�s|���:�:�c�,=�}�+M�:�N�N������)�*<�=�w�G�G�G��:�:�c�,=�~�+N�:�O�O������)�*<�=�w�G�G�G�G�Gr:c�z�|�dddi���}|�|jdd��dS)NrQr)z	fr-FR;q=0r*r��en-USr�r�s  r8�test_accept_language_ignorez.AcceptLanguageTest.test_accept_language_ignore�sB���:�:�c�,=�{�+K�:�L�L������)�*<�=�w�G�G�G�G�Gr:c�z�|�dddi���}|�|jdd��dS)NrQr)z
fr-FR;q=-1r*r�r�r�r�s  r8�test_accept_language_invalidz/AcceptLanguageTest.test_accept_language_invalid�sB���:�:�c�,=�|�+L�:�M�M������)�*<�=�w�G�G�G�G�Gr:N)rJrKrLrMr>r�r�r�rHr:r8r�r��sa������3�3�
�
�
�"H�H�H�H�H�H�H�H�H�H�Hr:r�)��tornado.concurrentr�tornador�tornado.escaperrrrr	r
�tornado.httpclientr�tornado.httputilr�tornado.iostreamr
r�
tornado.locksr�tornado.logrr�tornado.simple_httpclientr�tornado.templater�tornado.testingrrrr�tornado.utilrr�tornado.webrrrrr,r r!r"r#r$r%r&r'r(r)r*r+r,r-r.r�rtr�rE�email.utilsrHrj�ior/r�r4r2r�rrr8�urllib.parser\r9r<rOrUr^�TestCaserqr�r�r�rVrarnrwr�r�r�r�r�r�r�r�r�r�rrrrqrwr�r;rMrVr\r�r�r�r�r�r�r�r�r�r�r
r1rAr�rLrOrirrr�r�r�r�r�r�rrrr!r,r3r>ri�objectrwr�r�r�r�r�rrVr_rjr|r�r�r�r�r�r�rHr:r8�<module>r�sf��%�%�%�%�%�%�����������������������/�.�.�.�.�.�-�-�-�-�-�-�%�%�%�%�%�%�������������(�(�(�(�(�(�(�(�;�;�;�;�;�;�'�'�'�'�'�'�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�1�1�1�1�1�1�1�1�������������������������������������������,��������������������������������������	�	�	�	�	�	�	�	�
�
�
�
�
�
�
�
���������7�7�7������#����$	%�	%�	%�	%�	%�K�	%�	%�	%������>����
$�$�$�$�$�~�$�$�$�,1S�1S�1S�1S�1S��*�1S�1S�1S�j,E�,E�,E�,E�,E��*�,E�,E�,E�^.9�.9�.9�.9�.9�k�.9�.9�.9�bP<�P<�P<�P<�P<��P<�P<�P<�f
�
�
�
�
��
�
�
�
�
�
�
�
�{�
�
�
�8
(�
(�
(�
(�
(�^�
(�
(�
(������+����0
�
�
�
�
�.�
�
�
�6--�--�--�--�--�+�--�--�--�`)U�)U�)U�)U�)U�~�)U�)U�)U�XY�Y�Y�Y�Y�~�Y�Y�Y�*B�B�B�B�B�^�B�B�B�
1�1�1�1�1�n�1�1�1�
#�#�#�#�#�.�#�#�#�
(�(�(�(�(��(�(�(�H�H�H�H�H�n�H�H�H����������	�	�	�	�	�^�	�	�	�.�.�.�.�.��.�.�.�
�
�
�
�
�.�
�
�
�LO�LO�LO�LO�LO�k�LO�LO�LO�^/�/�/�/�/�k�/�/�/�?1�?1�?1�?1�?1��?1�?1�?1�DV-�V-�V-�V-�V-�[�V-�V-�V-�r
O�O�O�O�O��O�O�O�*-�-�-�-�-�K�-�-�-�:;�;�;�;�;�[�;�;�;�@C�@C�@C�@C�@C�;�@C�@C�@C�F'0�'0�'0�'0�'0�{�'0�'0�'0�T0�0�0�0�0�k�0�0�0�D0�0�0�0�0�[�0�0�0�&8�8�8�8�8�+�8�8�8�
@�
@�
@�
@�
@�)�
@�
@�
@�F�F�F�F�F�)�F�F�F�*&1�&1�&1�&1�&1�,�&1�&1�&1�R
�
�
�
�
�*�
�
�
�C�C�C�C�C�/�C�C�C�,-�-�-�-�-�;�-�-�-�&7
�7
�7
�7
�7
�(�7
�7
�7
�tH�H�H�H�H�K�H�H�H�2
�
�
�
�
�/�
�
�
�$	�	�	�	�	�i�	�	�	�,1�,1�,1�,1�,1�0�,1�,1�,1�^�����,����+
�+
�+
�+
�+
�0�+
�+
�+
�\
�
�
�
�
�0�
�
�
�">�>�>�>�>�1�>�>�>�,Y1�Y1�Y1�Y1�Y1��Y1�Y1�Y1�x
1�
1�
1�
1�
1�#8�
1�
1�
1�-�-�-�-�-�*?�-�-�-�$:�:�:�:�:�.�:�:�:�&2�2�2�2�2�+�2�2�2�*
1�
1�
1�
1�
1�/�
1�
1�
1� 
�
�
�
�
�[�
�
�
�@�@�@�@�@�K�@�@�@�$-�-�-�-�-�+�-�-�-�.�.�.�.�.��.�.�.�$[ �[ �[ �[ �[ �{�[ �[ �[ �D�/�/�/�/�/�^�/�/���/�>J
�J
�J
�J
�J
�&�J
�J
�J
�Z
E�
E�
E�
E�
E�'��
E�
E�
E�B�B�B�B�B�'��B�B�B�8
�8
�8
�8
�8
�!6�8
�8
�8
�v1�1�1�1�1�+�1�1�1�.g)�g)�g)�g)�g)�h�'�g)�g)�g)�TH1�H1�H1�H1�H1�$�H1�H1�H1�VN�N�N�N�N�0�N�N�N�4H�H�H�H�H�/�H�H�H�*M�M�M�M�M�K�M�M�M�B<5�<5�<5�<5�<5��<5�<5�<5�~5�5�5�5�5�.�5�5�5�.�.�.�.�.�H�%�.�.�.������m����
�
�
�
�
��*�
�
�
�BA�A�A�A�A�+�A�A�A�:!H�!H�!H�!H�!H��!H�!H�!H�!H�!Hr:

Youez - 2016 - github.com/yon3zu
LinuXploit