a
    QIhs                     @   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   sz   t t" tjjdd  W d    n1 s20    Y  t tj tdd  W d    n1 sl0    Y  d S )N      )	r   raisesOverflowErrorpsutilZ_psplatformZcextZcheck_pid_rangeNoSuchProcessProcessself r   P/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_misc.pytest_check_pid_range-   s    0z'TestSpecialMethods.test_check_pid_rangec                 C   s  t |  j}||}d|v s$J d|j |v s8J d|  d|ddv sXJ d|v sdJ d|vspJ |  |  ||}d|v sJ d|v sJ tj	j
t jd	t t d
L t  }||}d|j |v sJ d|v sJ d|vsJ W d    n1 s0    Y  tj	j
t jd	t t d
R t  }||}d|j |v sbJ d|v spJ d|vs~J W d    n1 s0    Y  tj	j
t jd	t t d
D t  }||}d|j |v sJ d|vsJ W d    n1 s0    Y  d S )Nzpsutil.Processzpid=zname=''zname=u'zstatus=z	exitcode=zstatus='terminated'nameZside_effectzstatus='zombie'zname=Z
terminated)r   r   Zspawn_testprocpidr#   replace	terminatewaitr   patchobjectZombieProcessosgetpidr   AccessDenied)r   funcprr   r   r    test_process__repr__3   sR     ,.z'TestSpecialMethods.test_process__repr__c                 C   s   | j td d S )N)r/   )r2   strr   r   r   r    test_process__str___   s    z&TestSpecialMethods.test_process__str__c                 C   s   t t dksJ d S )Nzpsutil.Error())reprr   Errorr   r   r   r    test_error__repr__b   s    z%TestSpecialMethods.test_error__repr__c                 C   s   t t dksJ d S )N )r3   r   r6   r   r   r   r    test_error__str__e   s    z$TestSpecialMethods.test_error__str__c                 C   s6   t tddksJ t tjdddddks2J d S )NA  z=psutil.NoSuchProcess(pid=321, msg='process no longer exists')r#   msgr#   r;   z5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))r5   r   r   r   r   r   r    test_no_such_process__repr__h   s    z/TestSpecialMethods.test_no_such_process__repr__c                 C   s6   t tddksJ t tjdddddks2J d S )Nr:   z"process no longer exists (pid=321)r#   r;   r<   msg (pid=321, name='name'))r3   r   r   r   r   r   r    test_no_such_process__str__r   s    z.TestSpecialMethods.test_no_such_process__str__c                 C   s8   t tddksJ t tjddddddks4J d S )Nr:   zGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r#   @  foor#   ppidr;   z?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))r5   r   r+   r   r   r   r    test_zombie_process__repr__|   s    z.TestSpecialMethods.test_zombie_process__repr__c                 C   s8   t tddksJ t tjddddddks4J d S )Nr:   z,PID still exists but it's a zombie (pid=321)r#   r@   rA   rB   z$foo (pid=321, ppid=320, name='name'))r3   r   r+   r   r   r   r    test_zombie_process__str__   s    z-TestSpecialMethods.test_zombie_process__str__c                 C   s6   t tddksJ t tjdddddks2J d S )Nr:   zpsutil.AccessDenied(pid=321)r#   r;   r<   z4psutil.AccessDenied(pid=321, name='name', msg='msg'))r5   r   r.   r   r   r   r    test_access_denied__repr__   s
    z-TestSpecialMethods.test_access_denied__repr__c                 C   s6   t tddksJ t tjdddddks2J d S )Nr:   z	(pid=321)r#   r;   r<   r>   )r3   r   r.   r   r   r   r    test_access_denied__str__   s
    z,TestSpecialMethods.test_access_denied__str__c                 C   s6   t tddksJ t tjdddddks2J d S )N   z?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')r:   r#   r%   r#   zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))r5   r   TimeoutExpiredr   r   r   r    test_timeout_expired__repr__   s    z/TestSpecialMethods.test_timeout_expired__repr__c                 C   s6   t tddksJ t tjdddddks2J d S )NrH   ztimeout after 5 secondsr:   r#   rI   z.timeout after 5 seconds (pid=321, name='name'))r3   r   rJ   r   r   r   r    test_timeout_expired__str__   s
    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   rA   )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!   r5   r2   r4   r7   r9   r=   r?   rD   rE   rF   rG   rK   rL   rP   rT   r   r   r   r    r   ,   s   ,


