o
    JXhC                     @   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Zd dlZd dlmZ d dlmZ d dlmZmZ zd dlZW n eyf   dZY nw 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" dd Z#e#dZ$e#dZ%e#dZ&e#dZ'ddddddddddd
Z(dd Z)d d!d"d#Z*d$d% Z+d&d' Z,e j-fd(d)Z.d*d+ Z/G d,d- d-eZ0G d.d/ d/eZ1G d0d1 d1Z2G d2d3 d3e2e1Z3d4d5d6d7Z4e5ed8r<G d9d: d:e	j6eZ7G d;d< d<e7eZ8G d=d> d>e8Z9G d?d@ d@e2e9Z:dAdB Z;ej<dCdD Z=ej<d4d5dEdFZ>ej<dGd d4dHdIdJZ?dKdL Z@G dMdN dNejAZBG dOdP dPejCZDdQdR ZEG dSdT dTeFZGG dUdV dVZHdWdX ZIG dYdZ dZejJZJej<d[d\ ZKejLejMejNfd]d^ZOdS )_    N)mock)
HTTPServer)WSGIRequestHandler
WSGIServer)base_events)events)format_helpers)futures)tasks)logger)support)threading_helperc                 C   sZ   t tdrtjtj| }tj|r|S tjtjtd| }tj|r)|S t	| )NTEST_HOME_DIRz..)
hasattrr   ospathjoinr   isfiledirname__file__FileNotFoundError)filenamefullname r   A/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/utils.py	data_file(   s   
r   zssl_cert.pemzssl_key.pemzkeycert3.pemzpycacert.pem)z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl))ZcountryNameZXY))organizationNamezPython Software Foundation CA))
commonNamezour-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTZCB2D80995A69525C)r   ))ZlocalityNamezCastle Anthrax))r   zPython Software Foundation))r   	localhost))ZDNSr      )
ZOCSPZ	caIssuersZcrlDistributionPointsZissuerZnotAfterZ	notBeforeZserialNumbersubjectZsubjectAltNameversionc                  C   s*   t t j} | tt d| _t j| _| S NF)	ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainONLYCERTONLYKEYcheck_hostname	CERT_NONEverify_mode)Zserver_contextr   r   r   simple_server_sslcontextJ   s
   r-   Tdisable_verifyc                 C   s"   t t j}d|_| rt j|_|S r#   )r$   r%   ZPROTOCOL_TLS_CLIENTr*   r+   r,   )r/   Zclient_contextr   r   r   simple_client_sslcontextR   s
   r0   c                   C   s   t d u rd S tddS )NTr.   )r$   r0   r   r   r   r   dummy_ssl_contextZ   s   
r1   c                 C   sB   dd }| }|  |}d|_z| | W |  d S |  w )Nc                      s   d S Nr   r   r   r   r   onceb   s   zrun_briefly.<locals>.onceF)Zcreate_taskZ_log_destroy_pendingrun_until_completeclose)loopr3   gentr   r   r   run_brieflya   s   
r9   c                 C   sT   t  | }| s(|d ur|t   }|dkrt | td | r	d S d S )Nr   gMbP?)time	monotonicr	   TimeoutErrorr4   r
   sleep)r6   Zpredtimeoutdeadliner   r   r   	run_untilo   s   r@   c                 C   s   	 |  | j |   d S r2   )Z	call_soonstopZrun_foreverr6   r   r   r   run_oncey   s   rC   c                   @      e Zd Zdd Zdd ZdS )SilentWSGIRequestHandlerc                 C   s   t  S r2   )ioStringIOselfr   r   r   
