
    ,h<                     >   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j2                  e      Zd Zej8                  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jH                        Z% G d de%      Z& G d de%      Z'd Z(d"dZ)ej8                  d         Z*y)#z8Test utilities. Don't use outside of the uvloop project.    Nc                       e Zd Zd Zy)MockPatternc                 p    t        t        j                  t        |       |t        j                              S N)boolresearchstrS)selfothers     R/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/uvloop/_testbase.py__eq__zMockPattern.__eq__   s"    BIIc$i566    N)__name__
__module____qualname__r    r   r   r   r      s    7r   r   c                   (     e Zd Z fdZ fdZ xZS )TestCaseDictc                 0    t         |           || _        y r   )super__init__name)r   r   	__class__s     r   r   zTestCaseDict.__init__   s    	r   c                     || j                   v r%t        dj                  | j                  |            t        |   ||       y )Nzduplicate test {}.{})dataRuntimeErrorformatr   r   __setitem__)r   keyvaluer   s      r   r    zTestCaseDict.__setitem__#   sB    $))5<<		3   ! !C'r   )r   r   r   r   r    __classcell__r   s   @r   r   r      s    ( (r   r   c                   .     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 ]M  }|j                  d      s|D ]4  }t        ||      st        dj                  |||j                               O t
        |   | ||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 =4+&((. )T]])<= ==	= wtT5$s)<<r   )r   r   r   classmethodr*   r/   r#   r$   s   @r   r&   r&   *   s    " "= =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y)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y 	 |j                          d {    y 7 # t        t
        f$ r Y y w xY wwr   )
isinstanceasyncioStreamWriterwait_closedBrokenPipeErrorConnectionError)r   objs     r   rE   zBaseTestCase.wait_closedI   sD     #w334	//###1 		s1   A: 8: A: A	AAAc                 ^    t        | j                        j                  j                  d      S )Nzasyncio.)typeloopr   r-   r:   s    r   is_asyncio_loopzBaseTestCase.is_asyncio_loopQ   s!    DII))44Z@@r   g{Gz?)delayc                `    | j                   j                  t        j                  |             y r   )rK   run_until_completerC   sleep)r   rM   s     r   run_loop_brieflyzBaseTestCase.run_loop_brieflyT   s    		$$W]]5%9:r   c                 p    | j                   j                  |       | j                  j                  |       y r   )#_BaseTestCase__unhandled_exceptionsappendrK   default_exception_handler)r   rK   contexts      r   loop_exception_handlerz#BaseTestCase.loop_exception_handlerW   s(    ##**73		++G4r   c                    | j                         | _        t        j                  | j	                                t        j
                  | j                         d| _        | j                  j                  | j                         g | _	        y )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[   s^    MMO	%%doo&78tyy)26/		''(C(CD&(#r   c           	         | j                   j                          | j                  r<t        d       t	        j                  | j                         | j                  d       y | j                  sy t        j                          t        j                          t        j                          t        | j                   dd      rt        j                          t        j                          t        j                          | j                  | j                   j                  | j                   j                  d       | j                  | j                   j                  dd       | j                  | j                   j                  dd       | j                  | j                   j                  dd	       | j                   j                   j#                         D ]C  \  }}| j%                  d
|      5  | j                  |ddj'                  |             d d d        E | j                   j(                  j#                         D ]Z  \  }}| j%                  d|      5  | j                  || j                   j*                  |   dj'                  |             d d d        \ t-        j.                  d        t-        j0                  d        d | _         y # 1 sw Y   xY w# 1 sw Y   xY w)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   sZ   		&&FGMM$556IIIJ66 	







499k51JJLJJLJJL		11		118:
 		1118: 		77?A 		55q8: "&!A!A!G!G!I >\\";.4 " 6 >$$q-44V<>> >> "&!?!?!E!E!G A\\"8.4 " 6 A$$tyy>>vF077?AA AA 	t$%%d+	> >A As   -#K:KK	K#	c                     d| _         y NF)r[   r:   s    r   skip_unclosed_handles_checkz(BaseTestCase.skip_unclosed_handles_check   s
    27/r   N      
   )familyaddrtimeoutbacklogmax_clientsc                   |?|t         j                  k(  r*t        j                         5 }|j                  }d d d        nd}t        j                   |t         j
                        }|t        d      |dk  rt        d      |j                  |       	 |j                  |       |j                  |       t        | ||||      S # 1 sw Y   xY w# t        $ r}	|j                          |	d }	~	ww xY w)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   s     <'002 $c88D$ $ (}}VV%7%78?455a<DEE 	IIdOKK 
 "$Wk; 	;)$ $   	JJLH	s#   C"C C	C2C--C2c                     t        j                   |t         j                        }|t        d      |dk  rt        d      |j                  |       t	        | |||      S )Nr   r   r   )r   r   r   r   TestThreadedClient)r   client_progr|   r~   r   s        r   
