U
    luf…y  ã                   @   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                   @   s   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-   úG/tmp/pip-unpacked-wheel-bmg6zs32/tornado/test/simple_httpclient_test.pyÚget_http_client.   s    
z.SimpleHTTPClientCommonTestCase.get_http_clientN)Ú__name__Ú
__module__Ú__qualname__r/   r-   r-   r-   r.   r%   -   s   r%   c                   @   s"   e Zd Zdd„ Zejdd„ ƒZdS )ÚTriggerHandlerc                 C   s   || _ || _d S ©N©ÚqueueÚwake_callback)r+   r6   r7   r-   r-   r.   Ú
initialize5   s    zTriggerHandler.initializec                 c   sD   t  d¡ tƒ }| j |j¡ |  dd¡dkr6|  ¡  | ¡ V  d S )Nzqueuing triggerZwakeÚtrue)	ÚloggingÚdebugr   r6   ÚappendÚsetÚget_argumentr7   Úwait)r+   Úeventr-   r-   r.   Úget9   s    
zTriggerHandler.getN)r0   r1   r2   r8   r   Ú	coroutinerA   r-   r-   r-   r.   r3   4   s   r3   c                   @   s"   e Zd Zdd„ Zejdd„ ƒZdS )ÚContentLengthHandlerc                 C   s   |   ¡ | _t ¡  | j¡ d S r4   )ÚdetachÚstreamr
   ÚcurrentZspawn_callbackÚwrite_response©r+   r-   r-   r.   rA   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)rE   Úwriter   r>   ÚcloserH   r-   r-   r.   rG   H   s    ÿÿÿz#ContentLengthHandler.write_responseN)r0   r1   r2   rA   r   rB   rG   r-   r-   r-   r.   rC   C   s   rC   c                   @   s   e Zd Zdd„ ZdS )ÚHeadHandlerc                 C   s   |   dd¡ d S )NúContent-LengthÚ7)Ú
set_headerrH   r-   r-   r.   ÚheadT   s    zHeadHandler.headN)r0   r1   r2   rP   r-   r-   r-   r.   rL   S   s   rL   c                   @   s   e Zd Zdd„ ZdS )ÚOptionsHandlerc                 C   s   |   dd¡ |  d¡ d S )NzAccess-Control-Allow-OriginÚ*Úok©rO   rJ   rH   r-   r-   r.   ÚoptionsY   s    zOptionsHandler.optionsN)r0   r1   r2   rU   r-   r-   r-   r.   rQ   X   s   rQ   c                   @   s   e Zd Zdd„ ZdS )ÚNoContentHandlerc                 C   s   |   d¡ |  ¡  d S )NéÌ   ©Ú
set_statusÚfinishrH   r-   r-   r.   rA   _   s    
zNoContentHandler.getN©r0   r1   r2   rA   r-   r-   r-   r.   rV   ^   s   rV   c                   @   s   e Zd Zdd„ ZdS )ÚSeeOtherPostHandlerc                 C   s>   t | jjƒ}|dks$td| jj ƒ‚|  dd¡ |  |¡ d S )N©é.  i/  úunexpected body %rÚLocationú/see_other_get)ÚintÚrequestÚbodyÚAssertionErrorrO   rY   )r+   Zredirect_coder-   r-   r.   Úposte   s    zSeeOtherPostHandler.postN©r0   r1   r2   rf   r-   r-   r-   r.   r\   d   s   r\   c                   @   s   e Zd Zdd„ ZdS )ÚSeeOtherGetHandlerc                 C   s&   | j jrtd| j j ƒ‚|  d¡ d S )Nr_   rS   )rc   rd   Ú	ExceptionrJ   rH   r-   r-   r.   rA   m   s    zSeeOtherGetHandler.getNr[   r-   r-   r-   r.   rh   l   s   rh   c                   @   s   e Zd Zdd„ ZdS )ÚHostEchoHandlerc                 C   s   |   | jjd ¡ d S )NÚHost)rJ   rc   ÚheadersrH   r-   r-   r.   rA   t   s    zHostEchoHandler.getNr[   r-   r-   r-   r.   rj   s   s   rj   c                   @   s   e Zd Zdd„ ZdS )ÚNoContentLengthHandlerc                 C   s8   | j j d¡r*|  ¡ }| d¡ | ¡  n
|  d¡ d S )NzHTTP/1s   HTTP/1.0 200 OK

