o
    hs                     @   s  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	m
Z
 ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ G dd deZG dd deZG dd deZ G dd deZ!e"ddZ#G dd deZ$dS ) zMiscellaneous tests.    N)mock)WINDOWS)bcat)cat)debug)isfile_strict)memoize)memoize_when_activatedparse_environ_block)supports_ipv6wrap_numbers)HAS_NET_IO_COUNTERS)PsutilTestCase)process_namespace)pytest)reload_module)system_namespacec                   @   s   e Zd Zdd ZefddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestSpecialMethodsc                 C   s|   t t tjjdd  W d    n1 sw   Y  t tj tdd  W d    d S 1 s7w   Y  d S )N      )	r   raisesOverflowErrorpsutil_psplatformcextcheck_pid_rangeNoSuchProcessProcessself r"   J/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/tests/test_misc.pytest_check_pid_range-   s   "z'TestSpecialMethods.test_check_pid_rangec                 C   s  t |  j}||}d|v sJ d|j |v sJ d|  d|ddv s,J d|v s2J d|vs8J |  |  ||}d|v sJJ d|v sPJ tj	j
t jd	t t d
& t  }||}d|j |v srJ d|v sxJ d|vs~J W d    n1 sw   Y  tj	j
t jd	t t d
& t  }||}d|j |v sJ d|v sJ d|vsJ W d    n1 sw   Y  tj	j
t jd	t t d
! t  }||}d|j |v sJ d|vsJ W d    d S 1 sw   Y  d S )Nzpsutil.Processzpid=zname=''zname=u'zstatus=z	exitcode=zstatus='terminated'nameside_effectzstatus='zombie'zname=
terminated)r   r   spawn_testprocpidr&   replace	terminatewaitr   patchobjectZombieProcessosgetpidr   AccessDenied)r!   funcprr"   r"   r#   test_process__repr__3   sX    

"z'TestSpecialMethods.test_process__repr__c                 C   s   | j td d S )N)r5   )r8   strr    r"   r"   r#   test_process__str___      z&TestSpecialMethods.test_process__str__c                 C      t t dks
J d S )Nzpsutil.Error())reprr   Errorr    r"   r"   r#   test_error__repr__b      z%TestSpecialMethods.test_error__repr__c                 C   r<   )N )r9   r   r>   r    r"   r"   r#   test_error__str__e   r@   z$TestSpecialMethods.test_error__str__c                 C   6   t tddksJ t tjdddddksJ d S )NA  z=psutil.NoSuchProcess(pid=321, msg='process no longer exists')r&   msgr&   rE   z5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))r=   r   r   r    r"   r"   r#   test_no_such_process__repr__h      z/TestSpecialMethods.test_no_such_process__repr__c                 C   rC   )NrD   z"process no longer exists (pid=321)r&   rE   rF   msg (pid=321, name='name'))r9   r   r   r    r"   r"   r#   test_no_such_process__str__r   rH   z.TestSpecialMethods.test_no_such_process__str__c                 C   8   t tddksJ t tjddddddksJ d S )NrD   zGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r&   @  foor&   ppidrE   z?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))r=   r   r1   r    r"   r"   r#   test_zombie_process__repr__|   s   z.TestSpecialMethods.test_zombie_process__repr__c                 C   rK   )NrD   z,PID still exists but it's a zombie (pid=321)r&   rL   rM   rN   z$foo (pid=321, ppid=320, name='name'))r9   r   r1   r    r"   r"   r#   test_zombie_process__str__   s   z-TestSpecialMethods.test_zombie_process__str__c                 C   rC   )NrD   zpsutil.AccessDenied(pid=321)r&   rE   rF   z4psutil.AccessDenied(pid=321, name='name', msg='msg'))r=   r   r4   r    r"   r"   r#   test_access_denied__repr__      z-TestSpecialMethods.test_access_denied__repr__c                 C   rC   )NrD   z	(pid=321)r&   rE   rF   rI   )r9   r   r4   r    r"   r"   r#   test_access_denied__str__   rS   z,TestSpecialMethods.test_access_denied__str__c                 C   rC   )N   z?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')rD   r&   r+   r&   zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))r=   r   TimeoutExpiredr    r"   r"   r#   test_timeout_expired__repr__   s   z/TestSpecialMethods.test_timeout_expired__repr__c                 C   rC   )NrU   ztimeout after 5 secondsrD   r&   rV   z.timeout after 5 seconds (pid=321, name='name'))r9   r   rW   r    r"   r"   r#   test_timeout_expired__str__   rS   z.TestSpecialMethods.test_timeout_expired__str__c                 C   s>   t  }t  }||ksJ d|_||ksJ |dksJ d S )N)r   r   rM   )r   r   _ident)r!   p1p2r"   r"   r#   test_process__eq__   s   z%TestSpecialMethods.test_process__eq__c                 C   s$   t  t  h}t|dksJ d S )N   )r   r   len)r!   sr"   r"   r#   test_process__hash__   s   z'TestSpecialMethods.test_process__hash__N)__name__
__module____qualname__r$   r=   r8   r:   r?   rB   rG   rJ   rP   rQ   rR   rT   rX   rY   r]   ra   r"   r"   r"   r#   r   ,   s     ,