tcp_clientzBaseTestCase.tcp_client   s`     }}VV%7%78?455a<DEE !$W. 	.r   c                 F     | j                   |dt        j                  i|S Nr|   )r   r   r   r   argskwargss      r   unix_serverzBaseTestCase.unix_server   !    tFV^^FvFFr   c                 F     | j                   |dt        j                  i|S r   )r   r   r   r   s      r   unix_clientzBaseTestCase.unix_client   r   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   )r   TemporaryDirectoryospathjoinunlinkr   )r   tdfns      r   unix_sock_namezBaseTestCase.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   )rK   stoprd   r   r   s     r   _abort_socket_testzBaseTestCase._abort_socket_test   s,    	IINNIIbMDIIbMs	   . 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   >   s    "" A )- ;5)7r8 !..!;B !...GG 	 	r   r6   )	metaclassc                     t         j                  j                  t         j                  j                  t         j                  j	                  |       d|            }t         j                  j                  |      sJ |S )Ncerts)r   r   abspathr   dirnameisfile)test_file_namecert_file_namefullnames      r   _cert_fullnamer      sQ    wwrww||
'. B CH77>>(##Or   c               #      K    G d dt         j                        } t        j                  d      } |        }|j                  |       	 d  |j	                  |       y # |j	                  |       w xY ww)Nc                       e Zd Zd Zy))silence_long_exec_warning.<locals>.Filterc                 t    |j                   j                  d      xr |j                   j                  d       S )N	Executingseconds)msgr-   endswith)r   records     r   filterz0silence_long_exec_warning.<locals>.Filter.filter   s5    

--k: 7

++I68 8r   N)r   r   r   r   r   r   r   Filterr      s    	8r   r   rC   )loggingr   	getLogger	addFilterremoveFilter)r   loggerr   s      r   silence_long_exec_warningr      sa     8 8
 y)FXF
V$F#F#s   AA6
A  A6 A33A6c                    t        | | dz         D ]9  }t        j                         }|5  	 |j                  d|f       |cd d d        c S  t	        d      # t        j                  $ r Y d d d        dw xY w# 1 sw Y   qxY w)Ni   zcould not find a free port)ranger   r   errorr   )
start_fromportr   s      r   find_free_portr      s    j*s"23 }} 			2t*% 	 	 3
44	 << 		 		 	s-   A8AA8A5*A84A55A88B	c                   D    e Zd ZddZdddZej                  d        Zy)SSLTestCaseNc                    t        t        d      r$t        j                  t        j                        }nWt        t        d      r$t        j                  t        j                        }n#t        j                  t        j
                        }|xj                  t        j                  z  c_        |j                  ||       |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-.(?(?@JS.)(8(89J(;(;<Jcoo-""8W5r   T)disable_verifyc                j    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  s-    //1
$)
!%(]]J"r   c              #      K   t        j                  d      }t        j                  d      }|j                  |       	 d  |j	                  |       y # |j	                  |       w xY w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!  sY      ""9- >? 	('F's   <A+A A+A((A+r   )r   r   r   r   r   r   r   r   r   r   r   r   r     s,    	 <@  ( (r   r   c                       e Zd ZdZd Zd Zy)
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   -  s    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  rEt	        j
                         }|j                  | j                         t	        j                  |       y y N)      )	r   r]   sysversion_inforC   SafeChildWatcherattach_looprK   set_child_watcher)r   watcherr   s     r   r]   zAIOTestCase.setUp<  sM    g%..0G		*%%g. &r   c                 r    t         j                  dk  rt        j                  d        t        |           y 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  s    N/
(0r   r   c                      t        j                   t         j                        } | 5  	 | j                  d       	 d d d        y# t        $ r Y d d d        yw xY w# 1 sw Y   y xY w)N)z::1r   TF)r   AF_INET6r   r   )server_socks    r   has_IPv6r  P  sg    --0K	 	Z(    		 	 s-   AAA	AAAAA#c                   4    e Zd Zd Zd ZdddddZd Zd	 Zy)
TestSocketWrapperc                     || _         y r   )_TestSocketWrapper__sockr   r   s     r   r   zTestSocketWrapper.__init__e  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bufr   s       r   recv_allzTestSocketWrapper.recv_allh  sR    #hl99QS\*Ds{,,4KC	 #hl
 
r   FNTserver_sideserver_hostnamedo_handshake_on_connectc                    t        |t        j                        sJ |j                  | j                  |||      }|r|j                          | j                  j                          || _        y )Nr  )rB   r   r   wrap_socketr
  do_handshakera   )r   ssl_contextr  r  r  ssl_socks         r   starttlszTestSocketWrapper.starttlsq  sa    
 +s~~66**KK[+$; + =
 !!#r   c                 .    t        | j                  |      S r   )rg   r
  )r   r   s     r   __getattr__zTestSocketWrapper.__getattr__  s    t{{D))r   c                 `    dj                  t        |       j                  | j                        S )Nz	<{} {!r}>)r   rJ   r   r
  r:   s    r   __repr__zTestSocketWrapper.__repr__  s#    !!$t*"5"5t{{CCr   )r   r   r   r   r  r  r  r   r   r   r   r  r  c  s'     #!%)-$*Dr   r  c                       e Zd Zd Zd Zd Zy)SocketThreadc                 2    d| _         | j                          y rw   )_activer   r:   s    r   r   zSocketThread.stop  s    		r   c                 &    | j                          | S r   )startr:   s    r   	__enter__zSocketThread.__enter__  s    