r   c                   @   s<   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szt| W q ty   |tjvrtt|}|d u r^Y q|jd urd|j vr| 	|dY q0 qtjD ]}||v sJ qd S )N>   testr   ProcessLookupErrortestsPermissionError_
deprecatedz not in psutil.__all__)
dirr   
startswith
__import__ImportError__all__getattr__doc__lowerZfail)r   Z
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   )r3   ).0xr   r   r    
<listcomp>       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1rA   )r   r   rA   as_dict)r   r0   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8 z
| }W n t jyn   Y n
0 || W d    q81 s0    Y  q8t }||jD ]h\}}|dv rq| j|d8 z
| }W n t j	y   Y n
0 || W d    q1 s0    Y  qt
t
t jdd	d
d}t|t jsBJ |jdksRJ |jd	ksbJ |jd
ksrJ 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	sJ |jdks J |jd	ks0J |jd
ks@J t
t
t jddd	d}t|t jsnJ |jdks~J |jdksJ |jd	ksJ d S )Nc                 S   s4   t t |  t| }t|}| |ks0J d S N)jsonloadsdumpspickle)retabr   r   r    check   s    

z*TestMisc.test_serialization.<locals>.checkT)clear_cache)procr#   >   Zwin_service_getZwin_service_iter)r#   i  r#   r;   )r%   r#   r;   *   )r%   r#   rC   r;   {   !   )secondsr%   r#   )r   r   rs   r   iterZgettersZsubTestr6   r   r.   ry   rw   rx   r   
isinstancer%   r#   r;   r+   rC   rJ   r   )r   r}   r   nsrg   r#   rz   r|   r   r   r    test_serialization   sp    	
(
*zTestMisc.test_serializationc              	   C   s  t jjtjdtjd"}t  |js*J W d    n1 s>0    Y  t jjtjdtdd"}t  |jsvJ W d    n1 s0    Y  t jjtjdtdL}t	
t t  W d    n1 s0    Y  |jsJ W d    n1 s0    Y  t jjtjdtddR}| tj t  W d    n1 sL0    Y  |jsbJ W d    n1 sx0    Y  d S )NZ
_get_identr$   rQ   )r   r)   r*   r   r   r.   calledr+   
ValueErrorr   r   r   assertRaises)r   methr   r   r    test_ad_on_process_creation@  s4    
((&((z$TestMisc.test_ad_on_process_creationc              	   C   sz   t jdddX tt}tt W d    n1 s80    Y  dt|j	 v sXJ W d    n1 sl0    Y  d S )Nzpsutil._psplatform.cext.versionz0.0.0Zreturn_valuezversion conflict)
r   r)   r   r   rb   r   r   r3   valuerf   )r   cmr   r   r    test_sanity_version_check]  s    &z"TestMisc.test_sanity_version_checkN)	rU   rV   rW   rh   rq   rt   r   r   r   r   r   r   r    rX      s    NrX   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 ru   callsr   r   r   r    setUpm  s    zTestMemoizeDecorator.setUpNc                 C   s2  t dD ]2}| }| 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sjJ |d urD||ksDJ qDt dD ]H}|ddd}| jdi fdi fdddifgksJ |d ur||ksJ qt| jdksJ |  | }|d ur
||ks
J t| jdksJ |jd	ks.J d S )
Nr   r   rQ   rQ   barr         My docstring.)ranger   rR   cache_clearre   )r   objexpected_retvalr]   rz   r   r   r    run_againstr  s,    $
z TestMemoizeDecorator.run_againstc                    s&   t  fdd}|  | j|dd d S )Nc                     s    j | |f dS r      r   appendargskwargsZ	baseclassr   r    rA     s    z/TestMemoizeDecorator.test_function.<locals>.foor   r   )r   r   )r   rA   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 ru   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     s    z0TestMemoizeDecorator.test_class.<locals>.Foo.barN)rU   rV   rW   re   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sVJ t|dddt|dddkszJ t|dt|dksJ d S )Nc                   @   s   e Zd Zdd ZdS )z6TestMemoizeDecorator.test_class_singleton.<locals>.Barc                 _   s   d S ru   r   r   r   r   r    r     s    z?TestMemoizeDecorator.test_class_singleton.<locals>.Bar.__init__N)rU   rV   rW   r   r   r   r   r    Bar  s   r   rQ   r   )rA   r   )r   id)r   r   r   r   r    test_class_singleton  s    $z)TestMemoizeDecorator.test_class_singletonc                    s,   G  fddd}|  | j | jdd d S )Nc                       s    e Zd Zee fddZdS )z3TestMemoizeDecorator.test_staticmethod.<locals>.Fooc                     s    j | |f dS r   r   r   r   r   r    r     s    z7TestMemoizeDecorator.test_staticmethod.<locals>.Foo.barN)rU   rV   rW   staticmethodr   r   r   r   r   r    r     s   r   r   r   r   r   r   r   r   r    test_staticmethod  s    z&TestMemoizeDecorator.test_staticmethodc                    s,   G  fddd}|  | j | jdd d S )Nc                       s    e Zd Zee fddZdS )z2TestMemoizeDecorator.test_classmethod.<locals>.Fooc                    s    j ||f dS r   r   )clsr   r   r   r   r    r     s    z6TestMemoizeDecorator.test_classmethod.<locals>.Foo.barN)rU   rV   rW   classmethodr   r   r   r   r   r    r     s   r   r   r   r   r   r   r   r    test_classmethod  s    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 ]0}|d}di f}||kstJ t dksTJ qTtdD ]8}|ddd}dddif}||ksJ t d	ksJ q|  | }di f}||ksJ t d
ksJ |jdks
J d S )Nc                     s     d | |fS )Foo docstring.Nr   r   r   r   r    rA     s    
z/TestMemoizeDecorator.test_original.<locals>.foor   r   rQ   r   r   r   r   r   r   )r   r   rR   r   re   )r   rA   r]   rz   expectedr   r   r    test_original  s0    z"TestMemoizeDecorator.test_original)N)rU   rV   rW   r   tearDownr   r   r   r   r   r   r   r   r   r   r    r   l  s   