r   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMiscc              	   C   s   t t}|D ]@}|dv rq|dsFzt| W q tyE   |tjvrCtt|}|d u r/Y q|jd urCd|j vrC| 	|dY qw qtjD ]}||v sRJ qJd S )N>   testr   testsPermissionErrorProcessLookupError_
deprecatedz not in psutil.__all__)
dirr   
startswith
__import__ImportError__all__getattr__doc__lowerfail)r!   
dir_psutilr&   funr"   r"   r#   test__all__   s*   




zTestMisc.test__all__c                 C   s$   d dd tjD tjksJ d S )N.c                 S   s   g | ]}t |qS r"   )r9   ).0xr"   r"   r#   
<listcomp>   s    z)TestMisc.test_version.<locals>.<listcomp>)joinr   version_info__version__r    r"   r"   r#   test_version   s   zTestMisc.test_versionc                 C   s"   t  }d|_d| vsJ d S )N1rM   )r   r   rM   as_dict)r!   r6   r"   r"   r#   !test_process_as_dict_no_new_names   s   z*TestMisc.test_process_as_dict_no_new_namesc              
   C   s  dd }t  }|t    t|}|j|jddD ]/\}}| j||d z| }W n
 t jy7   Y nw || W d    n1 sFw   Y  qt }||jD ]3\}}|dv r^qU| j|d z| }W n
 t j	yt   Y nw || W d    n1 sw   Y  qUt
t
t jdd	d
d}t|t jsJ |jdksJ |jd	ksJ |jd
ksJ t
t
t jdd	dd
d}t|t jsJ |jdksJ |jdksJ |jd	ksJ |jd
ksJ t
t
t j	dd	d
d}t|t j	sJ |jdksJ |jd	ksJ |jd
ksJ t
t
t jddd	d}t|t js,J |jdks4J |jdks<J |jd	ksDJ d S )Nc                 S   s4   t t |  t| }t|}| |ksJ d S N)jsonloadsdumpspickle)retabr"   r"   r#   check   s   

z*TestMisc.test_serialization.<locals>.checkT)clear_cache)procr&   >   win_service_getwin_service_iter)r&   i  r&   rE   )r+   r&   rE   *   )r+   r&   rO   rE   {   !   )secondsr+   r&   )r   r   r   r   itergetterssubTestr>   r   r4   r   r   r   r   
isinstancer+   r&   rE   r1   rO   rW   r   )r!   r   r   nsrw   r&   r   r   r"   r"   r#   test_serialization   s   	



