U
    lufN                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ G dd dZG dd	 d	ee	ZG d
d dee	ZdS )    N)	validator)
RuleRouter)AsyncHTTPTestCasegen_test)WSGIContainerc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )WSGIAppMixinc                 C   s
   t  d S N)NotImplementedErrorself r   :/tmp/pip-unpacked-wheel-bmg6zs32/tornado/test/wsgi_test.pyget_executor   s    zWSGIAppMixin.get_executorc                    sP   |    tjddd| _ fdd}td|| jfd|| jfd|| jfgS )	N   g333333?)timeoutc                    s   t t|  dS )Nexecutor)r   r   )Zappr   r   r   make_container   s    z,WSGIAppMixin.get_app.<locals>.make_container/simple/barrier/streaming_barrier)r   	threadingBarrierbarrierr   simple_wsgi_appbarrier_wsgi_appstreaming_barrier_wsgi_app)r   r   r   r   r   get_app   s    zWSGIAppMixin.get_appc                 C   s   d}dg}||| d S )Nz200 OK)zContent-Typez
text/plainr   )r   start_responsestatusresponse_headersr   r   r   respond_plain"   s    zWSGIAppMixin.respond_plainc                 C   s   |  | dgS )N   Hello world!)r!   )r   environr   r   r   r   r   '   s    
zWSGIAppMixin.simple_wsgi_appc                 C   sD   |  | z| j }W n tjk
r4   dg Y S X d| gS d S )N   broken barriers   ok %dr!   r   waitr   BrokenBarrierErrorr   r#   r   nr   r   r   r   +   s    
zWSGIAppMixin.barrier_wsgi_appc                 c   sJ   |  | dV  z| j }W n tjk
r:   dV  Y nX d| V  d S )Ns   ok r$   s   %dr%   r(   r   r   r   r   4   s    
z'WSGIAppMixin.streaming_barrier_wsgi_appN)	__name__
__module____qualname__r   r   r!   r   r   r   r   r   r   r   r      s   	r   c                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
WSGIContainerDummyExecutorTestc                 C   s   d S r   r   r
   r   r   r   r   @   s    z+WSGIContainerDummyExecutorTest.get_executorc                 C   s   |  d}| |jd d S Nr   r"   fetchassertEqualbodyr   responser   r   r   test_simpleC   s    
z*WSGIContainerDummyExecutorTest.test_simplec                    sT   | j   t| j| d| j| dI d H }|D ]}| |jd q<d S )Nr   r$   	r   resetasynciogatherhttp_clientr0   get_urlr1   r2   r   respsrespr   r   r   test_concurrent_barrierG   s    

z6WSGIContainerDummyExecutorTest.test_concurrent_barrierc                    sT   | j   t| j| d| j| dI d H }|D ]}| |jd q<d S )Nr   s   ok broken barrierr6   r<   r   r   r   !test_concurrent_streaming_barrierQ   s    

z@WSGIContainerDummyExecutorTest.test_concurrent_streaming_barrierNr*   r+   r,   r   r5   r   r?   r@   r   r   r   r   r-   ?   s   
	r-   c                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
WSGIContainerThreadPoolTestc                 C   s
   t j S r   )
concurrentZfuturesZThreadPoolExecutorr
   r   r   r   r   ]   s    z(WSGIContainerThreadPoolTest.get_executorc                 C   s   |  d}| |jd d S r.   r/   r3   r   r   r   r5   `   s    
z'WSGIContainerThreadPoolTest.test_simplec                    sZ   | j   t| j| d| j| dI d H }| ddgtdd |D  d S )Nr      ok 0   ok 1c                 S   s   g | ]
}|j qS r   r2   .0r>   r   r   r   
<listcomp>k   s     zGWSGIContainerThreadPoolTest.test_concurrent_barrier.<locals>.<listcomp>	r   r7   r8   r9   r:   r0   r;   r1   sortedr   r=   r   r   r   r?   d   s    

z3WSGIContainerThreadPoolTest.test_concurrent_barrierc                    sZ   | j   t| j| d| j| dI d H }| ddgtdd |D  d S )Nr   rD   rE   c                 S   s   g | ]
}|j qS r   rF   rG   r   r   r   rI   t   s     zQWSGIContainerThreadPoolTest.test_concurrent_streaming_barrier.<locals>.<listcomp>rJ   rL   r   r   r   r@   m   s    

z=WSGIContainerThreadPoolTest.test_concurrent_streaming_barrierNrA   r   r   r   r   rB   \   s   
rB   )r8   concurrent.futuresrC   r   Zwsgiref.validater   Ztornado.routingr   Ztornado.testingr   r   Ztornado.wsgir   r   r-   rB   r   r   r   r   <module>   s   3