
    2'&h<                     b   d 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ZddlZddlZ G d de          Z G d dej                  Z G d de          Z G d	 d
ej        e          Zd Zej        d             Zd#dZ G d d          Z G d de          Z  G d de          Z!d Z" e"            Z" G d d          Z# G d dej$                  Z% G d de%          Z& G d de%          Z'd Z(d$d!Z)ej        d"             Z*dS )%z8Test utilities. Don't use outside of the uvloop project.    Nc                       e Zd Zd ZdS )MockPatternc                 v    t          t          j        t          |           |t          j                            S N)boolresearchstrS)selfothers     K/var/www/html/reinick/venv/lib/python3.11/site-packages/uvloop/_testbase.py__eq__zMockPattern.__eq__   s&    BIc$ii55666    N)__name__
__module____qualname__r    r   r   r   r      s#        7 7 7 7 7r   r   c                   (     e Zd Z fdZ fdZ xZS )TestCaseDictc                 V    t                                                       || _        d S r   )super__init__name)r   r   	__class__s     r   r   zTestCaseDict.__init__   s$    			r   c                     || j         v r(t          d                    | j        |                    t	                                          ||           d S )Nzduplicate test {}.{})dataRuntimeErrorformatr   r   __setitem__)r   keyvaluer   s      r   r    zTestCaseDict.__setitem__#   s\    $)5<<	3      ! ! !C'''''r   )r   r   r   r   r    __classcell__r   s   @r   r   r      sQ            ( ( ( ( ( ( ( ( (r   r   c                   4     e Zd Zed             Z fdZ xZS )BaseTestCaseMetac                      t          |          S r   )r   )mclsr   basess      r   __prepare__zBaseTestCaseMeta.__prepare__,   s    D!!!r   c           	         |D ]V}|                     d          s|D ];}t          ||          r)t          d                    |||j                            <Wt                                          | ||t          |                    S )Ntest_z6duplicate test {}.{} (also defined in {} parent class))
startswithhasattrr   r   r   r   __new__dict)r(   r   r)   dct	test_namebaser   s         r   r/   zBaseTestCaseMeta.__new__0   s     	= 	=I''00  = =4++ =&((. )T])< )<= = === wwtT5$s))<<<r   )r   r   r   classmethodr*   r/   r#   r$   s   @r   r&   r&   *   sQ        " " ["= = = = = = = = =r   r&   c                       e Zd Zd Zd Zd Zd Zd ZdddZd	 Z	d
 Z
d Zd Zej        ddddddZej        dfdZd Zd Zej        d             Zd ZdS )BaseTestCasec                     t           r   NotImplementedErrorr   s    r   new_loopzBaseTestCase.new_loop@       !!r   c                     t           r   r8   r:   s    r   
new_policyzBaseTestCase.new_policyC   r<   r   c                      t          |          S r   )r   )r   r
   s     r   mock_patternzBaseTestCase.mock_patternF   s    3r   c                    K   t          |t          j                  sd S 	 |                                 d {V  d S # t          t
          f$ r Y d S w xY wr   )
isinstanceasyncioStreamWriterwait_closedBrokenPipeErrorConnectionError)r   objs     r   rE   zBaseTestCase.wait_closedI   st      #w344 	F	//###########1 	 	 	DD	s   < AAc                 Z    t          | j                  j                            d          S )Nzasyncio.)typeloopr   r-   r:   s    r   is_asyncio_loopzBaseTestCase.is_asyncio_loopQ   s!    DI)44Z@@@r   g{Gz?)delayc                ^    | j                             t          j        |                     d S r   )rK   run_until_completerC   sleep)r   rM   s     r   run_loop_brieflyzBaseTestCase.run_loop_brieflyT   s(    	$$W]5%9%9:::::r   c                 n    | j                             |           | j                            |           d S r   )#_BaseTestCase__unhandled_exceptionsappendrK   default_exception_handler)r   rK   contexts      r   loop_exception_handlerz#BaseTestCase.loop_exception_handlerW   s5    #**7333	++G44444r   c                    |                                  | _        t          j        |                                            t          j        | j                   d| _        | j                            | j                   g | _	        d S )NT)
r;   rK   rC   set_event_loop_policyr>   set_event_loop"_check_unclosed_resources_in_debugset_exception_handlerrW   rS   r:   s    r   setUpzBaseTestCase.setUp[   sn    MMOO	%doo&7&7888ty)))26/	''(CDDD&(###r   c           	      v   | j                                          | j        r?t          d           t	          j        | j                   |                     d           d S | j        sd S t          j                     t          j                     t          j                     t          | j         dd          rt          j                     t          j                     t          j                     | 
                    | j         j        | j         j        d           | 
                    | j         j        dd           | 
                    | j         j        dd           | 
                    | j         j        dd	           | j         j                                        D ]^\  }}|                     d