zTestMisc.test_serializationc              	   C   s  t jjtjdtjd}t  |jsJ W d    n1 sw   Y  t jjtjdtdd}t  |js;J W d    n1 sEw   Y  t jjtjdtd&}t	
t t  W d    n1 siw   Y  |jssJ W d    n1 s}w   Y  t jjtjdtdd(}| tj t  W d    n1 sw   Y  |jsJ W d    d S 1 sw   Y  d S )N
_get_identr'   r^   )r   r/   r0   r   r   r4   calledr1   
ValueErrorr   r   r   assertRaises)r!   methr"   r"   r#   test_ad_on_process_creation@  s@   


"z$TestMisc.test_ad_on_process_creationc              	   C   s|   t jddd- tt}tt W d    n1 sw   Y  dt|j	 v s,J W d    d S 1 s7w   Y  d S )Nzpsutil._psplatform.cext.versionz0.0.0return_valuezversion conflict)
r   r/   r   r   rp   r   r   r9   valuert   )r!   cmr"   r"   r#   test_sanity_version_check]  s   
"z"TestMisc.test_sanity_version_checkN)	rb   rc   rd   rx   r   r   r   r   r   r"   r"   r"   r#   rf      s     Nrf   c                   @   sR   e Zd Zdd ZeZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )TestMemoizeDecoratorc                 C   s
   g | _ d S r   callsr    r"   r"   r#   setUpm  s   
zTestMemoizeDecorator.setUpNc                 C   s*  t dD ]}| }| jdi fgksJ |d ur||ksJ qt dD ]}|d}| jdi fdi fgks5J |d ur?||ks?J q"t dD ]$}|ddd}| jdi fdi fdddifgks^J |d urh||kshJ qDt| jdksrJ |  | }|d ur||ksJ t| jdksJ |jd	ksJ d S )
Nr   r"   r^   r^   barr         My docstring.)ranger   r_   cache_clearrs   )r!   objexpected_retvalrk   r   r"   r"   r#   run_againstr  s2   $z TestMemoizeDecorator.run_againstc                    s&   t  fdd}|  | j|dd d S )Nc                         j | |f dS r      r   appendargskwargs	baseclassr"   r#   rM     s   z/TestMemoizeDecorator.test_function.<locals>.foor   r   )r   r   )r!   rM   r"   r   r#   test_function  s   z"TestMemoizeDecorator.test_functionc                    s>   t G  fddd}|  | j|d d |  dksJ d S )Nc                       s$   e Zd ZdZ fddZdd ZdS )z,TestMemoizeDecorator.test_class.<locals>.Foor   c                    s    j ||f d S r   r   r!   r   r   r   r"   r#   __init__  s   z5TestMemoizeDecorator.test_class.<locals>.Foo.__init__c                 S   s   dS )Nr   r"   r    r"   r"   r#   r        z0TestMemoizeDecorator.test_class.<locals>.Foo.barN)rb   rc   rd   rs   r   r   r"   r   r"   r#   Foo  s    r   r   r   )r   r   r   r!   r   r"   r   r#   
test_class  s
   	zTestMemoizeDecorator.test_classc                 C   s   t G dd d}| | u sJ t| t| ksJ t|dt|dks+J t|dddt|dddks=J t|dt|dksKJ d S )Nc                   @   s   e Zd Zdd ZdS )z6TestMemoizeDecorator.test_class_singleton.<locals>.Barc                 _   s   d S r   r"   r   r"   r"   r#   r     r   z?TestMemoizeDecorator.test_class_singleton.<locals>.Bar.__init__N)rb   rc   rd   r   r"   r"   r"   r#   Bar  s    r   r^   r   )rM   r   )r   id)r!   r   r"   r"   r#   test_class_singleton  s   $ z)TestMemoizeDecorator.test_class_singletonc                    ,   G  fddd}|  | j | jdd d S )Nc                           e Zd Zee fddZdS )z3TestMemoizeDecorator.test_staticmethod.<locals>.Fooc                     r   r   r   r   r   r"   r#   r        z7TestMemoizeDecorator.test_staticmethod.<locals>.Foo.barN)rb   rc   rd   staticmethodr   r   r"   r   r"   r#   r         r   r   r   r   r   r   r"   r   r#   test_staticmethod     z&TestMemoizeDecorator.test_staticmethodc                    r   )Nc                       r   )z2TestMemoizeDecorator.test_classmethod.<locals>.Fooc                    s    j ||f dS r   r   )clsr   r   r   r"   r#   r     r   z6TestMemoizeDecorator.test_classmethod.<locals>.Foo.barN)rb   rc   rd   classmethodr   r   r"   r   r"   r#   r     r   r   r   r   r   r   r"   r   r#   test_classmethod  r   z%TestMemoizeDecorator.test_classmethodc                    s  t  fdd}g  tdD ]}| }di f}||ksJ t dks%J qtdD ]}|d}di f}||ks:J t dksBJ q*tdD ]}|ddd}dddif}||ks[J t d	kscJ qG|  | }di f}||ksuJ t d
