o
    Qœ_ßx  ã                   @   sâ  d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z; G dd„ de,j<ƒZ=G dd„ de8ƒZ>G dd„ de8ƒZ?G dd„ de8ƒZ@G dd„ de8ƒZAG dd„ de8ƒZBG dd„ de8ƒZCG d d!„ d!e8ƒZDG d"d#„ d#e8ƒZEG d$d%„ d%e8ƒZFG d&d'„ d'e8ƒZGe;G d(d)„ d)e8ƒƒZHG d*d+„ d+eIƒZJG d,d-„ d-eJe.ƒZKG d.d/„ d/eJe/ƒZLG d0d1„ d1e0ƒZMG d2d3„ d3e.ƒZNG d4d5„ d5e.ƒZOG d6d7„ d7e.ƒZPG d8d9„ d9e.ƒZQG d:d;„ d;e.ƒZRG d<d=„ d=e.ƒZSG d>d?„ d?e.ƒZTG d@dA„ dAe.ƒZUdS )Bé    N)Úclosing)Ú
to_unicodeÚutf8)ÚgenÚversion)ÚAsyncHTTPClient)ÚHTTPHeadersÚResponseStartLine)ÚIOLoop)ÚUnsatisfiableReadError)ÚEvent)Úgen_log)ÚResolverÚbind_sockets)ÚSimpleAsyncHTTPClientÚHTTPStreamClosedErrorÚHTTPTimeoutError)ÚChunkHandlerÚCountdownHandlerÚHelloWorldHandlerÚRedirectHandlerÚUserAgentHandler)Úhttpclient_test)ÚAsyncHTTPTestCaseÚAsyncHTTPSTestCaseÚAsyncTestCaseÚ	ExpectLogÚgen_test)ÚskipOnTravisÚskipIfNoIPv6Úrefusing_port)ÚRequestHandlerÚApplicationÚurlÚstream_request_bodyc                   @   ó   e Zd Zdd„ ZdS )ÚSimpleHTTPClientCommonTestCasec                 C   s   t dd�}|  t|t ƒ¡ |S )NT©Úforce_instance)r   Ú
assertTrueÚ
isinstance©ÚselfÚclient© r.   úE/usr/lib/python3/dist-packages/tornado/test/simple_httpclient_test.pyÚget_http_client.   s   
z.SimpleHTTPClientCommonTestCase.get_http_clientN)Ú__name__Ú
__module__Ú__qualname__r0   r.   r.   r.   r/   r&   -   ó    r&   c                   @   ó"   e Zd Zdd„ Zejdd„ ƒZdS )ÚTriggerHandlerc                 C   s   || _ || _d S ©N©ÚqueueÚwake_callback)r,   r9   r:   r.   r.   r/   Ú
initialize5   s   
zTriggerHandler.initializec                 c   sF   � t  d¡ tƒ }| j |j¡ |  dd¡dkr|  ¡  | ¡ V  d S )Nzqueuing triggerÚwakeÚtrue)	ÚloggingÚdebugr   r9   ÚappendÚsetÚget_argumentr:   Úwait)r,   Úeventr.   r.   r/   Úget9   s   €
zTriggerHandler.getN)r1   r2   r3   r;   r   Ú	coroutinerE   r.   r.   r.   r/   r6   4   ó    r6   c                   @   r5   )ÚContentLengthHandlerc                 C   s   |   ¡ | _t ¡  | j¡ d S r7   )ÚdetachÚstreamr
   ÚcurrentÚspawn_callbackÚwrite_response©r,   r.   r.   r/   rE   D   s   
zContentLengthHandler.getc                 c   s,   � | j  td|  d¡ ƒ¡V  | j  ¡  d S )Nz)HTTP/1.0 200 OK
Content-Length: %s

okÚvalue)rJ   Úwriter   rB   ÚcloserN   r.   r.   r/   rM   H   s   €ÿÿÿz#ContentLengthHandler.write_responseN)r1   r2   r3   rE   r   rF   rM   r.   r.   r.   r/   rH   C   rG   rH   c                   @   r%   )ÚHeadHandlerc                 C   s   |   dd¡ d S )NúContent-LengthÚ7)Ú
set_headerrN   r.   r.   r/   ÚheadT   ó   zHeadHandler.headN)r1   r2   r3   rV   r.   r.   r.   r/   rR   S   r4   rR   c                   @   r%   )ÚOptionsHandlerc                 C   ó   |   dd¡ |  d¡ d S )NzAccess-Control-Allow-OriginÚ*Úok©rU   rP   rN   r.   r.   r/   ÚoptionsY   ó   zOptionsHandler.optionsN)r1   r2   r3   r]   r.   r.   r.   r/   rX   X   r4   rX   c                   @   r%   )ÚNoContentHandlerc                 C   s   |   d¡ |  ¡  d S )NéÌ   ©Ú
set_statusÚfinishrN   r.   r.   r/   rE   _   ó   
zNoContentHandler.getN©r1   r2   r3   rE   r.   r.   r.   r/   r_   ^   r4   r_   c                   @   r%   )ÚSeeOtherPostHandlerc                 C   s>   t | jjƒ}|dv sJ d| jj ƒ‚|  dd¡ |  |¡ d S )N©é.  i/  úunexpected body %rÚLocationú/see_other_get)ÚintÚrequestÚbodyrU   rb   )r,   Úredirect_coder.   r.   r/   Úposte   s   zSeeOtherPostHandler.postN©r1   r2   r3   rp   r.   r.   r.   r/   rf   d   r4   rf   c                   @   r%   )ÚSeeOtherGetHandlerc                 C   s&   | j jrtd| j j ƒ‚|  d¡ d S )Nri   r[   )rm   rn   Ú	ExceptionrP   rN   r.   r.   r/   rE   m   s   zSeeOtherGetHandler.getNre   r.   r.   r.   r/   rr   l   r4   rr   c                   @   r%   )ÚHostEchoHandlerc                 C   s   |   | jjd ¡ d S )NÚHost)rP   rm   ÚheadersrN   r.   r.   r/   rE   t   s   zHostEchoHandler.getNre   r.   r.   r.   r/   rt   s   r4   rt   c                   @   r%   )ÚNoContentLengthHandlerc                 C   s:   | j j d¡r|  ¡ }| d¡ | ¡  d S |  d¡ d S )NzHTTP/1s   HTTP/1.0 200 OK

