o
    8Di/{                     @   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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l0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> G dd de/j?Z@G dd de;ZAG dd de;ZBG dd de;ZCG dd de;ZDG dd de;ZEG dd  d e;ZFG d!d" d"e;ZGG d#d$ d$e;ZHG d%d& d&e;ZIG d'd( d(e;ZJe>G d)d* d*e;ZKe7G d+d, d,e3ZLG d-d. d.e1eLZMG d/d0 d0e2eLZNG d1d2 d2e3ZOG d3d4 d4e1ZPG d5d6 d6e1ZQG d7d8 d8e1ZRG d9d: d:e1ZSG d;d< d<e1ZTG d=d> d>e1ZUG d?d@ d@e1ZVG dAdB dBe1ZWdS )C    N)closing)
to_unicodeutf8)genversion)AsyncHTTPClientHTTPResponse)
HTTPServer)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)abstract_base_test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 r0   \/var/www/Datamplify/venv/lib/python3.10/site-packages/tornado/test/simple_httpclient_test.pyget_http_client3   s   
z.SimpleHTTPClientCommonTestCase.get_http_clientN)__name__
__module____qualname__r2   r0   r0   r0   r1   r(   2       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.   r;   r<   r0   r0   r1   
initialize:   s   
zTriggerHandler.initializec                 c   sF    t d t }| j|j | dddkr|   | V  d S )Nzqueuing triggerwaketrue)	loggingdebugr   r;   appendsetget_argumentr<   wait)r.   eventr0   r0   r1   get>   s   
zTriggerHandler.getN)r3   r4   r5   r=   r   	coroutinerG   r0   r0   r0   r1   r8   9       r8   c                   @   r7   )ContentLengthHandlerc                 C   s   |   | _t | j d S r9   )detachstreamr   currentspawn_callbackwrite_responser.   r0   r0   r1   rG   I   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)rL   writer   rD   closerP   r0   r0   r1   rO   M   s   z#ContentLengthHandler.write_responseN)r3   r4   r5   rG   r   rH   rO   r0   r0   r0   r1   rJ   H   rI   rJ   c                   @   r'   )HeadHandlerc                 C   s   |  dd d S )NContent-Length7)
set_headerrP   r0   r0   r1   headY      zHeadHandler.headN)r3   r4   r5   rX   r0   r0   r0   r1   rT   X   r6   rT   c                   @   r'   )OptionsHandlerc                 C      |  dd | d d S )NzAccess-Control-Allow-Origin*okrW   rR   rP   r0   r0   r1   options^      zOptionsHandler.optionsN)r3   r4   r5   r_   r0   r0   r0   r1   rZ   ]   r6   rZ   c                   @   r'   )NoContentHandlerc                 C   s   |  d |   d S )N   
set_statusfinishrP   r0   r0   r1   rG   d      
zNoContentHandler.getNr3   r4   r5   rG   r0   r0   r0   r1   ra   c   r6   ra   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bodyrW   rd   )r.   redirect_coder0   r0   r1   postj   s   zSeeOtherPostHandler.postNr3   r4   r5   rr   r0   r0   r0   r1   rh   i   r6   rh   c                   @   r'   )SeeOtherGetHandlerc                 C   s&   | j jrtd| j j | d d S )Nrk   r]   )ro   rp   	ExceptionrR   rP   r0   r0   r1   rG   r   s   zSeeOtherGetHandler.getNrg   r0   r0   r0   r1   rt   q   r6   rt   c                   @   r'   )HostEchoHandlerc                 C   s   |  | jjd  d S )NHost)rR   ro   headersrP   r0   r0   r1   rG   y   s   zHostEchoHandler.getNrg   r0   r0   r0   r1   rv   x   r6   rv   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)ro   r   
startswithrK   rR   rS   re   )r.   rL   r0   r0   r1   rG   ~   s
   