ks}J |jdksJ d S )Nc                     s     d | |fS )Foo docstring.Nr   r   r   r"   r#   rM     s   
z/TestMemoizeDecorator.test_original.<locals>.foor   r"   r^   r   r   r   r   r   r   )r   r   r_   r   rs   )r!   rM   rk   r   expectedr"   r   r#   test_original  s0   z"TestMemoizeDecorator.test_originalr   )rb   rc   rd   r   tearDownr   r   r   r   r   r   r   r"   r"   r"   r#   r   l  s    

r   c                   @   re   )TestCommonModulec                    s   G  fddd}| }g  |   |   t dksJ g  |j | |   |   t dks6J g  |j | |   |   t dksNJ d S )Nc                       s   e Zd Ze fddZdS )z9TestCommonModule.test_memoize_when_activated.<locals>.Fooc                    s     d  d S r   r   r    r   r"   r#   rM     s   z=TestCommonModule.test_memoize_when_activated.<locals>.Foo.fooN)rb   rc   rd   r	   rM   r"   r   r"   r#   r     s    r   r   r^   )rM   r_   cache_activatecache_deactivate)r!   r   fr"   r   r#   test_memoize_when_activated  s    z,TestCommonModule.test_memoize_when_activatedc                 C   s   dd }t d|ddiksJ t d|dd|ddiks J t d	|dd|dd
iks0J t d|dd|ddiks@J t d|ddiksLJ t d|ddiksXJ t d|ddiksdJ d S )Nc                 S   s   t r|  S | S r   )r   upper)r`   r"   r"   r#   k  r;   z4TestCommonModule.test_parse_environ_block.<locals>.kza=1 r   r   z	a=1 b=2  r   2za=1 b=  rA   za=1 b=2  c=3 zxxx a=1 z	a=1 =b=2 za=1 b=2r
   )r!   r   r"   r"   r#   test_parse_environ_block  s   
 
z)TestCommonModule.test_parse_environ_blockc              	   C   s  |  tj t rtd}d|_t  t rJ W d    n1 s%w   Y  t  tjdtd}t r;J |js@J W d    n1 sJw   Y  t  tjdtj	d}t raJ t  |jsjJ W d    n1 stw   Y  t  tjdtj	d}t rJ t  |jsJ W d    d S 1 sw   Y  d S t
t" ttjtj}z|d W |  n|  w W d    d S 1 sw   Y  d S )Nzpsutil._common.socketFzpsutil._common.socket.socketr'   z!psutil._common.socket.socket.bind)z::1r   )
addCleanupr   r   r   r/   has_ipv6OSErrorr   socketgaierrorr   r   AF_INET6SOCK_STREAMbindclose)r!   r`   sockr"   r"   r#   test_supports_ipv6#  sP   


