a
    Šxd…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-   ú[/var/www/html/Ranjet/env/lib/python3.9/site-packages/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v s$J d| jj ƒ‚|  dd¡ |  |¡ d S )N©é.  i/  úunexpected body %rÚLocationú/see_other_get)ÚintÚrequestÚbodyrO   rY   )r+   Zredirect_coder-   r-   r.   Úposte   s    zSeeOtherPostHandler.postN©r0   r1   r2   re   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.   rg   l   s   rg   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.   ri   s   s   ri   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.   rl   x   s   rl   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.   re   †   s    zEchoPostHandler.postNrf   r-   r-   r-   r.   rn   …   s   rn   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   rr   r-   r-   r-   r.   ro   Š   s   ro   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\   rg   ri   rl   rn   ro   r   r   rH   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   ƒ n1 st0    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+   Zio_loop2r   Zclient1Zclient2r-   r-   r.   Útest_singleton´   s    ÿ
z(SimpleHTTPClientTestMixin.test_singletonc                    sT  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   ƒ n1 sF0    Y  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>.cbrx   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   r    r‘   é   )r   rw   Ú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   sR   t | jddƒ.}|j|  d¡ddV }| ¡  W d   ƒ n1 sD0    Y  d S )Nr    r’   z/countdown/3r¡   ©Úmax_redirects)r   rw   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_urlrk   ©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ÚFoorz   )rk   )r³   r´   )r   r¤   r¢   ÚlistÚget_all)r+   rk   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ƒT}|  t¡* |j|  d¡|dddV  W d   ƒ n1 sr0    Y  W d   ƒ n1 s0    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)r?   ÚsocketÚAF_INETÚget_http_port©r+   Úargsrv   ©Úcleanup_eventÚtestr-   r.   Úresolve  s    zOSimpleHTTPClientTestMixin.test_connect_timeout.<locals>.TimeoutResolver.resolveN)r0   r1   r2   rÌ   r-   rÉ   r-   r.   ÚTimeoutResolver  s   rÍ   ©Úresolverrz   i  T)Úconnect_timeoutÚrequest_timeoutÚraise_errorgš™™™™™É?)r   r   r   rw   ÚassertRaisesr   r¤   r¥   r=   r   rŒ   )r+   ÚtimeoutrÍ   r,   r-   rÉ   r.   Útest_connect_timeout	  s    üD
z.SimpleHTTPClientTestMixin.test_connect_timeoutc                 C   sl   d}t jdkrd}|  t¡  | jd|dd W d   ƒ n1 sB0    Y  | 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>)	Úosry   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 sj0    Y  |  	|¡}|  
|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Ó   rh   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€ |  t¡ | j ddd W d   ƒ n1 sp0    Y  |  t¡ | j d	dd W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    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¢   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®   rk   Ú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®   rk   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assertNotInrk   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N |  tj¡"}| jd| dd W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    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 )	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    

N

ÿz1SimpleHTTPClientTestMixin.test_connection_refusedc              	      sÂ   t ˆjddƒž‰ ˆ jˆ d¡dd‰ˆ ¡  ˆ t¡&}ˆj ‡ ‡fdd„¡ W d   ƒ n1 sd0    Y  ˆ 	t
|jƒd¡ ˆj ¡ ƒ  ˆj ‡fd	d„¡ W d   ƒ n1 s´0    Y  d S )
Nr    r’   rx   é
   )rÑ   c                      s   ˆ j ˆ d¡dddS )Nrz   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   rw   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  rk   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)rh   ©rJ   r-   r-   r.   r  è  s    zQSimpleHTTPClientTestMixin.test_100_continue_early_response.<locals>.body_producerr‚   r¿   T)rº   r  r%  rp   )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/)rm   )Ú.0Úhr-   r-   r.   Ú
<listcomp>  rž   zMSimpleHTTPClientTestMixin.test_streaming_follow_redirects.<locals>.<listcomp>r    )r¤   r<   rµ   Úmapr   r¢   rœ   )r+   rk   Zchunk_bytesÚchunksZnum_start_linesr-   r-   r.   Útest_streaming_follow_redirectsó  s    ýz9SimpleHTTPClientTestMixin.test_streaming_follow_redirectsN))r0   r1   r2   rw   Ú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.   rs   ‘   sJ   				


rs   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSimpleHTTPClientTestCasec                    s   t ƒ  ¡  |  ¡ | _d S r4   ©ÚsuperÚsetUprw   Úhttp_clientrH   ©Ú	__class__r-   r.   r4  	  s    
zSimpleHTTPClientTestCase.setUpc                 K   s   t f ddi|¤ŽS )Nr'   T©r   ru   r-   r-   r.   rw     s    z&SimpleHTTPClientTestCase.create_client)r0   r1   r2   r4  rw   Ú__classcell__r-   r-   r6  r.   r1    s   r1  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   r2  rH   r6  r-   r.   r4    s    
zSimpleHTTPSClientTestCase.setUpc                 K   s   t f dtdddœ|¤ŽS )NTF)Úvalidate_cert)r'   Údefaults)r   rˆ   ru   r-   r-   r.   rw     s
    
ÿÿz'SimpleHTTPSClientTestCase.create_clientc                 C   s&   | j ddtjid}|  |jd¡ d S )Nrz   Ú	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 )NFrz   r>  rÛ   )
r@  Úcreate_default_contextÚPurposeÚSERVER_AUTHÚcheck_hostnamerA  Úverify_moder¤   r¢   rd   )r+   Zssl_ctxrC  r-   r-   r.   Útest_ssl_context  s
    z*SimpleHTTPSClientTestCase.test_ssl_contextc              	   C   sv   t tdddT |  tj¡( | jdttjddd W d   ƒ n1 sJ0    Y  W d   ƒ n1 sh0    Y  d S )NúSSL Error|Uncaught exceptionFrõ   rz   )r=  T©r?  rÒ   )r   r   rÓ   r@  ÚSSLErrorr¤   rˆ   ÚCERT_REQUIREDrH   r-   r-   r.   Útest_ssl_options_handshake_fail&  s    