zNoContentLengthHandler.getNrg   r0   r0   r0   r1   ry   }   r6   ry   c                   @   r'   )EchoPostHandlerc                 C   s   |  | jj d S r9   )rR   ro   rp   rP   r0   r0   r1   rr         zEchoPostHandler.postNrs   r0   r0   r0   r1   r{      r6   r{   c                   @   r'   )RespondInPrepareHandlerc                 C   s   |  d | d d S )N  	forbiddenrc   rP   r0   r0   r1   prepare      
zRespondInPrepareHandler.prepareN)r3   r4   r5   r   r0   r0   r0   r1   r}      s    r}   c                	   @   sr  e Zd ZdefddZ	dOdededejde	fdd	Z
dedefd
dZdefddZdefddZdd Zdd Zdd Zdd Zedd Zdd Zdd Zdd Zd d! Zed"d# Zd$d% Zed&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%e&j'd:d; Z(d<d= Z)d>d? Z*d@dA Z+dBdC Z,dDdE Z-dFdG Z.dHdI Z/dJdK Z0dLdM Z1dNS )PSimpleHTTPClientTestMixinreturnc                 C      t  r9   NotImplementedErrorrP   r0   r0   r1   get_http_port      z'SimpleHTTPClientTestMixin.get_http_portFpathraise_errorkwargsc                 K   r   r9   r   )r.   r   r   r   r0   r0   r1   fetch   s   zSimpleHTTPClientTestMixin.fetchc                 C   r   r9   r   )r.   r   r0   r0   r1   get_url   r   z!SimpleHTTPClientTestMixin.get_urlc                 C   r   r9   r   rP   r0   r0   r1   get_protocol   r   z&SimpleHTTPClientTestMixin.get_protocolc                 C   r   r9   r   rP   r0   r0   r1   get_http_server   r   z)SimpleHTTPClientTestMixin.get_http_serverc                 K   r   r9   r   r.   r   r0   r0   r1   create_client   r   z'SimpleHTTPClientTestMixin.create_clientc                 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/triggerr:   z/chunkz/countdown/([0-9]+)	countdown)name/helloz/content_length/head/options/no_content/see_other_postrm   
/host_echo/no_content_length
/echo_post/respond_in_preparez	/redirect/user_agentT)gzip)collectionsdequetriggersr$   r%   r8   dictstopr   r   r   rJ   rT   rZ   ra   rh   rt   rv   ry   r{   r}   r   r   rP   r0   r0   r1   mixin_get_app   s4   z'SimpleHTTPClientTestMixin.mixin_get_appc                 C   s   |  t t  | t tdd ttdd}dd }| j|}||}| || W d    d S 1 s:w   Y  d S )NTr)   F)make_currentc                      s   t dI d H  t S Nr   )r   sleepr   r0   r0   r0   r1   make_client   s   z=SimpleHTTPClientTestMixin.test_singleton.<locals>.make_client)assertIsr   assertIsNotr   r   io_looprun_sync)r.   io_loop2r   client1client2r0   r0   r1   test_singleton   s   
"z(SimpleHTTPClientTestMixin.test_singletonc                    sJ  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 ddh t	|j
d j   j   j fddd	 t h d t	jd W d    d S 1 sw   Y  d S )N   max_clients   c                    s     |   d S r9   )rB   r   )futiseenr.   r0   r1   cb   rf   z;SimpleHTTPClientTestMixin.test_connection_limit.<locals>.cbr   c                      s   t  jdkS Nr   lenr   r0   rP   r0   r1   <lambda>       zASimpleHTTPClientTestMixin.test_connection_limit.<locals>.<lambda>)	conditionc                      s   t jdkot  dkS r   r   r0   r   r0   r1   r          r      c                      s   t  dkS )Nr   )r   r0   )r   r0   r1   r      s    >   r   r   r      )r   r   assertEqualr   ranger   r   add_done_callbackrE   r   r;   r   popleftrC   )r.   r/   r   r   r0   r   r1   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/   responser0   r0   r1   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   rj   z/countdown/2rl   z/countdown/1)	r   r   coder+   ro   r%   endswitheffective_urlrx   r.   r   r0   r0   r1   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   )rx   )r   r   )r
   r   r   listget_all)r.   rx   r0   r0   r1   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   rp   decoder   r   r0   r0   r1   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 )Nri   r   POSTz%d)r   rp   r   rm   )	r   r   r   r+   ro   r%   r   r   r   )r.   r   r   r0   r0   r1   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)rE   socketAF_INETr   r.   argsr   cleanup_eventtestr0   r1   resolve*  s   zOSimpleHTTPClientTestMixin.test_connect_timeout.<locals>.TimeoutResolver.resolveN)r3   r4   r5   r   r0   r   r0   r1   TimeoutResolver)  s    r   resolverr   i  T)connect_timeoutrequest_timeoutr   g?)r   r   r   r   assertRaisesr   r   r   rC   r   r   )r.   timeoutr   r/   r0   r   r1   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   r0   r0   r0   r1   r   G     
 z@SimpleHTTPClientTestMixin.test_request_timeout.<locals>.<lambda>)	osr   r   r   r   r   r   r   r   )r.   r   r0   r0   r1   test_request_timeout>  s   
