
    Df                     j   d 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
ZddlZddlmZ  ej        e          Zej                            ej                            e                    ZddddZ G d dej                  Z G d	 d
          Z G d d          Z G d d          ZdS )z9A library of helper functions for the Cheroot test suite.    N)webtest)z	127.0.0.1i7  wsgi)	bind_addrserverwsgi_appc                       e Zd ZdZdZdZej        j        ej	        j
        dZed             Zed             Zed             Zed             Zd	ZddZd
S )CherootWebCasez&Helper class for a web app test suite. http)r   nativec                    t                                           }|                    t          | di                      |                    dd          }| j                            |          }|t          d|d         z             |di || _        | j        j	        \  | _
        | _        | j        j        
d}d| _        nd}t          j        j        | _        d	| _        t$          j                                        d
         }t*                              d|           t*                              dt.          j                   t*                              d| j        j        |           t*                              dt5          j                               t9          | d          r*|                                  |                                  dS dS )z)Create and run one HTTP server per class.configr   r   NzUnknown server in config: %sr
   r   z (ssl)httpsr   z/Python version used to run this test script: %szCheroot version: %szHTTP server version: %s%szPID: %ssetup_server )r   copyupdategetattrpopavailable_serversgetRuntimeError
httpserverr   HOSTPORTssl_adapterschemer   clientHTTPSConnection	HTTP_CONNsysversionsplitloginfocheroot__version__protocolosgetpidhasattrr   start)clsconfs_classserver_factorysslvs         B/var/www/media/lib/python3.11/site-packages/cheroot/test/helper.pysetup_classzCherootWebCase.setup_class'   s    {{}}GC2..///((8V,,.227;;!=XNOOO'//$// ^5#(>%-CCJJC K7CM CJK"BAFFF&(;<<<,cn.EsKKKBIKK(((3'' 	 IIKKKKK		 	    c                 R    t          | d          r|                                  dS dS )zCleanup HTTP server.r   N)r+   stopr-   s    r3   teardown_classzCherootWebCase.teardown_classH   s1     3'' 	HHJJJJJ	 	r5   c                     t          j        | j        j                                                   | j        j        s"t          j        d           | j        j         dS dS )zLoad and start the HTTP server.)targetg?N)	threadingThreadr   
safe_startr,   readytimesleepr8   s    r3   r,   zCherootWebCase.startN   sf     	 9:::@@BBB.& 	JsOOO .& 	 	 	 	 	r5   c                 v    | j                                          t          | dd          }|r |             dS dS )zTerminate HTTP server.teardownN)r   r7   r   )r-   tds     r3   r7   zCherootWebCase.stopU   sJ     	S*d++ 	BDDDDD	 	r5      Nc                     || j         }||k    r||z
  }n||z
  }|t          j        |          k     st          |d|d|d          dS )z2Assert ``abs(dt1 - dt2)`` is within ``Y`` seconds.N)secondsz and z are not within z	 seconds.)date_tolerancedatetime	timedeltaAssertionError)selfdt1dt2rG   diffs        r3   assertEqualDateszCherootWebCase.assertEqualDates_   sw    ?)G999DD9Dh(99999 ccc777$   :9r5   N)__name__
__module____qualname____doc__script_namer   r&   r   Serverr   
HTTPServerr   classmethodr4   r9   r,   r7   rH   rP   r   r5   r3   r	   r	      s        00KF #.+ 
   [@   [
   [   [ N     r5   r	   c                       e Zd ZdZd ZdS )RequestzHTTP request container.c                     || _         dS )zInitialize HTTP request.N)environ)rL   r]   s     r3   __init__zRequest.__init__r   s    r5   N)rR   rS   rT   rU   r^   r   r5   r3   r[   r[   o   s)        !!    r5   r[   c                       e Zd ZdZd Zd ZdS )ResponsezHTTP response container.c                 4    d| _         ddi| _        d| _        dS )zInitialize HTTP response.z200 OKzContent-Typez	text/htmlN)statusheadersbodyrL   s    r3   r^   zResponse.__init__z   s     &4			r5   c                     | j         g S t          | j         t                    r| j                             d          gS t          | j         t                    r| j         gS d | j         D             S )z'Generate iterable response body object.N
iso-8859-1c                 8    g | ]}|                     d           S )rg   )encode).0xs     r3   
<listcomp>z#Response.output.<locals>.<listcomp>   s$    >>>qAHH\**>>>r5   )rd   
isinstancestrri   bytesre   s    r3   outputzResponse.output   sp    9I	3'' 	?I$$\2233	5)) 	?I;>>DI>>>>r5   N)rR   rS   rT   rU   r^   rp   r   r5   r3   r`   r`   w   s8        ""  	? 	? 	? 	? 	?r5   r`   c                       e Zd ZdZd ZdS )
ControllerzWSGI app for tests.c                 4   t          |          t                      c}	 | j        |d                  } ||          }|t          fddD                       si|_        	 j                            dt          t          |                               nC# t          $ r t          |t          j                  s Y nw xY wn# t          $ r
 d_        Y nw xY w |j        j                                                                                   S )zWSGI request handler.	PATH_INFONc              3   L   K   | ]}j                             |          V  d S rQ   )rb   
startswith)rj   status_coderesps     r3   	<genexpr>z&Controller.__call__.<locals>.<genexpr>   sG        # K**;77     r5   )204304zContent-Lengthz404 Not Found)r[   r`   handlersanyrd   rc   
setdefaultrn   len	TypeErrorrm   typesGeneratorTypeKeyErrorrb   itemsrp   )rL   r]   start_responsereqhandlerrp   rx   s         @r3   __call__zController.__call__   sS   G$$hjj	T	 mGK$89G WS$''F"    '5     # #	L++,<c#f++>N>NOOOO    %fe.ABB    	* 	* 	*)DKKK	*" 	t{DL$6$6$8$8999{{}}s#   C %5B %CCCCN)rR   rS   rT   rU   r   r   r5   r3   rr   rr      s)            r5   rr   )rU   rI   loggingr)   r!   r@   r<   r   http.clientr   cheroot.serverr&   cheroot.wsgicheroot.testr   	getLoggerrR   r$   pathabspathdirname__file__thisdirr   WebCaser	   r[   r`   rr   r   r5   r3   <module>r      s   ? ?   				 



                              g!!
'//"'//(33
4
4 &
 
P P P P PW_ P P Pf       ? ? ? ? ? ? ? ?*         r5   