""z#TestCommonModule.test_supports_ipv6c              	   C   s  t jt}t|sJ tt j|rJ tjdtd! t	
t t| W d    n1 s2w   Y  W d    n1 sAw   Y  tjdtd t|rTJ W d    n1 s^w   Y  tjddd t|rqJ W d    d S 1 s|w   Y  d S )Nzpsutil._common.os.statr'   zpsutil._common.stat.S_ISREGFr   )r2   pathabspath__file__r   dirnamer   r/   ri   r   r   r   FileNotFoundError)r!   	this_filer"   r"   r#   test_isfile_strictJ  s"   
"z#TestCommonModule.test_isfile_strictc              	   C   s  t jtjdd( tt }t	d t
j  W d    n1 s%w   Y  W d    n1 s4w   Y  | }|dsFJ |d|v sLJ tdd|v sVJ t jtjdd% tt }t	td W d    n1 sxw   Y  W d    n1 sw   Y  | }d|v sJ d	|v sJ t jtjdd+ tt }td
d}d|_t	| W d    n1 sw   Y  W d    n1 sw   Y  | }d|v sJ d|v sJ d S )NPSUTIL_DEBUGThellozpsutil-debugz.pycz.pyzthis is an errorzignoring ValueErrorz'this is an error'r   zno such filez/foo)r   r/   r0   r   _common
contextlibredirect_stderrioStringIOr   sysstderrflushgetvaluern   r   r,   r   r   filename)r!   r   rE   excr"   r"   r#   
test_debugX  s>   

zTestCommonModule.test_debugc                 C   s   |   }t|d}|d W d    n1 sw   Y  t|dks&J t|dks.J tt t|d  W d    n1 sDw   Y  tt t|d  W d    n1 s_w   Y  t|d dddkspJ t|d dddks|J d S )NwrM   s   fooz-invalidr   )fallback)
get_testfnopenwriter   r   r   r   r   )r!   testfnr   r"   r"   r#   test_cat_bcatt  s   zTestCommonModule.test_cat_bcatN)	rb   rc   rd   r   r   r   r   r  r	  r"   r"   r"   r#   r     s    'r   rM   za b cc                   @   s   e Zd Zdd ZeZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zejje dddd ZdS ) TestWrapNumbersc                 C   s   t   d S r   )r   r   r    r"   r"   r#   r     s   zTestWrapNumbers.setUpc                 C   s&   dt dddi}t|d|ksJ d S Ndisk1rU   disk_iontr   r!   inputr"   r"   r#   test_first_call  s   zTestWrapNumbers.test_first_callc                 C   s8   dt dddi}t|d|ksJ t|d|ksJ d S r  r  r  r"   r"   r#   test_input_hasnt_changed  s   z(TestWrapNumbers.test_input_hasnt_changedc                 C   s   dt dddi}t|d|ksJ dt dddi}t|d|ks"J dt dddi}t|d|ks3J dt dddi}t|d|ksDJ d S )	Nr  rU   r  
               r  r  r"   r"   r#   test_increase_but_no_wrap  s   z)TestWrapNumbers.test_increase_but_no_wrapc                 C   s  dt dddi}t|d|ksJ dt dddi}t|ddt dddiks(J dt dddi}t|ddt dddiks?J dt dddi}t|ddt dddiksVJ dt dddi}t|ddt ddd	iksmJ dt dddi}t|ddt ddd	iksJ dt d