z.SimpleHTTPClientTestMixin.test_request_timeoutc                 C   s   t ddtjd\}| d }|  | d|  |f }| t | j	|ddd W d    n1 s6w   Y  | 	|}| 
|jd	 d S )
Nr   z::1)familyr   z%s://[::1]:%d/helloFT)
allow_ipv6r      Hello world!)r   r   AF_INET6getsocknamer   
add_socketr   r   ru   r   r   rp   )r.   sockportr%   r   r0   r0   r1   	test_ipv6I  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   rp   r   r   r@   INFOr   r   r   r0   r0   r1   %test_multiple_content_length_acceptedW  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-lengthrV   )r   r   r   rx   assertFalserp   r   r0   r0   r1   test_head_requeste  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-originr\   r  )r   r   r   rx   rp   r   r0   r0   r1   test_options_requestk  s
   z.SimpleHTTPClientTestMixin.test_options_requestc                 C   s*   |  d}| |jd | d|j d S )Nr   rb   rU   )r   r   r   assertNotInrx   r   r0   r0   r1   test_no_contentr  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+   matchrp   r   replace)r.   host_rer   r%   r0   r0   r1   test_host_header{  s   


z*SimpleHTTPClientTestMixin.test_host_headerc              	   C   s   t  \}}| | ttddd' | tj}| jd| dd W d    n1 s,w   Y  W d    n1 s;w   Y  tj	dkr{t
tjt
|jv }|s`ttdr`t
tjt
|jv }| ||j ttj}| |t
|jv |j d S d S )	N.*Frequiredzhttp://127.0.0.1:%d/Tr  cygwinWSAECONNREFUSED)r"   
addCleanupr   r   r   r   errorr   sysplatformstrerrnoECONNREFUSED	exceptionhasattrr  r+   r   strerror)r.   cleanup_funcr   cmcontains_errnoexpected_messager0   r0   r1   test_connection_refused  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   r0   )r/   r.   r0   r1   r     s    z>SimpleHTTPClientTestMixin.test_queue_timeout.<locals>.<lambda>zTimeout in request queuec                      s    S r9   r0   r0   )fut1r0   r1   r     s    )r   r   r   r   rE   r   r   r   r   r   r   r#  r   r   )r.   r'  r0   )r/   r-  r.   r1   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   rp   skipTestr   r   r0   r0   r1   test_no_content_length  s   