hellozHTTP/1 required)rc   r   Ú
startswithrD   rJ   rK   rZ   )r+   rE   r-   r-   r.   rA   y   s
    

zNoContentLengthHandler.getNr[   r-   r-   r-   r.   rm   x   s   rm   c                   @   s   e Zd Zdd„ ZdS )ÚEchoPostHandlerc                 C   s   |   | jj¡ d S r4   )rJ   rc   rd   rH   r-   r-   r.   rf   †   s    zEchoPostHandler.postNrg   r-   r-   r-   r.   ro   …   s   ro   c                   @   s   e Zd Zdd„ ZdS )ÚRespondInPrepareHandlerc                 C   s   |   d¡ |  d¡ d S )Né“  Ú	forbiddenrX   rH   r-   r-   r.   ÚprepareŒ   s    
zRespondInPrepareHandler.prepareN)r0   r1   r2   rs   r-   r-   r-   r.   rp   Š   s   rp   c                   @   sþ  e Zd Zdd„ Zejdœdd„Zejdœdd„Zejdœdd	„Ze	ejdœd
d„ƒZ
ejdœdd„Zejdœdd„Zejdœdd„Zejdœdd„Zee	ejdœdd„ƒƒZeejdœdd„ƒZeejdœdd„ƒZejdœdd„Zejdœdd„Zejdœdd„Zejdœd d!„Zejdœd"d#„Zejdœd$d%„Zejdœd&d'„Zejdœd(d)„Zd*d+„ Zejd,d-„ ƒZejdœd.d/„Z ejdœd0d1„Z!ejdœd2d3„Z"ejdœd4d5„Z#ejdœd6d7„Z$ejdœd8d9„Z%ejdœd:d;„Z&ejdœd<d=„Z'ejdœd>d?„Z(d@S )AÚSimpleHTTPClientTestMixinc                 K   s
   t ƒ ‚d S r4   )ÚNotImplementedError©r+   Úkwargsr-   r-   r.   Úcreate_client’   s    z'SimpleHTTPClientTestMixin.create_clientrH   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ú/triggerr5   z/chunkz/countdown/([0-9]+)Z	countdown)Únameú/helloz/content_lengthú/headú/optionsú/no_contentú/see_other_postra   ú