hellozHTTP/1 required)rm   r   Ú
startswithrI   rP   rQ   rc   )r,   rJ   r.   r.   r/   rE   y   s
   
zNoContentLengthHandler.getNre   r.   r.   r.   r/   rw   x   r4   rw   c                   @   r%   )ÚEchoPostHandlerc                 C   s   |   | jj¡ d S r7   )rP   rm   rn   rN   r.   r.   r/   rp   †   ó   zEchoPostHandler.postNrq   r.   r.   r.   r/   ry   …   r4   ry   c                   @   r%   )ÚRespondInPrepareHandlerc                 C   s   |   d¡ |  d¡ d S )Né“  Ú	forbiddenra   rN   r.   r.   r/   ÚprepareŒ   ó   
zRespondInPrepareHandler.prepareN)r1   r2   r3   r~   r.   r.   r.   r/   r{   Š   s    r{   c                   @   sþ  e Zd Zdd„ Zdejfdd„Zdejfdd„Zdejfdd	„Ze	dejfd
d„ƒZ
dejfdd„Zdejfdd„Zdejfdd„Zdejfdd„Zee	dejfdd„ƒƒZedejfdd„ƒZedejfdd„ƒZdejfdd„Zdejfdd„Zdejfdd„Zdejfd d!„Zdejfd"d#„Zdejfd$d%„Zdejfd&d'„Zdejfd(d)„Zd*d+„ Zejd,d-„ ƒZdejfd.d/„Z dejfd0d1„Z!dejfd2d3„Z"dejfd4d5„Z#dejfd6d7„Z$dejfd8d9„Z%dejfd:d;„Z&dejfd<d=„Z'dejfd>d?„Z(d@S )AÚSimpleHTTPClientTestMixinc                 K   s   t ƒ ‚r7   )ÚNotImplementedError©r,   Úkwargsr.   r.   r/   Úcreate_client’   ó   z'SimpleHTTPClientTestMixin.create_clientr,   c                 C   s¨   t  ¡ | _ttdtt| j| jd�ƒtdtƒtdt	dd�tdt
ƒtdtƒtd	tƒtd
tƒtdtƒtdtƒtdtƒtdtƒtdtƒtdtƒtdtƒtdtƒtdtƒgdd�S )Nú/triggerr8   z/chunkz/countdown/([0-9]+)Ú	countdown)Únameú/helloz/content_lengthú/headú/optionsú/no_contentú/see_other_postrk   ú
/host_echoú/no_content_lengthú
/echo_postú/respond_in_preparez	/redirectú/user_agentT)Úgzip)ÚcollectionsÚdequeÚtriggersr"   r#   r6   ÚdictÚstopr   r   r   rH   rR   rX   r_   rf   rr   rt   rw   ry   r{   r   r   rN   r.   r.   r/   Úget_app•   s4   ÿýìéz!SimpleHTTPClientTestMixin.get_appc                 C   s„   |   tƒ tƒ u ¡ |   tƒ tdd�u¡ ttƒ ƒ�}dd„ }| j |¡}| |¡}|   ||u¡ W d   ƒ d S 1 s;w   Y  d S )NTr'   c                   Ó   s   �t  d¡I d H  tƒ S ©Nr   )r   Úsleepr   r.   r.   r.   r/   Úmake_client¾   s   €z=SimpleHTTPClientTestMixin.test_singleton.<locals>.make_client)r)   r   r   r
   Úio_loopÚrun_sync)r,   Úio_loop2rœ   Úclient1Úclient2r.   r.   r/   Útest_singleton´   s   ÿ
"øz(SimpleHTTPClientTestMixin.test_singletonc                    sR  t ˆjdd�ƒ�—}ˆ |jd¡ g ‰ tdƒD ]}|f‡ ‡fdd„	}| ˆ d¡¡ |¡ qˆj‡fdd„d	� ˆ t	|j
ƒd¡ ˆj ¡ ƒ  ˆj ¡ ƒ  ˆj‡ ‡fd
d„d	� ˆ tˆ ƒtddgƒ¡ ˆ t	|j
ƒd¡ ˆj ¡ ƒ  ˆj ¡ ƒ  ˆj‡ fdd„d	� ˆ tˆ ƒtg d¢ƒ¡ ˆ t	ˆjƒd¡ W d   ƒ d S 1 s¢w   Y  d S )Né   ©Úmax_clientsé   c                    s   ˆ   |¡ ˆ ¡  d S r7   )r@   r˜   )ÚfutÚi©Úseenr,   r.   r/   ÚcbÎ   rd   z;SimpleHTTPClientTestMixin.test_connection_limit.<locals>.cbr†   c                      s   t ˆ jƒdkS ©Nr£   ©Úlenr–   r.   rN   r.   r/   Ú<lambda>Ó   ó    zASimpleHTTPClientTestMixin.test_connection_limit.<locals>.<lambda>)Ú	conditionc                      s   t ˆjƒdkot ˆ ƒdkS r¬   r­   r.   r©   r.   r/   r¯   Ù   ó    r   é   c                      s   t ˆ ƒdkS )Nr¦   )r®   r.   )rª   r.   r/   r¯   à   s    )r   r³   r£   é   )r   r„   ÚassertEqualr¥   ÚrangeÚfetchÚget_urlÚadd_done_callbackrC   r®   r9   r–   ÚpopleftrA   )r,   r-   r¨   r«   r.   r©   r/   Útest_connection_limitÆ   s&   "åz/SimpleHTTPClientTestMixin.test_connection_limitc                 c   sV   � t | jdd�ƒ�}|j|  d¡dd�V }| ¡  W d   ƒ d S 1 s$w   Y  d S )Nr³   r¤   z/countdown/3r´   ©Úmax_redirects)r   r„   r·   r¸   Úrethrow)r,   r-   Úresponser.   r.   r/   Útest_redirect_connection_limitä   s
   €
