<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]8                 @   s  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
 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 m Z y d  d l Z Wn e k
 rd Z Yn Xd d l 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 d d l m Z d d l m  Z  d  d l! m" Z" e j# d k rd d l$ m% Z% n d  d l m% Z% d d   Z& d d   Z' d d d  Z( d d   Z) Gd d   d e  Z* Gd d   d e  Z+ Gd d   d  Z, Gd  d!   d! e, e+  Z- d" d# d$ d%  Z. e/ e d&  rGd' d(   d( e j0 e  Z1 Gd) d*   d* e1 e  Z2 Gd+ d,   d, e2  Z3 Gd- d.   d. e, e3  Z4 d/ d0   Z5 e j6 d1 d2    Z7 e j6 d" d# d3 d4   Z8 e j6 d5 d6 d7 d  d" d# d8 d9   Z9 d: d;   Z: Gd< d=   d= e j;  Z< Gd> d?   d? e j=  Z> d@ dA   Z? GdB dC   dC e@  ZA dD dE   ZB GdF dG   dG e jC  ZC e j6 dH dI    ZD e jE e jF e jG dJ dK  ZH dL dM   ZI d S)N    N)mock)
HTTPServer)WSGIRequestHandler
WSGIServer   )base_events)compat)events)futures)	selectors)tasks)	coroutine)logger)supportwin32)
socketpairc               C   s$   t  d  k r d  St  j t  j  Sd  S)N)sslZ
SSLContextZPROTOCOL_SSLv23 r   r   //opt/alt/python35/lib64/python3.5/test_utils.pydummy_ssl_context-   s    r   c          
   C   sV   t  d d    } |   } |  j |  } d | _ z |  j |  Wd  | j   Xd  S)Nc               S   s   d  S)Nr   r   r   r   r   once5   s    zrun_briefly.<locals>.onceF)r   Zcreate_taskZ_log_destroy_pendingrun_until_completeclose)loopr   gentr   r   r   run_briefly4   s    		r      c             C   st   t  j    | } x] |   so | d  k	 rP | t  j    } | d k rP t j    |  j t j d d |   q Wd  S)Nr   gMbP?r   )timer
   TimeoutErrorr   r   sleep)r   Zpredtimeoutdeadliner   r   r   	run_untilC   s    r#   c             C   s   |  j  |  j  |  j   d  S)N)Z	call_soonstopZrun_forever)r   r   r   r   run_onceM   s    r%   c               @   s(   e  Z d  Z d d   Z d d   Z d S)SilentWSGIRequestHandlerc             C   s
   t  j   S)N)ioStringIO)selfr   r   r   
get_stderrZ   s    z#SilentWSGIRequestHandler.get_stderrc             G   s   d  S)Nr   )r)   formatargsr   r   r   log_message]   s    z$SilentWSGIRequestHandler.log_messageN)__name__
__module____qualname__r*   r-   r   r   r   r   r&   X   s   r&   c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)SilentWSGIServer   c                s/   t    j   \ } } | j |  j  | | f S)N)superget_request
settimeoutrequest_timeout)r)   requestclient_addr)	__class__r   r   r4   e   s    zSilentWSGIServer.get_requestc             C   s   d  S)Nr   )r)   r7   client_addressr   r   r   handle_errorj   s    zSilentWSGIServer.handle_error)r.   r/   r0   r6   r4   r;   r   r   )r9   r   r1   a   s   r1   c               @   s   e  Z d  Z d d   Z d S)SSLWSGIServerMixinc             C   s   t  j j t  j j t  d d  } t  j j |  s] t  j j t  j j t  j  d d  } t  j j | d  } t  j j | d  } t j | d | d | d	 d
 } y! |  j | | |   | j	   Wn t
 k
 r Yn Xd  S)Nz..ZteststestZtest_asynciozssl_key.pemzssl_cert.pemkeyfilecertfileZserver_sideT)ospathjoindirname__file__isdirr   Zwrap_socketZRequestHandlerClassr   OSError)r)   r7   r:   herer>   r?   Zssockr   r   r   finish_requestp   s    $	z!SSLWSGIServerMixin.finish_requestN)r.   r/   r0   rH   r   r   r   r   r<   n   s   r<   c               @   s   e  Z d  Z d S)SSLWSGIServerN)r.   r/   r0   r   r   r   r   rI      s   rI   use_sslFc          
   #   s   d d   } | r | n | } | |  t       j |    j   _ t j d   f d d    } | j   z	   VWd    j     j   | j	   Xd  S)Nc             S   s#   d } d g } | | |  d g S)Nz200 OKContent-type