z0SimpleHTTPClientTestMixin.test_no_content_lengthc                 C   s   |d |d d S N   1234   5678r0   r.   rR   r0   r0   r1   sync_body_producer  s   z,SimpleHTTPClientTestMixin.sync_body_producerc                 c   s"    |dV  t jV  |dV  d S r2  )r   momentr5  r0   r0   r1   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   r6  r   r   rp   r   r0   r0   r1   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   rU   8r   r<  rx   r=  r>  r   r0   r0   r1   &test_sync_body_producer_content_length     z@SimpleHTTPClientTestMixin.test_sync_body_producer_content_lengthc                 C   r9  r:  r   r8  r   r   rp   r   r0   r0   r1    test_async_body_producer_chunked  r@  z:SimpleHTTPClientTestMixin.test_async_body_producer_chunkedc                 C   rA  rB  rG  r   r0   r0   r1   'test_async_body_producer_content_length  rF  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 Nr3  r   r4  asyncior   rR   rM  r0   r0   r1   r<    
   zRSimpleHTTPClientTestMixin.test_native_body_producer_chunked.<locals>.body_producerr   r   r;  r=  r   r   r   rp   r.   r<  r   r0   r0   r1   !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                    rJ  rK  rL  rN  r0   r0   r1   r<    rO  zYSimpleHTTPClientTestMixin.test_native_body_producer_content_length.<locals>.body_producerr   r   rU   rC  rD  r=  rP  rQ  r0   r0   r1   (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   r3  T)r   rp   expect_100_continue)r   r   rp   r   r0   r0   r1   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)ru   rR   r0   r0   r1   r<       zQSimpleHTTPClientTestMixin.test_100_continue_early_response.<locals>.body_producerr   r   T)r   r<  rT  r~   )r   r   r   rQ  r0   r0   r1    test_100_continue_early_response  s   z:SimpleHTTPClientTestMixin.test_100_continue_early_responsec                 C   sZ   g }g }| j d|j|jd ttt|}| |dg tdd |D }| |d d S )Nz/redirect?url=/hello)header_callbackstreaming_callbackzHello world!c                 S   s   g | ]	}| d r|qS )zHTTP/)rz   ).0hr0   r0   r1   
<listcomp>  r   zMSimpleHTTPClientTestMixin.test_streaming_follow_redirects.<locals>.<listcomp>r   )r   rB   r   mapr   r   r   )r.   rx   chunk_byteschunksnum_start_linesr0   r0   r1   test_streaming_follow_redirects
  s   z9SimpleHTTPClientTestMixin.test_streaming_follow_redirectsN)F)2r3   r4   r5   rn   r   r   bool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  r  r*  r.  r1  r6  r   rH   r8  r?  rE  rH  rI  rR  rS  rU  rX  rb  r0   r0   r0   r1   r      sd    

		

		


r   c                       ,   e Zd Z fddZdd Zdd Z  ZS )SimpleHTTPClientTestCasec                       t    |  | _d S r9   supersetUpr   http_clientrP   	__class__r0   r1   rk     r   zSimpleHTTPClientTestCase.setUpc                 C      |   S r9   r   rP   r0   r0   r1   get_app$  rW  z SimpleHTTPClientTestCase.get_appc                 K   s   t dddi|S )Nr*   Tr0   r   r   r0   r0   r1   r   '  r|   z&SimpleHTTPClientTestCase.create_client)r3   r4   r5   rk  rq  r   __classcell__r0   r0   rm  r1   rg    s    rg  c                       sT   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	dd Z
  ZS )SimpleHTTPSClientTestCasec                    rh  r9   ri  rP   rm  r0   r1   rk  ,  r   zSimpleHTTPSClientTestCase.setUpc                 C   ro  r9   rp  rP   r0   r0   r1   rq  0  rW  z!SimpleHTTPSClientTestCase.get_appc                 K   s   t ddtddd|S )NTF)validate_cert)r*   defaultsr0   )r   r   r   r0   r0   r1   r   3  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   rp   r.   respr0   r0   r1   test_ssl_options8  s   z*SimpleHTTPSClientTestCase.test_ssl_optionsc                 C   s<   t t jj}d|_t j|_| jd|d}| |j	d d S )NFr   rx  r   )