"þz8SimpleHTTPClientTestMixin.test_redirect_connection_limitc                 C   s\   | j ddd�}|  d|j¡ |  |jj d¡¡ |  |j d¡¡ |  |jd  d¡¡ d S )Nz/countdown/5r´   r¼   rh   z/countdown/2rj   z/countdown/1)	r·   rµ   Úcoder)   rm   r#   ÚendswithÚeffective_urlrv   ©r,   r¿   r.   r.   r/   Útest_max_redirectsë   s
   z,SimpleHTTPClientTestMixin.test_max_redirectsc                 C   s4   t ddiƒ}| jd|d� |  t| ¡ ƒdg¡ d S )Nú
User-AgentÚFoor‰   )rv   )rÆ   rÇ   )r   r·   rµ   ÚlistÚget_all)r,   rv   r.   r.   r/   Útest_header_reuseô   s   z+SimpleHTTPClientTestMixin.test_header_reusec                 C   s8   | j ddd�}|  d|j¡ |  |j ¡ d t¡¡ d S )Nr’   ÚGET©ÚmethodéÈ   z
Tornado/{})r·   rµ   rÁ   rn   ÚdecodeÚformatr   rÄ   r.   r.   r/   Útest_default_user_agentû   s   z1SimpleHTTPClientTestMixin.test_default_user_agentc                 C   sf   dD ].}| j ddd| d�}|  d|j¡ |  |jj d¡¡ |  |j d¡¡ |  d|jj¡ qd S )Nrg   r�   ÚPOSTz%d)rÍ   rn   rÎ   rk   )	r·   rµ   rÁ   r)   rm   r#   rÂ   rÃ   rÍ   )r,   rÁ   r¿   r.   r.   r/   Útest_see_other_redirect   s   úz1SimpleHTTPClientTestMixin.test_see_other_redirectc              	   #   s´   � d}t ƒ ‰ | ‰G ‡ ‡fdd„dtƒ}t| j|ƒ d�ƒ�*}|  t¡� |j|  d¡|ddd�V  W d   ƒ n1 s:w   Y  W d   ƒ n1 sIw   Y  ˆ  ¡  t	 
d	¡V  d S )
Nçš™™™™™¹?c                       s   e Zd Z‡ ‡fdd„ZdS )zGSimpleHTTPClientTestMixin.test_connect_timeout.<locals>.TimeoutResolverc                 Ÿ   s$   �ˆ   ¡ I d H  tjdˆ ¡ ffgS ©Nú	127.0.0.1)rC   ÚsocketÚAF_INETÚget_http_port©r,   Úargsrƒ   ©Úcleanup_eventÚtestr.   r/   Úresolve  s   €zOSimpleHTTPClientTestMixin.test_connect_timeout.<locals>.TimeoutResolver.resolveN)r1   r2   r3   rß   r.   rÜ   r.   r/   ÚTimeoutResolver  s    rà   ©Úresolverr‰   i  T)Úconnect_timeoutÚrequest_timeoutÚraise_errorgš™™™™™É?)r   r   r   r„   ÚassertRaisesr   r·   r¸   rA   r   r›   )r,   Útimeoutrà   r-   r.   rÜ   r/   Útest_connect_timeout	  s$   €
üÿ€ÿz.SimpleHTTPClientTestMixin.test_connect_timeoutc                 C   sl   d}t jdkr	d}|  t¡� | jd|dd� W d   ƒ n1 s!w   Y  | j ¡ ƒ  | j dd„ ¡ d S )	NrÔ   Úntg      à?z/trigger?wake=falseT)rä   rå   c                   S   ó
   t  d¡S rš   ©r   r›   r.   r.   r.   r/   r¯   0  ó   
 z@SimpleHTTPClientTestMixin.test_request_timeout.<locals>.<lambda>)	Úosrˆ   ræ   r   r·   r–   rº   r�   rž   )r,   rç   r.   r.   r/   Útest_request_timeout&  s   
ÿz.SimpleHTTPClientTestMixin.test_request_timeoutc                 C   s�   t ddtjd�\}| ¡ d }| j |¡ d|  ¡ |f }|  t¡� | j	|ddd� W d   ƒ n1 s5w   Y  |  	|¡}|  
|jd	¡ d S )
Nr   z::1)Úfamilyr³   z%s://[::1]:%d/helloFT)Ú
allow_ipv6rå   ó   Hello world!)r   r×   ÚAF_INET6ÚgetsocknameÚhttp_serverÚ
add_socketÚget_protocolræ   rs   r·   rµ   rn   )r,   ÚsockÚportr#   r¿   r.   r.   r/   Ú	test_ipv62  s   ÿ
z#SimpleHTTPClientTestMixin.test_ipv6c              	   C   sæ   |   d¡}|  |jd¡ |   d¡}|  |jd¡ ttdtjd��I |  t¡� | j ddd� W d   ƒ n1 s8w   Y  |  t¡� | j d	dd� W d   ƒ n1 sTw   Y  W d   ƒ d S W d   ƒ d S 1 slw   Y  d S )
Nz/content_length?value=2,2ó   okz/content_length?value=2,%202,2z".*Multiple unequal Content-Lengths©Úlevelz/content_length?value=2,4T©rå   z/content_length?value=2,%202,3)	r·   rµ   rn   r   r   r>   ÚINFOræ   r   rÄ   r.   r.   r/   Ú%test_multiple_content_length_accepted@  s    