text/plains   Test message)rK   rL   r   )environZstart_responsestatusZheadersr   r   r   app   s    	z_run_test_server.<locals>.apptargetc                  s     j  d d  S)NZpoll_intervalg?)Zserve_foreverr   )httpdr   r   <lambda>   s    z"_run_test_server.<locals>.<lambda>)
r&   Zset_appZserver_addressaddress	threadingThreadstartshutdownZserver_closerB   )rS   rJ   
server_clsserver_ssl_clsrO   Zserver_classZserver_threadr   )rQ   r   _run_test_server   s    	
	

rZ   AF_UNIXc               @   s   e  Z d  Z d d   Z d S)UnixHTTPServerc             C   s&   t  j j |   d |  _ d |  _ d  S)Nz	127.0.0.1P   )socketserverUnixStreamServerserver_bindZserver_nameZserver_port)r)   r   r   r   r`      s    	zUnixHTTPServer.server_bindN)r.   r/   r0   r`   r   r   r   r   r\      s   r\   c                   s4   e  Z d  Z d Z d d   Z   f d d   Z   S)UnixWSGIServerr2   c             C   s   t  j |   |  j   d  S)N)r\   r`   Zsetup_environ)r)   r   r   r   r`      s    zUnixWSGIServer.server_bindc                s/   t    j   \ } } | j |  j  | d f S)N	127.0.0.1 )rb   rc   )r3   r4   r5   r6   )r)   r7   r8   )r9   r   r   r4      s    zUnixWSGIServer.get_request)r.   r/   r0   r6   r`   r4   r   r   )r9   r   ra      s   ra   c               @   s   e  Z d  Z d d   Z d S)SilentUnixWSGIServerc             C   s   d  S)Nr   )r)   r7   r:   r   r   r   r;      s    z!SilentUnixWSGIServer.handle_errorN)r.   r/   r0   r;   r   r   r   r   rd      s   rd   c               @   s   e  Z d  Z d S)UnixSSLWSGIServerN)r.   r/   r0   r   r   r   r   re      s   re   c           	   C   s!   t  j    }  |  j SWd  QRXd  S)N)tempfileNamedTemporaryFilename)filer   r   r   gen_unix_socket_path   s    rj   c              c   s@   t    }  z	 |  VWd  y t j |   Wn t k
 r: Yn XXd  S)N)rj   r@   unlinkrF   )rA   r   r   r   unix_socket_path   s    		rl   c             c   s;   t    + } t d | d |  d t d t  Ed  HWd  QRXd  S)NrS   rJ   rX   rY   )rl   rZ   rd   re   )rJ   rA   r   r   r   run_test_unix_server   s    rm   hostz	127.0.0.1portc          	   c   s.   t  d |  | f d | d t d t  Ed  Hd  S)NrS   rJ   rX   rY   )rZ   r1   rI   )rn   ro   rJ   r   r   r   run_test_server   s    rp   c             C   sn   i  } xH t  |   D]: } | j d  r: | j d  r: q t d d   | | <q Wt d |  f |  j |    S)N__return_valueZTestProtocol)dir
startswithendswithMockCallbacktype	__bases__)basedctrh   r   r   r   make_test_protocol   s    r{   c               @   sO   e  Z d  Z d d   Z d d d  Z d d   Z d d	   Z d
 d   Z d S)TestSelectorc             C   s   i  |  _  d  S)N)keys)r)   r   r   r   __init__   s    zTestSelector.__init__Nc             C   s)   t  j | d | |  } | |  j | <| S)Nr   )r   SelectorKeyr}   )r)   fileobjr	   datakeyr   r   r   register   s    zTestSelector.registerc             C   s   |  j  j |  S)N)r}   pop)r)   r   r   r   r   
unregister   s    zTestSelector.unregisterc             C   s   g  S)Nr   )r)   r!   r   r   r   select  s    zTestSelector.selectc             C   s   |  j  S)N)r}   )r)   r   r   r   get_map  s    zTestSelector.get_map)r.   r/   r0   r~   r   r   r   r   r   r   r   r   r|      s
   r|   c                   s  e  Z d  Z d   f d d  Z d d   Z d 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 d d   Z d d   Z d d   Z d d   Z d  d!   Z   f d" d#   Z   f d$ d%   Z d& d'   Z d( d)   Z   S)*TestLoopNc                s   t    j   | d  k r1 d d   } d |  _ n	 d |  _ |   |  _ t |  j  d |  _ d |  _ g  |  _ t   |  _	 i  |  _
 i  |  _ |  j   t j   |  _ d  S)Nc               s   s	   d  Vd  S)Nr   r   r   r   r   r   !  s    zTestLoop.__init__.<locals>.genFTr   g&.>)r3   r~   _check_on_close_gennext_timeZ_clock_resolution_timersr|   	_selectorreaderswritersreset_countersweakrefWeakValueDictionary_transports)r)   r   )r9   r   r   r~     s    						
zTestLoop.__init__c             C   s   |  j  S)N)r   )r)   r   r   r   r   4  s    zTestLoop.timec             C   s   | r |  j  | 7_  d  S)N)r   )r)   advancer   r   r   advance_time7  s    zTestLoop.advance_timec                sO   t    j   |  j rK y |  j j d  Wn t k
 r> Yn Xt d   d  S)Nr   zTime generator is not finished)r3   r   r   r   sendStopIterationAssertionError)r)   )r9   r   r   r   <  s    	zTestLoop.closec             G   s    t  j | | |   |  j | <d  S)N)r	   Handler   )r)   fdcallbackr,   r   r   r   _add_readerF  s    zTestLoop._add_readerc             C   s6   |  j  | d 7<| |  j k r. |  j | =d Sd Sd  S)Nr   TF)remove_reader_countr   )r)   r   r   r   r   _remove_readerI  s
    
zTestLoop._remove_readerc             G   s   |  j  | } d  S)N)r   )r)   r   r   r,   handler   r   r   assert_readerQ  s    zTestLoop.assert_readerc             G   s    t  j | | |   |  j | <d  S)N)r	   r   r   )r)   r   r   r,   r   r   r   _add_writerY  s    zTestLoop._add_writerc             C   s6   |  j  | d 7<| |  j k r. |  j | =d Sd Sd  S)Nr   TF)remove_writer_countr   )r)   r   r   r   r   _remove_writer\  s
    
zTestLoop._remove_writerc             G   s   |  j  | } d  S)N)r   )r)   r   r   r,   r   r   r   r   assert_writerd  s    zTestLoop.assert_writerc             C   sB   y |  j  | } Wn t k
 r% Yn Xt d j | |    d  S)Nz.File descriptor {!r} is used by transport {!r})r   KeyErrorRuntimeErrorr+   )r)   r   Z	transportr   r   r   _ensure_fd_no_transportl  s    z TestLoop._ensure_fd_no_transportc             G   s    |  j  |  |  j | | |  S)N)r   r   )r)   r   r   r,   r   r   r   
add_readerv  s    zTestLoop.add_readerc             C   s   |  j  |  |  j |  S)N)r   r   )r)   r   r   r   r   remove_reader{  s    zTestLoop.remove_readerc             G   s    |  j  |  |  j | | |  S)N)r   r   )r)   r   r   r,   r   r   r   
add_writer  s    zTestLoop.add_writerc             C   s   |  j  |  |  j |  S)N)r   r   )r)   r   r   r   r   remove_writer  s    zTestLoop.remove_writerc             C   s(   t  j t  |  _ t  j t  |  _ d  S)N)collectionsdefaultdictintr   r   )r)   r   r   r   r     s    zTestLoop.reset_countersc                sM   t    j   x0 |  j D]% } |  j j |  } |  j |  q Wg  |  _ d  S)N)r3   	_run_oncer   r   r   r   )r)   whenr   )r9   r   r   r     s
    zTestLoop._run_oncec                s&   |  j  j |  t   j | | |  S)N)r   appendr3   call_at)r)   r   r   r,   )r9   r   r   r     s    zTestLoop.call_atc             C   s   d  S)Nr   )r)   Z
event_listr   r   r   _process_events  s    zTestLoop._process_eventsc             C   s   d  S)Nr   )r)   r   r   r   _write_to_self  s    zTestLoop._write_to_self)r.   r/   r0   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r9   r   r   
  s(   

r   c              K   s   t  j d d g |   S)Nspec__call__)r   ZMock)kwargsr   r   r   rv     s    rv   c               @   s   e  Z d  Z d d   Z d S)MockPatternc             C   s"   t  t j t |   | t j   S)N)boolresearchstrS)r)   otherr   r   r   __eq__  s    zMockPattern.__eq__N)r.   r/   r0   r   r   r   r   r   r     s   	r   c             C   s2   t  j |   } | d  k r. t d |  f   | S)Nzunable to get the source of %r)r	   Z_get_function_source
ValueError)funcsourcer   r   r   get_function_source  s    r   c               @   sj   e  Z d  Z d d d d  Z d d d  Z d d	   Z d
 d   Z d d   Z e j	 sf d d   Z
 d S)TestCasecleanupTc            C   s'   t  j d   | r# |  j | j  d  S)N)r	   set_event_loopZ
addCleanupr   )r)   r   r   r   r   r   r     s    zTestCase.set_event_loopNc             C   s   t  |  } |  j |  | S)N)r   r   )r)   r   r   r   r   r   new_test_loop  s    zTestCase.new_test_loopc             C   s   |  j  t _  d  S)N)_get_running_loopr	   )r)   r   r   r   unpatch_get_running_loop  s    z!TestCase.unpatch_get_running_loopc             C   s.   t  j |  _ d d   t  _ t j   |  _ d  S)Nc               S   s   d  S)Nr   r   r   r   r   rR     s    z TestCase.setUp.<locals>.<lambda>)r	   r   r   Zthreading_setup_thread_cleanup)r)   r   r   r   setUp  s    zTestCase.setUpc             C   sU   |  j    t j d   |  j t j   d  |  j   t j |  j	   t j
   d  S)N)NNN)r   r	   r   ZassertEqualsysexc_infoZ
doCleanupsr   Zthreading_cleanupr   Zreap_children)r)   r   r   r   tearDown  s    

zTestCase.tearDownc             O   s   Gd d   d  } |   S)Nc               @   s(   e  Z d  Z d d   Z d d   Z d S)z!TestCase.subTest.<locals>.EmptyCMc             S   s   d  S)Nr   )r)   r   r   r   	__enter__  s    z+TestCase.subTest.<locals>.EmptyCM.__enter__c             W   s   d  S)Nr   )r)   excr   r   r   __exit__  s    z*TestCase.subTest.<locals>.EmptyCM.__exit__N)r.   r/   r0   r   r   r   r   r   r   EmptyCM  s   r   r   )r)   r,   r   r   r   r   r   subTest  s    zTestCase.subTest)r.   r/   r0   r   r   r   r   r   r   ZPY34r   r   r   r   r   r     s   	r   c              c   s;   t  j }  z t  j t j d  d  VWd  t  j |   Xd  S)Nr   )r   levelsetLevelloggingCRITICAL)Z	old_levelr   r   r   disable_logger  s
    		r   c             C   s=   t  j t j  } |  | _ | | _ | | _ d | j _ | S)Ng        )r   Z	MagicMocksocketprotorw   family
gettimeoutrr   )r   rw   r   sockr   r   r   mock_nonblocking_socket  s    			r   c               C   s   t  j d d d S)Nz'asyncio.sslproto._is_sslproto_availablerr   F)r   Zpatchr   r   r   r   force_legacy_ssl_support  s    r   )Jr   
contextlibr'   r   r@   r   r   r^   r   rf   rT   r   Zunittestr   r   Zhttp.serverr   Zwsgiref.simple_serverr   r   r   ImportErrorrc   r   r   r	   r
   r   r   Z
coroutinesr   logr   r=   r   platformZwindows_utilsr   r   r   r#   r%   r&   r1   r<   rI   rZ   hasattrr_   r\   ra   rd   re   rj   contextmanagerrl   rm   rp   r{   BaseSelectorr|   ZBaseEventLoopr   rv   r   r   r   r   r   IPPROTO_TCPSOCK_STREAMAF_INETr   r   r   r   r   r   <module>   s~   
			
-
