o
    )Zhy                     @   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.   Z/var/www/html/lang_env/lib/python3.10/site-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 triggerZwaketrue)	loggingdebugr   r9   appendsetget_argumentr:   wait)r,   eventr.   r.   r/   get9   s   
zTriggerHandler.getN)r1   r2   r3   r;   r   	coroutinerD   r.   r.   r.   r/   r6   4       r6   c                   @   r5   )ContentLengthHandlerc                 C   s   |   | _t | j d S r7   )detachstreamr
   currentZspawn_callbackwrite_responser,   r.   r.   r/   rD   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)rI   writer   rA   closerL   r.   r.   r/   rK   H   s   z#ContentLengthHandler.write_responseN)r1   r2   r3   rD   r   rE   rK   r.   r.   r.   r/   rG   C   rF   rG   c                   @   r%   )HeadHandlerc                 C   s   |  dd d S )NContent-Length7)
set_headerrL   r.   r.   r/   headT      zHeadHandler.headN)r1   r2   r3   rT   r.   r.   r.   r/   rP   S   r4   rP   c                   @   r%   )OptionsHandlerc                 C      |  dd | d d S )NzAccess-Control-Allow-Origin*okrS   rN   rL   r.   r.   r/   optionsY      zOptionsHandler.optionsN)r1   r2   r3   r[   r.   r.   r.   r/   rV   X   r4   rV   c                   @   r%   )NoContentHandlerc                 C   s   |  d |   d S )N   
set_statusfinishrL   r.   r.   r/   rD   _      
zNoContentHandler.getNr1   r2   r3   rD   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bodyrS   r`   )r,   Zredirect_coder.   r.   r/   poste   s   zSeeOtherPostHandler.postNr1   r2   r3   rm   r.   r.   r.   r/   rd   d   r4   rd   c                   @   r%   )SeeOtherGetHandlerc                 C   s&   | j jrtd| j j | d d S )Nrg   rY   )rk   rl   	ExceptionrN   rL   r.   r.   r/   rD   m   s   zSeeOtherGetHandler.getNrc   r.   r.   r.   r/   ro   l   r4   ro   c                   @   r%   )HostEchoHandlerc                 C   s   |  | jjd  d S )NHost)rN   rk   headersrL   r.   r.   r/   rD   t   s   zHostEchoHandler.getNrc   r.   r.   r.   r/   rq   s   r4   rq   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)rk   r   
startswithrH   rN   rO   ra   )r,   rI   r.   r.   r/   rD   y   s
   
zNoContentLengthHandler.getNrc   r.   r.   r.   r/   rt   x   r4   rt   c                   @   r%   )EchoPostHandlerc                 C   s   |  | jj d S r7   )rN   rk   rl   rL   r.   r.   r/   rm         zEchoPostHandler.postNrn   r.   r.   r.   r/   rv      r4   rv   c                   @   r%   )RespondInPrepareHandlerc                 C   s   |  d | d d S )N  	forbiddenr_   rL   r.   r.   r/   prepare      
zRespondInPrepareHandler.prepareN)r1   r2   r3   r{   r.   r.   r.   r/   rx      s    rx   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]+)Z	countdown)name/helloz/content_length/head/options/no_content/see_other_postri   
/host_echo/no_content_length
/echo_post/respond_in_preparez	/redirect/user_agentT)gzip)collectionsdequetriggersr"   r#   r6   dictstopr   r   r   rG   rP   rV   r]   rd   ro   rq   rt   rv   rx   r   r   rL   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,   Zio_loop2r   Zclient1Z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 sw   Y  d S )N   max_clients   c                    s     |   d S r7   )r?   r   )futiseenr,   r.   r/   cb   rb   z;SimpleHTTPClientTestMixin.test_connection_limit.<locals>.cbr   c                      s   t  jdkS Nr   lenr   r.   rL   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_callbackrB   r   r9   r   popleftr@   )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   rf   z/countdown/2rh   z/countdown/1)	r   r   coder)   rk   r#   endswitheffective_urlrs   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   )rs   )r   r   )r   r   r   listget_all)r,   rs   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   rl   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 )Nre   r   POSTz%d)r   rl   r   ri   )	r   r   r   r)   rk   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)rB   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   r@   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)Z
allow_ipv6r      Hello world!)r   r   AF_INET6getsocknameZhttp_serverZ
add_socketZget_protocolr   rp   r   r   rl   )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   rl   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-lengthrR   )r   r   r   rs   assertFalserl   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-originrX   r   )r   r   r   rs   rl   r   r.   r.   r/   test_options_requestT  s
   z.SimpleHTTPClientTestMixin.test_options_requestc                 C   s*   |  d}| |jd | d|j d S )Nr   r^   rQ   )r   r   r   ZassertNotInrs   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)   matchrl   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' | 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    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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   rB   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   rl   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,   rN   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   ,   | j dd| jd}|  | |jd d S Nr   r   r   body_producer   12345678r   r  r   r   rl   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   rQ   8r   r!  rs   r"  r#  r   r.   r.   r/   &test_sync_body_producer_content_length     z@SimpleHTTPClientTestMixin.test_sync_body_producer_content_lengthc                 C   r  r  r   r  r   r   rl   r   r.   r.   r/    test_async_body_producer_chunked  r%  z:SimpleHTTPClientTestMixin.test_async_body_producer_chunkedc                 C   r&  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   rN   r2  r.   r.   r/   r!    
   zRSimpleHTTPClientTestMixin.test_native_body_producer_chunked.<locals>.body_producerr   r   r   r"  r   r   r   rl   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                    r/  r0  r1  r3  r.   r.   r/   r!    r4  zYSimpleHTTPClientTestMixin.test_native_body_producer_content_length.<locals>.body_producerr   r   rQ   r(  r)  r"  r5  r6  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   rl   expect_100_continue)r   r   rl   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)rp   rN   r.   r.   r/   r!    s   zQSimpleHTTPClientTestMixin.test_100_continue_early_response.<locals>.body_producerr   r   T)r   r!  r9  ry   )r   r   r   r6  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/)ru   ).0hr.   r.   r/   
<listcomp>  r   zMSimpleHTTPClientTestMixin.test_streaming_follow_redirects.<locals>.<listcomp>r   )r   r?   r   mapr   r   r   )r,   rs   Zchunk_byteschunksZ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   rE   r  r$  r*  r-  r.  r7  r8  r:  r<  rB  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_clientrL   	__class__r.   r/   rI  	  r|   zSimpleHTTPClientTestCase.setUpc                 K   s   t dddi|S )Nr(   Tr.   r   r   r.   r.   r/   r     rw   z&SimpleHTTPClientTestCase.create_client)r1   r2   r3   rI  r   __classcell__r.   r.   rK  r/   rE    s    rE  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                    rF  r7   rG  rL   rK  r.   r/   rI    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dtjid}| |jd d S )Nr   	cert_reqsssl_optionsr   )r   ssl	CERT_NONEr   rl   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   rS  r   )
rU  create_default_contextPurposeSERVER_AUTHcheck_hostnamerV  verify_moder   r   rl   )r,   Zssl_ctxrX  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   )rR  TrT  r   )r   r   r   rU  SSLErrorr   r   CERT_REQUIREDrL   r.   r.   r/   test_ssl_options_handshake_fail&  s   
"z9SimpleHTTPSClientTestCase.test_ssl_options_handshake_failc              	   C   s   t td6 ttjj}| tj | 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 )Nr`  r   Tra  )	r   r   rU  rZ  r[  r\  r   rb  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)rP  r   )r   r   r   rU  rb  r   r   Zlogged_stack)r,   Z
expect_logr.   r.   r/   test_error_logging6  s   z,SimpleHTTPSClientTestCase.test_error_logging)r1   r2   r3   rI  r   rY  r_  rd  rf  rh  rN  r.   r.   rK  r/   rO    s    	rO  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   )rH  rI  r   Z_save_configurationsavedrL   rK  r.   r/   rI  A  r|   z#CreateAsyncHTTPClientTestCase.setUpc                    s   t | j t   d S r7   )r   Z_restore_configurationrj  rH  tearDownrL   rK  r.   r/   rk  E  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 sw   Y  tt d	dd}| |jd	 W d    d S 1 sw   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)r1   r2   r3   rI  rk  rq  rN  r.   r.   rK  r/   ri  @  s    ri  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   ru   http1
connectionwrite_headersr	   r   ra   rk   rI   rN   r   respond_200)r,   rk   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 r7   )rk   rx  rI   rO   )frL   r.   r/   r   m  r   z5HTTP100ContinueTestCase.respond_200.<locals>.<lambda>)resultrk   rx  rI   rN   r   )r,   r   r.   rL   r/   rz  h  s
   