ÿÿÿû"ûz?SimpleHTTPClientTestMixin.test_multiple_content_length_acceptedc                 C   s>   | j ddd�}|  |jd¡ |  |jd d¡ |  |j¡ d S )NrŠ   ÚHEADrÌ   rÎ   úcontent-lengthrT   )r·   rµ   rÁ   rv   ÚassertFalsern   rÄ   r.   r.   r/   Útest_head_requestN  s   z+SimpleHTTPClientTestMixin.test_head_requestc                 C   sR   | j ddd�}|  |jd¡ |  |jd d¡ |  |jd d¡ |  |jd	¡ d S )
Nr‹   ÚOPTIONSrÌ   rÎ   r  Ú2zaccess-control-allow-originrZ   rú   )r·   rµ   rÁ   rv   rn   rÄ   r.   r.   r/   Útest_options_requestT  s
   z.SimpleHTTPClientTestMixin.test_options_requestc                 C   s*   |   d¡}|  |jd¡ |  d|j¡ d S )NrŒ   r`   rS   )r·   rµ   rÁ   ÚassertNotInrv   rÄ   r.   r.   r/   Útest_no_content[  s   
z)SimpleHTTPClientTestMixin.test_no_contentc                 C   s\   t  d¡}|  d¡}|  | |j¡¡ |  d¡ dd¡}|  |¡}|  | |j¡|j¡ d S )Ns   ^127.0.0.1:[0-9]+$rŽ   zhttp://zhttp://me:secret@)ÚreÚcompiler·   r)   Úmatchrn   r¸   Úreplace)r,   Úhost_rer¿   r#   r.   r.   r/   Útest_host_headerd  s   


z*SimpleHTTPClientTestMixin.test_host_headerc              	   C   sú   t ƒ \}}|  |¡ ttddd��' |  tj¡�}| jd| dd� W d   ƒ n1 s,w   Y  W d   ƒ n1 s;w   Y  tj	dkr{t
tjƒt
|jƒv }|s`ttdƒr`t
tjƒt
|jƒv }|  ||j¡ t tj¡}|  |t
|jƒv |j¡ d S d S )	Nú.*F©Úrequiredzhttp://127.0.0.1:%d/Trý   ÚcygwinÚWSAECONNREFUSED)r    Ú
addCleanupr   r   ræ   r×   Úerrorr·   ÚsysÚplatformÚstrÚerrnoÚECONNREFUSEDÚ	exceptionÚhasattrr  r)   rí   Ústrerror)r,   Úcleanup_funcrø   ÚcmÚcontains_errnoÚexpected_messager.   r.   r/   Útest_connection_refusedm  s$   

ÿ€ÿ

ÿõz1SimpleHTTPClientTestMixin.test_connection_refusedc              	      sÄ   t ˆjdd�ƒ�P‰ ˆ jˆ d¡dd�‰ˆ ¡  ˆ t¡�}ˆj ‡ ‡fdd„¡ W d   ƒ n1 s2w   Y  ˆ 	t
|jƒd¡ ˆj ¡ ƒ  ˆj ‡fd	d„¡ W d   ƒ d S 1 s[w   Y  d S )
Nr³   r¤   r†   é
   )rä   c                      s   ˆ j ˆ d¡ddd�S )Nr‰   rÔ   T©rã   rå   )r·   r¸   r.   )r-   r,   r.   r/   r¯   ˆ  s    ÿz>SimpleHTTPClientTestMixin.test_queue_timeout.<locals>.<lambda>zTimeout in request queuec                      s   ˆ S r7   r.   r.   )Úfut1r.   r/   r¯   �  s    )r   r„   r·   r¸   rC   ræ   r   r�   rž   rµ   r  r  r–   rº   )r,   r  r.   )r-   r%  r,   r/   Útest_queue_timeout�  s   ÿÿ"óz,SimpleHTTPClientTestMixin.test_queue_timeoutc                 C   s4   |   d¡}|jdkr|  d¡ d S |  d|j¡ d S )Nr�   s   HTTP/1 requiredúrequires HTTP/1.xs   hello)r·   rn   ÚskipTestrµ   rÄ   r.   r.   r/   Útest_no_content_length‘  s   

z0SimpleHTTPClientTestMixin.test_no_content_lengthc                 C   s   |dƒ |dƒ d S ©Nó   1234ó   5678r.   ©r,   rP   r.   r.   r/   Úsync_body_producer˜  s   z,SimpleHTTPClientTestMixin.sync_body_producerc                 c   s"   � |dƒV  t jV  |dƒV  d S r*  )r   Úmomentr-  r.   r.   r/   Úasync_body_producerœ  s   €
z-SimpleHTTPClientTestMixin.async_body_producerc                 C   ó,   | j dd| jd�}| ¡  |  |jd¡ d S ©Nr�   rÒ   ©rÍ   Úbody_produceró   12345678©r·   r.  r¾   rµ   rn   rÄ   r.   r.   r/   Útest_sync_body_producer_chunked¢  ó
   ÿz9SimpleHTTPClientTestMixin.test_sync_body_producer_chunkedc                 C   ó2   | j dd| jddid�}| ¡  |  |jd¡ d S ©Nr�   rÒ   rS   Ú8©rÍ   r4  rv   r5  r6  rÄ   r.   r.   r/   Ú&test_sync_body_producer_content_length©  ó   üz@SimpleHTTPClientTestMixin.test_sync_body_producer_content_lengthc                 C   r1  r2  ©r·   r0  r¾   rµ   rn   rÄ   r.   r.   r/   Ú test_async_body_producer_chunked³  r8  z:SimpleHTTPClientTestMixin.test_async_body_producer_chunkedc                 C   r9  r:  r?  rÄ   r.   r.   r/   Ú'test_async_body_producer_content_lengthº  r>  zASimpleHTTPClientTestMixin.test_async_body_producer_content_lengthc                 C   s2   dd„ }| j dd|d�}| ¡  |  |jd¡ d S )Nc                 Ó   ó:   �| dƒI d H  dd l }| d¡I d H  | dƒI d H  d S ©Nr+  r   r,  ©Úasyncior›   ©rP   rE  r.   r.   r/   r4  Å  ó
   €zRSimpleHTTPClientTestMixin.test_native_body_producer_chunked.<locals>.body_producerr�   rÒ   r3  r5  ©r·   r¾   rµ   rn   ©r,   r4  r¿   r.   r.   r/   Ú!test_native_body_producer_chunkedÄ  s   z;SimpleHTTPClientTestMixin.test_native_body_producer_chunkedc                 C   s8   dd„ }| j dd|ddid�}| ¡  |  |jd¡ d S )	Nc                 Ó   rB  rC  rD  rF  r.   r.   r/   r4  Ñ  rG  zYSimpleHTTPClientTestMixin.test_native_body_producer_content_length.<locals>.body_producerr�   rÒ   rS   r;  r<  r5  rH  rI  r.   r.   r/   Ú(test_native_body_producer_content_lengthÐ  s   üzBSimpleHTTPClientTestMixin.test_native_body_producer_content_lengthc                 C   s$   | j ddddd�}|  |jd¡ d S )Nr�   rÒ   r+  T)rÍ   rn   Úexpect_100_continue©r·   rµ   rn   rÄ   r.   r.   r/   Útest_100_continueá  s   ÿz+SimpleHTTPClientTestMixin.test_100_continuec                 C   s,   dd„ }| j dd|dd�}|  |jd¡ d S )Nc                 S   s   t dƒ‚)Nzshould not be called)rs   ©rP   r.   r.   r/   r4  è  s   zQSimpleHTTPClientTestMixin.test_100_continue_early_response.<locals>.body_producerr‘   rÒ   T)rÍ   r4  rL  r|   )r·   rµ   rÁ   rI  r.   r.   r/   Ú test_100_continue_early_responseç  s   üz:SimpleHTTPClientTestMixin.test_100_continue_early_responsec                 C   sZ   g }g }| j d|j|jd� ttt|ƒƒ}|  |dg¡ tdd„ |D ƒƒ}|  |d¡ d S )Nz/redirect?url=/hello)Úheader_callbackÚstreaming_callbackzHello world!c                 S   s   g | ]	}|  d ¡r|‘qS )zHTTP/)rx   )Ú.0Úhr.   r.   r/   Ú
<listcomp>  r²   zMSimpleHTTPClientTestMixin.test_streaming_follow_redirects.<locals>.<listcomp>r³   )r·   r@   rÈ   Úmapr   rµ   r®   )r,   rv   Úchunk_bytesÚchunksÚnum_start_linesr.   r.   r/   Útest_streaming_follow_redirectsó  s   ýz9SimpleHTTPClientTestMixin.test_streaming_follow_redirectsN))r1   r2   r3   r„   ÚtypingÚAnyr™   r¢   r»   r   rÀ   rÅ   rÊ   rÑ   rÓ   r   rè   rî   r   rù   rÿ   r  r  r  r  r"  r&  r)  r.  r   rF   r0  r7  r=  r@  rA  rJ  rK  rN  rP  rZ  r.   r.   r.   r/   r€   ‘   sL    				


r€   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSimpleHTTPClientTestCasec                    ó   t ƒ  ¡  |  ¡ | _d S r7   ©ÚsuperÚsetUpr„   Úhttp_clientrN   ©Ú	__class__r.   r/   ra  	  r   zSimpleHTTPClientTestCase.setUpc                 K   s   t dddi|¤ŽS )Nr(   Tr.   ©r   r‚   r.   r.   r/   r„     rz   z&SimpleHTTPClientTestCase.create_client)r1   r2   r3   ra  r„   Ú__classcell__r.   r.   rc  r/   r]    s    r]  c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚSimpleHTTPSClientTestCasec                    r^  r7   r_  rN   rc  r.   r/   ra    r   zSimpleHTTPSClientTestCase.setUpc                 K   s   t ddtdd�dœ|¤ŽS )NTF)Úvalidate_cert)r(   Údefaultsr.   )r   r—   r‚   r.   r.   r/   r„     s
   
ÿÿz'SimpleHTTPSClientTestCase.create_clientc                 C   s    | j di d�}|  |jd¡ d S ©Nr‰   )Ússl_optionsrñ   rM  ©r,   Úrespr.   r.   r/   Útest_ssl_options  s   z*SimpleHTTPSClientTestCase.test_ssl_optionsc                 C   s(   | j dt tj¡d�}|  |jd¡ d S rj  )r·   ÚsslÚ
SSLContextÚPROTOCOL_SSLv23rµ   rn   rl  r.   r.   r/   Útest_ssl_context  s   z*SimpleHTTPSClientTestCase.test_ssl_contextc              	   C   sˆ   t tddd��3 |  tj¡� | jdttjd�dd� W d   ƒ n1 s%w   Y  W d   ƒ d S W d   ƒ d S 1 s=w   Y  d S )NúSSL Error|Uncaught exceptionFr  r‰   )Ú	cert_reqsT©rk  rå   )r   r   ræ   ro  ÚSSLErrorr·   r—   ÚCERT_REQUIREDrN   r.   r.   r/   Útest_ssl_options_handshake_fail#  s   
ýÿÿ"ÿz9SimpleHTTPSClientTestCase.test_ssl_options_handshake_failc              	   C   s�   t tdƒ�9 t tj¡}tj|_|  tj¡� | j	d|dd� W d   ƒ n1 s)w   Y  W d   ƒ d S W d   ƒ d S 1 sAw   Y  d S )Nrs  r‰   Tru  )
r   r   ro  rp  rq  rw  Úverify_moderæ   rv  r·   )r,   Úctxr.   r.   r/   Útest_ssl_context_handshake_fail,  s   ÿý"ýz9SimpleHTTPSClientTestCase.test_ssl_context_handshake_failc              	   C   sv   t tdƒ�&}|  tj¡� | jdddd� W d   ƒ n1 sw   Y  W d   ƒ n1 s.w   Y  |  |j¡ d S )Nr  ú/T)rh  rå   )r   r   ræ   ro  rv  r·   r  Úlogged_stack)r,   Ú
expect_logr.   r.   r/   Útest_error_logging3  s   ÿ€ÿz,SimpleHTTPSClientTestCase.test_error_logging)r1   r2   r3   ra  r„   rn  rr  rx  r{  r  rf  r.   r.   rc  r/   rg    s    	rg  c                       s0   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )ÚCreateAsyncHTTPClientTestCasec                    s   t ƒ  ¡  t ¡ | _d S r7   )r`  ra  r   Ú_save_configurationÚsavedrN   rc  r.   r/   ra  >  r   z#CreateAsyncHTTPClientTestCase.setUpc                    s   t  | j¡ tƒ  ¡  d S r7   )r   Ú_restore_configurationr‚  r`  ÚtearDownrN   rc  r.   r/   r„  B  r^   z&CreateAsyncHTTPClientTestCase.tearDownc                 C   sP  t  t¡ tt dd�ƒ�}|  |jd¡ W d   ƒ n1 sw   Y  tt ddd�ƒ�}|  |jd¡ W d   ƒ n1 s=w   Y  t jtdd� tt dd�ƒ�}|  |jd¡ W d   ƒ n1 sbw   Y  tt ddd�ƒ�}|  |jd¡ W d   ƒ n1 s�w   Y  tt d	dd�ƒ�}|  |jd	¡ W d   ƒ d S 1 s¡w   Y  d S )
NTr'   r#  é   )r¥   r(   é   r¤   é   é   )r   Ú	configurer   r   rµ   r¥   r+   r.   r.   r/   Útest_max_clientsF  s"   
ÿÿÿÿ"ÿz.CreateAsyncHTTPClientTestCase.test_max_clients)r1   r2   r3   ra  r„  rŠ  rf  r.   r.   rc  r/   r€  =  s    r€  c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚHTTP100ContinueTestCasec                 C   s`   |j  d¡| _| js|j tdddƒtƒ ¡ |j ¡  d S || _| jjj	 
d¡}| | j¡ d S )NúHTTP/1.Ú rÎ   ÚOKs   HTTP/1.1 100 CONTINUE

)r   rx   Úhttp1Ú
connectionÚwrite_headersr	   r   rc   rm   rJ   rP   r¹   Úrespond_200)r,   rm   r§   r.   r.   r/   Úrespond_100Y  s   ÿ
z#HTTP100ContinueTestCase.respond_100c                    s.   |  ¡  ˆ jjj d¡}| ‡ fdd„¡ d S )Ns'   HTTP/1.1 200 OK
Content-Length: 1

