
    <e5                         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          Z G d d          Z G d dej                  Z G d	 d
e          Z G d de          ZdS )    N)supportc                       e Zd Zd ZdddZd Zd Zd Zej	        de
j        d	d
ddZej	        e
j        fdZd Zd Zej        d             Zd ZdS )FunctionalTestCaseMixinc                 (    t          j                    S N)asyncionew_event_loopselfs    3/usr/lib/python3.11/test/test_asyncio/functional.pynew_loopz FunctionalTestCaseMixin.new_loop   s    %'''    g{Gz?)delayc                ^    | j                             t          j        |                     d S r   )looprun_until_completer   sleep)r   r   s     r   run_loop_brieflyz(FunctionalTestCaseMixin.run_loop_briefly   s(    	$$W]5%9%9:::::r   c                 n    | j                             |           | j                            |           d S r   )._FunctionalTestCaseMixin__unhandled_exceptionsappendr   default_exception_handler)r   r   contexts      r   loop_exception_handlerz.FunctionalTestCaseMixin.loop_exception_handler   s5    #**7333	++G44444r   c                     |                                  | _        t          j        d            | j                            | j                   g | _        d S r   )r   r   r   set_event_loopset_exception_handlerr   r   r
   s    r   setUpzFunctionalTestCaseMixin.setUp   sI    MMOO	t$$$	''(CDDD&(###r   c                 8   	 | j                                          | j        r=t          d           t	          j        | j                   |                     d           t          j        d            d | _         d S # t          j        d            d | _         w xY w)Nz2Unexpected calls to loop.call_exception_handler():z1unexpected calls to loop.call_exception_handler())r   closer   printpprintfailr   r   r
   s    r   tearDownz FunctionalTestCaseMixin.tearDown    s    
	IOO* OJKKKd9:::		MNNN "4(((DIII "4(((DIs   AA< <BN   
   )familyaddrtimeoutbacklogmax_clientsc                   |Zt          t          d          rC|t          j        k    r3t          j                    5 }|j        }d d d            n# 1 swxY w Y   nd}t          j        |||          }|t          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   server_progr'   r(   r)   r*   r+   tmpsocks	            r   
tcp_serverz"FunctionalTestCaseMixin.tcp_server-   s	    <vy)) (f.F.F022 $c8D$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (#DIII?4555a<<DEEE   !$Wk; ; 	;s   AAAc                     t          j         |t           j                  }|t          d          |dk    rt          d          |                    |           t	          | |||          S )Nr.   r   r/   )r1   SOCK_STREAMr6   r7   TestThreadedClient)r   client_progr'   r)   r;   s        r   
tcp_clientz"FunctionalTestCaseMixin.tcp_clientE   sq     }VV%788?4555a<<DEEE   !$W. . 	.r   c                 l    t          t          d          st           | j        |dt          j        i|S Nr-   r'   )r0   r1   NotImplementedErrorr<   r-   r   argskwargss      r   unix_serverz#FunctionalTestCaseMixin.unix_serverT   8    vy)) 	&%%tFV^FvFFFr   c                 l    t          t          d          st           | j        |dt          j        i|S rC   )r0   r1   rD   rA   r-   rE   s      r   unix_clientz#FunctionalTestCaseMixin.unix_clientY   rI   r   c              #   L  K   t          j                    5 }t          j                            |d          }	 |V  	 t          j        |           n:# t          $ r Y n.w xY w# 	 t          j        |           w # t          $ r Y w w xY wxY wd d d            d S # 1 swxY w Y   d S )Nr;   )r2   TemporaryDirectoryospathjoinunlinkOSError)r   tdfns      r   unix_sock_namez&FunctionalTestCaseMixin.unix_sock_name^   s     (** 	bb&))BIbMMMM   DIbMMMM   D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	si   !BA"AB
ABAB"B	$A98B	9
B	B	B	B		BB Bc                     	 | j                                          |                     |           d S # |                     |           w xY wr   )r   stopr#   r   exs     r   _abort_socket_testz*FunctionalTestCaseMixin._abort_socket_testj   s@    	INNIIbMMMMMDIIbMMMMs	   2 A	)__name__
__module____qualname__r   r   r   r   r$   r1   AF_INETr   LOOPBACK_TIMEOUTr<   rA   rH   rK   
contextlibcontextmanagerrU   rZ    r   r   r   r      s       ( ( ( )- ; ; ; ; ;5 5 5) ) )   !."3!; ; ; ; ;2 !."3. . . .G G G
G G G
 	 	 	    r   r   c                   4    e Zd Zd Zd ZddddZd Zd ZdS )	TestSocketWrapperc                     || _         d S r   )_TestSocketWrapper__sockr   r;   s     r   __init__zTestSocketWrapper.__init__x   s    r   c                     d}t          |          |k     rJ|                     |t          |          z
            }|dk    rt          ||z  }t          |          |k     J|S )Nr   )lenrecvConnectionAbortedError)r   nbufdatas       r   recv_allzTestSocketWrapper.recv_all{   sa    #hhll99QS\**Ds{{,,4KC	 #hhll
 
r   FN)server_sideserver_hostnamec                "   |                     | j        ||d          }	 |                                 n#  |                                  xY w	 | j                                         n# | j                                         w xY w|| _        d S )NF)rq   rr   do_handshake_on_connect)wrap_socketrf   do_handshaker    )r   ssl_contextrq   rr   ssl_socks        r   	start_tlszTestSocketWrapper.start_tls   s     **K[+$) + + +
	 !!####	NN $
 KDKs   5 A* AA* *Bc                 ,    t          | j        |          S r   )getattrrf   )r   r4   s     r   __getattr__zTestSocketWrapper.__getattr__   s    t{D)))r   c                 \    d                     t          |           j        | j                  S )Nz	<{} {!r}>)formattyper[   rf   r
   s    r   __repr__zTestSocketWrapper.__repr__   s#    !!$t**"5t{CCCr   )r[   r\   r]   rh   rp   ry   r|   r   rb   r   r   rd   rd   v   sv             $"&    &* * *D D D D Dr   rd   c                        e Zd Zd Zd Zd ZdS )SocketThreadc                 <    d| _         |                                  d S NF)_activerP   r
   s    r   rW   zSocketThread.stop   s    		r   c                 .    |                                   | S r   )startr
   s    r   	__enter__zSocketThread.__enter__   s    

r   c                 .    |                                   d S r   )rW   )r   excs     r   __exit__zSocketThread.__exit__   s    		r   N)r[   r\   r]   rW   r   r   rb   r   r   r   r      sA                r   r   c                       e Zd Zd Zd ZdS )r?   c                     t           j                            | d d d           d| _        || _        || _        d| _        || _        || _        d S )Nztest-clientT)		threadingThreadrh   daemon_timeout_sockr   _prog_test)r   testr;   progr)   s        r   rh   zTestThreadedClient.__init__   sM    !!$dMBBB




r   c                     	 |                      t          | j                             d S # t          $ r%}| j                            |           Y d }~d S d }~ww xY wr   )r   rd   r   	Exceptionr   rZ   rX   s     r   runzTestThreadedClient.run   sq    	.JJ(4455555 	. 	. 	.J))"---------	.s   '+ 
AAAN)r[   r\   r]   rh   r   rb   r   r   r?   r?      s2          . . . . .r   r?   c                   L     e Zd Zd Z fdZd Zd Zd Zed             Z	 xZ
S )r8   c                 <   t           j                            | d d d           d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t          j                    \  | _        | _        | j                            d           || _        d S )Nztest-serverTr   F)r   r   rh   r   _clients_finished_clients_max_clientsr   r   r   r   r1   
socketpair_s1_s2setblockingr   )r   r   r;   r   r)   r+   s         r   rh   zTestThreadedServer.__init__   s    !!$dMBBB!"'

#.00$(U###


r   c                 4   	 | j         rI| j                                         dk    r,	 | j                             d           n# t          $ r Y nw xY wt	                                                       d S # t	                                                       w xY w)Ns   stop)r   filenosendrR   superrW   )r   	__class__s    r   rW   zTestThreadedServer.stop   s    	x DHOO--33HMM'****   D GGLLNNNNNEGGLLNNNNs.   $A5 A A5 
AA5 AA5 5"Bc                 t   	 | j         5  | j                             d           |                                  d d d            n# 1 swxY w Y   | j                                         | j                                         d S # | j                                         | j                                         w xY wr   )r   r   _runr   r    r   r
   s    r   r   zTestThreadedServer.run   s    	  
&&u---		               HNNHNN HNNHNNs-   B /AB AB AB 4B7c                 |   | j         r3| j        | j        k    rd S t          j        | j        | j        gg g | j                  \  }}}| j        |v rd S | j        |v r	 | j                                        \  }}| xj        dz  c_        |                    | j                   	 |5  | 	                    |           d d d            n# 1 swxY w Y   n_# t          $ r-}d| _         	  # | j                            |           w xY wd }~ww xY w# t          $ r Y t          $ r | j         sY d S  w xY w| j         1d S d S )Nr%   F)r   r   r   selectr   r   r   acceptr7   _handle_clientr   r   rZ   BlockingIOErrorTimeoutError)r   rwxconnr(   rY   s          r   r   zTestThreadedServer._run   s   l 	>} 111mTX&B? ?GAq! x1}}zQ>!%!2!2!4!4JD$ MMQ&MMOODM222>! 6 6 //5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6$ > > >',>! J99"====> '   H#   < 	 l 	> 	> 	> 	> 	>sf   D #C %C;C CC CC 
D
D%C&&DDD

D/D/-D/c                 J    |                      t          |                     d S r   )r   rd   rg   s     r   r   z!TestThreadedServer._handle_client  s#    

$T**+++++r   c                 4    | j                                         S r   )r   getsocknamer
   s    r   r(   zTestThreadedServer.addr  s    z%%'''r   )r[   r\   r]   rh   rW   r   r   r   propertyr(   __classcell__)r   s   @r   r8   r8      s          $       >  >  >D, , , ( ( X( ( ( ( (r   r8   )r   asyncio.eventsr`   rN   r"   r   r1   r2   r   r   r   r   rd   r   r   r?   r8   rb   r   r   <module>r      sh            				              a a a a a a a aR%D %D %D %D %D %D %D %DP    9#   . . . . . . . .&N( N( N( N( N( N( N( N( N( N(r   