ddi}t|ddt ddd	iksJ dt dddi}t|ddt ddd	iksJ dt dddi}t|ddt ddd	iksJ d S )Nr  d   r  r  n   Z      r     2      (   r  r  r"   r"   r#   	test_wrap  s$   "zTestWrapNumbers.test_wrapc                 C   st   dt dddi}t|d|ksJ t dddt dddd}t|d|ks'J dt dddi}t|d|ks8J d S )Nr  rU   r     r  disk2   r  r  r"   r"   r#   test_changing_keys  s   z"TestWrapNumbers.test_changing_keysc                 C   s.  t dddt dddd}t|d|ksJ t dddt dddd}t|dt dddt ddddks7J dt dddi}t|d|ksHJ t dddt dddd}t|d|ks^J t dddt dddd}t|d|kstJ t dddt dddd}t|dt dddt ddddksJ d S )Nr  r  r$  r  r  r  r  r  r  r"   r"   r#   test_changing_keys_w_wrap  s$   



z)TestWrapNumbers.test_changing_keys_w_wrapc                 C   sb   ddddd}t |d|ksJ t |d|ksJ ddddd}t |d}|d d	 d
ks/J d S )N)	i,      #  R       ȷ  )	i  r   i tU i   i  r   r   r   r&  )	6   r1  i $ i N r      r  i     )	iU	  i  i"  r   i  i4  i  i  i\  )nvme0n1	nvme0n1p1	nvme0n1p2	nvme0n1p3r  )	r  r)  r*  r+  r,  r-  r.  r/  r0  r4  r   i  r   )r!   doutr"   r"   r#   test_real_data  s   
zTestWrapNumbers.test_real_datac                 C   sb   dt dddi}t|d t }|d d|iksJ |d di iks%J |d di iks/J d S )Nr  rU   r  r   r^   r   r  r   
cache_infor!   r  cacher"   r"   r#   test_cache_first_call  s   
z%TestWrapNumbers.test_cache_first_callc                 C   s   dt dddi}t|d dt dddi}t|d t }|d d|iks(J |d dddddiks6J |d di iks@J d S )	Nr  rU   r  r  r   r^   )r  r   )r  r^   r  r   r   r;  r=  r"   r"   r#   test_cache_call_twice  s   


z%TestWrapNumbers.test_cache_call_twicec                 C   sv  dt dddi}t|d dt dddi}t|d t }|d d|iks(J |d dddddiks6J |d ddd	hiiksCJ d
d }dt dddi}t|d t }|d d|iksbJ |  dt dddi}t|d t }|d d|iksJ |  dt dddi}t|d t }|d d|iksJ |d dddddiksJ |d ddd	hiiksJ d S )Nr  r  r  r  r   r^   r@  r   rA  c                  S   sB   t  } | d dddddiksJ | d dddhiiksJ d S )	Nr^   r  r   r  r@  r   r  rA  )r   r<  )r>  r"   r"   r#   check_cache_info  s   
z9TestWrapNumbers.test_cache_wrap.<locals>.check_cache_infor  r  r  r;  )r!   r  r>  rC  r"   r"   r#   test_cache_wrap  s:   






zTestWrapNumbers.test_cache_wrapc                 C   s   dt dddi}t|d t dddt dddd}t|d t }|d d|iks-J |d dddddiks;J |d	 di iksEJ d S )
Nr  rU   r  r#  r$  r   r^   r@  r   r;  r=  r"   r"   r#   test_cache_changing_keysA  s   


z(TestWrapNumbers.test_cache_changing_keysc                 C   s\   dt dddi}t|d t|d td t i i i fks"J td td d S )Nr  rU   r  z?!?)r  r   r   r<  r  r"   r"   r#   test_cache_clearM  s   



z TestWrapNumbers.test_cache_clearznot supported)reasonc                 C   s   t  rt  stdt   t   t }|D ]}d|v s#J d|v s)J qt j  t }|D ]}d|v s=J d|vsCJ q5t j  t }|i i i fksVJ d S )Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters)r   disk_io_countersnet_io_countersr   skipr   r<  r   )r!   cachesr>  r"   r"   r#   test_cache_clear_public_apisV  s    


z,TestWrapNumbers.test_cache_clear_public_apisN)rb   rc   rd   r   r   r  r  r  r"  r'  r(  r:  r?  rB  rD  rE  rF  r   markskipifr   rL  r"   r"   r"   r#   r
    s"    
2	r
  )%rs   collectionsr   r   r   r2   r   r   r   unittestr   r   psutil.testsr   psutil._commonr   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rf   r   r   
namedtupler  r
  r"   r"   r"   r#   <module>   sL     (  