Ac                    s   ˆ j jj ¡ S r7   )rm   r‘  rJ   rQ   )ÚfrN   r.   r/   r¯   j  r°   z5HTTP100ContinueTestCase.respond_200.<locals>.<lambda>)Úresultrm   r‘  rJ   rP   r¹   )r,   r§   r.   rN   r/   r“  e  s
   
ÿz#HTTP100ContinueTestCase.respond_200c                 C   ó   | j S r7   )r”  rN   r.   r.   r/   r™   l  s   zHTTP100ContinueTestCase.get_appc                 C   s,   |   d¡}| js|  d¡ |  |jd¡ d S )Nr|  r'  ó   A)r·   r�  r(  rµ   rn   )r,   Úresr.   r.   r/   rN  p  s   

z)HTTP100ContinueTestCase.test_100_continueN)r1   r2   r3   r”  r“  r™   rN  r.   r.   r.   r/   rŒ  X  s
    rŒ  c                   @   r‹  )
ÚHTTP204NoContentTestCasec                 C   sŽ   |j  d¡| _| js|j tdddƒtƒ ¡ |j ¡  d S |j ¡ }| 	d¡ |j
 ddg¡d r7| 	d	¡ n| 	d
¡ | 	d¡ | ¡  d S )Nr�  rŽ  rÎ   r�  s   HTTP/1.1 204 No content
r  Féÿÿÿÿs   Content-Length: 5
s   Content-Length: 0
s   
)r   rx   r�  r‘  r’  r	   r   rc   rI   rP   Ú	argumentsrE   rQ   )r,   rm   rJ   r.   r.   r/   Úrespond_204x  s   ÿ