/host_echoú/no_content_lengthú
/echo_postú/respond_in_preparez	/redirectú/user_agentT)Úgzip)ÚcollectionsÚdequeÚtriggersr"   r#   r3   ÚdictÚstopr   r   r   rC   rL   rQ   rV   r\   rh   rj   rm   ro   rp   r   r   rH   r-   r-   r.   Úget_app•   s4    ÿýìéz!SimpleHTTPClientTestMixin.get_appc              	   C   sn   |   tƒ tƒ k¡ |   tƒ tddk	¡ ttƒ ƒ2}dd„ }| j |¡}| |¡}|   ||k	¡ W 5 Q R X 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+   Zio_loop2rŽ   Zclient1Zclient2r-   r-   r.   Útest_singleton´   s    ÿ
z(SimpleHTTPClientTestMixin.test_singletonc              	      sB  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ddddgƒ¡ ˆ t	ˆjƒd¡ W 5 Q R X d S )Né   ©Úmax_clientsé   c                    s   ˆ   |¡ ˆ ¡  d S r4   )r<   rŠ   )ÚfutÚi©Úseenr+   r-   r.   ÚcbÎ   s    
z;SimpleHTTPClientTestMixin.test_connection_limit.<locals>.cbry   c                      s   t ˆ jƒdkS ©Nr’   ©Úlenrˆ   r-   rH   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Ÿ   r   é   c                      s   t ˆ ƒdkS )Nr•   )r   r-   )r™   r-   r.   rž   à   rŸ   é   )r   rx   ÚassertEqualr”   ÚrangeÚfetchÚget_urlÚadd_done_callbackr?   r   r6   rˆ   Úpopleftr=   )r+   r,   r—   rš   r-   r˜   r.   Útest_connection_limitÆ   s$    z/SimpleHTTPClientTestMixin.test_connection_limitc              	   c   s>   t | jddƒ$}|j|  d¡ddV }| ¡  W 5 Q R X d S )Nr¡   r“   z/countdown/3r¢   ©Úmax_redirects)r   rx   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ª   r^   z/countdown/2r`   z/countdown/1)	r¥   r£   Úcoder(   rc   r#   ÚendswithÚeffective_urlrl   ©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{   )rl   )r´   rµ   )r   r¥   r£   ÚlistÚget_all)r+   rl   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¯   rd   Ú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 )Nr]   r   ÚPOSTz%d)r»   rd   r¼   ra   )	r¥   r£   r¯   r(   rc   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ƒ6}|  t¡  |j|  d¡|dddV  W 5 Q R X W 5 Q R X ˆ  ¡  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)r?   ÚsocketÚAF_INETÚget_http_port©r+   Úargsrw   ©Úcleanup_eventÚtestr-   r.   Úresolve  s    zOSimpleHTTPClientTestMixin.test_connect_timeout.<locals>.TimeoutResolver.resolveN)r0   r1   r2   rÍ   r-   rÊ   r-   r.   ÚTimeoutResolver  s   rÎ   ©Úresolverr{   i  T)Úconnect_timeoutÚrequest_timeoutÚraise_errorgš™™™™™É?)r   r   r   rx   ÚassertRaisesr   r¥   r¦   r=   r   r   )r+   ÚtimeoutrÎ   r,   r-   rÊ   r.   Útest_connect_timeout	  s    ü
z.SimpleHTTPClientTestMixin.test_connect_timeoutc              	   C   sX   d}t jdkrd}|  t¡ | jd|dd W 5 Q R X | j ¡ ƒ  | j dd„ ¡ d S )	NrÂ   Úntg      à?z/trigger?wake=falseT)rÒ   rÓ   c                   S   s
   t  d¡S rŒ   ©r   r   r-   r-   r-   r.   rž   0  rŸ   z@SimpleHTTPClientTestMixin.test_request_timeout.<locals>.<lambda>)	Úosrz   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 5 Q R X |  	|¡}|  
|jd	¡ d S )
Nr   z::1)Úfamilyr¡   z%s://[::1]:%d/helloFT)Z
allow_ipv6rÓ   ó   Hello world!)r   rÅ   ÚAF_INET6ÚgetsocknameZhttp_serverZ
add_socketZget_protocolrÔ   ri   r¥   r£   rd   )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N |  t¡ | j ddd W 5 Q R X |  t¡ | j d	dd W 5 Q R X W 5 Q R X 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£   rd   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-lengthrN   )r¥   r£   r¯   rl   ÚassertFalserd   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-originrR   râ   )r¥   r£   r¯   rl   rd   r²   r-   r-   r.   Útest_options_requestT  s
    z.SimpleHTTPClientTestMixin.test_options_requestc                 C   s*   |   d¡}|  |jd¡ |  d|j¡ d S )Nr~   rW   rM   )r¥   r£   r¯   ZassertNotInrl   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(   Úmatchrd   r¦   Úreplace)r+   Zhost_rer­   r#   r-   r-   r.   Útest_host_headerd  s    


z*SimpleHTTPClientTestMixin.test_host_headerc              
   C   sÎ   t ƒ \}}|  |¡ ttddd0 |  tj¡}| jd| dd W 5 Q R X W 5 Q R X tj	dkrÊt
tjƒt
|jƒk}|s˜ttdƒr˜t
tjƒt
|jƒk}|  ||j¡ t tj¡}|  |t
|jƒk|j¡ d S )	Nú.*F©Úrequiredzhttp://127.0.0.1:%d/Trå   ÚcygwinÚWSAECONNREFUSED)r    Z
addCleanupr   r   rÔ   rÅ   Úerrorr¥   ÚsysÚplatformÚstrÚerrnoZECONNREFUSEDÚ	exceptionÚhasattrrù   r(   rÙ   Ústrerror)r+   Zcleanup_funcrà   ÚcmZcontains_errnoZexpected_messager-   r-   r.   Útest_connection_refusedm  s    

&

ÿz1SimpleHTTPClientTestMixin.test_connection_refusedc              
      sš   t ˆjddƒ€‰ ˆ jˆ d¡dd‰ˆ ¡  ˆ t¡}ˆj ‡ ‡fdd„¡ W 5 Q R X ˆ 	t
|jƒd¡ ˆj ¡ ƒ  ˆj ‡fd	d„¡ W 5 Q R X d S )
Nr¡   r“   ry   é
   )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 r4   r-   r-   )Úfut1r-   r.   rž     rŸ   )r   rx   r¥   r¦   r?   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   s2   |   d¡}|jdkr |  d¡ n|  d|j¡ d S )Nr   s   HTTP/1 requiredúrequires HTTP/1.xs   hello)r¥   rd   Ú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+   rJ   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   Zmomentr  r-   r-   r.   Úasync_body_producerœ  s    
z-SimpleHTTPClientTestMixin.async_body_producerc                 C   s,   | j dd| jd}| ¡  |  |jd¡ d S ©Nr‚   rÀ   ©r»   Úbody_produceró   12345678©r¥   r  r¬   r£   rd   r²   r-   r-   r.   Útest_sync_body_producer_chunked¢  s      ÿz9SimpleHTTPClientTestMixin.test_sync_body_producer_chunkedc                 C   s2   | j dd| jddid}| ¡  |  |jd¡ d S ©Nr‚   rÀ   rM   Ú8©r»   r  rl   r  r  r²   r-   r-   r.   Ú&test_sync_body_producer_content_length©  s    üz@SimpleHTTPClientTestMixin.test_sync_body_producer_content_lengthc                 C   s,   | j dd| jd}| ¡  |  |jd¡ d S r  ©r¥   r  r¬   r£   rd   r²   r-   r-   r.   Ú test_async_body_producer_chunked³  s      ÿz:SimpleHTTPClientTestMixin.test_async_body_producer_chunkedc                 C   s2   | j dd| jddid}| ¡  |  |jd¡ d S r  r  r²   r-   r-   r.   Ú'test_async_body_producer_content_lengthº  s    üzASimpleHTTPClientTestMixin.test_async_body_producer_content_lengthc                 C   s2   dd„ }| j dd|d}| ¡  |  |jd¡ d S )Nc                 Ó   s8   | dƒI d H  dd l }| d¡I d H  | dƒI d H  d S ©Nr  r   r  ©Úasyncior   ©rJ   r   r-   r-   r.   r  Å  s    zRSimpleHTTPClientTestMixin.test_native_body_producer_chunked.<locals>.body_producerr‚   rÀ   r  r  ©r¥   r¬   r£   rd   ©r+   r  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                 Ó   s8   | dƒI d H  dd l }| d¡I d H  | dƒI d H  d S r  r  r!  r-   r-   r.   r  Ñ  s    zYSimpleHTTPClientTestMixin.test_native_body_producer_content_length.<locals>.body_producerr‚   rÀ   rM   r  r  r  r"  r#  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»   rd   Úexpect_100_continue)r¥   r£   rd   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ƒ‚d S )Nzshould not be called)ri   ©rJ   r-   r-   r.   r  è  s    zQSimpleHTTPClientTestMixin.test_100_continue_early_response.<locals>.body_producerrƒ   rÀ   T)r»   r  r&  rq   )r¥   r£   r¯   r#  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)Zheader_callbackZstreaming_callbackzHello world!c                 S   s   g | ]}|  d ¡r|‘qS )zHTTP/)rn   )Ú.0Úhr-   r-   r.   Ú
<listcomp>  s     
 zMSimpleHTTPClientTestMixin.test_streaming_follow_redirects.<locals>.<listcomp>r¡   )r¥   r<   r¶   Úmapr   r£   r   )r+   rl   Zchunk_bytesÚchunksZnum_start_linesr-   r-   r.   Útest_streaming_follow_redirectsó  s    ýz9SimpleHTTPClientTestMixin.test_streaming_follow_redirectsN))r0   r1   r2   rx   Ú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   rB   r  r  r  r  r  r$  r%  r'  r)  r/  r-   r-   r-   r.   rt   ‘   sJ   				


rt   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSimpleHTTPClientTestCasec                    s   t ƒ  ¡  |  ¡ | _d S r4   ©ÚsuperÚsetUprx   Úhttp_clientrH   ©Ú	__class__r-   r.   r5  	  s    
zSimpleHTTPClientTestCase.setUpc                 K   s   t f ddi|—ŽS )Nr'   T©r   rv   r-   r-   r.   rx     s    z&SimpleHTTPClientTestCase.create_client)r0   r1   r2   r5  rx   Ú__classcell__r-   r-   r7  r.   r2    s   r2  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                    s   t ƒ  ¡  |  ¡ | _d S r4   r3  rH   r7  r-   r.   r5    s    
zSimpleHTTPSClientTestCase.setUpc                 K   s   t f dtdddœ|—ŽS )NTF)Úvalidate_cert)r'   Údefaults)r   r‰   rv   r-   r-   r.   rx     s     ÿÿz'SimpleHTTPSClientTestCase.create_clientc                 C   s&   | j ddtjid}|  |jd¡ d S )Nr{   Ú	cert_reqs©Ússl_optionsrÜ   )r¥   ÚsslÚ	CERT_NONEr£   rd   ©r+   Úrespr-   r-   r.   Útest_ssl_options  s    z*SimpleHTTPSClientTestCase.test_ssl_optionsc                 C   s<   t  t jj¡}d|_t j|_| jd|d}|  |j	d¡ d S )NFr{   r?  rÜ   )
rA  Úcreate_default_contextÚPurposeÚSERVER_AUTHÚcheck_hostnamerB  Úverify_moder¥   r£   rd   )r+   Zssl_ctxrD  r-   r-   r.   Útest_ssl_context  s
    z*SimpleHTTPSClientTestCase.test_ssl_contextc              
   C   sN   t tddd6 |  tj¡ | jdttjddd W 5 Q R X W 5 Q R X d S )NúSSL Error|Uncaught exceptionFrö   r{   )r>  T©r@  rÓ   )r   r   rÔ   rA  ÚSSLErrorr¥   r‰   ÚCERT_REQUIREDrH   r-   r-   r.   Útest_ssl_options_handshake_fail&  s    
ýz9SimpleHTTPSClientTestCase.test_ssl_options_handshake_failc              
   C   sP   t tdƒ< t tjj¡}|  tj¡ | jd|dd W 5 Q R X W 5 Q R X d S )NrL  r{   TrM  )	r   r   rA  rF  rG  rH  rÔ   rN  r¥   )r+   Úctxr-   r-   r.   Útest_ssl_context_handshake_fail/  s    z9SimpleHTTPSClientTestCase.test_ssl_context_handshake_failc              
   C   sN   t tdƒ.}|  tj¡ | jdddd W 5 Q R X W 5 Q R X |  |j¡ d S )Nrõ   ú/T)r<  rÓ   )r   r   rÔ   rA  rN  r¥   rê   Zlogged_stack)r+   Z
expect_logr-   r-   r.   Útest_error_logging6  s    $z,SimpleHTTPSClientTestCase.test_error_logging)r0   r1   r2   r5  rx   rE  rK  rP  rR  rT  r:  r-   r-   r7  r.   r;    s   	r;  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 r4   )r4  r5  r   Z_save_configurationÚsavedrH   r7  r-   r.   r5  A  s    
z#CreateAsyncHTTPClientTestCase.setUpc                    s   t  | j¡ tƒ  ¡  d S r4   )r   Z_restore_configurationrV  r4  ÚtearDownrH   r7  r-   r.   rW  E  s    z&CreateAsyncHTTPClientTestCase.tearDownc              	   C   sê   t  t¡ tt ddƒ}|  |jd¡ W 5 Q R X tt dddƒ}|  |jd¡ W 5 Q R X t jtdd tt ddƒ}|  |jd¡ W 5 Q R X tt dddƒ}|  |jd¡ W 5 Q R X tt d	ddƒ}|  |jd	¡ W 5 Q R X d S )
NTr&   r  é   )r”   r'   é   r“   é   é   )r   Ú	configurer   r   r£   r”   r*   r-   r-   r.   Útest_max_clientsI  s    
z.CreateAsyncHTTPClientTestCase.test_max_clients)r0   r1   r2   r5  rW  r]  r:  r-   r-   r7  r.   rU  @  s   rU  c                   @   s,   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   rn   Úhttp1Ú
connectionÚwrite_headersr	   r   rZ   rc   rE   rJ   r§   Úrespond_200)r+   rc   r–   r-   r-   r.   Úrespond_100\  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 r4   )rc   rc  rE   rK   )ÚfrH   r-   r.   rž   m  rŸ   z5HTTP100ContinueTestCase.respond_200.<locals>.<lambda>)Úresultrc   rc  rE   rJ   r§   )r+   r–   r-   rH   r.   re  h  s
    
ÿz#HTTP100ContinueTestCase.respond_200c                 C   s   | j S r4   )rf  rH   r-   r-   r.   r‹   o  s    zHTTP100ContinueTestCase.get_appc                 C   s,   |   d¡}| js|  d¡ |  |jd¡ d S )NrS  r  ó   A)r¥   rb  r	  r£   rd   )r+   Úresr-   r-   r.   r'  s  s    

z)HTTP100ContinueTestCase.test_100_continueN)r0   r1   r2   rf  re  r‹   r'  r-   r-   r-   r.   r^  [  s   r^  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚHTTP204NoContentTestCasec                 C   sŽ   |j  d¡| _| js:|j tdddƒtƒ ¡ |j ¡  d S |j ¡ }| 	d¡ |j
 ddg¡d rn| 	d	¡ n
| 	d
¡ | 	d¡ | ¡  d S )Nr_  r`  r¼   ra  s   HTTP/1.1 204 No content
rú   Féÿÿÿÿs   Content-Length: 5
s   Content-Length: 0
s   
)r   rn   rb  rc  rd  r	   r   rZ   rD   rJ   Ú	argumentsrA   rK   )r+   rc   rE   r-   r-   r.   Úrespond_204{  s    
 ÿ




z$HTTP204NoContentTestCase.respond_204c                 C   s   | j S r4   )rn  rH   r-   r-   r.   r‹   ”  s    z HTTP204NoContentTestCase.get_appc                 C   s:   |   d¡}| js|  d¡ |  |jd¡ |  |jd¡ d S )NrS  r  rW   rŸ   )r¥   rb  r	  r£   r¯   rd   rC  r-   r-   r.   Útest_204_no_content—  s
    

