
    daf5                         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y)    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y)FunctionalTestCaseMixinc                 *    t        j                         S N)asyncionew_event_loopselfs    7/root/Python-3.12.4/Lib/test/test_asyncio/functional.pynew_loopz FunctionalTestCaseMixin.new_loop   s    %%''    g{Gz?)delayc                `    | j                   j                  t        j                  |             y r   )looprun_until_completer   sleep)r   r   s     r   run_loop_brieflyz(FunctionalTestCaseMixin.run_loop_briefly   s    		$$W]]5%9:r   c                 p    | j                   j                  |       | j                  j                  |       y r   )._FunctionalTestCaseMixin__unhandled_exceptionsappendr   default_exception_handler)r   r   contexts      r   loop_exception_handlerz.FunctionalTestCaseMixin.loop_exception_handler   s(    ##**73		++G4r   c                     | j                         | _        t        j                  d        | j                  j	                  | j
                         g | _        y r   )r   r   r   set_event_loopset_exception_handlerr   r   r
   s    r   setUpzFunctionalTestCaseMixin.setUp   s=    MMO	t$		''(C(CD&(#r   c                 B   	 | j                   j                          | j                  r;t        d       t	        j                  | j                         | j                  d       t        j                  d        d | _         y # 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    sv    
	IIOO**JKd99:		MN ""4(DI ""4(DIs   A!B   BN   
   )familyaddrtimeoutbacklogmax_clientsc                f   |Ot        t        d      r=|t        j                  k(  r*t        j                         5 }|j
                  }d d d        nd}t        j                  |||      }|t        d      |dk  rt        d      |j                  |       t        | ||||      S # 1 sw Y   ^xY w)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002 $c88D$ $ (##DI?455a<DEE !$Wk; 	;$ $s   B''B0c                     t        j                   |t         j                        }|t        d      |dk  rt        d      |j                  |       t	        | |||      S )Nr.   r   r/   )r1   SOCK_STREAMr6   r7   TestThreadedClient)r   client_progr'   r)   r;   s        r   
tcp_clientz"FunctionalTestCaseMixin.tcp_clientE   s`     }}VV%7%78?455a<DEE !$W. 	.r   c                 r    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   1    vy)%%tFV^^FvFFr   c                 r    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              #   F  K   t        j                         5 }t        j                  j	                  |d      }	 | 	 t        j
                  |       d d d        y # t        $ r Y w xY w# 	 t        j
                  |       w # t        $ r Y w w xY wxY w# 1 sw Y   y xY ww)Nr;   )r2   TemporaryDirectoryospathjoinunlinkOSError)r   tdfns      r   unix_sock_namez&FunctionalTestCaseMixin.unix_sock_name^   s     ((* 	bb&)BIIbM	 	  IIbM 	 	sn   B!!BA+A	B!	A(%B'A((B+B-BB	B	BB	BBBB!c                     	 | j                   j                          | j                  |       y # | j                  |       w xY wr   )r   stopr#   r   exs     r   _abort_socket_testz*FunctionalTestCaseMixin._abort_socket_testj   s,    	IINNIIbMDIIbMs	   . 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) !.."33!;2 !.."33.G