z$HTTP204NoContentTestCase.respond_204c                 C   r—  r7   )r�  rN   r.   r.   r/   r™   ‘  r…   z HTTP204NoContentTestCase.get_appc                 C   s:   |   d¡}| js|  d¡ |  |jd¡ |  |jd¡ d S )Nr|  r'  r`   ó    )r·   r�  r(  rµ   rÁ   rn   rl  r.   r.   r/   Útest_204_no_content”  s
   

z,HTTP204NoContentTestCase.test_204_no_contentc              	   C   s¤   t tdtjd��@ |  t¡�" | jddd� | js|  d¡ | j	j
tkr)|  d¡ W d   ƒ n1 s3w   Y  W d   ƒ d S W d   ƒ d S 1 sKw   Y  d S )Nz-.*Response with code 204 should not have bodyrû   z	/?error=1Trý   r'  z#curl client accepts invalid headers)r   r   r>   rþ   ræ   r   r·   r�  r(  rb  Úconfigured_classr   rN   r.   r.   r/   Útest_204_invalid_content_length›  s   ÿ

€ûý"ýz8HTTP204NoContentTestCase.test_204_invalid_content_lengthN)r1   r2   r3   r�  r™   rŸ  r¡  r.   r.   r.   r/   rš  w  s
    rš  c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚHostnameMappingTestCasec                    s(   t ƒ  ¡  tdd|  ¡ fdœd�| _d S )NrÖ   )zwww.example.com)zfoo.example.comi@  )Úhostname_mapping)r`  ra  r   rÙ   rb  rN   rc  r.   r/   ra  ©  s   

þÿzHostnameMappingTestCase.setUpc                 C   ó   t tdtƒgƒS ©Nr‰   ©r"   r#   r   rN   r.   r.   r/   r™   ²  rW   zHostnameMappingTestCase.get_appc                 C   s,   |   d|  ¡  ¡}| ¡  |  |jd¡ d S )Nzhttp://www.example.com:%d/hellorñ   )r·   rÙ   r¾   rµ   rn   rÄ   r.   r.   r/   Útest_hostname_mappingµ  s   z-HostnameMappingTestCase.test_hostname_mappingc                 C   ó$   |   d¡}| ¡  |  |jd¡ d S )Nz!http://foo.example.com:8000/hellorñ   rH  rÄ   r.   r.   r/   Útest_port_mappingº  ó   
z)HostnameMappingTestCase.test_port_mapping)r1   r2   r3   ra  r™   r§  r©  rf  r.   r.   rc  r/   r¢  ¨  s
    	r¢  c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚResolveTimeoutTestCasec                    s<   t ƒ | _| ‰ G ‡ fdd„dtƒ}tƒ  ¡  t|ƒ d�| _d S )Nc                       s   e Zd Zej‡ fdd„ƒZdS )z1ResolveTimeoutTestCase.setUp.<locals>.BadResolverc                 ?   s"   � ˆ j  ¡ V  tjdˆ  ¡ ffgS rÕ   )rÝ   rC   r×   rØ   rÙ   rÚ   ©rÞ   r.   r/   rß   Ç  s   €z9ResolveTimeoutTestCase.setUp.<locals>.BadResolver.resolveN)r1   r2   r3   r   rF   rß   r.   r¬  r.   r/   ÚBadResolverÆ  s    r­  rá   )r   rÝ   r   r`  ra  r   rb  )r,   r­  rc  r¬  r/   ra  Á  s
   