z,HTTP204NoContentTestCase.test_204_no_contentc              
   C   sj   t tdtjdP |  t¡: | jddd | js<|  d¡ | j	j
tkrR|  d¡ W 5 Q R X W 5 Q R X 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¥   rb  r	  r6  Zconfigured_classr   rH   r-   r-   r.   Útest_204_invalid_content_lengthž  s      ÿ
z8HTTP204NoContentTestCase.test_204_invalid_content_lengthN)r0   r1   r2   rn  r‹   ro  rp  r-   r-   r-   r.   rk  z  s   rk  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@  )Zhostname_mapping)r4  r5  r   rÇ   r6  rH   r7  r-   r.   r5  ¬  s    

þÿzHostnameMappingTestCase.setUpc                 C   s   t tdtƒgƒS ©Nr{   ©r"   r#   r   rH   r-   r-   r.   r‹   µ  s    zHostnameMappingTestCase.get_appc                 C   s,   |   d|  ¡  ¡}| ¡  |  |jd¡ d S )Nzhttp://www.example.com:%d/hellorÜ   )r¥   rÇ   r¬   r£   rd   r²   r-   r-   r.   Útest_hostname_mapping¸  s    z-HostnameMappingTestCase.test_hostname_mappingc                 C   s$   |   d¡}| ¡  |  |jd¡ d S )Nz!http://foo.example.com:8000/hellorÜ   r"  r²   r-   r-   r.   Útest_port_mapping½  s    
z)HostnameMappingTestCase.test_port_mapping)r0   r1   r2   r5  r‹   rt  ru  r:  r-   r-   r7  r.   rq  «  s   	rq  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Ë   r?   rÅ   rÆ   rÇ   rÈ   ©rÌ   r-   r.   rÍ   Ê  s    z9ResolveTimeoutTestCase.setUp.<locals>.BadResolver.resolveN)r0   r1   r2   r   rB   rÍ   r-   rw  r-   r.   ÚBadResolverÉ  s   rx  rÏ   )r   rË   r   r4  r5  r   r6  )r+   rx  r7  rw  r.   r5  Ä  s
    