|          5  | 
                    |dd                    |                     d d d            n# 1 swxY w Y   _| j         j                                        D ]n\  }}|                     d|          5  | 
                    || j         j        |         d                    |                     d d d            n# 1 swxY w Y   ot-          j        d            t-          j        d            d | _         d S )Nz2Unexpected calls to loop.call_exception_handler():z1unexpected calls to loop.call_exception_handler()	_debug_ccFz&not all uv_handle_t handles were freedr   z&not all callbacks (call_soon) are GCedz-not all timer callbacks (call_later) are GCedz&not all stream write contexts are GCedzAlive handle after test)handle_namezalive {} after testzTotal/closed handlesztotal != closed for {})rK   closerS   printpprintfailr[   gccollectgetattrassertEqual_debug_uv_handles_total_debug_uv_handles_freed_debug_cb_handles_count_debug_cb_timer_handles_count_debug_stream_write_ctx_cnt_debug_handles_currentitemssubTestr   _debug_handles_total_debug_handles_closedrC   rZ   rY   )r   h_nameh_cnts      r   tearDownzBaseTestCase.tearDownd   sH   	& 	FGGGM$5666IIIJJJF6 	F 	




49k511 "	AJLLLJLLLJLLL	1	18: : :
 	118: : : 	7?A A A 	5q8: : : "&!A!G!G!I!I > >\\";.4 " 6 6 > >$$q-44V<<> > >> > > > > > > > > > > > > > > "&!?!E!E!G!G A A\\"8.4 " 6 6 A A$$ty>vF077??A A AA A A A A A A A A A A A A A A 	t$$$%d+++			s$   :+G11G5	8G5	7;I>>J	J	c                     d| _         d S NF)r[   r:   s    r   skip_unclosed_handles_checkz(BaseTestCase.skip_unclosed_handles_check   s    27///r   N      
   )familyaddrtimeoutbacklogmax_clientsc                   |E|t           j        k    r3t          j                    5 }|j        }d d d            n# 1 swxY w Y   nd}t          j         |t           j                  }|t          d          |dk    rt          d          |                    |           	 |                    |           |	                    |           n(# t          $ r}	|                                 |	d }	~	ww xY wt          | ||||          S )N)z	127.0.0.1r   timeout is requiredr   #only blocking sockets are supported)socketAF_UNIXtempfileNamedTemporaryFiler   SOCK_STREAMr   
settimeoutbindlistenOSErrorra   TestThreadedServer)
r   server_progr|   r}   r~   r   r   tmpsockexs
             r   