zResolveTimeoutTestCase.setUpc                 C   r¤  r¥  r¦  rN   r.   r.   r/   r™   Ð  rW   zResolveTimeoutTestCase.get_appc                 C   sX   |   t¡� | jdddd� W d   ƒ n1 sw   Y  | j ¡  | j dd„ ¡ d S )Nr‰   rÔ   Tr$  c                   S   rê   rš   rë   r.   r.   r.   r/   r¯   Ù  rì   z=ResolveTimeoutTestCase.test_resolve_timeout.<locals>.<lambda>)ræ   r   r·   rÝ   rA   r�   rž   rN   r.   r.   r/   Útest_resolve_timeoutÓ  s
   ÿ
z+ResolveTimeoutTestCase.test_resolve_timeout)r1   r2   r3   ra  r™   r®  rf  r.   r.   rc  r/   r«  À  s    r«  c                   @   r‹  )
ÚMaxHeaderSizeTestc                 C   ó4   G dd„ dt ƒ}G dd„ dt ƒ}td|fd|fgƒS )Nc                   @   r%   )z/MaxHeaderSizeTest.get_app.<locals>.SmallHeadersc                 S   rY   )NúX-FillerÚdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar[   r\   rN   r.   r.   r/   rE   ß  r^   z3MaxHeaderSizeTest.get_app.<locals>.SmallHeaders.getNre   r.   r.   r.   r/   ÚSmallHeadersÞ  r4   r³  c                   @   r%   )z/MaxHeaderSizeTest.get_app.<locals>.LargeHeadersc                 S   rY   )Nr±  Áè  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar[   r\   rN   r.   r.   r/   rE   ä  r^   z3MaxHeaderSizeTest.get_app.<locals>.LargeHeaders.getNre   r.   r.   r.   r/   ÚLargeHeadersã  r4   rµ  ú/smallú/large©r!   r"   )r,   r³  rµ  r.   r.   r/   r™   Ý  s   zMaxHeaderSizeTest.get_appc                 C   ó
   t dd�S )Ni   )Úmax_header_sizere  rN   r.   r.   r/   r0   ê  ó   