zResolveTimeoutTestCase.setUpc                 C   s   t tdtƒgƒS rr  rs  rH   r-   r-   r.   r‹   Ó  s    zResolveTimeoutTestCase.get_appc              	   C   sD   |   t¡ | jdddd W 5 Q R X | j ¡  | j dd„ ¡ d S )Nr{   rÂ   Tr  c                   S   s
   t  d¡S rŒ   rØ   r-   r-   r-   r.   rž   Ü  rŸ   z=ResolveTimeoutTestCase.test_resolve_timeout.<locals>.<lambda>)rÔ   r   r¥   rË   r=   r   r   rH   r-   r-   r.   Útest_resolve_timeoutÖ  s    
z+ResolveTimeoutTestCase.test_resolve_timeout)r0   r1   r2   r5  r‹   ry  r:  r-   r-   r7  r.   rv  Ã  s   rv  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMaxHeaderSizeTestc                 C   s4   G dd„ dt ƒ}G dd„ dt ƒ}td|fd|fgƒS )Nc                   @   s   e Zd Zdd„ ZdS )z/MaxHeaderSizeTest.get_app.<locals>.SmallHeadersc                 S   s   |   dd¡ |  d¡ d S )NúX-FillerZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarS   rT   rH   r-   r-   r.   rA   â  s    z3MaxHeaderSizeTest.get_app.<locals>.SmallHeaders.getNr[   r-   r-   r-   r.   ÚSmallHeadersá  s   r|  c                   @   s   e Zd Zdd„ ZdS )z/MaxHeaderSizeTest.get_app.<locals>.LargeHeadersc                 S   s   |   dd¡ |  d¡ d S )Nr{  Aè  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarS   rT   rH   r-   r-   r.   rA   ç  s    z3MaxHeaderSizeTest.get_app.<locals>.LargeHeaders.getNr[   r-   r-   r-   r.   ÚLargeHeadersæ  s   r}  ú/smallú/large©r!   r"   )r+   r|  r}  r-   r-   r.   r‹   à  s    zMaxHeaderSizeTest.get_appc                 C   s
   t ddS )Ni   )Zmax_header_sizer9  rH   r-   r-   r.   r/   í  s    z!MaxHeaderSizeTest.get_http_clientc                 C   s$   |   d¡}| ¡  |  |jd¡ d S )Nr~  râ   r"  r²   r-   r-   r.   Útest_small_headersð  s    