get_stderr   s   z#SilentWSGIRequestHandler.get_stderrc                 G      d S r2   r   )rI   formatargsr   r   r   log_message      z$SilentWSGIRequestHandler.log_messageN)__name__
__module____qualname__rJ   rN   r   r   r   r   rE      s    rE   c                       s*   e Zd ZejZ fddZdd Z  ZS )SilentWSGIServerc                    s"   t   \}}|| j ||fS r2   superget_request
settimeoutrequest_timeoutrI   requestZclient_addr	__class__r   r   rV      s   zSilentWSGIServer.get_requestc                 C   rK   r2   r   rI   rZ   client_addressr   r   r   handle_error   rO   zSilentWSGIServer.handle_error)	rP   rQ   rR   r   LOOPBACK_TIMEOUTrX   rV   r_   __classcell__r   r   r[   r   rS      s    rS   c                   @      e Zd Zdd ZdS )SSLWSGIServerMixinc                 C   sX   t t j}|tt |j|dd}z| |||  |  W d S  t	y+   Y d S w )NT)Zserver_side)
r$   r%   r&   r'   r(   r)   Zwrap_socketZRequestHandlerClassr5   OSError)rI   rZ   r^   contextssockr   r   r   finish_request   s   z!SSLWSGIServerMixin.finish_requestN)rP   rQ   rR   rg   r   r   r   r   rc          rc   c                   @      e Zd ZdS )SSLWSGIServerNrP   rQ   rR   r   r   r   r   rj          rj   F)use_sslc                 #   s    dd fdd}|r|n|}|| t   |  j _tj fddd}|  z V  W       |	  d S       |	  w )Nc                 s   sD    t | d }|r | d t|d}|V  |t|8 }|s	d S d S )NZCONTENT_LENGTHz
wsgi.inputi   )intreadminlen)environsizedatar   r   r   r6      s   z_run_test_server.<locals>.loopc                    s.   d}dg}||| | d dkr | S dgS )Nz200 OK)zContent-typez
text/plainZ	PATH_INFOz/loops   Test messager   )rr   Zstart_responsestatusZheadersrB   r   r   app   s   
z_run_test_server.<locals>.appc                      s    j ddS )Ng?)Zpoll_interval)Zserve_foreverr   )httpdr   r   <lambda>   s    z"_run_test_server.<locals>.<lambda>)target)
rE   Zset_appZserver_addressaddress	threadingThreadstartshutdownZserver_closer   )rz   rm   
server_clsserver_ssl_clsrv   Zserver_classZserver_threadr   )rw   r6   r   _run_test_server   s&   



r   AF_UNIXc                   @   rb   )UnixHTTPServerc                 C   s   t j|  d| _d| _d S )N	127.0.0.1P   )socketserverUnixStreamServerserver_bindZserver_nameZserver_portrH   r   r   r   r      s   
zUnixHTTPServer.server_bindN)rP   rQ   rR   r   r   r   r   r   r      rh   r   c                       s*   e Zd ZejZdd Z fddZ  ZS )UnixWSGIServerc                 C   s   t |  |   d S r2   )r   r   Zsetup_environrH   r   r   r   r      s   
zUnixWSGIServer.server_bindc                    s"   t   \}}|| j |dfS )N)r    rT   rY   r[   r   r   rV      s   zUnixWSGIServer.get_request)	rP   rQ   rR   r   r`   rX   r   rV   ra   r   r   r[   r   r      s    r   c                   @   rb   )SilentUnixWSGIServerc                 C   rK   r2   r   r]   r   r   r   r_      rO   z!SilentUnixWSGIServer.handle_errorN)rP   rQ   rR   r_   r   r   r   r   r      rh   r   c                   @   ri   )UnixSSLWSGIServerNrk   r   r   r   r   r      rl   r   c                  C   s2   t  } | jW  d    S 1 sw   Y  d S r2   )tempfileNamedTemporaryFilename)filer   r   r   gen_unix_socket_path   s   
$r   c                  c   sZ    t  } z| V  W zt|  W d S  ty   Y d S w zt|  W w  ty,   Y w w r2   )r   r   unlinkrd   )r   r   r   r   unix_socket_path  s   r   c                 c   sD    t  }t|| ttdE d H  W d    d S 1 sw   Y  d S N)rz   rm   r   r   )r   r   r   r   )rm   r   r   r   r   run_test_unix_server  s   "r   r   hostportrm   c                 c   s     t | |f|ttdE d H  d S r   )r   rS   rj   r   r   r   r   run_test_server  s
   
