JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr 0iCbdZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZerddlZddlZd#dZdZ dZ!dZ"dZ#dZ$ejJjMe dGddeZ'ejJjMe dGdd eZ(ejJjMe dGd!d"eZ)y)$zPOSIX specific tests.N)mock)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)AARCH64)HAS_NET_IO_COUNTERS) PYTHON_EXE)PsutilTestCase)pytest)retry_on_failure)sh)skip_on_access_denied) spawn_subproc) terminatec,dg}tr|jd||jdt|gn/tst r|jdn|jdtr|j dd}|jd |gt|}tr|jn|jd d}g}|D]/}|j} t|}|j|1||S|d S#t$rY'wxYw) zwWrapper for calling the ps command with a little bit of cross-platform support for a narrow range of features. psz --no-headersNz-pz-Aaxstartstimez-or) rappendextendstrr rreplacer splitlinesstripint ValueError)fmtpidcmdoutput all_outputlines H/opt/hc_python/lib64/python3.12/site-packages/psutil/tests/test_posix.pyrr*s &C  >"  D#c(#$ # 4 4 kk'7+JJc{ WF$)V   v/@/@/B12/FFJzz| t9D $ {!}   s D DDcTd}trd}t||j}|dS)Ncommandcommr)r rsplit)r$fieldr+s r)ps_namer/as- E n""$G 1:cd}tstrd}t||}tjdd|}|j S)Nr+argsz\(python.*?\)$)rr rresubr )r$r.outs r)ps_argsr7is; E e UC.C &&"B ,C 99;r0c.d}trd}t||S)Nrssrssizerrr$r.s r)ps_rssr=ss E  eS>r0c.d}trd}t||S)Nvszvsizer;r<s r)ps_vszrAzs E  eS>r0c td|j}|jdd}|j}t|ddz}t|ddz}t|ddz}t|d jd d }||||fS#t$r;}dt|j vrt j dcYd}~Sd}~wwxYw) Nzdf -k z device busyzdf returned EBUSY r%r3) rr RuntimeErrorrlowerrskipr-r!floatr) devicer6errr(fields sys_totalsys_usedsys_free sys_percents r)dfrTs6&"#))+ 99T?1 D ZZ\FF1I%I6!9~$H6!9~$Hq ))#r23K x; 77  CHNN, ,;;23 3 s#B C"/CCCCz POSIX onlyreasonceZdZdZedZedZdZdZdZ dZ dZ e e d Ze e d Zd Zd Zd ZdZej*j-exseddZdZe dZej*j-edej*j-eddZy) TestProcesszBCompare psutil results against 'ps' command line utility (mainly).cfttddgtjj|_y)Nz-Ez-O)stdin)rr subprocessPIPEr$clss r) setUpClasszTestProcess.setUpClasss& t $JOO # r0c.t|jyN)rr$r]s r) tearDownClasszTestProcess.tearDownClasss#''r0ctd|j}tj|jj }||k(sJy)Nppid)rr$psutilProcessrd)selfppid_ps ppid_psutils r) test_ppidzTestProcess.test_ppids;VTXX&nnTXX.335 +%%%r0ctd|j}tj|jj j }||k(sJy)Nuid)rr$rerfuidsreal)rguid_ps uid_psutils r)test_uidzTestProcess.test_uidsAE488$^^DHH-22499 ###r0ctd|j}tj|jj j }||k(sJy)Nrgid)rr$rerfgidsrn)rggid_ps gid_psutils r)test_gidzTestProcess.test_gidsAFDHH%^^DHH-22499 ###r0ctd|j}tj|jj }||k(sJy)Nuser)rr$rerfusername)rg username_psusername_psutils r) test_usernamezTestProcess.test_usernames;*  ..2;;=o---r0ctj}tjdt5}|j t |jjk(sJ|jsJ dddy#1swYyxYw)Nzpsutil.pwd.getpwuid side_effect) rerfrpatchKeyErrorrzrrmrncalled)rgpfuns r)test_username_no_resolutionz'TestProcess.test_username_no_resolutions] NN  ZZ-8 D::<3qvvx}}#55 55:: :E D Ds AA??Bctjdt|j}t j |jj ddz }||k(sJy)N皙?rrD)timesleepr=r$rerf memory_info)rgrss_ps rss_psutils r)test_rss_memoryzTestProcess.test_rss_memoryP 3!^^DHH-99;A>E ###r0ctjdt|j}t j |jj ddz }||k(sJy)NrrrD)rrrAr$rerfr)rgvsz_ps vsz_psutils r)test_vsz_memoryzTestProcess.test_vsz_memoryrr0ct|j}tjj |j }t j|jjj }tjdd|}tjdd|}tjdd|}tjdd|}||k(sJy)Nz\d.\dr3z\d) r/r$ospathbasenamerJrerfnamer4r5)rgname_ps name_psutils r) test_namezTestProcess.test_names$((#''""7+113nnTXX.335;;= &&2w/ffXr;7 &&G,ffUB 4 +%%%r0cd}gd}tjd|5tjd|5tj}|j dk(sJ ddddddy#1swYxYw#1swYyxYw)Nlong-program-name)long-program-name-extendedfoobarpsutil._psplatform.Process.name return_value"psutil._psplatform.Process.cmdliner)rrrerfr)rgrcmdliners r)test_name_longzTestProcess.test_name_longst#> ZZ9 M47NN$vvx#???? N MN Ms"A>*A2!A>2A; 7A>>Bc4d}tjd|5tjdtjdd5tj}|j dk(sJ ddddddy#1swYxYw#1swYyxYwNrrrrrr3r)rrre AccessDeniedrfrrgrrs r)test_name_long_cmdline_ad_excz)TestProcess.test_name_long_cmdline_ad_excs}# ZZ9 M4"//26NN$vvx#6666 N MN Ms#,B*B1BB BBcd}tjd|5tjdtjdd5tj}t j tj5|jdddddddddy#1swYxYw#1swYxYw#1swYyxYwr)rrre NoSuchProcessrfrraisesrrs r)test_name_long_cmdline_nsp_excz*TestProcess.test_name_long_cmdline_nsp_excs# ZZ9 M4"00B7NN$]]6#7#78FFH9 N M 98 N Ms;,C8B4>B(B4C(B1 -B44B= 9CC zps -o start not availablerUchtd|j}tj|jj }t j j |jd}t|}t j j |jd}|||hvsJy)Nrz%H:%M:%S) rr$rerf create_timedatetime fromtimestampstrftimeround)rgtime_ps time_psutiltime_psutil_tstampround_time_psutilround_time_psutil_tstamps r)test_create_timezTestProcess.test_create_timesWdhh'nnTXX.::< %..<<  (:   "+.#+#4#4#B#B $ (:  !-/GHHHHr0ct|j}tj|jj } ||k(sJy#t $r|dt |}||k(sJYywxYwra)r/r$rerfexeAssertionErrorlen)rg ps_pathnamepsutil_pathnameadjusted_ps_pathnames r)test_exezTestProcess.test_exesqdhh'  ..2668 7/1 11 7$//A[1A#B "66 66 7sA A-,A-ct|j}djtj|jj }t r+t|t|kr|j|sJy||k(sJy)N ) r7r$joinrerfrr r startswith)rg ps_cmdlinepsutil_cmdlines r) test_cmdlinezTestProcess.test_cmdline(siTXX& &..":"B"B"DE s:^)<<!,,Z8 88/ //r0znot reliable on SUNOSznot reliable on AIXctd|j}tjj }||k(sJy)Nnice)rr$rerfr)rgps_nice psutil_nices r) test_nicezTestProcess.test_nice6s7VTXX&nn&++- +%%%r0N)__name__ __module__ __qualname____doc__ classmethodr_rbrjrqrwr}rrrrrrrrrrmarkskipifrrrrrr rrr0r)rXrXs/L & $ $ . $$$$ & @ 7  [[ -HI IJ I 7(00 [[&=> [[$9:&;?&r0rXceZdZdZedZejje dejje jd dejje ddZ ed Zed Zd Zd Zd ZdZejjededZy)TestSystemAPIszTest some system APIs.cxttd}tj}ts t rd|vr|j ddt|t|z dkDrL|Dcgc] }||vs| c}|Dcgc] }||vs| c}z}tjdt|zSycc}wcc}w)Nr$rrz difference: ) sortedrrepidsrrinsertrrfailr)rgpids_ps pids_psutilx differences r) test_pidszTestSystemAPIs.test_pidsBsE#kkm  W'!1 NN1a  w<#k* *Q .%0E[AW4D![E"I"aa{&:7IJ;;~J?@ @ /EIs) B23B2= B7B7zunreliable on SUNOSrUifconfigzno ifconfig cmdz not supportedctd}tjdD]F}|jD]}|j |s*t j d|d|cSy)Nz ifconfig -aT)perniczcouldn't find z nic in 'ifconfig -a' output )rrenet_io_countersr-rrr)rgr&nicr(s r)test_nic_nameszTestSystemAPIs.test_nic_namesVskM"))6C ??3''{{$SE* &x) 7r0ctd}|jstjdSg}|j D]y}|j d}|j d}t str2 t|j d}|j|||fg|j||f{t strCtjDcgc]%}|j|j|jf'}}n7tjDcgc]}|j|jf}}t!|t!|k(sJt#|t#|k(sJtjD] }|j|jdkDr Jy#t$r t|j d}YBwxYwcc}wcc}w)Nwho -uno users on this systemrr)rr rrKrr-rrr!r"rreusersrterminalr$rr) rgr6susersr(ryrr$upuserss r) test_userszTestSystemAPIs.test_userses|lyy{;;89 9NN$D::<?Dzz|AH0djjl2./C tXs34 tX./% E;A<<>J>aqvvqzz1551>FJ4:LLNCNqqvvqzz*NFC6{c&k)))f~///LLNDxx#xx!|#|#"0djjl2./C0KCs9F/!*G$G /%GGctd}|jstjdSd}t j d|}|rd}nmt j d|}|rd}nRt j d|}|rd}n7t j d |}|rd}|Dcgc]}|j }}|stjd |S|jtj| 5ttjD]G\}}tjj|jj|}|||k(rGJ dddycc}w#1swYyxYw) Nrrz\d\d\d\d-\d\d-\d\d \d\d:\d\dz%Y-%m-%d %H:%Mz[A-Z][a-z][a-z] \d\d \d\d:\d\dz %b %d %H:%Mz[A-Z][a-z][a-z] \d\dz%b %dz[a-z][a-z][a-z] \d\dz&cannot interpret tstamp in who output )rewho)rr rrKr4findall capitalizesubTestrer enumeraterrstartedr)rgr6tstamprridxr psutil_values r)test_users_startedz!TestSystemAPIs.test_users_startedsKlyy{;;89 9**7"C;;!HNO O \\S\ 9#FLLN3Q'00>>II (6"$ws|333 4: 9 #D : 9s"E,:A$E1E11E:chtjdttjd5}t j t5tjjtjddd|jsJ dddy#1swY!xYw#1swYyxYw)Nzpsutil._psposix.os.killr3r) rrOSErrorerrnoEBADFrrre_psposix pid_existsrgetpidrrgms r)test_pid_exists_let_raisez(TestSystemAPIs.test_pid_exists_let_raisesuZZ %75;;3K w'**299;7(88O8   ('  #B( 2B<B(B% !B((B1chtjdttjd5}t j t5tjjtjddd|jsJ dddy#1swY!xYw#1swYyxYw)Npsutil._psposix.os.waitpidr3r) rrrrrrrrerwait_pidrrrrs r)test_os_waitpid_let_raisez(TestSystemAPIs.test_os_waitpid_let_raisesuZZ (gekk26N w'((5(88O8   ('  r ctjdttjd5}t j tjj5tjjtjdddd|jsJ dddy#1swY!xYw#1swYyxYw)Nr r3rg{Gz?)timeout)rrrrEINTRrrrerTimeoutExpiredr rrrrs r)test_os_waitpid_eintrz$TestSystemAPIs.test_os_waitpid_eintrs ZZ (gekk26N v==>((d(C?88O8   ?>  s#.B>4B2B>2B; 7B>>Cc8tjdd5}tjt5t j jtjddd|jsJ dddy#1swY!xYw#1swYyxYw)Nr )rrr) rrrrr"rerr rrrrs r)test_os_waitpid_bad_ret_statusz-TestSystemAPIs.test_os_waitpid_bad_ret_statussh ZZ (w z*((5+88O8   +*  s"B2B$BB BBzunreliable on AIXcd}tjdD]}tj|j} t |j \}}}}t |j|z |ksJt |j|z |ksJt |j|z |ksJt |j|z dkrJy#t$r0}t|j}d|vsd|vsd|vrYd}~d}~wwxYw)Ni@F)allrzno such file or directoryzraw devices not supportedzpermission denied)redisk_partitions disk_usage mountpointrTrMabstotalusedfreepercentrIrrJ) rg tolerancepartusagerPrQrRrSrNs r)test_disk_usagezTestSystemAPIs.test_disk_usages$ **u5D%%doo6E ==? _: 8X{5;;23i???5::01I===5::01I===5==;671<<<)6 #hnn&/362c9*c1 sC  D%DDDN)rrrrrrrrrr shutilwhichr rrrr rrrrr#rr0r)rr>s  AA& [[&;< [[LFLL44=NO [[//H IP= $$<"4"4H  [[$78=9=r0rceZdZdZy)TestMiscctjjj}|dkDsJ|t jk(sJ|t j k(sJy)Nr)re _psplatformcext getpagesizeresourcemmapPAGESIZE)rgpagesizes r)test_getpagesizezTestMisc.test_getpagesizesQ%%**668!||8//11114==(((r0N)rrrr0rr0r)r'r's)r0r'ra)*rrrrr4r$r[runittestrrerrrrrr r psutil.testsr r r rrrrrrrr-r,rr/r7r=rArTrrrXrr'rr0r)r3s    ,#').&"(n 8 Il3i&.i&4i&XIl3j=^j=4j=ZIl3)~)4)r0