z#HTTP100ContinueTestCase.respond_200c                 C      | j S r7   )r{  rL   r.   r.   r/   r   o  s   zHTTP100ContinueTestCase.get_appc                 C   s,   |  d}| js| d | |jd d S )Nrg  r     A)r   rw  r  r   rl   )r,   resr.   r.   r/   r:  s  s   

z)HTTP100ContinueTestCase.test_100_continueN)r1   r2   r3   r{  rz  r   r:  r.   r.   r.   r/   rs  [  s
    rs  c                   @   rr  )
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 )Nrt  ru  r   rv  s   HTTP/1.1 204 No content
r  Fs   Content-Length: 5
s   Content-Length: 0
s   
)r   ru   rw  rx  ry  r	   r   ra   rH   rN   	argumentsrD   rO   )r,   rk   rI   r.   r.   r/   respond_204{  s   




z$HTTP204NoContentTestCase.respond_204c                 C   r~  r7   )r  rL   r.   r.   r/   r     r   z HTTP204NoContentTestCase.get_appc                 C   s:   |  d}| js| d | |jd | |jd d S )Nrg  r  r^       )r   rw  r  r   r   rl   rW  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   rw  r  rJ  Zconfigured_classr   rL   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  z  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@  )Zhostname_mapping)rH  rI  r   r   rJ  rL   rK  r.   r/   rI    s   

