a
    mzf                     @   s   d Z ddlmZ ddlmZ 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 ddlmZmZ epneZejd	d
 Zejjddddd Zdd Zdd ZdS )z
Test wsgi.    )ThreadPoolExecutor)print_tbN)BaseUrlSession)ExceptionTrap)wsgi)IS_MACOS
IS_WINDOWSc                  c   sz   t  } dd }d}|| f}tj||tr,dndd}djf i t }| }t V  W d   n1 sl0    Y  dS )	z)Fucking simple wsgi server fixture (duh).c                 S   s   d}dg}||| dgS )Nz200 OK)zContent-typez
text/plains   Hello world! )Z_environstart_responsestatusresponse_headersr	   r	   D/var/www/media/lib/python3.9/site-packages/cheroot/test/test_wsgi.pyapp   s    
zsimple_wsgi_server.<locals>.appz::iX     )timeoutzhttp://localhost:{port}/N)portendZfind_available_local_portr   ServerIS_SLOW_ENVformatlocalsZ_run_in_thread)portr   hostaddrserverurlthreadr	   r	   r   simple_wsgi_server   s    
r         )ZrerunsZreruns_delayc                    s   t | d dtjjddd}d| fdd ttr@d	nd
dB fddttr`dndD }tdd |D }W d   n1 s0    Y  	  |rJ dS )z*Test the connection keepalive works (duh).r   )base_url   i  )pool_connectionspool_maxsizezhttp://c                     sP   t tjj"}  d}|  W d    n1 s40    Y  t| j t| S )Ninfo)	r   requests
exceptionsConnectionErrorgetraise_for_statusr   tbbool)Ztrapresp)sessionr	   r   
do_request1   s
    
&
z-test_connection_keepalive.<locals>.do_request
   2   )max_workersc                    s   g | ]}  qS r	   )Zsubmit).0n)r-   poolr	   r   
<listcomp>9   s   z-test_connection_keepalive.<locals>.<listcomp>   c                 s   s   | ]}|  V  qd S N)result)r1   Ztaskr	   r	   r   	<genexpr>=       z,test_connection_keepalive.<locals>.<genexpr>N)
Sessionr$   adaptersHTTPAdaptermountr   r   rangesumclose)r   ZpooledZtasksZfailuresr	   )r-   r3   r,   r   test_connection_keepalive(   s    0rA   c                 C   sh   |  tjddd  td}d|_d}tjt|d |dd	d W d   n1 sZ0    Y  dS )
z>Verify that repeat calls of ``Gateway.start_response()`` fail.get_environc                 S   s   i S r6   r	   selfr	   r	   r   <lambda>E   r9   z:test_gateway_start_response_called_twice.<locals>.<lambda>NTz<^WSGI start_response called a second time with no exc_info.$matchZ200r	   )setattrr   GatewayZstarted_responsepytestraisesRuntimeErrorr
   ZmonkeypatchZwsgi_gatewayerr_msgr	   r	   r   (test_gateway_start_response_called_twiceC   s    
rO   c                 C   s^   |  tjddd  td}d}tjt|d |d W d   n1 sP0    Y  dS )z>Check that calling ``Gateway.write()`` needs started response.rB   c                 S   s   i S r6   r	   rC   r	   r	   r   rE   P   r9   zGtest_gateway_write_needs_start_response_called_before.<locals>.<lambda>Nz*^WSGI write called before start_response.$rF   )rH   r   rI   rJ   rK   rL   writerM   r	   r	   r   5test_gateway_write_needs_start_response_called_beforeN   s
    
rQ   )__doc__Zconcurrent.futures.threadr   	tracebackr   rJ   r   r$   Zrequests_toolbelt.sessionsr   r:   Zjaraco.contextr   Zcherootr   Zcheroot._compatr   r   r   Zfixturer   markZflakyrA   rO   rQ   r	   r	   r	   r   <module>   s    

