o
    ¦ÜÓhý  ã                   @   s   d 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mZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ d	d
„ Zdd„ ZG dd„ deƒZdS )zÃTests which are meant to be run as root.

NOTE: keep this module compatible with unittest: we want to run this
file with the unittest runner, since pytest may not be installed for
the root user.
é    N)ÚFREEBSD)ÚLINUX)ÚOPENBSD)ÚWINDOWS)Ú
CI_TESTING)ÚPsutilTestCasec                   C   s(   t tdƒrt tdƒrt tj¡S t ¡ S )NÚclock_gettimeÚCLOCK_REALTIME)ÚhasattrÚtimer   r	   © r   r   úL/var/www/html/ai/venv/lib/python3.10/site-packages/psutil/tests/test_sudo.pyÚget_systime   s   r   c                 C   sà   t tdƒr!t tdƒr!z
t tj| ¡ W d S  ty    t d¡‚w trkdd l}dd l	}t
j
 | t
jj¡}z| |j|j| ¡ d |j|j|j|jt|jd ƒ¡ W d S  |jyj } z|jdkret d¡‚‚ d }~ww t d	¡‚)
NÚclock_settimer	   z
needs rootr   é   iè  i"  zneeds Administrator userzsetting systime not supported)r
   r   r   r	   ÚPermissionErrorÚunittestÚSkipTestr   Ú
pywintypesÚwin32apiÚdatetimeÚfromtimestampÚtimezoneÚutcÚSetSystemTimeÚyearÚmonthÚ
isoweekdayÚdayÚhourÚminuteÚsecondÚintÚmicrosecondÚerrorÚwinerror)Úsecsr   r   ÚdtÚerrr   r   r   Úset_systime!   s8   
ÿ

ø


€ý
r)   c                   @   s†   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Ze 	e
d
¡dd„ ƒZe 	ed¡e 	ed¡e 	ed¡dd„ ƒƒƒZe 	e d¡dd„ ƒZdS )ÚTestUpdatedSystemTimez$Tests which update the system clock.c                 C   s   d| _ tƒ | _t ¡ | _d S )NF)Útime_updatedr   Ú	orig_timer   Ú	monotonicÚtime_started©Úselfr   r   r   ÚsetUpB   s   zTestUpdatedSystemTime.setUpc                 C   s*   | j rt ¡ | j }t| j| ƒ d S d S ©N)r+   r   r-   r.   r)   r,   )r0   Úextra_tr   r   r   ÚtearDownG   s   þzTestUpdatedSystemTime.tearDownc                 C   s   t | jd ƒ d| _d S )Né  T)r)   r,   r+   r/   r   r   r   Úupdate_systimeL   s   
z$TestUpdatedSystemTime.update_systimec                 C   sD   t  ¡ }|  ¡  t  ¡ }|  ||¡ t|| ƒ}| j|ddd d S ©Nr5   é   )Údelta)ÚpsutilÚ	boot_timer6   ÚassertGreaterr"   ÚassertAlmostEqual©r0   Út1Út2Údiffr   r   r   Útest_boot_timeQ   s   z$TestUpdatedSystemTime.test_boot_timezbroken on WINDOWSc                 C   s@   t  ¡  ¡ }|  ¡  t  ¡  ¡ }t|| ƒ}| j|ddd d S r7   )r:   ÚProcessÚcreate_timer6   r"   r=   r>   r   r   r   Útest_proc_create_timeZ   s
   z+TestUpdatedSystemTime.test_proc_create_timezskipped on CI for nowzbroken on OPENBSDzbroken on FREEBSDc                 C   s<   t  ¡ }|  ¡  t  ¡ }|  | ¡ | ¡ ¡ |  ||¡ d S r2   )r:   rC   r6   ÚassertEqualÚ
_get_ident)r0   Úp1Úp2r   r   r   Útest_proc_idente   s
   z%TestUpdatedSystemTime.test_proc_identz
LINUX onlyc                 C   sF   t  ¡ jjdd}|  ¡  t d¡ t  ¡ jjdd}|  ||¡ d S )NT)r-   gš™™™™™©?)r:   rC   Ú_procrD   r6   r   ÚsleeprF   )r0   r?   r@   r   r   r   Útest_linux_monotonic_proc_timeo   s
   
z4TestUpdatedSystemTime.test_linux_monotonic_proc_timeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r4   r6   rB   r   ÚskipIfr   rE   r   r   r   rJ   r   rM   r   r   r   r   r*   ?   s    
	




r*   )rQ   r   r   r   r:   r   r   r   r   Úpsutil.testsr   r   r   r)   r*   r   r   r   r   Ú<module>   s   