rz  create_default_contextPurposeSERVER_AUTHcheck_hostnamer{  verify_moder   r   rp   )r.   ssl_ctxr}  r0   r0   r1   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   )rw  Try  r   )r   r   r   rz  SSLErrorr   r   CERT_REQUIREDrP   r0   r0   r1   test_ssl_options_handshake_failC  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   Tr  )	r   r   rz  r  r  r  r   r  r   )r.   ctxr0   r0   r1   test_ssl_context_handshake_failL  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)ru  r   )r   r   r   rz  r  r   r
  logged_stack)r.   
expect_logr0   r0   r1   test_error_loggingS  s   z,SimpleHTTPSClientTestCase.test_error_logging)r3   r4   r5   rk  rq  r   r~  r  r  r  r  rs  r0   r0   rm  r1   rt  +  s    	rt  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 r9   )rj  rk  r   _save_configurationsavedrP   rm  r0   r1   rk  ^  r   z#CreateAsyncHTTPClientTestCase.setUpc                    s   t | j t   d S r9   )r   _restore_configurationr  rj  tearDownrP   rm  r0   r1   r  b  r`   z&CreateAsyncHTTPClientTestCase.tearDownc                 C   sP  t t tt dd}| |jd W d    n1 sw   Y  tt ddd}| |jd W d    n1 s=w   Y  t jtdd tt dd}| |jd W d    n1 sbw   Y  tt ddd}| |jd W d    n1 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-   r0   r0   r1   test_max_clientsf  s"   
"z.CreateAsyncHTTPClientTestCase.test_max_clients)r3   r4   r5   rk  r  r  rs  r0   r0   rm  r1   r  ]  s    r  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
HTTP100ContinueTestCasec                 C   s`   |j d| _| js|jtdddt  |j  d S || _| jjj	
d}|| j d S )NHTTP/1. r   OKs   HTTP/1.1 100 CONTINUE

)r   rz   http1
connectionwrite_headersr   r
   re   ro   rL   rR   r   respond_200)r.   ro   r   r0   r0   r1   respond_100y  s   
z#HTTP100ContinueTestCase.respond_100c                    s.   |    jjjd}| fdd d S )Ns'   HTTP/1.1 200 OK
Content-Length: 1

Ac                    s    j jj S r9   )ro   r  rL   rS   )frP   r0   r1   r     r   z5HTTP100ContinueTestCase.respond_200.<locals>.<lambda>)resultro   r  rL   rR   r   )r.   r   r0   rP   r1   r    s
   
z#HTTP100ContinueTestCase.respond_200c                 C      | j S r9   )r  rP   r0   r0   r1   rq    s   zHTTP100ContinueTestCase.get_appc                 C   s,   |  d}| js| d | |jd d S )Nr  r/     A)r   r  r0  r   rp   )r.   resr0   r0   r1   rU    s   

z)HTTP100ContinueTestCase.test_100_continueN)r3   r4   r5   r  r  rq  rU  r0   r0   r0   r1   r  x  s
    r  c                   @   r  )
HTTP204NoContentTestCasec                 C   s   |j d| _| js|jtdddt  |j  d S |j }|	d |j
ddgd r7|	d	 n|	d
 |	d |  d S )Nr  r  r   r  s   HTTP/1.1 204 No content
r  Fs   Content-Length: 5
s   Content-Length: 0
s   
)r   rz   r  r  r  r   r
   re   rK   rR   	argumentsrG   rS   )r.   ro   rL   r0   r0   r1   respond_204  s   




z$HTTP204NoContentTestCase.respond_204c                 C   r  r9   )r  rP   r0   r0   r1   rq    r   z HTTP204NoContentTestCase.get_appc                 C   s:   |  d}| js| d | |jd | |jd d S )Nr  r/  rb       )r   r  r0  r   r   rp   r|  r0   r0   r1   test_204_no_content  s
   

z,HTTP204NoContentTestCase.test_204_no_contentc              	   C   s   t tdtjd@ | t" | jddd | js| d | j	j
tkr)| d W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S )Nz-.*Response with code 204 should not have bodyr  z	/?error=1Tr  r/  z#curl client accepts invalid headers)r   r   r@   r  r   r   r   r  r0  rl  configured_classr   rP   r0   r0   r1   test_204_invalid_content_length  s   

"z8HTTP204NoContentTestCase.test_204_invalid_content_lengthN)r3   r4   r5   r  rq  r  r  r0   r0   r0   r1   r    s
    r  c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	HostnameMappingTestCasec                    s(   t    tdd|  fdd| _d S )Nr   )zwww.example.com)zfoo.example.comi@  )hostname_mapping)rj  rk  r   r   rl  rP   rm  r0   r1   rk    s   

zHostnameMappingTestCase.setUpc                 C      t tdtgS Nr   r$   r%   r   rP   r0   r0   r1   rq    rY   zHostnameMappingTestCase.get_appc                 C   s,   |  d|   }|  | |jd d S )Nzhttp://www.example.com:%d/hellor   )r   r   r   r   rp   r   r0   r0   r1   test_hostname_mapping  s   z-HostnameMappingTestCase.test_hostname_mappingc                 C   $   |  d}|  | |jd d S )Nz!http://foo.example.com:8000/hellor   rP  r   r0   r0   r1   test_port_mapping     
z)HostnameMappingTestCase.test_port_mapping)r3   r4   r5   rk  rq  r  r  rs  r0   r0   rm  r1   r    s
    	r  c                       rf  )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   rE   r   r   r   r   r   r0   r1   r     s   z9ResolveTimeoutTestCase.setUp.<locals>.BadResolver.resolveN)r3   r4   r5   r   rH   r   r0   r  r0   r1   BadResolver  s    r  r   )r   r   r   rj  rk  r   rl  )r.   r  rm  r  r1   rk    s
   
zResolveTimeoutTestCase.setUpc                 C   r  r  r  rP   r0   r0   r1   rq    rY   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   r0   r0   r0   r1   r     r   z=ResolveTimeoutTestCase.test_resolve_timeout.<locals>.<lambda>)r   r   r   r   rC   r   r   rP   r0   r0   r1   test_resolve_timeout  s
   
z+ResolveTimeoutTestCase.test_resolve_timeout)r3   r4   r5   rk  rq  r  rs  r0   r0   rm  r1   r    s    r  c                   @   r  )
MaxHeaderSizeTestc                 C   4   G dd dt }G dd dt }td|fd|fgS )Nc                   @   r'   )z/MaxHeaderSizeTest.get_app.<locals>.SmallHeadersc                 S   r[   )NX-Fillerdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar]   r^   rP   r0   r0   r1   rG     r`   z3MaxHeaderSizeTest.get_app.<locals>.SmallHeaders.getNrg   r0   r0   r0   r1   SmallHeaders  r6   r  c                   @   r'   )z/MaxHeaderSizeTest.get_app.<locals>.LargeHeadersc                 S   r[   )Nr    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar]   r^   rP   r0   r0   r1   rG     r`   z3MaxHeaderSizeTest.get_app.<locals>.LargeHeaders.getNrg   r0   r0   r0   r1   LargeHeaders  r6   r  /small/larger#   r$   )r.   r  r  r0   r0   r1   rq    s   zMaxHeaderSizeTest.get_appc                 C   
   t ddS )Ni   )max_header_sizerr  rP   r0   r0   r1   r2   
     
