3 JZ?@sdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddZ"ddZ#ddZ$ej%e d Gd!d"d"ej&Z'ej%e d Gd#d$d$ej&Z(e)d%kree*dS)&zPOSIX specific tests.N)AIX)BSD)LINUX)OPENBSD)OSX)POSIX)SUNOS)callable)PY3)APPVEYOR)get_kernel_version)get_test_subprocess)mock) PYTHON_EXE) reap_children)retry_before_failing)run_test_module_by_name)sh)skip_on_access_denied)TRAVIS)unittest) wait_for_pid)whichc Cspts|jdd}tr |jdd}tr0|jdd}t|}tsN|jddj}yt|Stk rj|SXd S) zkExpects a ps command with a -o argument and parse the result returning only the value of interest. z --no-headers  z-o startz-o stimez-o rssz -o rssize N) rreplacerrrsplitstripint ValueError)cmdoutputr#"/usr/lib64/python3.6/test_posix.pyps+s   r%cCs&d}tr d}td||fjddS)NcommandZcommzps --no-headers -o %s -p %srr)rr%r)pidfieldr#r#r$ps_nameIsr)cCs d}ts trd}td||fS)Nr&argszps --no-headers -o %s -p %s)rrr%)r'r(r#r#r$ps_argsPsr+z POSIX onlyc@seZdZdZeddZeddZddZdd Zd d Z d d Z ddZ e e ddZe e ddZddZddZddZddZejepedddZdd Zd!d"Zejed#ejed$d%d&Zd'd(Zd)S)* TestProcesszBCompare psutil results against 'ps' command line utility (mainly).cCs&ttddgtjdj|_t|jdS)Nz-Ez-O)stdin)r r subprocessPIPEr'r)clsr#r#r$ setUpClass[s zTestProcess.setUpClasscCs tdS)N)r)r0r#r#r$ tearDownClassaszTestProcess.tearDownClasscCs.td|j}tj|jj}|j||dS)Nzps --no-headers -o ppid -p %s)r%r'psutilProcessZppid assertEqual)selfZppid_psZ ppid_psutilr#r#r$ test_ppideszTestProcess.test_ppidcCs0td|j}tj|jjj}|j||dS)Nzps --no-headers -o uid -p %s)r%r'r3r4uidsrealr5)r6Zuid_psZ uid_psutilr#r#r$test_uidjszTestProcess.test_uidcCs0td|j}tj|jjj}|j||dS)Nzps --no-headers -o rgid -p %s)r%r'r3r4Zgidsr9r5)r6Zgid_psZ gid_psutilr#r#r$test_gidoszTestProcess.test_gidcCs.td|j}tj|jj}|j||dS)Nzps --no-headers -o user -p %s)r%r'r3r4usernamer5)r6Z username_psZusername_psutilr#r#r$ test_usernametszTestProcess.test_usernamec CsJtj}tjdtd*}|j|jt|jj |j s)rr?r3 AccessDeniedr4r5rP)r6rPrDr#r#r$test_name_long_cmdline_ad_excs z)TestProcess.test_name_long_cmdline_ad_exccCs\d}tjd|d@tjdtjdddtj}|jtj|jWdQRXWdQRXdS)Nzlong-program-namezpsutil._psplatform.Process.name)rTz"psutil._psplatform.Process.cmdlinerrK)r>)rr?r3Z NoSuchProcessr4 assertRaisesrP)r6rPrDr#r#r$test_name_long_cmdline_nsp_excs z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablecCshtd|jjdd}tj|jj}tjj|jd}t |}tjj|jd}|j |||gdS)Nzps --no-headers -o start -p %srrz%H:%M:%S) r%r'rr3r4Z create_timedatetimeZ fromtimestampZstrftimeroundassertIn)r6Ztime_psZ time_psutilZtime_psutil_tstampZround_time_psutilZround_time_psutil_tstampr#r#r$test_create_times  zTestProcess.test_create_timec Cs`t|j}tj|jj}y|j||Wn0tk rZ|dt|}|j||YnXdS)N)r)r'r3r4Zexer5rClen)r6Z ps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer#r#r$test_exes zTestProcess.test_execCs0t|j}djtj|jj}|j||dS)Nr)r+r'joinr3r4rUr5)r6Z ps_cmdlineZpsutil_cmdliner#r#r$ test_cmdlines zTestProcess.test_cmdlineznot reliable on SUNOSznot reliable on AIXcCs*td|j}tjj}|j||dS)Nzps --no-headers -o nice -p %s)r%r'r3r4nicer5)r6Zps_niceZ psutil_nicer#r#r$ test_nices zTestProcess.test_nicec sfdd}tjtj}g}ddddddd d d d g }trNtdkrN|jdtrftdkrf|jdxttjD]jdsr|krqrqry0|j }xt d D]}||qW|j }Wntj k rYqrXt ||dkrrd||f}|j|qrW|r|j ddj|dS)NcsBf}t|d}|dk r:t|r:dkr0tjf}||n|dS)Nrlimit)getattrr r3Z RLIMIT_NOFILE)rDattrr*)rPr#r$calls  z&TestProcess.test_num_fds..callZ terminatekillZsuspendZresumercZ send_signalwaitZchildrenZas_dictZmemory_info_ex$reZnum_ctx_switches_rz@failure while processing Process.%s method (before=%s, after=%s)r)rkrlrm)rkrlrn)r3r4rLgetpidrr appenddir startswithZnum_fdsrangerWabsfailra) r6rhrDZfailuresZ ignored_namesZnum1xZnum2rvr#)rPr$ test_num_fdss4      zTestProcess.test_num_fdsN)__name__ __module__ __qualname____doc__ classmethodr1r2r7r:r;r=rErrrIrJrSrVrXrZrskipIfrrr^r`rbrrrdrxr#r#r#r$r,Ws,           r,c@seZdZdZeddZejedeje deje d ddd Z eje p`e o`e j d ed d Zd dZddZddZddZejedddZdS)TestSystemAPIszTest some system APIs.cCststrddddg}n ddddg}t|tjd}|jdj}|jdksPtt rbt |t j j }g}x<|jdd dD]&}|rzt|jdj}|j|qzW|j|jtj}|j|jtstrd|kr|jdd|j||dS) Nr%z-Az-or'Zax)stdoutrrr)rrr r.r/Z communicaterZpollrCr rAsysrencodingrrrqremover'r3Zpidssortrrinsertr5)r6r!rDr"Zpids_psliner'Z pids_psutilr#r#r$ test_pids s(   zTestSystemAPIs.test_pidszunreliable on SUNOSzunreliable on TRAVISZifconfigzno ifconfig cmdcCsVtd}xHtjddjD]4}x.|jD]}|j|r(Pq(W|jd||fqWdS)Nz ifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output %s)rr3Znet_io_counterskeysrrsrv)r6r"Znicrr#r#r$test_nic_names?s zTestSystemAPIs.test_nic_namesz unreliable on APPVEYOR or TRAVIScCsxtd}|jd}dd|D}dd|D}|jt|ttjx,tjD] }|j|j||j|j|qPWdS)NZwhorcSsg|]}|jdqS)r)r).0rwr#r#r$ Tsz-TestSystemAPIs.test_users..cSsg|]}|jdqS)r)r)rrwr#r#r$rUs) rrr5r_r3usersr]rPZterminal)r6outlinesrZ terminalsur#r#r$ test_usersNs zTestSystemAPIs.test_usersc CsFtjdttjdd&}|jttjjt j |j s8t WdQRXdS)Nzpsutil._psposix.os.killrK)r>) rr?OSErrorerrnoEBADFrYr3_psposixZ pid_existsrLrprBrC)r6mr#r#r$test_pid_exists_let_raise[sz(TestSystemAPIs.test_pid_exists_let_raisec CsFtjdttjdd&}|jttjjt j |j s8t WdQRXdS)Nzpsutil._psposix.os.waitpidrK)r>) rr?rrrrYr3rwait_pidrLrprBrC)r6rr#r#r$test_os_waitpid_let_raisedsz(TestSystemAPIs.test_os_waitpid_let_raisec CsNtjdttjdd.}|jtjjtjj t j dd|j s@t WdQRXdS)Nzpsutil._psposix.os.waitpidrK)r>g{Gz?)Ztimeout)rr?rrZEINTRrYr3rZTimeoutExpiredrrLrprBrC)r6rr#r#r$test_os_waitpid_eintrls z$TestSystemAPIs.test_os_waitpid_eintrc Cs>tjddd&}|jttjjtj|j s0t WdQRXdS)Nzpsutil._psposix.os.waitpidr)rT)rr) rr?rYr r3rrrLrprBrC)r6rr#r#r$test_os_waitpid_bad_ret_statusus  z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc Csdd}d }xtjddD]}tj|j}y||j\}}}}WnLtk r} z0t| j} d| ksvd| ksvd | krzwnWYdd} ~ XqX|j|j ||d |j|j ||d |j|j ||d |j|j |d d qWdS)NcSsvtd|j}|jdd}|j}t|dd}t|dd}t|dd}t|djdd }||||fS) Nzdf -k %srrirk%rK)rrrrfloatr)devicerrZfieldstotalusedfreepercentr#r#r$dfsz*TestSystemAPIs.test_disk_usage..dfriF)allzno such file or directoryzraw devices not supportedzpermission denied)Zdeltarii@) r3Zdisk_partitionsZ disk_usageZ mountpointr RuntimeErrorrArOZassertAlmostEqualrrrr) r6rZ tolerancepartZusagerrrrerrr#r#r$test_disk_usage~s"   zTestSystemAPIs.test_disk_usageN)ryrzr{r|rrrr~rrrrr r3rrrrrrrrr#r#r#r$rs       r__main__)+r|r[rrLrQr.rrFr3rrrrrrrZpsutil._compatr r Z psutil.testsr r r rrrrrrrrrrrr%r)r+r~ZTestCaser,rry__file__r#r#r#r$sT                        E