z$MaxHeaderSizeTest.test_small_headersc              
   C   sD   t tdtjd* |  t¡ | jddd W 5 Q R X W 5 Q R X d S )NzUnsatisfiable readrã   r  Trå   )r   r   r:   ræ   rÔ   r   r¥   rH   r-   r-   r.   Útest_large_headersõ  s    z$MaxHeaderSizeTest.test_large_headersN)r0   r1   r2   r‹   r/   r  r‚  r-   r-   r-   r.   rz  ß  s   rz  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMaxBodySizeTestc                 C   s4   G dd„ dt ƒ}G dd„ dt ƒ}td|fd|fgƒS )Nc                   @   s   e Zd Zdd„ ZdS )z*MaxBodySizeTest.get_app.<locals>.SmallBodyc                 S   s   |   dd ¡ d S )NÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaé@   r(  rH   r-   r-   r.   rA   þ  s    z.MaxBodySizeTest.get_app.<locals>.SmallBody.getNr[   r-   r-   r-   r.   Ú	SmallBodyý  s   r†  c                   @   s   e Zd Zdd„ ZdS )z*MaxBodySizeTest.get_app.<locals>.LargeBodyc                 S   s   |   dd ¡ d S ©Nr„  éd   r(  rH   r-   r-   r.   rA     s    z.MaxBodySizeTest.get_app.<locals>.LargeBody.getNr[   r-   r-   r-   r.   Ú	LargeBody  s   r‰  r~  r  r€  )r+   r†  r‰  r-   r-   r.   r‹   ü  s    zMaxBodySizeTest.get_appc                 C   s
   t ddS )Né   )Úmax_body_sizer9  rH   r-   r-   r.   r/     s    zMaxBodySizeTest.get_http_clientc                 C   s(   |   d¡}| ¡  |  |jdd ¡ d S )Nr~  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar…  r"  r²   r-   r-   r.   Útest_small_body
  s    