r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestCommonModulec                    s   G  fddd}| }g  |   |   t dks<J g  |j | |   |   t dkslJ g  |j | |   |   t dksJ 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 ru   r   r   r   r   r    rA     s    z=TestCommonModule.test_memoize_when_activated.<locals>.Foo.fooN)rU   rV   rW   r	   rA   r   r   r   r    r     s   r   r   rQ   )rA   rR   Zcache_activateZ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s`J t d|dd|ddiksJ t d|ddiksJ t d|ddiksJ t d|ddiksJ d S )Nc                 S   s   t r|  S | S ru   )r   upper)rS   r   r   r    k  s    z4TestCommonModule.test_parse_environ_block.<locals>.kza=1 r{   rr   z	a=1 b=2  r|   2za=1 b=  r8   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 rPtd(}d|_t  t r8J W d    n1 sL0    Y  t  tjdtd$}t rxJ |jsJ W d    n1 s0    Y  t  tjdtj	d,}t rJ t  |jsJ W d    n1 s0    Y  t  tjdtj	d0}t rJ t  |js.J W d    n1 sD0    Y  n^t
tB ttjtj}z|d W |  n
|  0 W d    n1 s0    Y  d S )Nzpsutil._common.socketFzpsutil._common.socket.socketr$   z!psutil._common.socket.socket.bind)z::1r   )Z
addCleanupr   r   r   r)   has_ipv6OSErrorr   socketgaierrorr   r   AF_INET6SOCK_STREAMbindclose)r   rS   sockr   r   r    test_supports_ipv6#  sF    (
(
(.z#TestCommonModule.test_supports_ipv6c              	   C   s  t jt}t|sJ tt j|r,J tjdtdB t	
t t| W d    n1 sd0    Y  W d    n1 s0    Y  tjdtd t|rJ W d    n1 s0    Y  tjddd t|rJ W d    n1 s0    Y  d S )Nzpsutil._common.os.statr$   zpsutil._common.stat.S_ISREGFr   )r,   pathabspath__file__r   dirnamer   r)   r\   r   r   r   FileNotFoundError)r   Z	this_filer   r   r    test_isfile_strictJ  s    D*z#TestCommonModule.test_isfile_strictc              	   C   s  t jtjddP tt "}t	d t
j  W d    n1 sJ0    Y  W d    n1 sh0    Y  | }|dsJ |d|v sJ tdd|v sJ t jtjddJ tt }t	td W d    n1 s0    Y  W d    n1 s0    Y  | }d|v s0J d	|v s>J t jtjddX tt (}td
d}d|_t	| W d    n1 s0    Y  W d    n1 s0    Y  | }d|v sJ d|v sJ d S )NZPSUTIL_DEBUGTZhellozpsutil-debugz.pycz.pyzthis is an errorzignoring ValueErrorz'this is an error'r   zno such filez/foo)r   r)   r*   r   _common
contextlibredirect_stderrioStringIOr   sysstderrflushgetvaluer`   r   r&   r   r   filename)r   r   r;   excr   r   r    
test_debugX  s,    FJ
HzTestCommonModule.test_debugc                 C   s   |   }t|d}|d W d    n1 s20    Y  t|dksLJ t|dks\J tt t|d  W d    n1 s0    Y  tt t|d  W d    n1 s0    Y  t|d dddksJ t|d dddksJ d S )NwrA   s   fooz-invalidr   )fallback)Z
get_testfnopenwriter   r   r   r   r   )r   Ztestfnr   r   r   r    test_cat_bcatt  s    (**zTestCommonModule.test_cat_bcatN)	rU   rV   rW   r   r   r   r   r   r   r   r   r   r    r     s   'r   rA   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 ru   )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disk1rH   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s4J 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sDJ dt dddi}t|d|ksfJ dt dddi}t|d|ksJ d S )	Nr   rH   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sPJ 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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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sjJ 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sNJ dt dddi}t|d|kspJ d S )Nr   rH   r      r   Zdisk2   r   r   r   r   r    test_changing_keys  s    z"TestWrapNumbers.test_changing_keysc                 C   s0  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snJ dt dddi}t|d|ksJ t dddt dddd}t|d|ksJ t dddt dddd}t|d|ksJ t dddt dddd}t|dt dddt ddddks,J 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s2J 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   r  i $ i N r      r   i     )	iU	  i  i"  r   i  i4  i  i  i\  )nvme0n1Z	nvme0n1p1Z	nvme0n1p2Z	nvme0n1p3r   )	r   r  r  r  r  r  r  r	  r
  r  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s6J |d di iksJJ |d di iks^J d S )Nr   rH   r   r   rQ   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sPJ |d dddddikslJ |d di iksJ d S )	Nr   rH   r   r   r   rQ   )r   r   )r   rQ   r   r   r   r  r  r   r   r    test_cache_call_twice  s    