tcp_serverzBaseTestCase.tcp_server   sQ    <''022 $c8D$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (}VV%788?4555a<<DEEE   	IIdOOOKK     	 	 	JJLLLH	 "$Wk; ; 	;s%   :>>#*C 
C3C..C3c                     t          j         |t           j                  }|t          d          |dk    rt          d          |                    |           t	          | |||          S )Nr   r   r   )r   r   r   r   TestThreadedClient)r   client_progr|   r~   r   s        r   
tcp_clientzBaseTestCase.tcp_client   sq     }VV%788?4555a<<DEEE   !$W. . 	.r   c                 4     | j         |dt          j        i|S Nr|   )r   r   r   r   argskwargss      r   unix_serverzBaseTestCase.unix_server        tFV^FvFFFr   c                 4     | j         |dt          j        i|S r   )r   r   r   r   s      r   unix_clientzBaseTestCase.unix_client   r   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   )r   TemporaryDirectoryospathjoinunlinkr   )r   tdfns      r   unix_sock_namezBaseTestCase.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   )rK   stoprd   r   r   s     r   _abort_socket_testzBaseTestCase._abort_socket_test   s@    	INNIIbMMMMMDIIbMMMMs	   2 A	)r   r   r   r;   r>   r@   rE   rL   rQ   rW   r]   ru   rx   r   AF_INETr   r   r   r   
contextlibcontextmanagerr   r   r   r   r   r6   r6   >   sZ       " " "" " "       A A A )- ; ; ; ; ;5 5 5) ) )7 7 7r8 8 8 !.!; ; ; ; ;B !.. . . .G G GG G G 	 	 	    r   r6   )	metaclassc                     t           j                            t           j                            t           j                            |           d|                    }t           j                            |          sJ |S )Ncerts)r   r   abspathr   dirnameisfile)test_file_namecert_file_namefullnames      r   _cert_fullnamer      sa    wrw||
''. B  B C CH7>>(#####Or   c               #     K    G d dt           j                  } t          j        d          } |             }|                    |           	 d V  |                    |           d S # |                    |           w xY w)Nc                       e Zd Zd ZdS ))silence_long_exec_warning.<locals>.Filterc                 l    |j                             d          o|j                             d           S )N	Executingseconds)msgr-   endswith)r   records     r   filterz0silence_long_exec_warning.<locals>.Filter.filter   s7    
--k:: 7
++I668 8r   N)r   r   r   r   r   r   r   Filterr      s#        	8 	8 	8 	8 	8r   r   rC   )loggingr   	getLogger	addFilterremoveFilter)r   loggerr   s      r   silence_long_exec_warningr      s      8 8 8 8 8 8 8 8
 y))FVXXF
V$F#####F####s   A* *BP  c                    t          | | dz             D ]k}t          j                    }|5  	 |                    d|f           |cd d d            c S # t          j        $ r Y d d d            \w xY w# 1 swxY w Y   lt	          d          )Ni   zcould not find a free port)ranger   r   errorr   )
start_fromportr   s      r   find_free_portr      s   j*s"233  } 	 			2t*%%% 	 	 	 	 	 	 	 	 	 	 <   		 	 	 	 	 	 		 	 	 	 	 	 	 	 	 3
4
44s4   A4AA4A1#A40A11A44A8	;A8	c                   B    e Zd ZddZdddZej        d             ZdS )SSLTestCaseNc                 r   t          t          d          rt          j        t          j                  }nRt          t          d          rt          j        t          j                  }nt          j        t          j                  }|xj        t          j        z  c_        |                    ||           |S )NPROTOCOL_TLS_SERVERPROTOCOL_TLS)	r.   ssl
SSLContextr   r   PROTOCOL_SSLv23optionsOP_NO_SSLv2load_cert_chain)r   certfilekeyfile
sslcontexts       r   _create_server_ssl_contextz&SSLTestCase._create_server_ssl_context  s    3-.. 	=(?@@JJS.)) 	=(899JJ(;<<Jco-""8W555r   T)disable_verifyc                `    t          j                    }d|_        |rt           j        |_        |S rw   )r   create_default_contextcheck_hostname	CERT_NONEverify_mode)r   r   r   s      r   _create_client_ssl_contextz&SSLTestCase._create_client_ssl_context  s0    /11
$)
! 	3%(]J"r   c              #      K   t          j        d          }t          j        d          }|                    |           	 d V  |                    |           d S # |                    |           w xY w)NrC   zhas no effect when using ssl)r   r   r   r   r   )r   r   r   s      r   _silence_eof_received_warningz)SSLTestCase._silence_eof_received_warning!  s~       "9-- >??   	(EEE'''''F''''s   A A3r   )r   r   r   r   r   r   r   r   r   r   r   r   r     sf        	 	 	 	 <@      ( ( ( ( (r   r   c                       e Zd ZdZd Zd ZdS )
UVTestCaseuvloopc                 (    t          j                    S r   )r   new_event_loopr:   s    r   r;   zUVTestCase.new_loop1  s    $&&&r   c                 (    t          j                    S r   )r   EventLoopPolicyr:   s    r   r>   zUVTestCase.new_policy4  s    %'''r   N)r   r   r   implementationr;   r>   r   r   r   r   r   -  s7        N' ' '( ( ( ( (r   r   c                   8     e Zd ZdZ fdZ fdZd Zd Z xZS )AIOTestCaserC   c                     t                                                       t          j        dk     rCt	          j                    }|                    | j                   t	          j        |           d S d S N)      )	r   r]   sysversion_inforC   SafeChildWatcherattach_looprK   set_child_watcher)r   watcherr   s     r   r]   zAIOTestCase.setUp<  se    g%%.00G	***%g..... &%r   c                     t           j        dk     rt          j        d            t	                                                       d S r   )r   r   rC   r   r   ru   r   r   s    r   ru   zAIOTestCase.tearDownD  s>    g%%%d+++r   c                 (    t          j                    S r   )rC   r   r:   s    r   r;   zAIOTestCase.new_loopI  s    %'''r   c                 (    t          j                    S r   )rC   DefaultEventLoopPolicyr:   s    r   r>   zAIOTestCase.new_policyL  s    -///r   )	r   r   r   r   r]   ru   r;   r>   r#   r$   s   @r   r   r   8  st        N/ / / / /    
( ( (0 0 0 0 0 0 0r   r   c                      t          j         t           j                  } | 5  	 |                     d           	 d d d            dS # t          $ r Y d d d            dS w xY w# 1 swxY w Y   d S )N)z::1r   TF)r   AF_INET6r   r   )server_socks    r   has_IPv6r  P  s    -00K	  	Z(((          	 	 		       	         s3   A"AA"
AA"AA""A&)A&c                   6    e Zd Zd Zd ZdddddZd Zd	 ZdS )
TestSocketWrapperc                     || _         d S r   )_TestSocketWrapper__sockr   r   s     r   r   zTestSocketWrapper.__init__e  s    r   c                     d}t          |          |k     rJ|                     |t          |          z
            }|dk    rt          ||z  }t          |          |k     J|S )Nr   )lenrecvConnectionAbortedError)r   nbufr   s       r   recv_allzTestSocketWrapper.recv_allh  sa    #hhll99QS\**Ds{{,,4KC	 #hhll
 
r   FNTserver_sideserver_hostnamedo_handshake_on_connectc                    t          |t          j                  sJ |                    | j        |||          }|r|                                 | j                                         || _        d S )Nr  )rB   r   r   wrap_socketr  do_handshakera   )r   ssl_contextr  r  r  ssl_socks         r   starttlszTestSocketWrapper.starttlsq  s~    
 +s~66666**K[+$; + = =
  	$!!###r   c                 ,    t          | j        |          S r   )rg   r  )r   r   s     r   __getattr__zTestSocketWrapper.__getattr__  s    t{D)))r   c                 \    d                     t          |           j        | j                  S )Nz	<{} {!r}>)r   rJ   r   r  r:   s    r   __repr__zTestSocketWrapper.__repr__  s#    !!$t**"5t{CCCr   )r   r   r   r   r  r  r  r!  r   r   r   r	  r	  c  sy             #!%)-    $* * *D D D D Dr   r	  c                        e Zd Zd Zd Zd ZdS )SocketThreadc                 <    d| _         |                                  d S rw   )_activer   r:   s    r   r   zSocketThread.stop  s    		r   c                 .    |                                   | S r   )startr:   s    r   	__enter__zSocketThread.__enter__  s    

r   c                 .    |                                   d S r   )r   )r   excs     r   __exit__zSocketThread.__exit__  s    		r   N)r   r   r   r   r(  r+  r   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Threadr   daemon_timeout_sockr%  _prog_test)r   testr   progr~   s        r   r   zTestThreadedClient.__init__  sM    !!$dMBBB




r   c                     	 |                      t          | j                             d S # t          t          f$ r  t
          $ r%}| j                            |           Y d }~d S d }~ww xY wr   )r3  r	  r2  KeyboardInterrupt
SystemExitBaseExceptionr4  r   r   s     r   runzTestThreadedClient.run  s    	.JJ(4455555!:. 	 	 	 	. 	. 	.J))"---------	.s   '+ A+A&&A+N)r   r   r   r   r;  r   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 )r   c                 <   t           j                            | d d d           d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t          j                    \  | _        | _        | j                            d           || _        d S )Nztest-serverTr   F)r.  r/  r   r0  _clients_finished_clients_max_clientsr1  r2  r%  r3  r   
socketpair_s1_s2setblockingr4  )r   r5  r   r6  r~   r   s         r   r   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)rC  filenosendr   r   r   r   s    r   r   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)Nr   )r2  rD  _runrB  ra   rC  r:   s    r   r;  zTestThreadedServer.run  s    	  
&&q)))		               HNNHNN HNNHNNs-   B /AB AB AB 4B7c                    | j         rI| 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   nu# t          t          f$ r  t          $ r-}d| _         	  # | j                            |           w xY wd }~ww xY w# t          $ r Y *t           j        $ r | j         sY d S  w xY w| j         Gd S d S )Nrz   F)r%  r>  r@  selectr2  rB  r1  acceptr   _handle_clientr8  r9  r:  r4  r   BlockingIOErrorr   r~   )r   rwxconnr}   r   s          r   rJ  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-z:   ( > > >',>! J99"====> '   H~   < 	 l !	> !	> !	> !	> !	>sf   D #C %C;C CC CC D.D6C77DDD
E+EEc                 J    |                      t          |                     d S r   )r3  r	  r  s     r   rN  z!TestThreadedServer._handle_client  s#    

$T**+++++r   c                 4    | j                                         S r   )r2  getsocknamer:   s    r   r}   zTestThreadedServer.addr  s    z%%'''r   )r   r   r   r   r   r;  rJ  rN  propertyr}   r#   r$   s   @r   r   r     s          $      "> "> ">H, , , ( ( X( ( ( ( (r   r   c                     d } |            }|                      |          }d|_        	 |                     |           |                                 d S # |                                 w xY w)Nc                  
   K   d S r   r   r   r   r   oncezrun_briefly.<locals>.once  s      r   F)create_task_log_destroy_pendingrO   ra   )rK   rZ  gents       r   run_brieflyr_    su      
$&&CA #A"""				s   A A,   c                 :   t          j                     |z   } |            sz|:|t          j                     z
  }|dk    rt          j                                        |                     t          j                            d                      |            xd S d S )Nr   gMbP?)timerC   futuresTimeoutErrorrO   tasksrP   )rK   predr~   deadlines       r   	run_untilrh    s    y{{W$Hdff <,G!||o22444 3 3E : :;;; dff < < < < <r   c               #   <  K   t           j        j        j        } 	 t           j        j                            t
          j        dz              dV  t           j        j                            |            dS # t           j        j                            |            w xY w)zrContext manager to disable asyncio logger.

    For example, it can be used to ignore warnings in debug mode.
    rz   N)rC   logr   levelsetLevelr   CRITICAL)	old_levels    r   disable_loggerro    s       "(I/##G$4q$8999##I.....##I....s   5A5 5&B)r   )r`  )+__doc__rC   asyncio.eventscollectionsr   re   r   r   rc   r   rL  r   r   r   r   r.  rb  unittestr   r
   r   UserDictr   rJ   r&   TestCaser6   r   r   r   r   r   r   r   r  r	  r/  r#  r   r   r_  rh  ro  r   r   r   <module>rv     s]   > >              				  				  				   



 



        7 7 7 7 7# 7 7 7

( 
( 
( 
( 
(;' 
( 
( 
(= = = = =t = = =(g g g g g8$0@ g g g gT   $ $ $ 
5 
5 
5 
5( ( ( ( ( ( ( (@( ( ( ( ( ( ( (0 0 0 0 0, 0 0 00   8::$D $D $D $D $D $D $D $DN    9#   . . . . . . . .*P( P( P( P( P( P( P( P(p  < < < < 
/ 
/ 
/ 
/ 
/r   