zMaxBodySizeTest.test_small_bodyc              
   C   sD   t tdtjd* |  t¡ | jddd W 5 Q R X W 5 Q R X d S )Nz9Malformed HTTP message from None: Content-Length too longrã   r  Trå   ©r   r   r:   ræ   rÔ   r   r¥   rH   r-   r-   r.   Útest_large_body  s    ýzMaxBodySizeTest.test_large_bodyN)r0   r1   r2   r‹   r/   r  r  r-   r-   r-   r.   rƒ  û  s   rƒ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMaxBufferSizeTestc                 C   s   G dd„ dt ƒ}td|fgƒS )Nc                   @   s   e Zd Zdd„ ZdS )z,MaxBufferSizeTest.get_app.<locals>.LargeBodyc                 S   s   |   dd ¡ d S r‡  r(  rH   r-   r-   r.   rA     s    z0MaxBufferSizeTest.get_app.<locals>.LargeBody.getNr[   r-   r-   r-   r.   r‰    s   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_sizer9  rH   r-   r-   r.   r/   !  s     ÿz!MaxBufferSizeTest.get_http_clientc                 C   s(   |   d¡}| ¡  |  |jdd ¡ d S )Nr  rŒ  rˆ  r"  r²   r-   r-   r.   r  '  s    
z!MaxBufferSizeTest.test_large_bodyN)r0   r1   r2   r‹   r/   r  r-   r-   r-   r.   r    s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚChunkedWithContentLengthTestc                 C   s   G dd„ dt ƒ}td|fgƒS )Nc                   @   s   e Zd Zdd„ ZdS )zFChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLengthc                 S   s   |   dd¡ |  d¡ d S )NzTransfer-EncodingÚchunkedzHello worldrT   rH   r-   r-   r.   rA   0  s    zJChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLength.getNr[   r-   r-   r-   r.   ÚChunkedWithContentLength/  s   r”  ú/chunkwithclr€  )r+   r”  r-   r-   r.   r‹   .  s    z$ChunkedWithContentLengthTest.get_appc                 C   s   t ƒ S r4   r9  rH   r-   r-   r.   r/   7  s    z,ChunkedWithContentLengthTest.get_http_clientc              
   C   sD   t tdtjd* |  t¡ | jddd W 5 Q R X W 5 Q R X d S )NzYMalformed HTTP message from None: Response with both Transfer-Encoding and Content-Lengthrã   r•  Trå   rŽ  rH   r-   r-   r.   Ú test_chunked_with_content_length:  s    úz=ChunkedWithContentLengthTest.test_chunked_with_content_lengthN)r0   r1   r2   r‹   r/   r–  r-   r-   r-   r.   r’  -  s   	r’  )Vr†   Ú
contextlibr   rþ   r:   rÙ   rð   rÅ   rA  rû   r0  Ztornado.escaper   r   Ztornador   r   Ztornado.httpclientr   Ztornado.httputilr   r	   Ztornado.ioloopr
   Ztornado.iostreamr   Ztornado.locksr   Ztornado.logr   Ztornado.netutilr   r   Ztornado.simple_httpclientr   r   r   Ztornado.test.httpclient_testr   r   r   r   r   Ztornado.testr   Ztornado.testingr   r   r   r   r   Ztornado.test.utilr   r   r    Ztornado.webr!   r"   r#   r$   ZHTTPClientCommonTestCaser%   r3   rC   rL   rQ   rV   r\   rh   rj   rm   ro   rp   Úobjectrt   r2  r;  rU  r^  rk  rq  rv  rz  rƒ  r  r’  r-   r-   r-   r.   Ú<module>   sf     y	/1