\c@s_dZddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddZdZ dZ!dZ"dZ#ej$e ddej%fdYZ&ej$e dd ej%fd!YZ'e(d"kr[dd#l)m*Z*e*e+ndS($sPOSIX specific tests.iN(tAIX(tBSD(tLINUX(tMACOS(tOPENBSD(tPOSIX(tSUNOS(tAPPVEYOR(tget_kernel_version(tget_test_subprocess(tHAS_NET_IO_COUNTERS(tmock(t PYTHON_EXE(t reap_children(tretry_on_failure(tsh(tskip_on_access_denied(tTRAVIS(tunittest(t wait_for_pid(twhichcCsQdg}tr|jdn|d k rG|jdt|gn)tsStrc|jdn |jdtrdddd h}|j||}n|jd |gt|}tr|j }n|j d }g}xK|D]C}|j }yt |}Wnt k r#nX|j|qW|d krE|S|d Sd S(s| Wrapper for calling the ps command with a little bit of cross-platform support for a narrow range of features. tpss --no-headerss-ps-Ataxtcommandtcommtstarttstimes-oiiN( RtappendtNonetextendtstrRRtgetRt splitlineststriptintt ValueError(tfmttpidtcmdtfmt_maptoutputt all_outputtline((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyR)s8          cCs,d}trd}nt||jdS(NRRi(RRtsplit(R%tfield((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytps_namefs cCs(d}tstrd}nt||S(NRtargs(RRR(R%R,((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytps_argsms  cCs"d}trd}nt||S(Ntrsstrssize(RR(R%R,((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytps_rssts cCs"d}trd}nt||S(Ntvsztvsize(RR(R%R,((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytps_vsz{s s POSIX onlyt TestProcesscBseZdZedZedZdZdZdZdZ dZ e e dZ e e d Zd Zd Zd Zd ZejepeddZdZdZejedejeddZdZRS(sBCompare psutil results against 'ps' command line utility (mainly).cCs5ttddgdtjj|_t|jdS(Ns-Es-Otstdin(R R t subprocesstPIPER%R(tcls((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt setUpClassscCs tdS(N(R (R:((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt tearDownClassscCs>td|j}tj|jj}|j||dS(Ntppid(RR%tpsutiltProcessR=t assertEqual(tselftppid_pst ppid_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_ppidscCsAtd|j}tj|jjj}|j||dS(Ntuid(RR%R>R?tuidstrealR@(RAtuid_pst uid_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_uidscCsAtd|j}tj|jjj}|j||dS(Ntrgid(RR%R>R?tgidsRGR@(RAtgid_pst gid_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_gidscCs>td|j}tj|jj}|j||dS(Ntuser(RR%R>R?tusernameR@(RAt username_pstusername_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_usernamescCsbtj}tjddt;}|j|jt|jj |j sXt WdQXdS(Nspsutil.pwd.getpwuidt side_effect( R>R?R tpatchtKeyErrorR@RQRRFRGtcalledtAssertionError(RAtptfun((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_username_no_resolutions %cCsPtjdt|j}tj|jjdd}|j||dS(Ng?ii(ttimetsleepR2R%R>R?t memory_infoR@(RAtrss_pst rss_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_rss_memorys  cCsPtjdt|j}tj|jjdd}|j||dS(Ng?ii(R]R^R5R%R>R?R_R@(RAtvsz_pst vsz_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_vsz_memorys  cCst|j}tjj|j}tj|jjj}t j dd|}t j dd|}t j dd|}t j dd|}|j ||dS(Ns\d.\dts\d( R-R%tostpathtbasenametlowerR>R?tnametretsubR@(RAtname_pst name_psutil((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_namesc Cssd}dddg}tjdd|Ctjdd|'tj}|j|jdWdQXWdQXdS(Nslong-program-nameslong-program-name-extendedtfootbarspsutil._psplatform.Process.namet return_values"psutil._psplatform.Process.cmdline(R RVR>R?R@Rk(RARktcmdlineRZ((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_name_longs     c Cspd}tjdd|Otjddtjdd'tj}|j|jdWdQXWdQXdS(Nslong-program-namespsutil._psplatform.Process.nameRss"psutil._psplatform.Process.cmdlineRUiRf(R RVR>t AccessDeniedR?R@Rk(RARkRZ((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_name_long_cmdline_ad_excs    c Cspd}tjdd|Otjddtjdd'tj}|jtj|jWdQXWdQXdS(Nslong-program-namespsutil._psplatform.Process.nameRss"psutil._psplatform.Process.cmdlineRUiRf(R RVR>t NoSuchProcessR?t assertRaisesRk(RARkRZ((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_name_long_cmdline_nsp_excs    sps -o start not availablecCstd|j}tj|jj}tjj|jd}t|}tjj|jd}|j |||gdS(NRs%H:%M:%S( RR%R>R?t create_timetdatetimet fromtimestamptstrftimetroundtassertIn(RAttime_pst time_psutilttime_psutil_tstamptround_time_psutiltround_time_psutil_tstamp((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_create_times   cCsst|j}tj|jj}y|j||Wn1tk rn|t| }|j||nXdS(N(R-R%R>R?texeR@RYtlen(RAt ps_pathnametpsutil_pathnametadjusted_ps_pathname((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_exes cCsDt|j}djtj|jj}|j||dS(Nt (R/R%tjoinR>R?RtR@(RAt ps_cmdlinetpsutil_cmdline((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_cmdlines!snot reliable on SUNOSsnot reliable on AIXcCs8td|j}tjj}|j||dS(Ntnice(RR%R>R?RR@(RAtps_nicet psutil_nice((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_nicesc sfd}tjtj}g}dddddddd d d d d g }trytdkry|jdntrtdkr|jdnxttjD]jds|krqqy@|j }x!t dD]}||qW|j }Wntj k r+qXt ||dkrd||f}|j|qqW|r|j ddj|ndS(Ncs`d}t|d}|dk rXt|rXdkrKtjf}n||n|dS(Ntrlimit((tgetattrRtcallableR>t RLIMIT_NOFILE(RZtattrR.(Rk(s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytcall#s  t terminatetkilltsuspendtresumeRt send_signaltwaittchildrentas_dicttmemory_info_extparenttparentsiii$Ritnum_ctx_switchest_is@failure while processing Process.%s method (before=%s, after=%s)s (iii$(iii(R>R?RgtgetpidRRRtdirt startswithtnum_fdstrangeRvtabstfailR( RARRZtfailurest ignored_namestnum1txtnum2R((Rks=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_num_fds s4   (t__name__t __module__t__doc__t classmethodR;R<RDRJRORTR\RRRbReRpRuRwRzRtskipIfRRRRRRRRR(((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyR6s,        !  tTestSystemAPIscBseZdZedZejedejedeje d deje ddZ eje peoe j ded Zd Zd Zd Zd ZejeddZRS(sTest some system APIs.cCsttd}tj}ts6trId|krI|jddnt|t|dkrg|D]}||krl|^qlg|D]}||kr|^q}|jdt |ndS(NR%iis difference: ( tsortedRR>tpidsRRtinsertRRR(RAtpids_pst pids_psutilRt difference((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_pidsNs "&sunreliable on SUNOSsunreliable on TRAVIStifconfigsno ifconfig cmds not supportedcCsttd}xatjdtjD]G}x>|jD]}|j|r8Pq8q8W|jd||fq%WdS(Ns ifconfig -atpernics/couldn't find %s nic in 'ifconfig -a' output %s(RR>tnet_io_counterstTruetkeysR+RR(RAR(tnicR*((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_nic_namesas s unreliable on APPVEYOR or TRAVIScCstd}|jd}g|D]}|jd^q"}g|D]}|jd^qE}|jt|ttjx:tjD],}|j|j||j|j|qWdS(Ntwhos ii( RR+R@RR>tusersRRktterminal(RAtouttlinesRRt terminalstu((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyt test_usersqs ##"cCs\tjddttjd5}|jttjjt j |j sRt WdQXdS(Nspsutil._psposix.os.killRURf( R RVtOSErrorterrnotEBADFRyR>t_psposixt pid_existsRgRRXRY(RAtm((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_pid_exists_let_raise~s cCs\tjddttjd5}|jttjjt j |j sRt WdQXdS(Nspsutil._psposix.os.waitpidRURf( R RVRRRRyR>Rtwait_pidRgRRXRY(RAR((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_os_waitpid_let_raises c CshtjddttjdA}|jtjjtjj t j dd|j s^t WdQXdS(Nspsutil._psposix.os.waitpidRURfttimeoutg{Gz?(R RVRRtEINTRRyR>RtTimeoutExpiredRRgRRXRY(RAR((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_os_waitpid_eintrs   cCsPtjddd5}|jttjjtj|j sFt WdQXdS(Nspsutil._psposix.os.waitpidRsii(ii( R RVRyR#R>RRRgRRXRY(RAR((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_os_waitpid_bad_ret_statuss    sunreliable on AIXc Csd}d }xtjdtD]}tj|j}y||j\}}}}WnRtk r} t| j} d| ks"d| ks"d| krq"qq"X|j |j |d||j |j |d||j |j |d||j |j |dd q"WdS( NcSstd|j}|jdd}|j}t|dd}t|dd}t|dd}t|djdd }||||fS( Nsdf -k %ss iiiiit%Rf(RR!R+R"tfloattreplace(tdeviceRR*tfieldsttotaltusedtfreetpercent((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytdfs iitallsno such file or directorysraw devices not supportedspermission deniedtdeltaiii@(R>tdisk_partitionstFalset disk_usaget mountpointRt RuntimeErrorRRjtassertAlmostEqualRRRR( RARt tolerancetparttusageRRRRterr((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyttest_disk_usages"    (RRRRRRRRRRR RRR>RRRRRRRR(((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pyRJs%   t__main__(trun(,RR|RRgRlR8R]R>RRRRRRRt psutil.testsRRR R R R R RRRRRRRRRR-R/R2R5RtTestCaseR6RRtpsutil.tests.runnerRt__file__(((s=/usr/lib64/python2.7/site-packages/psutil/tests/test_posix.pytsP        =    y