zHostnameMappingTestCase.setUpc                 C      t tdtgS Nr   r"   r#   r   rL   r.   r.   r/   r     rU   zHostnameMappingTestCase.get_appc                 C   s,   |  d|   }|  | |jd d S )Nzhttp://www.example.com:%d/hellor   )r   r   r   r   rl   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   r5  r   r.   r.   r/   test_port_mapping     
z)HostnameMappingTestCase.test_port_mapping)r1   r2   r3   rI  r   r  r  rN  r.   r.   rK  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   rB   r   r   r   r   r   r.   r/   r     s   z9ResolveTimeoutTestCase.setUp.<locals>.BadResolver.resolveN)r1   r2   r3   r   rE   r   r.   r  r.   r/   BadResolver  s    r  r   )r   r   r   rH  rI  r   rJ  )r,   r  rK  r  r/   rI    s
   
zResolveTimeoutTestCase.setUpc                 C   r  r  r  rL   r.   r.   r/   r     rU   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   r@   r   r   rL   r.   r.   r/   test_resolve_timeout  s
   
z+ResolveTimeoutTestCase.test_resolve_timeout)r1   r2   r3   rI  r   r  rN  r.   r.   rK  r/   r    s    r  c                   @   rr  )
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   rW   )NX-FillerZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarY   rZ   rL   r.   r.   r/   rD     r\   z3MaxHeaderSizeTest.get_app.<locals>.SmallHeaders.getNrc   r.   r.   r.   r/   SmallHeaders  r4   r  c                   @   r%   )z/MaxHeaderSizeTest.get_app.<locals>.LargeHeadersc                 S   rW   )Nr  A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarY   rZ   rL   r.   r.   r/   rD     r\   z3MaxHeaderSizeTest.get_app.<locals>.LargeHeaders.getNrc   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   )Zmax_header_sizerM  rL   r.   r.   r/   r0        
z!MaxHeaderSizeTest.get_http_clientc                 C   r  )Nr  r   r5  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   rL   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                   @   rr  )
MaxBodySizeTestc                 C   r  )Nc                   @   r%   )z*MaxBodySizeTest.get_app.<locals>.SmallBodyc                 S      |  dd  d S )N   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@   r;  rL   r.   r.   r/   rD     rw   z.MaxBodySizeTest.get_app.<locals>.SmallBody.getNrc   r.   r.   r.   r/   	SmallBody  r4   r  c                   @   r%   )z*MaxBodySizeTest.get_app.<locals>.LargeBodyc                 S   r  Nr  d   r;  rL   r.   r.   r/   rD     rw   z.MaxBodySizeTest.get_app.<locals>.LargeBody.getNrc   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_sizerM  rL   r.   r.   r/   r0     r  zMaxBodySizeTest.get_http_clientc                 C   (   |  d}|  | |jdd  d S )Nr     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r5  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   rL   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  r;  rL   r.   r.   r/   rD     rw   z0MaxBufferSizeTest.get_app.<locals>.LargeBody.getNrc   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_sizerM  rL   r.   r.   r/   r0   !  s   z!MaxBufferSizeTest.get_http_clientc                 C   r  )Nr  r  r  r5  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   rW   )NzTransfer-EncodingchunkedzHello worldrZ   rL   r.   r.   r/   rD   0  s   zJChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLength.getNrc   r.   r.   r.   r/   ChunkedWithContentLength/  r4   r  /chunkwithclr  )r,   r  r.   r.   r/   r   .  s   z$ChunkedWithContentLengthTest.get_appc                 C   s   t  S r7   rM  rL   r.   r.   r/   r0   7  r   z,ChunkedWithContentLengthTest.get_http_clientc              	   C   r  )NzXMalformed HTTP message from None: Message with both Transfer-Encoding and Content-Lengthr   r  Tr   r  rL   r.   r.   r/    test_chunked_with_content_length:  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   rU  r  rC  Ztornado.escaper   r   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&   r6   rG   rP   rV   r]   rd   ro   rq   rt   rv   rx   objectr}   rE  rO  ri  rs  r  r  r  r  r  r  r  r.   r.   r.   r/   <module>   sh      y	/1