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 Cs@tj}tjdtd }|j|jt|jj WdQRXdS)Nzpsutil.pwd.getpwuid) side_effect) r3r4rpatchKeyErrorr5r<strr8r9)r6pZfunr#r#r$test_username_no_resolutionysz'TestProcess.test_username_no_resolutioncCs@tjdtd|j}tj|jjdd}|j||dS)Ng?zps --no-headers -o rss -p %sri)timesleepr%r'r3r4 memory_infor5)r6Zrss_psZ rss_psutilr#r#r$test_rss_memorys zTestProcess.test_rss_memorycCs@tjdtd|j}tj|jjdd}|j||dS)Ng?zps --no-headers -o vsz -p %sri)rDrEr%r'r3r4rFr5)r6Zvsz_psZ vsz_psutilr#r#r$test_vsz_memorys zTestProcess.test_vsz_memorycCsZt|j}tjj|j}tj|jjj}t j dd|}t j dd|}|j ||dS)Nz\d.\d) r)r'ospathbasenamelowerr3r4nameresubr5)r6Zname_psZ name_psutilr#r#r$ test_names  zTestProcess.test_namecCs^d}dddg}tjd|d8tjd|dtj}|j|jdWdQRXWdQRXdS)Nzlong-program-namezlong-program-name-extendedZfooZbarzpsutil._psplatform.Process.name) return_valuez"psutil._psplatform.Process.cmdline)rr?r3r4r5rN)r6rNcmdlinerBr#r#r$test_name_longs   zTestProcess.test_name_longcCs\d}tjd|d@tjdtjdddtj}|j|jdWdQRXWdQRXdS)Nzlong-program-namezpsutil._psplatform.Process.name)rRz"psutil._psplatform.Process.cmdlinerrI)r>)rr?r3 AccessDeniedr4r5rN)r6rNrBr#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)rRz"psutil._psplatform.Process.cmdlinerrI)r>)rr?r3Z NoSuchProcessr4 assertRaisesrN)r6rNrBr#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'r3r4Zexer5AssertionErrorlen)r6Z ps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer#r#r$test_exes zTestProcess.test_execCs0t|j}djtj|jj}|j||dS)Nr)r+r'joinr3r4rSr5)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)rBattrr*)rNr#r$calls  z&TestProcess.test_num_fds..callZ terminatekillZsuspendZresumerbZ send_signalwaitZchildrenZas_dictZmemory_info_ex$rdZnum_ctx_switches_rz@failure while processing Process.%s method (before=%s, after=%s)r)rjrkrl)rjrkrm)r3r4rJgetpidrr appenddir startswithZnum_fdsrangerUabsfailr`) r6rgrBZfailuresZ ignored_namesZnum1xZnum2rur#)rNr$ test_num_fdss4      zTestProcess.test_num_fdsN)__name__ __module__ __qualname____doc__ classmethodr1r2r7r:r;r=rCrrrGrHrQrTrVrXrskipIfrrr\r_rarrrcrwr#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}trRt|t j j }g}x<|j dd dD]&}|rjt |j dj}|j|qjW|j|jtj}|j|jtstrd|kr|jdd|j||dS) Nr%z-Az-or'Zax)stdoutrrr)rrr r.r/Z communicaterr rAsysrencodingrrrpremover'r3Zpidssortrrinsertr5)r6r!rBr"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_counterskeysrrrru)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).0rvr#r#r$ Tsz-TestSystemAPIs.test_users..cSsg|]}|jdqS)r)r)rrvr#r#r$rUs) rrr5r^r3usersr[rNZterminal)r6outlinesrZ terminalsur#r#r$ test_usersNs zTestSystemAPIs.test_usersc Cs<tjdttjdd}|jttjjt j WdQRXdS)Nzpsutil._psposix.os.killrI)r>) rr?OSErrorerrnoEBADFrWr3_psposixZ pid_existsrJro)r6mr#r#r$test_pid_exists_let_raise[sz(TestSystemAPIs.test_pid_exists_let_raisec Cs<tjdttjdd}|jttjjt j WdQRXdS)Nzpsutil._psposix.os.waitpidrI)r>) rr?rrrrWr3rwait_pidrJro)r6rr#r#r$test_os_waitpid_let_raisedsz(TestSystemAPIs.test_os_waitpid_let_raisec CsDtjdttjdd$}|jtjjtjj t j ddWdQRXdS)Nzpsutil._psposix.os.waitpidrI)r>g{Gz?)Ztimeout) rr?rrZEINTRrWr3rZTimeoutExpiredrrJro)r6rr#r#r$test_os_waitpid_eintrls z$TestSystemAPIs.test_os_waitpid_eintrc Cs4tjddd}|jttjjtjWdQRXdS)Nzpsutil._psposix.os.waitpidr)rR)rr) rr?rWr r3rrrJro)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 %srrirj%rI)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 RuntimeErrorrArMZassertAlmostEqualrrrr) r6rZ tolerancepartZusagerrrrerrr#r#r$test_disk_usage~s"   zTestSystemAPIs.test_disk_usageN)rxryrzr{rrrr}rrrrr r3rrrrrrrrr#r#r#r$r~s       r~__main__)+r{rYrrJrOr.rrDr3rrrrrrrZpsutil._compatr r Z psutil.testsr r r rrrrrrrrrrrr%r)r+r}ZTestCaser,r~rx__file__r#r#r#r$sT                        E