a
    ŠxdN  ã                   @   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   úN/var/www/html/Ranjet/env/lib/python3.9/site-packages/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   sB   |   |¡ z| j ¡ }W n tjy2   dg Y S 0 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   sH   |   |¡ dV  z| j ¡ }W n tjy8   dV  Y n0 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   ó    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   rJ   zQWSGIContainerThreadPoolTest.test_concurrent_streaming_barrier.<locals>.<listcomp>rK   rM   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