0i͊dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ddlm+Z+dd lm,Z,dd!lm-Z-Gd"d#e*Z.Gd$d%e*Z/Gd&d'e*Z0Gd(d)e*Z1Gd*d+e*Z2Gd,d-e*Z3Gd.d/e*Z4Gd0d1e*Z5y)2zTests for system APIS.N)mock)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)broadcast_addr)AARCH64)ASCII_FS) CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT) HAS_BATTERY) HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES) MACOS_12PLUS)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)pytest)retry_on_failurec0eZdZdZdZdZdZdZdZy)TestProcessIterc,tjtjDcgc]}|jc}vsJ|j }|jtjDcgc]}|jc}vsJtj |j}|j|j|jtjDcgc]}|jc}vsJycc}wcc}wcc}wN) osgetpidpsutil process_iterpid spawn_subprocProcesskillwait)selfxsprocps I/opt/hc_python/lib64/python3.12/site-packages/psutil/tests/test_system.pytest_pid_presencez!TestProcessIter.test_pid_presence;syy{f.A.A.CD.Cquu.CDDDD""$yyF,?,?,AB,AqQUU,ABBBB NN599 %  yy0C0C0E F0E10E FFFF EB!GsD4D -Dcttj}t|dtt |dk(sJy)Nc|jSr%r*r0s r3z4TestProcessIter.test_no_duplicates..Fs)keyc|jSr%r7r8s r3r9z4TestProcessIter.test_no_duplicates..Gs155r:)listr(r)sortedset)r/lss r3test_no_duplicatesz"TestProcessIter.test_no_duplicatesDs> &%%' (bo.& G3    r:cttjtdD]}t j dtj tj5ttjdgrJ dddtjjy#1swY*xYwNzpsutil.Process.as_dict side_effect cpu_timesattrs) r=r(r)rangerpatch NoSuchProcessr&r' cache_clearr/r0s r3test_emulate_nspz TestProcessIter.test_emulate_nspJs V "#qA("00=  3 3;- HIIII     + + - s (#B55B> cttjtdD]}t j dtj tj5tjtj 5ttjdgddddddtjjy#1swY2xYw#1swY6xYwrC) r=r(r)rJrrK AccessDeniedr&r'r raisesrMrNs r3test_emulate_access_deniedz*TestProcessIter.test_emulate_access_deniedTs V "#qA("// <]]6#6#67,,K=AB8     + + - 87 s$($C* !C-C*C' #C**C3 ctjdgD]+}t|jj dgk(r+JtjdgD]+}t|jj dgk(r+Jt j t5ttjdgdddtjdtjdd5}tjddgD]'}|jdJ|jddk\r'J|jsJ dddtjdtjdd5}t}tjddg| D])}|jd|usJ|jddk\r)J|jsJ dddy#1swY"xYw#1swYxYw#1swYyxYw) Nr*rHfooz$psutil._psplatform.Process.cpu_timesrrErG)rIad_value) r(r)r=infokeysr rR ValueErrorrrKrQcalledobject)r/r2mflags r3 test_attrszTestProcessIter.test_attrs_s$$E73A &5'1 114$$E73A &5'1 114 ]]: & $$E73 4' ZZ 2++Ar2 (({/CDvvk*222vve})))E88O8 ZZ 2++Ar2 8D((k*Tvvk*d222vve})))  88O8  ' &    s1$!G%8?G28G2=A G> G>%G/2G;>HcttjtjsJtjj tjrJyr%)r=r(r)_pmaprMr/s r3test_cache_clearz TestProcessIter.test_cache_clear{s@ V "#|||'')<<.callbacks KK r:)timeout)rpg{Gz?rrrpg? returncodectj|d|\}}t|dk(sJt|dk(sJ||fS)NQ?rtrsrDr( wait_procslenprocsrpgonealives r3test_1z/TestProcessAPIs.test_wait_procs..test_1I ++thKD%t9> !>u:? "?; r:ctj|d|\}}t|dk(sJt|dk(sJ||fS)Nryrtrurrzr}s r3test_2z/TestProcessAPIs.test_wait_procs..test_2rr:)r+r(r,r*r rRrZr{ TypeErrortimer|hasattrr! terminater poprvsignalSIGTERMr?)r/rpsproc1sproc2sproc3r0r~trrr2rrros @r3test_wait_procszTestProcessAPIs.test_wait_procssz  ##%##%##%170HI0H1&0HI ]]: &   eR 0' ]]9 %   ea 0& IIK''thO eyy{Q$$$x5zQxAq,/ // "     UH- ezzT2TaeeT2222 88:((V^^O; ;;88:((A- -- |###Aq,/ // "     UH- e4yVZZVZZ@@@@A1l+ ++aJ & & % %.3s$&J%J*:J7K*J47Kc$|j}|j}|j}|||fDcgc]!}tj|j#}}|D]}|j tj |ycc}wr%)r+r(r,r*rr{)r/rrrr0r~r2s r3test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeouts ##%##%##%170HI0H1&0HIA KKM% Js&B c|j}tj|jsJtj|j}|j |j tj|jrJtjdrJtjddtjvk(sJy)Nrqr)r+r( pid_existsr*r,r-r.ro)r/r1r2s r3test_pid_existszTestProcessAPIs.test_pid_existss""$  +++ NN599 %  $$UYY///$$R(((  #V[[](:;;;r:cftj}|D]} tj|sJt t|dzt|dz}|D]}tj|sJy#t$r0t j d|tjvsJYwxYw)Ng?i:i>)r(rorAssertionErrorrsleeprJmax)r/ror*s r3test_pid_exists_2z!TestProcessAPIs.test_pid_exists_2s{{}C 0((---SY&D E(9:C((- -- " 0 3&++-///  0sA776B0/B0N) rdrerfr markskipifrr rrrrrgr:r3ririsq [[ =9, 9,v [[ =! !< .r:riceZdZdZej j exrej ddZ dZ y) TestMiscAPIsctj}t|tsJ|dkDsJ|t jksJyNr)r( boot_time isinstancefloatr)r/bts r3test_boot_timezTestMiscAPIs.test_boot_times?    "e$$$Av vDIIKr:unreliable on CIrjc tj}|sJ|D]-}|j|5|jsJt |jt sJt |j t tdfsJ|j't |jt tdfsJ|j |j|jdkDsJtjj|jtstr|j!Jtj|jddd0y#1swY> !>|| ## LL #Dvt, 2d 2,r:N) rdrerfrr rrrr(rrrrgr:r3rrsJ  [[)<6<<>)2D--&/3r:rceZdZdZdZy)TestMemoryAPIsc Ttj}|jdkDsJ||jdkDsJ|d|jcxkr dksJ|J||j dkDsJ||j dk\sJ||jD]}t||}|dk7rt|tsJ|dk7s,|dk\stj|d|dcS||jkDs^tj|d|jd|d |dcSy) Nrdpercenttotalz < 0 ()z > total (total=z, =) r(virtual_memoryr availablerusedfree_fieldsrrintr fail)r/memrvalues r3test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory8s'##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KKDC&Ey !%---wz!;;$wa'@AA399$!;;("2399+RvQugQO r:ctj}|jdk(sJ|jdk\sJ||jdk\sJ||jdkDr|j dkDsJ||j dk(sJ|d|j cxkr dksJ|J||jdk\sJ||jdk\sJ|y)N)rrrrsinsoutrr) r( swap_memoryrrrrrrr)r/rs r3test_swap_memoryzTestMemoryAPIs.test_swap_memoryKs  "{{    yyA~"s"~xx1}!c!} 99q=88a< $ $<88q= %# %=CKK&3&++&++&ww!| S |xx1}!c!}r:N)rdrerfrrrgr:r3rr7s &"r:rceZdZdZdZdZdZdZdZdZ e jje xrexsed ed d Zd Zd ZdZdZdZdZdZe jjexred e jje d dZe jje d dZy) TestCpuAPIsc\tj}|J|ttjdk(sJ|dk\sJtj j dr>td5}|j}ddddvrtjdSyy#1swY$xYw)NTpercpursz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id) r( cpu_countr|rGr&pathexistsopenreadr skip)r/logicalfd cpuinfo_datas r3test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalcs""$"""#f..d;<<<<!|| 77>>/ *o&"!wwy 'L0{{#HII1 +&&s .B""B+ctj}tjd}|tjdStrt j dddkr|Jy|dk\sJ||k\sJy)NFrzcpu_count_cores() is NonerD)rsrs)r(rr rr rgetwindowsversion)r/rcoress r3test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coresoss""$  / =;;:; ; s,,.r2f<= =A: :e# ##r:cZdD]}tjd|5}tjJ|jsJ dddtjd|5}tjdJ|jsJ dddy#1swYSxYw#1swYxYw)N)rqrNz$psutil._psplatform.cpu_count_logical return_valuez"psutil._psplatform.cpu_count_coresFr)rrKr(rr[)r/valr]s r3test_cpu_count_nonezTestCpuAPIs.test_cpu_count_nonezs C6S'')111xxx  43''6>>>xxx  ! s%B"'B!B !B* cd}tj}t||D] }t|tsJ|dk\sJ||z }"t t |t|z ddk(sJt|y)Nrrr)r(rGsumrrroundabsr)r/rtimescp_times r3test_cpu_timeszTestCpuAPIs.test_cpu_timessx  " E Ggu- --c> !> W ESU+,a0A555 E r:c@ttj}tjtz}tj|kr;ttj}||kDrytj|kr;t j dS)Nztime remained the same)rr(rGrrr r)r/t1stop_att2s r3test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increasessr !!# $))+.iikG#V%%'(BBwiikG#{{344r:c tjdD]e}d}t||D] }t|tsJ|dk\sJ||z }"t t |t|z ddk(sJt|gttjddttjdk(sJy)NTrrrrF) r(rGrrrrrrr|)r/rrrs r3test_per_cpu_timeszTestCpuAPIs.test_per_cpu_timess%%T2EE J !'5111#~%~ !USZ/0!49 99 J36##4034   E *9    r:ctjd}tjtz} tj|k\rt j dStjd}t ||D];\}}tj|tj|}}||z }|dk\s;y)NTrrrg?)r(rGrrr rzip_cpu_busy_time)r/tot1 giveup_attot2rr differences r3test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2st,IIK.0 yy{i'{{9--##40DdD/B..r2F4I4I"4MB"W % * r:zunreliable on OPENBSD + CIrjrwc tj}tjd}|jt|Dcgc] }t |c}}|j D]G}|j |||5tt||t||z dksJ dddIycc}w#1swYYxYw)NTr)fieldbaseper_cpurD) r(rG_makerrrrrr)r/rrnum summed_valuesr s r3test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparisons!""$/ W #F CH #FG \\EEgFe,w}e/LLMGF"$GFFsB0<(B55B> c  t|tsJ|dk\sJ|dtjzksJy#t$rG}t dj |t j|t j|d}~wwxYw)NrgY@z {} last={} new={})rrr(rrformatpprintpformat)r/rlast_retnew_reterrs r3_test_cpu_percentzTestCpuAPIs._test_cpu_percents gu- --c> !>ef&6&6&888 88  '..16>>'3J  s58 BABBc.tjd}tdD]-}tjd}|j||||}/t j t 5tjddddy#1swYyxYwNMbP?)intervalrrq)r( cpu_percentrJrr rRrZ)r/last_news r3test_cpu_percentzTestCpuAPIs.test_cpu_percentso!!51sA$$d3C  " "3c 2D]]: &    +' & &s +B  Bctjdd}t|tjk(sJt dD]5}tjdd}|D]}|j ||||}7t jt5tjdddddy#1swYyxYw)NrTrrrrq) r(r r|rrJrr rRrZr/r!r"r#rs r3test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percents!!5>4yF,,....sA$$d4@C&&wc:D  ]]: &   4 8' & &s B77Ccttjd}tdD]P}tjd}|D]}|j||||jt ||||}Rt j t5tjddddy#1swYyxYwr)r(cpu_times_percentrJrrr rRrZr's r3test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percents''7sA**D9C&&wc:  " "3s8T3 7D  ]]: &  $ $b 1' & &s B..B7cBtjdd}t|tjk(sJt dD]X}tjdd}|D]8}|D]}|j ||||j t |||:|}Zy)NrTr&r)r(r*r|rrJrr)r/r!r"r#cpurs r3test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percents''tD4yF,,....sA**DFC"G**7D#> #&&s3xs;D r:c tjdtjdDcgc]=}|jt t |j Dcgc]}dc}?}}tjd|5tjdD]}|D]}|j|dd dddycc}wcc}w#1swYyxYw)NTrrzpsutil.cpu_timesr) r(r*rGrrJr|rrrKr)r/r0 zero_timesr-rs r3#test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative&s  -%%T2 2 GGc!))n 56 51Q 56 72  ZZ* D//t<"G**7D$? #=E D7 E Ds#0C C ( C 6C CCctj}|jdk(sJ|jD](}t||}|dk\sJtr|dvs"|dkDr(Jy)N) ctx_switches interruptssoft_interruptssyscallsr>r4r3)r( cpu_statsrrr)r/infosrrs r3test_cpu_statszTestCpuAPIs.test_cpu_stats2sj  "}}!    MMDE4(EA: :4#AAqy y "r:zskipped due to #1892 not supportedcd}tjd}tstr|st j dS|sJ||tjdgt r#t|tjk(sJyy)Nc|D]O}|jdk(sJ|jD]-}t||}t|ttfsJ|dk\r-JQy)N)currentminrr)rrrrr)r@ntrrs r3check_lsz+TestCpuAPIs.test_cpu_freq..check_lsFsYzz%>>>>JJD#B-E%ec5\::: A:%:'r:Trz/returns empty list on FreeBSD and Linux aarch64F) r(cpu_freqrrr rrr|r)r/r@r@s r3 test_cpu_freqzTestCpuAPIs.test_cpu_freqCsv &__D ) w;;A  2 r&///01 r7f..00 00 r:ctj}t|dk(sJ|D]}t|tsJ|dk\rJy)Nrur)r( getloadavgr|rr)r/loadavgloads r3test_getloadavgzTestCpuAPIs.test_getloadavgZsH##%7|q   DdE* **3; ;r:N)rdrerfrrrrrrr r rrrr rr!rrr$r(r+r.r1r9rrrBrrGrgr:r3rrbs  J $   85  B   [[  )E2Nb   , 9 2  @!" [[)'2HI [[L(A1BJ1* [[N*?CDr:rcVeZdZdZej j e ddZdZ dZ ej j e xre jjd dej j exrej" d d Zd Zy ) TestDiskAPIsctjtj}|jdk(sJ|j dkDsJ||j dkDsJ||jdkDsJ||j |j kDsJ||j |jkDsJ|d|jcxkrdksnJ|jtjtj}d}|j |j k(sJt|j|jz |ksJts't|j |j z |ksJ|j}tjt5tj|dddy#1swYyxYw)N)rrrrrriP)r( disk_usager&getcwdrrrrrshutilrr get_testfnr rRFileNotFoundError)r/usage shutil_usage tolerancefnames r3test_disk_usagezTestDiskAPIs.test_disk_usagedso!!"))+.}} DDDD{{Q%%zzA~$u$~zzA~$u$~{{UZZ'..'{{UZZ'..'EMM(S(7%--7(((5 # {{l000005:: 1 112Y>>>uzzL$5$556B BB! ]], -   e $. - -s $GG znot an ASCII fsrjctjt5tjt dddy#1swYyxYwr%)r rRUnicodeEncodeErrorr(rKrrbs r3test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode|s+]]- .   n -/ . .s =Ac.tjdy)N.)r(rKrbs r3test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytess$r:czd}tjd}|sJ|D]}||trd|jvr ts0t j j|jsJ||jt j j|jsJ||jrJ|tjd}|sJtjdD]n}||tr|js t j|jt j j|jriJ|d}|t&}tjdDcgc](}|jr|jj)*}}||vsJy#t$rg}tr)tr#|jtj k(rYd}~|jtj"tj$hvrYd}~9d}~wwxYwcc}w)Nct|jtsJt|jtsJt|jtsJt|j tsJyr%)rdevicer mountpointfstypeoptsr?s r3 check_ntuplez7TestDiskAPIs.test_disk_partitions..check_ntuplesRbii- --bmmS1 11bii- --bggs+ ++r:F)allcdromTctjj|}tjj|s?tjj |}tjj|s?|j Sr%)r&rabspathismountdirnamer)rs r3find_mount_pointz;TestDiskAPIs.test_disk_partitions..find_mount_pointsT77??4(Dggood+wwt,ggood+::< r:)r(disk_partitionsr r`r r&rrr]r^r_statOSErrorrrerrnoEIOEPERMEACCES__file__r) r/rbr@diskrrimountr0mountss r3test_disk_partitionsz!TestDiskAPIs.test_disk_partitionss , # # . rD  7dii/ww~~dkk28D82 77>>$//2 8D 82;; $ $; # # - r**t4D  t AGGDOO,77>>$//:@D@:5" !*++5 5|| LL   5  1%%CII4J yyell(CCD & s$G-H8 H5)H0=-H00H5z/proc/diskstatsz3/proc/diskstats not available on this linux versionrcd}tjd}|Jd||tjd}t|tt|k(sJ|D]}|sJ||||y)Nc|d|jk(sJ|d|jk(sJ|d|jk(sJ|d|jk(sJtst s|d|j k(sJ|d|jk(sJtr<|d|jk(sJ|d|jk(sJ|d |jk(sJtr|d|jk(sJ|jD]}t||dk\rJ|y) NrrsrDrur) read_count write_count read_bytes write_bytesr r read_time write_timerread_merged_countwrite_merged_count busy_timerrr)r?rs r3rbz8TestDiskAPIs.test_disk_io_counters..check_ntuplesa5BMM) ))a5BNN* **a5BMM) ))a5BNN* **v!u ,,,!u ---a5B$8$8888a5B$9$9999a5BLL000a5BLL000 r4(A-1r1-#r:Fperdiskzno disks on this system?T)r(disk_io_countersr|r?r/rbretr;s r3test_disk_io_countersz"TestDiskAPIs.test_disk_io_counterss| 2"%%e4: ::S%%d33x3s3x=(((COO3 S "r:ctjdi5}tjdJtjdik(sJ|jsJ dddy#1swYyxYw)Nz#psutil._psplatform.disk_io_countersrFrT)rrKr(rr[r/r]s r3test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disksscZZ 1 **59A AA**48B> >>88O8    AA$$A-N)rdrerfrTr rrrrWrZrurr&rrrr(rrrrgr:r3rIrIcs%0 [[H ->?.@.  8t [[ 7bggnn%677D [[4262244=O# #8r:rIceZdZejj e ddZejj e ddZdZ dZ dZ ejj e xse xse dd Zy ) TestNetAPIsr:rjcd}tjd}||tjd}|gk7sJ|D]#}|sJt|tsJ|||%y)Nc|d|jk(sJ|d|jk(sJ|d|jk(sJ|d|jk(sJ|d|jk(sJ|d|j k(sJ|d|j k(sJ|d|jk(sJ|jdk\sJ||jdk\sJ||jdk\sJ||jdk\sJ||jdk\sJ||j dk\sJ||j dk\sJ||jdk\sJ|y) NrrsrDrurxryrrz) bytes_sent bytes_recv packets_sent packets_recverrinerroutdropindropoutras r3rbz6TestNetAPIs.test_net_io_counters..check_ntuplesba5BMM) ))a5BMM) ))a5BOO+ ++a5BOO+ ++a5BHH$ $$a5BII% %%a5BII% %%a5BJJ& &&==A% )r )%==A% )r )%??a' + +'??a' + +'88q= $" $=99> %2 %>99> %2 %>::? &B &?r:FpernicT)r(net_io_countersrrrs r3test_net_io_countersz TestNetAPIs.test_net_io_counterssj '$$$E2S$$D1byyCJ3c3' '' S "r:ctjdi5}tjdJtjdik(sJ|jsJ dddy#1swYyxYw)Nz"psutil._psplatform.net_io_countersrFrT)rrKr(rr[rs r3test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics scZZ 0r ))7? ??))6"< <<88O8    rc ptj}|sJ|tj}tjtj tj h}|jD]\}}t|tsJtt|t|k(sJ|D]}t|jtsJt|jtsJt|jtt!dfsJt|j"tt!dfsJ|j|vsJt|jt$j&sJ||j(r |jtjk(rFtj|j5}|j+|jdfdddn|jtj k(rtj,|jdtj tj.dtj0d}|\} } } } } tj| | | 5}|j+| ddd|j|j|j"|j2fD]9}||jtj k7s$t5||j;|j"r|j2J|j2r|j"J|j"s|js|jtjtj hvs|j"t7|k(rJt8s t:st<r5t?tdr$tj tj k(sJyyt@r$tj tjBk(sJytDrtj dk(sJyy#1swYxYw#1swYxYw)NrAF_LINKrq)#r( net_if_addrs net_if_statssocketAF_INETAF_INET6ritemsrrr|r?familyraddressnetmaskr broadcastenumIntEnumisupbind getaddrinfo SOCK_STREAM AI_PASSIVEptprrrrr rr AF_PACKETr )r/nics nic_statsfamiliesnicaddrsaddrsrXafsocktypeproto _canonnamesaips r3test_net_if_addrszTestNetAPIs.test_net_if_addrss'""$Tt'') NNFOOV^^D**,JCc3' ''s5z?c%j0 00!$++s333!$,,444!$,,d4j0ABBB!$..3T 2CDDD{{h...!$++t||<<<S>&&{{fnn4#]]4;;71FFDLL!#45877%11 LL"OO".."--   ?C;HeZ#]]2x?1FF2J@LLLLNNHH B ~ ;;&//9-b$++>>>88+++XX>>111NN  'HH>>^D-AAAAc'l %5vy)~~777* >>V%5%55 55 >>R' ''[87@?s:P.P+P( +P5 c>trdtjddddfg}ndg}tjd|5}tj dd}|j sJtr|jdk(sJ|jdk(sJdddy#1swYyxYw) Nem1z06:3d:29)rrqz06-3d-29NNNzpsutil._psplatform.net_if_addrsrrz06:3d:29:00:00:00z06-3d-29-00-00-00)r r(rrrKrr[r)r/rr]rs r3 test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytesas 6>>:tT4HIC<=C ZZ -C &&(/2D88O8||'::::||'::::   s ABBc|tj}|sJ|tjtjtjf}|j D]]\}}t |tsJ|\}}}}} t |tsJ||vsJ||vsJ|dk\sJ|dk\sJt | tr]Jyr) r(rNIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNrrrr) r/r all_duplexesrstatsrduplexspeedmtuflagss r3test_net_if_statszTestNetAPIs.test_net_if_statsss""$Tt  " "  " "  % %  ::>- >>Q...!+r:c"ddgi}tjd|5}tjddd}|jsJ|j dk(sJ|j d k(sJ|jd k(sJ dddy#1swYyxYw) Ncoretemp)rgI@gN@gQ@z'psutil._psplatform.sensors_temperaturesrT) fahrenheitrg^@ga@gc@)rrKr(rr[r=rr)r/dr]rs r3#test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneits 56 7 ZZ 5A //4@LQOE88O8==E) ))::& &&>>U* **   s ABBz no batterycxtj}|jdk\sJ|jdksJ|jtjtj hvr|jdk\s-J|jtj k(r|j sJt|j tsJy)Nrr) r(sensors_batteryrsecsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITED power_pluggedrr)r/rs r3test_sensors_batteryz$TestSensorsAPIs.test_sensors_batterys$$&{{a{{c!!! <<  % %  ' '  <<1$ $$ \\V88 8$$ $$#++T222r:c tj}|jD]g\}}t|tsJ|D]K}t|j tsJt|j tsJ|j dk\rKJiyr)r( sensors_fansrrrrr=r)r/fansrrrs r3test_sensors_fansz!TestSensorsAPIs.test_sensors_fanssx""$!ZZ\MD'dC( (( !%++s333!%--555}})))!*r:N)rdrerfr rrrrrrrrrrrgr:r3rrs [[44_M /N / [[44_M +N + [[//H [[K = 3>I 3 [[,,_E*F*r:r)6__doc__rrrmr&rrMrrrrunittestrr(rrrrrr r r r r psutil._commonr psutil.testsrrrrrrrrrrrrrrrrrr r!r#rirrrrIrrrgr:r3rs  ) !#''$%',,)1%''*)E nE Pc.nc.LL3>L3^("^("V~.~BG>GTc.cL2*n2*r: