o
    JXh5                     @   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	m
Z
 G dd dZG dd dZG dd dejZG d	d
 d
eZG dd deZdS )    N)supportc                   @   s   e Zd Zdd ZddddZdd Zd	d
 Zdd Zej	de
jdddddZej	e
jfddZdd Zdd Zejdd Zdd ZdS )FunctionalTestCaseMixinc                 C   s   t  S N)asyncioZnew_event_loopself r   F/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/functional.pynew_loop   s   z FunctionalTestCaseMixin.new_loopg{Gz?)delayc                C   s   | j t| d S r   )loopZrun_until_completer   sleep)r   r   r   r   r	   run_loop_briefly   s   z(FunctionalTestCaseMixin.run_loop_brieflyc                 C   s   | j | | j| d S r   )._FunctionalTestCaseMixin__unhandled_exceptionsappendr   Zdefault_exception_handler)r   r   contextr   r   r	   loop_exception_handler   s   z.FunctionalTestCaseMixin.loop_exception_handlerc                 C   s,   |   | _td  | j| j g | _d S r   )r
   r   r   set_event_loopZset_exception_handlerr   r   r   r   r   r	   setUp   s   


zFunctionalTestCaseMixin.setUpc              	   C   sn   z-| j   | jr#td t| j | d W td  d | _ d S W td  d | _ d S td  d | _ w )Nz2Unexpected calls to loop.call_exception_handler():z1unexpected calls to loop.call_exception_handler())r   closer   printpprintfailr   r   r   r   r   r	   tearDown    s   





z FunctionalTestCaseMixin.tearDownN   
   )familyaddrtimeoutbacklogmax_clientsc          	      C   s   |d u r(t tdr&|tjkr&t }|j}W d    n1 s w   Y  nd}tj|||d}|d u r8td|dkr@td|| t	| ||||S )NAF_UNIX)z	127.0.0.1r   )r   r   timeout is requiredr   #only blocking sockets are supported)
hasattrsocketr!   tempfileNamedTemporaryFilenamecreate_serverRuntimeError
settimeoutTestThreadedServer)	r   Zserver_progr   r   r   r   r    tmpsockr   r   r	   
tcp_server-   s    


z"FunctionalTestCaseMixin.tcp_serverc                 C   sF   t  |t j}|d u rtd|dkrtd|| t| |||S )Nr"   r   r#   )r%   SOCK_STREAMr*   r+   TestThreadedClient)r   Zclient_progr   r   r.   r   r   r	   
tcp_clientE   s   
z"FunctionalTestCaseMixin.tcp_clientc                 O   $   t tdst| j|dtji|S Nr!   r   )r$   r%   NotImplementedErrorr/   r!   r   argskwargsr   r   r	   unix_serverT      
z#FunctionalTestCaseMixin.unix_serverc                 O   r3   r4   )r$   r%   r5   r2   r!   r6   r   r   r	   unix_clientY   r:   z#FunctionalTestCaseMixin.unix_clientc                 c   s    t  ?}tj|d}z|V  W zt| W n ty"   Y nw zt| W w  ty3   Y w w W d    d S W d    d S 1 sGw   Y  d S )Nr.   )r&   TemporaryDirectoryospathjoinunlinkOSError)r   Ztdfnr   r   r	   unix_sock_name^   s&   
"z&FunctionalTestCaseMixin.unix_sock_namec              	   C   s(   z| j   W | | d S | | w r   )r   stopr   r   exr   r   r	   _abort_socket_testj   s   z*FunctionalTestCaseMixin._abort_socket_test)__name__
__module____qualname__r
   r   r   r   r   r%   AF_INETr   ZLOOPBACK_TIMEOUTr/   r2   r9   r;   
contextlibcontextmanagerrC   rG   r   r   r   r	   r      s(    

r   c                   @   s<   e Zd Zdd Zdd Zddddd	Zd
d Zdd ZdS )TestSocketWrapperc                 C   s
   || _ d S r   )_TestSocketWrapper__sockr   r.   r   r   r	   __init__x   s   