z%TestWrapNumbers.test_cache_call_twicec                 C   s~  dt dddi}t|d dt dddi}t|d t }|d d|iksPJ |d dddddikslJ |d ddd	hiiksJ d
d }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sJ |  dt dddi}t|d t }|d d|iks@J |d dddddiks^J |d ddd	hiikszJ d S )Nr   r   r   r   r   rQ   r  r   r  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 )	NrQ   r   r   r   r  r   r   r  )r   r  )r  r   r   r    check_cache_info  s    
z9TestWrapNumbers.test_cache_wrap.<locals>.check_cache_infor   r   r   r  )r   r   r  r  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sZJ |d dddddiksvJ |d	 di iksJ d S )
Nr   rH   r   r   r   r   rQ   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sDJ td td d S )Nr   rH   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 sFJ d|v s6J q6t j  t }|D ]}d|v szJ d|vsjJ qjt j  t }|i i i fksJ d S )Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters)r   Zdisk_io_countersZnet_io_countersr   skipr   r  r   )r   cachesr  r   r   r    test_cache_clear_public_apisV  s     


z,TestWrapNumbers.test_cache_clear_public_apisN)rU   rV   rW   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   markZskipifr   r!  r   r   r   r    r     s    
2	r   )%re   collectionsr   r   rv   r,   ry   r   r   Zunittestr   r   Zpsutil.testsr   Zpsutil._commonr   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rX   r   r   
namedtupler   r   r   r   r   r    <module>   sJ     (  