3 ̪eC@sdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZer2ddlZddlZddlmZd(ddZddZ ddZ!ddZ"ddZ#ej$e dGd d!d!eZ%ej$e dGd"d#d#eZ&ej$e dGd$d%d%eZ'e(d&krdd'l)m*Z*e*e+dS))zPOSIX specific tests.N)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)HAS_NET_IO_COUNTERS) PYTHON_EXE)PsutilTestCase)mock)retry_on_failure)sh)skip_on_access_denied)spawn_testproc) terminate)which) getpagesizec Csdg}tr|jd|dk r0|jdt|gnts8trD|jdn |jdtr^|jdd}|jd |gt|}tr|jn|jd d}g}x@|D]8}|j }y t |}Wnt k rYnX|j|qW|dkr|S|d SdS) zwWrapper for calling the ps command with a little bit of cross-platform support for a narrow range of features. psz --no-headersNz-pz-AZaxstartZstimez-or) rappendextendstrrrreplacer splitlinesstripint ValueError)fmtpidcmdoutputZ all_outputliner$C/usr/local/lib64/python3.6/site-packages/psutil/tests/test_posix.pyr-s0      rcCsd}tr d}t||jdS)NcommandZcommr)rrsplit)r fieldr$r$r%ps_nameesr)cCs0d}ts trd}t||}tjdd|}|jS)Nr&argsz\(python.*?\)$)rrrresubr)r r(outr$r$r%ps_argsls  r/cCsd}tr d}t||S)NZrssZrssize)rr)r r(r$r$r%ps_rssvsr0cCsd}tr d}t||S)NZvszZvsize)rr)r r(r$r$r%ps_vsz}sr1z POSIX onlyc@seZdZdZeddZeddZddZdd Zd d Z d d Z ddZ e e ddZe e ddZddZddZddZddZejepedddZdd Ze d!d"Zejed#ejed$d%d&Zd'S)( TestProcesszBCompare psutil results against 'ps' command line utility (mainly).cCsttddgtjdj|_dS)Nz-Ez-O)stdin)rr subprocessPIPEr )clsr$r$r% setUpClassszTestProcess.setUpClasscCst|jdS)N)rr )r6r$r$r% tearDownClassszTestProcess.tearDownClasscCs,td|j}tj|jj}|j||dS)Nppid)rr psutilProcessr9 assertEqual)selfZppid_psZ ppid_psutilr$r$r% test_ppids zTestProcess.test_ppidcCs.td|j}tj|jjj}|j||dS)Nuid)rr r:r;uidsrealr<)r=Zuid_psZ uid_psutilr$r$r%test_uids zTestProcess.test_uidcCs.td|j}tj|jjj}|j||dS)NZrgid)rr r:r;ZgidsrAr<)r=Zgid_psZ gid_psutilr$r$r%test_gids zTestProcess.test_gidcCs,td|j}tj|jj}|j||dS)Nuser)rr r:r;usernamer<)r=Z username_psZusername_psutilr$r$r% test_usernames zTestProcess.test_usernamec CsJtj}tjdtd*}|j|jt|jj |j srBrCrFrNrr rRrSrYr\r^raunittestskipIfrrrfrhrkrrrmr$r$r$r%r2s*         r2c@seZdZdZeddZejedeje d deje ddd Z ed d Z ed d Z ddZddZddZddZejededdZdS)TestSystemAPIszTest some system APIs.cs~ttdtjts$tr0dkr0jddttdkrzfddDfddD}|jdt |dS)Nr rrcsg|]}|kr|qSr$r$).0x)pids_psr$r% >sz,TestSystemAPIs.test_pids..csg|]}|kr|qSr$r$)rvrw) pids_psutilr$r%ry?sz difference: ) sortedrr:Zpidsrrinsertrgfailr)r= differencer$)rxrzr% test_pids1s  zTestSystemAPIs.test_pidszunreliable on SUNOSifconfigzno ifconfig cmdz not supportedcCsRtd}xDtjddD]4}x.|jD]}|j|r$Pq$W|jd||fqWdS)Nz ifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output %s)rr:Znet_io_countersr' startswithr})r=r"Znicr#r$r$r%test_nic_namesEs zTestSystemAPIs.test_nic_namesc Cstd}|js|jd|jd}dd|D}dd|D}|jt|ttj|jtj|dZxRt tjD]B\}}|j|j |||j|j |||j dk rztj |j qzWWdQRXdS)Nzwho -uzno users on this system cSsg|]}|jdqS)r)r')rvrwr$r$r%ry[sz-TestSystemAPIs.test_users..cSsg|]}|jdqS)r)r')rvrwr$r$r%ry\s)r:who)rrskipTestr'r<rgr:userssubTest enumeraterXterminalr r;)r=r.linesrZ terminalsidxur$r$r% test_usersUs   zTestSystemAPIs.test_usersc Cstd}|js|jdd}tjd|}|r4d}nNtjd|}|rJd}n8tjd|}|r`d}n"tjd |}|rd}d d |D}|stjd ||jtj |d Dx.z(cannot interpret tstamp in who output %s)r:r)rrrr,findallrsZSkipTestrr:rrrbrcstartedrdr<)r=r.ZtstamprrrZ psutil_valuer$r$r%test_users_startedes4      z!TestSystemAPIs.test_users_startedc CsFtjdttjdd&}|jttjjt j |j s8t WdQRXdS)Nzpsutil._psposix.os.killr+)rG) r rHOSErrorerrnoEBADFr`r:_psposixZ pid_existsrTgetpidrJrK)r=mr$r$r%test_pid_exists_let_raises z(TestSystemAPIs.test_pid_exists_let_raisec CsFtjdttjdd&}|jttjjt j |j s8t WdQRXdS)Nzpsutil._psposix.os.waitpidr+)rG) r rHrrrr`r:rwait_pidrTrrJrK)r=rr$r$r%test_os_waitpid_let_raises z(TestSystemAPIs.test_os_waitpid_let_raisec CsNtjdttjdd.}|jtjjtjj t j dd|j s@t WdQRXdS)Nzpsutil._psposix.os.waitpidr+)rGg{Gz?)timeout)r rHrrZEINTRr`r:rTimeoutExpiredrrTrrJrK)r=rr$r$r%test_os_waitpid_eintrsz$TestSystemAPIs.test_os_waitpid_eintrc Cs>tjddd&}|jttjjtj|j s0t WdQRXdS)Nzpsutil._psposix.os.waitpidr)rZ)rr) r rHr`rr:rrrTrrJrK)r=rr$r$r%test_os_waitpid_bad_ret_statuss  z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc sfdd}d }xtjddD]}tj|j}y||j\}}}}WnJtk r} z.t| j} d| kszd| kszd | kr|wWYdd} ~ XqXj|j ||d j|j ||d j|j ||d j|j |d d qWdS)Nc sytd|j}Wn>tk rR}z"dt|jkr@jdWYdd}~XnX|jdd}|j}t|dd}t|dd}t|dd}t|d j d d }||||fS) Nzdf -k %sz device busyzdf returned EBUSYrri%r+) rr RuntimeErrorrrWrr'rfloatr) devicer.errr#fieldstotalusedfreepercent)r=r$r%dfs z*TestSystemAPIs.test_disk_usage..dfriF)allzno such file or directoryzraw devices not supportedzpermission denied)deltarii@) r:Zdisk_partitions disk_usage mountpointrrrrWZassertAlmostEqualrrrr) r=rZ tolerancepartusagerrrrrr$)r=r%test_disk_usages"   zTestSystemAPIs.test_disk_usageN)rnrorprqr rrsrtrrr rrrrrrrrrr$r$r$r%ru-s '    ruc@seZdZddZdS)TestMisccCs4t}|j|d|j|tj|j|tjdS)Nr)rZ assertGreaterr<resourcemmapZPAGESIZE)r=Zpagesizer$r$r%test_getpagesizes zTestMisc.test_getpagesizeN)rnrorprr$r$r$r%rsr__main__) run_from_name)N),rqrbrrTr,r4rOrsr:rrrrrrrZ psutil.testsr r r r r rrrrrrrZpsutil._psutil_posixrrr)r/r0r1rtr2rurrnZpsutil.tests.runnerr__file__r$r$r$r%sZ                   8 )4