z!MaxHeaderSizeTest.get_http_clientc                 C   r¨  )Nr¶  rú   rH  rÄ   r.   r.   r/   Útest_small_headersí  rª  z$MaxHeaderSizeTest.test_small_headersc              	   C   ó~   t tdtjd��- |  t¡� | jddd� W d   ƒ n1 s w   Y  W d   ƒ d S W d   ƒ d S 1 s8w   Y  d S )NzUnsatisfiable readrû   r·  Trý   )r   r   r>   rþ   ræ   r   r·   rN   r.   r.   r/   Útest_large_headersò  s   ÿÿ"ÿz$MaxHeaderSizeTest.test_large_headersN)r1   r2   r3   r™   r0   r¼  r¾  r.   r.   r.   r/   r¯  Ü  s
    r¯  c                   @   r‹  )
ÚMaxBodySizeTestc                 C   r°  )Nc                   @   r%   )z*MaxBodySizeTest.get_app.<locals>.SmallBodyc                 S   ó   |   dd ¡ d S )NÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaé@   rO  rN   r.   r.   r/   rE   û  rz   z.MaxBodySizeTest.get_app.<locals>.SmallBody.getNre   r.   r.   r.   r/   Ú	SmallBodyú  r4   rÃ  c                   @   r%   )z*MaxBodySizeTest.get_app.<locals>.LargeBodyc                 S   rÀ  ©NrÁ  éd   rO  rN   r.   r.   r/   rE   ÿ  rz   z.MaxBodySizeTest.get_app.<locals>.LargeBody.getNre   r.   r.   r.   r/   Ú	LargeBodyþ  r4   rÆ  r¶  r·  r¸  )r,   rÃ  rÆ  r.   r.   r/   r™   ù  s   zMaxBodySizeTest.get_appc                 C   r¹  )Né   )Úmax_body_sizere  rN   r.   r.   r/   r0     r»  zMaxBodySizeTest.get_http_clientc                 C   ó(   |   d¡}| ¡  |  |jdd ¡ d S )Nr¶  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarÂ  rH  rÄ   r.   r.   r/   Útest_small_body  ó   
zMaxBodySizeTest.test_small_bodyc              	   C   r½  )Nz9Malformed HTTP message from None: Content-Length too longrû   r·  Trý   ©r   r   r>   rþ   ræ   r   r·   rN   r.   r.   r/   Útest_large_body  s   ýÿû"ûzMaxBodySizeTest.test_large_bodyN)r1   r2   r3   r™   r0   rË  rÎ  r.   r.   r.   r/   r¿  ø  s
    r¿  c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMaxBufferSizeTestc                 C   ó   G dd„ dt ƒ}td|fgƒS )Nc                   @   r%   )z,MaxBufferSizeTest.get_app.<locals>.LargeBodyc                 S   rÀ  rÄ  rO  rN   r.   r.   r/   rE     rz   z0MaxBufferSizeTest.get_app.<locals>.LargeBody.getNre   r.   r.   r.   r/   rÆ    r4   rÆ  r·  r¸  )r,   rÆ  r.   r.   r/   r™     s   zMaxBufferSizeTest.get_appc                 C   s   t ddd�S )Ni � rÇ  )rÈ  Úmax_buffer_sizere  rN   r.   r.   r/   r0     s   ÿz!MaxBufferSizeTest.get_http_clientc                 C   rÉ  )Nr·  rÊ  rÅ  rH  rÄ   r.   r.   r/   rÎ  $  rÌ  z!MaxBufferSizeTest.test_large_bodyN)r1   r2   r3   r™   r0   rÎ  r.   r.   r.   r/   rÐ    s    rÐ  c                   @   rÏ  )ÚChunkedWithContentLengthTestc                 C   rÑ  )Nc                   @   r%   )zFChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLengthc                 S   rY   )NzTransfer-EncodingÚchunkedzHello worldr\   rN   r.   r.   r/   rE   -  s   zJChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLength.getNre   r.   r.   r.   r/   ÚChunkedWithContentLength,  r4   rÕ  ú/chunkwithclr¸  )r,   rÕ  r.   r.   r/   r™   +  s   z$ChunkedWithContentLengthTest.get_appc                 C   s   t ƒ S r7   re  rN   r.   r.   r/   r0   4  r…   z,ChunkedWithContentLengthTest.get_http_clientc              	   C   r½  )NzYMalformed HTTP message from None: Response with both Transfer-Encoding and Content-Lengthrû   rÖ  Trý   rÍ  rN   r.   r.   r/   Ú test_chunked_with_content_length7  s   úÿø"øz=ChunkedWithContentLengthTest.test_chunked_with_content_lengthN)r1   r2   r3   r™   r0   r×  r.   r.   r.   r/   rÓ  *  s    	rÓ  )Vr”   Ú
contextlibr   r  r>   rí   r	  r×   ro  r  r[  Útornado.escaper   r   Útornador   r   Útornado.httpclientr   Útornado.httputilr   r	   Útornado.ioloopr
   Útornado.iostreamr   Útornado.locksr   Útornado.logr   Útornado.netutilr   r   Útornado.simple_httpclientr   r   r   Útornado.test.httpclient_testr   r   r   r   r   Útornado.testr   Útornado.testingr   r   r   r   r   Útornado.test.utilr   r   r    Útornado.webr!   r"   r#   r$   ÚHTTPClientCommonTestCaser&   r6   rH   rR   rX   r_   rf   rr   rt   rw   ry   r{   Úobjectr€   r]  rg  r€  rŒ  rš  r¢  r«  r¯  r¿  rÐ  rÓ  r.   r.   r.   r/   Ú<module>   sh      y	,1