ýz9SimpleHTTPSClientTestCase.test_ssl_options_handshake_failc              	   C   sx   t tdƒZ t tjj¡}|  tj¡  | jd|dd W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  d S )NrK  rz   TrL  )	r   r   r@  rE  rF  rG  rÓ   rM  r¤   )r+   Úctxr-   r-   r.   Útest_ssl_context_handshake_fail/  s    z9SimpleHTTPSClientTestCase.test_ssl_context_handshake_failc              	   C   sv   t tdƒL}|  tj¡  | jdddd W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  |  |j¡ d S )Nrô   ú/T)r;  rÒ   )r   r   rÓ   r@  rM  r¤   ré   Zlogged_stack)r+   Z
expect_logr-   r-   r.   Útest_error_logging6  s    Lz,SimpleHTTPSClientTestCase.test_error_logging)r0   r1   r2   r4  rw   rD  rJ  rO  rQ  rS  r9  r-   r-   r6  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   )r3  r4  r   Z_save_configurationÚsavedrH   r6  r-   r.   r4  A  s    
z#CreateAsyncHTTPClientTestCase.setUpc                    s   t  | j¡ tƒ  ¡  d S r4   )r   Z_restore_configurationrU  r3  ÚtearDownrH   r6  r-   r.   rV  E  s    z&CreateAsyncHTTPClientTestCase.tearDownc                 C   sR  t  t¡ tt ddƒ}|  |jd¡ W d   ƒ n1 s<0    Y  tt dddƒ}|  |jd¡ W d   ƒ n1 sz0    Y  t jtdd tt ddƒ}|  |jd¡ W d   ƒ n1 sÄ0    Y  tt dddƒ}|  |jd¡ W d   ƒ n1 s0    Y  tt d	ddƒ}|  |jd	¡ W d   ƒ n1 sD0    Y  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   r4  rV  r\  r9  r-   r-   r6  r.   rT  @  s   rT  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   rm   Ú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   rb  rE   rK   )ÚfrH   r-   r.   r   m  rž   z5HTTP100ContinueTestCase.respond_200.<locals>.<lambda>)Úresultrc   rb  rE   rJ   r¦   )r+   r•   r-   rH   r.   rd  h  s
    
ÿz#HTTP100ContinueTestCase.respond_200c                 C   s   | j S r4   )re  rH   r-   r-   r.   rŠ   o  s    zHTTP100ContinueTestCase.get_appc                 C   s,   |   d¡}| js|  d¡ |  |jd¡ d S )NrR  r  ó   A)r¤   ra  r  r¢   rd   )r+   Úresr-   r-   r.   r&  s  s    

z)HTTP100ContinueTestCase.test_100_continueN)r0   r1   r2   re  rd  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»   r`  s   HTTP/1.1 204 No content
rù   Féÿÿÿÿs   Content-Length: 5
s   Content-Length: 0
s   
)r   rm   ra  rb  rc  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   )rm  rH   r-   r-   r.   rŠ   ”  s    z HTTP204NoContentTestCase.get_appc                 C   s:   |   d¡}| js|  d¡ |  |jd¡ |  |jd¡ d S )NrR  r  rW   rž   )r¤   ra  r  r¢   r®   rd   rB  r-   r-   r.   Útest_204_no_content—  s
    

z,HTTP204NoContentTestCase.test_204_no_contentc              	   C   s’   t tdtjdn |  t¡D | jddd | js<|  d¡ | j	j
tkrR|  d¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    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¤   ra  r  r5  Zconfigured_classr   rH   r-   r-   r.   Útest_204_invalid_content_lengthž  s    ÿ
z8HTTP204NoContentTestCase.test_204_invalid_content_lengthN)r0   r1   r2   rm  rŠ   rn  ro  r-   r-   r-   r.   rj  z  s   rj  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)r3  r4  r   rÆ   r5  rH   r6  r-   r.   r4  ¬  s    

þÿzHostnameMappingTestCase.setUpc                 C   s   t tdtƒgƒS ©Nrz   ©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   r4  rŠ   rs  rt  r9  r-   r-   r6  r.   rp  «  s   	rp  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-   rv  r-   r.   ÚBadResolverÉ  s   rw  rÎ   )r   rÊ   r   r3  r4  r   r5  )r+   rw  r6  rv  r.   r4  Ä  s
    
zResolveTimeoutTestCase.setUpc                 C   s   t tdtƒgƒS rq  rr  rH   r-   r-   r.   rŠ   Ó  s    zResolveTimeoutTestCase.get_appc                 C   sX   |   t¡  | jdddd W d   ƒ n1 s00    Y  | j ¡  | j dd„ ¡ d S )Nrz   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   r4  rŠ   rx  r9  r-   r-   r6  r.   ru  Ã  s   ru  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 )Nrz  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_sizer8  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   sl   t tdtjdH |  t¡ | jddd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  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.   ry  ß  s   ry  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_sizer8  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   sl   t tdtjdH |  t¡ | jddd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  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_sizer8  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   r8  rH   r-   r-   r.   r/   7  s    z,ChunkedWithContentLengthTest.get_http_clientc              	   C   sl   t tdtjdH |  t¡ | jddd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  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Ä   r@  rú   r/  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\   rg   ri   rl   rn   ro   Úobjectrs   r1  r:  rT  r]  rj  rp  ru  ry  r‚  r  r‘  r-   r-   r-   r.   Ú<module>   sf     y	/1