z!MaxHeaderSizeTest.get_http_clientc                 C   r  )Nr  r  rP  r   r0   r0   r1   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   rP   r0   r0   r1   test_large_headers  s   "z$MaxHeaderSizeTest.test_large_headersN)r3   r4   r5   rq  r2   r  r  r0   r0   r0   r1   r    s
    r  c                   @   r  )
MaxBodySizeTestc                 C   r  )Nc                   @   r'   )z*MaxBodySizeTest.get_app.<locals>.SmallBodyc                 S      |  dd  d S )N   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@   rV  rP   r0   r0   r1   rG     r|   z.MaxBodySizeTest.get_app.<locals>.SmallBody.getNrg   r0   r0   r0   r1   	SmallBody  r6   r  c                   @   r'   )z*MaxBodySizeTest.get_app.<locals>.LargeBodyc                 S   r  Nr  d   rV  rP   r0   r0   r1   rG     r|   z.MaxBodySizeTest.get_app.<locals>.LargeBody.getNrg   r0   r0   r0   r1   	LargeBody  r6   r  r  r  r  )r.   r  r  r0   r0   r1   rq    s   zMaxBodySizeTest.get_appc                 C   r  )N   )max_body_sizerr  rP   r0   r0   r1   r2   $  r  zMaxBodySizeTest.get_http_clientc                 C   (   |  d}|  | |jdd  d S )Nr     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  rP  r   r0   r0   r1   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   rP   r0   r0   r1   test_large_body,  s   "zMaxBodySizeTest.test_large_bodyN)r3   r4   r5   rq  r2   r  r  r0   r0   r0   r1   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  rV  rP   r0   r0   r1   rG   9  r|   z0MaxBufferSizeTest.get_app.<locals>.LargeBody.getNrg   r0   r0   r0   r1   r  8  r6   r  r  r  )r.   r  r0   r0   r1   rq  7  s   zMaxBufferSizeTest.get_appc                 C   s   t dddS )Ni  r  )r  max_buffer_sizerr  rP   r0   r0   r1   r2   >  s   z!MaxBufferSizeTest.get_http_clientc                 C   r  )Nr  r  r  rP  r   r0   r0   r1   r  D  r  z!MaxBufferSizeTest.test_large_bodyN)r3   r4   r5   rq  r2   r  r0   r0   r0   r1   r  6  s    r  c                   @   r  )ChunkedWithContentLengthTestc                 C   r  )Nc                   @   r'   )zFChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLengthc                 S   r[   )NzTransfer-EncodingchunkedzHello worldr^   rP   r0   r0   r1   rG   M  s   zJChunkedWithContentLengthTest.get_app.<locals>.ChunkedWithContentLength.getNrg   r0   r0   r0   r1   ChunkedWithContentLengthL  r6   r  /chunkwithclr  )r.   r  r0   r0   r1   rq  K  s   z$ChunkedWithContentLengthTest.get_appc                 C   s   t  S r9   rr  rP   r0   r0   r1   r2   T  r   z,ChunkedWithContentLengthTest.get_http_clientc              	   C   r  )NzXMalformed HTTP message from None: Message with both Transfer-Encoding and Content-Lengthr  r  Tr  r  rP   r0   r0   r1    test_chunked_with_content_lengthW  s   "z=ChunkedWithContentLengthTest.test_chunked_with_content_lengthN)r3   r4   r5   rq  r2   r  r0   r0   r0   r1   r  J  s    	r  )Xr   
contextlibr   r!  r@   r   r  r   rz  r  rd  tornado.escaper   r   tornador   r   tornado.httpclientr   r   tornado.httpserverr	   tornado.httputilr
   r   tornado.ioloopr   tornado.iostreamr   tornado.locksr   tornado.logr   tornado.netutilr   r   tornado.simple_httpclientr   r   r   tornado.test.httpclient_testr   r   r   r   r   tornado.testr   tornado.testingr   r   r   r   r   tornado.test.utilr    r!   r"   tornado.webr#   r$   r%   r&   HTTPClientCommonTestCaser(   r8   rJ   rT   rZ   ra   rh   rt   rv   ry   r{   r}   r   rg  rt  r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   <module>   sn       21