r   c                 C   sL   i }t | D ]}|dr|drqtd d||< qtd| f| j | S )N__)return_valueZTestProtocol)dir
startswithendswithMockCallbacktype	__bases__)baseZdctr   r   r   r   make_test_protocol  s   r   c                   @   s6   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 r2   keysrH   r   r   r   __init__(     
zTestSelector.__init__Nc                 C   s   t |d||}|| j|< |S )Nr   )	selectorsSelectorKeyr   )rI   fileobjr   rt   keyr   r   r   register+  s   
zTestSelector.registerc                 C   s   | j |S r2   )r   pop)rI   r   r   r   r   
unregister0     zTestSelector.unregisterc                 C   s   g S r2   r   )rI   r>   r   r   r   select3  rO   zTestSelector.selectc                 C      | j S r2   r   rH   r   r   r   get_map6     zTestSelector.get_mapr2   )rP   rQ   rR   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d"d# Z fd$d%Zdd& fd'd(
Zd)d* Zd+d, Z  ZS ).TestLoopNc                    sv   t    |d u rdd }d| _nd| _| | _t| j d| _d| _g | _t | _	i | _
i | _|   t | _d S )Nc                   s   s    d V  d S r2   r   r   r   r   r   r7   Q  s   
zTestLoop.__init__.<locals>.genFTr   g&.>)rU   r   _check_on_close_gennext_timeZ_clock_resolution_timersr   	_selectorreaderswritersreset_countersweakrefWeakValueDictionary_transports)rI   r7   r[   r   r   r   M  s   

zTestLoop.__init__c                 C   r   r2   r   rH   r   r   r   r:   d  r   zTestLoop.timec                 C   s   	 |r|  j |7  _ d S d S r2   r   )rI   advancer   r   r   advance_timeg  s   zTestLoop.advance_timec                    s@   t    | jrz| jd W td ty   Y d S w d S )Nr   zTime generator is not finished)rU   r5   r   r   sendStopIterationAssertionErrorrH   r[   r   r   r5   l  s   
zTestLoop.closec                 G      t ||| d | j|< d S r2   )r   Handler   rI   fdcallbackrM   r   r   r   _add_readerv     zTestLoop._add_readerc                 C   ,   | j |  d7  < || jv r| j|= dS dS N   TF)remove_reader_countr   rI   r   r   r   r   _remove_readery  
   
zTestLoop._remove_readerc                 G   sh   || j vrtd| d| j | }|j|kr"td|j d| |j|kr2td|j d| d S )Nfd  is not registeredzunexpected callback:  != zunexpected callback args: )r   r   	_callback_argsrI   r   r   rM   handler   r   r   assert_reader  s   



zTestLoop.assert_readerc                 C   s   || j v rtd| dd S )Nr   z is registered)r   r   r   r   r   r   assert_no_reader  s   
zTestLoop.assert_no_readerc                 G   r   r2   )r   r   r   r   r   r   r   _add_writer  r   zTestLoop._add_writerc                 C   r   r   )remove_writer_countr   r   r   r   r   _remove_writer  r   zTestLoop._remove_writerc                 G   sd   || j vrtd| d| j | }|j|kr!t|jd||j|kr0t|jd|d S )Nr   r   r   )r   r   r   r   r   r   r   r   assert_writer  s   



zTestLoop.assert_writerc              
   C   st   t |ts zt| }W n tttfy   td|d w z| j| }W n
 ty1   Y d S w t	d||)NzInvalid file object: {!r}z.File descriptor {!r} is used by transport {!r})

isinstancern   filenoAttributeError	TypeError
ValueErrorrL   r   KeyErrorRuntimeError)rI   r   Z	transportr   r   r   _ensure_fd_no_transport  s(   
z TestLoop._ensure_fd_no_transportc                 G       	 |  | | j||g|R  S r2   )r   r   r   r   r   r   
add_reader     
zTestLoop.add_readerc                 C      	 |  | | |S r2   )r   r   r   r   r   r   remove_reader     