r   c                 $    | j                          y r   )r   )r   excs     r   __exit__zSocketThread.__exit__  s    		r   N)r   r   r   r   r'  r*  r   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Threadr   daemon_timeout_sockr$  _prog_test)r   testr   progr~   s        r   r   zTestThreadedClient.__init__  sF    !!$dMB


r   c                     	 | j                  t        | j                               y # t        t        f$ r  t
        $ r%}| j                  j                  |       Y d }~y d }~ww xY wr   )r2  r  r1  KeyboardInterrupt
SystemExitBaseExceptionr3  r   r   s     r   runzTestThreadedClient.run  sR    	.JJ(45!:. 	 	.JJ))"--	.s   $' A$AA$N)r   r   r   r   r:  r   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 )r   c                 >   t         j                  j                  | d d d       d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t        j                         \  | _        | _        | j                  j                  d       || _        y )Nztest-serverTr   F)r-  r.  r   r/  _clients_finished_clients_max_clientsr0  r1  r$  r2  r   
socketpair_s1_s2setblockingr3  )r   r4  r   r5  r~   r   s         r   r   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)rB  filenosendr   r   r   r   s    r   r   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)Nr   )r1  rC  _runrA  ra   rB  r:   s    r   r:  zTestThreadedServer.run  s{    	 

&&q)		 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        t        f$ r  t        $ r.}d| _         	  # | j                  j                  |       w xY wd }~ww xY w# t        $ r Y Zt         j"                  $ r | j                   sY y  w xY w)Nrz   F)r$  r=  r?  selectr1  rA  r0  acceptr   _handle_clientr7  r8  r9  r3  r   BlockingIOErrorr   r~   )r   rwxconnr}   r   s          r   rI  zTestThreadedServer._run  sC   ll}} 1 11mmTXX&B?GAq! xx1}zzQ>!%!2!2!4JD$ MMQ&MOODMM2
>! 6 //561 ll06 6-z: ( >',>! JJ99"=> ' ~~ <<	sZ   E D C:#D :D?D EE&D''EEE	E=E=;E=c                 8    | j                  t        |             y r   )r2  r  r  s     r   rM  z!TestThreadedServer._handle_client  s    

$T*+r   c                 6    | j                   j                         S r   )r1  getsocknamer:   s    r   r}   zTestThreadedServer.addr  s    zz%%''r   )r   r   r   r   r   r:  rI  rM  propertyr}   r#   r$   s   @r   r   r     s1    $">H, ( (r   r   c                     d } |       }| j                  |      }d|_        	 | j                  |       |j                          y # |j                          w xY w)Nc                     K   y wr   r   r   r   r   oncezrun_briefly.<locals>.once  s	     s   F)create_task_log_destroy_pendingrO   ra   )rK   rY  gents       r   run_brieflyr^    sN    
&CA #A"				s   A Ac                 &   t        j                          |z   } |       ss|:|t        j                          z
  }|dk  rt        j                  j                         | j	                  t        j
                  j                  d              |       sry y )Nr   gMbP?)timerC   futuresTimeoutErrorrO   tasksrP   )rK   predr~   deadlines       r   	run_untilrf    sk    yy{W$Hf,G!|oo2244 3 3E :; fr   c               #     K   t         j                  j                  j                  } 	 t         j                  j                  j	                  t
        j                  dz          d t         j                  j                  j	                  |        y# t         j                  j                  j	                  |        w xY w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_loggerrm    sx      ""((I/##G$4$4q$89##I.##I.s   %B>>B &*B>+B;;B>)iP  )   )+__doc__rC   asyncio.eventscollectionsr   re   r   r   rc   r   rK  r   r   r   r   r-  r`  unittestr   r
   r   UserDictr   rJ   r&   TestCaser6   r   r   r   r   r   r   r   r  r  r.  r"  r   r   r^  rf  rm  r   r   r   <module>ru     s5   >     	  	  	   
 
     7# 7

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