G
 	 	r   r   c                   2    e Zd Zd Zd ZddddZd Zd Zy)	TestSocketWrapperc                     || _         y r   )_TestSocketWrapper__sockr   r;   s     r   __init__zTestSocketWrapper.__init__x   s	    r   c                     d}t        |      |k  r<| j                  |t        |      z
        }|dk(  rt        ||z  }t        |      |k  r<|S )Nr   )lenrecvConnectionAbortedError)r   nbufdatas       r   recv_allzTestSocketWrapper.recv_all{   sR    #hl99QS\*Ds{,,4KC	 #hl
 
r   FN)server_sideserver_hostnamec                   |j                  | j                  ||d      }	 |j                          	 | j                  j                          || _        y #  |j                           xY w# | j                  j                          w xY w)NF)rq   rr   do_handshake_on_connect)wrap_socketrf   do_handshaker    )r   ssl_contextrq   rr   ssl_socks        r   	start_tlszTestSocketWrapper.start_tls   sw     **KK[+$) + +
	 !!#
 KK	NNKKs   A A''A* *Bc                 .    t        | j                  |      S r   )getattrrf   )r   r4   s     r   __getattr__zTestSocketWrapper.__getattr__   s    t{{D))r   c                 `    dj                  t        |       j                  | j                        S )Nz	<{} {!r}>)formattyper[   rf   r
   s    r   __repr__zTestSocketWrapper.__repr__   s#    !!$t*"5"5t{{CCr   )r[   r\   r]   rh   rp   ry   r|   r   rb   r   r   rd   rd   v   s$     $"&&*Dr   rd   c                       e Zd Zd Zd Zd Zy)SocketThreadc                 2    d| _         | j                          y NF)_activerP   r
   s    r   rW   zSocketThread.stop   s    		r   c                 &    | j                          | S r   )startr
   s    r   	__enter__zSocketThread.__enter__   s    

r   c                 $    | j                          y r   )rW   )r   excs     r   __exit__zSocketThread.__exit__   s    		r   N)r[   r\   r]   rW   r   r   rb   r   r   r   r      s    r   r   c                       e Zd Zd Zd Zy)r?   c                     t         j                  j                  | d d d       d| _        || _        || _        d| _        || _        || _        y )Nztest-clientT)		threadingThreadrh   daemon_timeout_sockr   _prog_test)r   testr;   progr)   s        r   rh   zTestThreadedClient.__init__   sF    !!$dMB


r   c                     	 | j                  t        | j                               y # t        $ r%}| j                  j                  |       Y d }~y d }~ww xY wr   )r   rd   r   	Exceptionr   rZ   rX   s     r   runzTestThreadedClient.run   sB    	.JJ(45 	.JJ))"--	.s   $' 	AAAN)r[   r\   r]   rh   r   rb   r   r   r?   r?      s    .r   r?   c                   F     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                  j                  | d d d       d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t        j                         \  | _        | _        | j                  j                  d       || _        y )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!"'

#..0$(U#
r   c                     	 | j                   r9| j                   j                         dk7  r	 | j                   j                  d       t        |           y # t        $ r Y w xY w# t        |           w xY w)Ns   stop)r   filenosendrR   superrW   )r   	__class__s    r   rW   zTestThreadedServer.stop   sa    	xxDHHOO-3HHMM'* GLN   GLNs(   )A& A 	A# A& "A##A& &A6c                 x   	 | j                   5  | j                   j                  d       | j                          d d d        | j                  j	                          | j
                  j	                          y # 1 sw Y   >xY w# | j                  j	                          | j
                  j	                          w xY wr   )r   r   _runr   r    r   r
   s    r   r   zTestThreadedServer.run   s{    	 

&&u-		 HHNNHHNN  HHNNHHNNs!   B ,A7B 7B <B 6B9c                    | j                   r| j                  | j                  k\  ry t        j                  | j                  | j
                  gg g | j                        \  }}}| j
                  |v ry | j                  |v rk	 | j                  j                         \  }}| xj                  dz  c_        |j                  | j                         	 |5  | j                  |       d d d        | j                   ry y # 1 sw Y   xY w# t        $ r.}d| _         	  # | j                  j                  |       w xY wd }~ww xY w# t        $ r Y Kt        $ r | j                   sY y  w xY w)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/   ll}} 1 11mmTXX&B?GAq! xx1}zzQ>!%!2!2!4JD$ MMQ&MOODMM2>! 6 //561 ll06 6$ >',>! JJ99"=> ' # <<	sZ   E  D C:#D :D?D 	D=D8DD55D88D= 	E$E$"E$c                 8    | j                  t        |             y r   )r   rd   rg   s     r   r   z!TestThreadedServer._handle_client  s    

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