zTestSocketWrapper.__init__c                 C   sF   d}t ||k r!| |t | }|dkrt||7 }t ||k s|S )N    )lenrecvConnectionAbortedError)r   nbufdatar   r   r	   recv_all{   s   zTestSocketWrapper.recv_allFN)server_sideserver_hostnamec                C   sX   |j | j||dd}zz|  W n   |   W | j  n| j  w || _d S )NF)rZ   r[   Zdo_handshake_on_connect)Zwrap_socketrO   Zdo_handshaker   )r   Zssl_contextrZ   r[   Zssl_sockr   r   r	   	start_tls   s   
zTestSocketWrapper.start_tlsc                 C   s   t | j|S r   )getattrrO   )r   r(   r   r   r	   __getattr__      zTestSocketWrapper.__getattr__c                 C   s   d t| j| jS )Nz	<{} {!r}>)formattyperH   rO   r   r   r   r	   __repr__   s   zTestSocketWrapper.__repr__)rH   rI   rJ   rQ   rY   r\   r^   rb   r   r   r   r	   rN   v   s    
rN   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SocketThreadc                 C   s   d| _ |   d S NF)_activer?   r   r   r   r	   rD      s   zSocketThread.stopc                 C   s   |    | S r   )startr   r   r   r	   	__enter__   s   zSocketThread.__enter__c                 G   s   |    d S r   )rD   )r   excr   r   r	   __exit__   r_   zSocketThread.__exit__N)rH   rI   rJ   rD   rg   ri   r   r   r   r	   rc      s    rc   c                   @   s   e Zd Zdd Zdd ZdS )r1   c                 C   s:   t j| d d d d| _|| _|| _d| _|| _|| _d S )Nztest-clientT)		threadingThreadrQ   daemon_timeout_sockre   _prog_test)r   testr.   progr   r   r   r	   rQ      s   
zTestThreadedClient.__init__c              
   C   sJ   z|  t| j W d S  ty$ } z| j| W Y d }~d S d }~ww r   )ro   rN   rn   	Exceptionrp   rG   rE   r   r   r	   run   s   zTestThreadedClient.runN)rH   rI   rJ   rQ   rt   r   r   r   r	   r1      s    
r1   c                       sH   e Zd Zdd Z fddZdd Zdd Zd	d
 Zedd Z	  Z
S )r,   c                 C   sh   t j| d d d d| _d| _d| _|| _|| _|| _d| _	|| _
t \| _| _| jd || _d S )Nztest-serverTr   F)rj   rk   rQ   rl   _clientsZ_finished_clients_max_clientsrm   rn   re   ro   r%   
socketpair_s1_s2setblockingrp   )r   rq   r.   rr   r   r    r   r   r	   rQ      s   
zTestThreadedServer.__init__c                    s   z<| j r| j  dkr%z| j d W n ty   Y nw W t   d S W t   d S W t   d S W t   d S t   w )Ns   stop)ry   filenosendrA   superrD   r   	__class__r   r	   rD      s   zTestThreadedServer.stopc                 C   s   z7| j  | j d |   W d    n1 sw   Y  W | j  | j  d S W | j  | j  d S | j  | j  w rd   )rn   rz   _runrx   r   ry   r   r   r   r	   rt      s   



zTestThreadedServer.runc                 C   s  | j r| j| jkrd S t| j| jgg g | j\}}}| j|v r"d S | j|v rz	| j \}}W n ty9   Y q  t	yF   | j sEY d S  w |  jd7  _|
| j z| | | W d    n1 sgw   Y  W n ty } zd| _ z | j| w d }~ww | j sd S d S )Nr   F)re   ru   rv   selectrn   rx   rm   acceptBlockingIOErrorTimeoutErrorr+   _handle_clientrs   rp   rG   )r   rwxconnr   rF   r   r   r	   r      sB   


zTestThreadedServer._runc                 C   s   |  t| d S r   )ro   rN   rP   r   r   r	   r     s   z!TestThreadedServer._handle_clientc                 C   s
   | j  S r   )rn   getsocknamer   r   r   r	   r     s   
zTestThreadedServer.addr)rH   rI   rJ   rQ   rD   rt   r   r   propertyr   __classcell__r   r   r   r	   r,      s    
	"r,   )r   Zasyncio.eventsrL   r=   r   r   r%   r&   rj   rq   r   r   rN   rk   rc   r1   r,   r   r   r   r	   <module>   s    i(