zTestLoop.remove_readerc                 G   r   r2   )r   r   r   r   r   r   
add_writer  r   zTestLoop.add_writerc                 C   r   r2   )r   r   r   r   r   r   remove_writer  r   zTestLoop.remove_writerc                 C   s   t t| _t t| _d S r2   )collectionsdefaultdictrn   r   r   rH   r   r   r   r     s   zTestLoop.reset_countersc                    s6   t    | jD ]}| j|}| | qg | _d S r2   )rU   	_run_oncer   r   r   r   )rI   whenr   r[   r   r   r     s
   


zTestLoop._run_once)re   c                   s(   | j | t j||g|R d|iS )Nre   )r   appendrU   call_at)rI   r   r   re   rM   r[   r   r   r     s   zTestLoop.call_atc                 C   rK   r2   r   )rI   Z
event_listr   r   r   _process_events  rO   zTestLoop._process_eventsc                 C   rK   r2   r   rH   r   r   r   _write_to_self  rO   zTestLoop._write_to_selfr2   )rP   rQ   rR   r   r:   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   r[   r   r   :  s.    
	r   c                  K   s   t jdddgi| S )Nspec__call__r   )r   ZMock)kwargsr   r   r   r     s   r   c                   @   s   e Zd Z	 dd ZdS )MockPatternc                 C   s   t tt| |tjS r2   )boolresearchstrSrI   otherr   r   r   __eq__  s   zMockPattern.__eq__N)rP   rQ   rR   r  r   r   r   r   r     s    r   c                   @   rD   )MockInstanceOfc                 C   s
   || _ d S r2   )_type)rI   r   r   r   r   r     r   zMockInstanceOf.__init__c                 C   s   t || jS r2   )r   r  r  r   r   r   r    r   zMockInstanceOf.__eq__N)rP   rQ   rR   r   r  r   r   r   r   r    s    r  c                 C   s$   t | }|d u rtd| f |S )Nzunable to get the source of %r)r   Z_get_function_sourcer   )funcsourcer   r   r   get_function_source  s   
r  c                   @   s@   e Zd Zedd ZddddZddd	Zd
d Zdd ZdS )TestCasec                 C   s   | j d ur|  s| |   n| j jdd |   t }|d urKz| }W n
 t	y4   Y d S w t
|tjrMt|j }|D ]
}|  qDd S d S d S )NT)wait)Z_default_executorZ	is_closedr4   Zshutdown_default_executorr~   r5   r   Zmaybe_get_event_loop_policyZget_child_watcherNotImplementedErrorr   asyncioZThreadedChildWatcherlistZ_threadsvaluesr   )r6   ZpolicyZwatcherthreadsthreadr   r   r   
close_loop   s&   

zTestCase.close_loopT)cleanupc                C   s4   |d u rt dtd  |r| | j| d S d S )Nzloop is None)r   r   set_event_loopZ
addCleanupr  )rI   r6   r  r   r   r   r    s   
zTestCase.set_event_loopNc                 C   s   t |}| | |S r2   )r   r  )rI   r7   r6   r   r   r   new_test_loop  s   
zTestCase.new_test_loopc                 C   s   t  | _d S r2   )r   Zthreading_setup_thread_cleanuprH   r   r   r   setUp"  s   zTestCase.setUpc                 C   s:   t d  | t d |   tj| j  t	
  d S )N)NNN)r   r  ZassertEqualsysexc_infoZ
doCleanupsr   Zthreading_cleanupr  r   reap_childrenrH   r   r   r   tearDown%  s
   
zTestCase.tearDownr2   )	rP   rQ   rR   staticmethodr  r  r  r  r  r   r   r   r   r    s    

r  c               	   c   s>    	 t j} zt tjd  d V  W t |  d S t |  w )Nr   )r   levelsetLevelloggingCRITICAL)Z	old_levelr   r   r   disable_logger1  s   r#  c                 C   s,   	 t tj}| |_||_||_d|j_|S )Ng        )r   Z	MagicMocksocketprotor   family
gettimeoutr   )r%  r   r&  sockr   r   r   mock_nonblocking_socket?  s   r)  )Pr  r   
contextlibrF   r!  r   r   r   r$  r   r  r   r{   r:   Zunittestr   r   Zhttp.serverr   Zwsgiref.simple_serverr   r   r$   ImportErrorr   r   r   r	   r
   Zasyncio.logr   testr   Ztest.supportr   r   r(   r)   ZSIGNED_CERTFILEZ
SIGNING_CAZPEERCERTr-   r0   r1   r9   ZSHORT_TIMEOUTr@   rC   rE   rS   rc   rj   r   r   r   r   r   r   r   r   contextmanagerr   r   r   r   BaseSelectorr   ZBaseEventLoopr   r   r  r   r  r  r  r#  IPPROTO_TCPSOCK_STREAMAF_INETr)  r   r   r   r   <module>   s    
	#

 &2
