3 ̪e>@sdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z e oVe Z!ddZ"e GdddeZ#e$dkrddl%m&Z&e&e'dS)zeIterate over all process PIDs and for each one of them invoke and test all psutil.Process() methods. N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)PY3)long)unicode) CI_TESTING)VALID_PROC_STATUSES)PsutilTestCase)check_connection_ntuple)create_sockets) is_namedtuple)is_win_secure_system_proc)process_namespace) serialrunc"s"tfddfdd}ytjWn tjk rVjiSXyjddg}Wn tjk rjYnX|d|ddji}t}xb|j |j dd D]N\}}y|||<Wqtj k r}z|wWYdd}~XqXqW||SdS) Ncsj|j|jdk r&j|j|t|tjrdj||jdk rzj|jdj|j|nt|tj rzj |t |t |dS)Nr) assertEqualpidname isinstancepsutil ZombieProcessZassertProcessZombieppidassertGreaterEqual NoSuchProcessassertProcessGonestrrepr)excprocrr)rtcaseI/usr/local/lib64/python3.6/site-packages/psutil/tests/test_process_all.pycheck_exception4s      z"proc_info..check_exceptioncsNdkrJyjdWn2tjk rH}z|WYdd}~XnXdS)Nr)waitrError)r$)r)rrrr%r'r(do_waitBs zproc_info..do_waitrrrF) clear_cache) rrProcessr Z assertPidGoneZas_dictr!rriterZgettersr+)rr,dinfonsfunZfun_namer$r')r)rrrr%r&r( proc_info1s.  r4c@s8eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dJdKZ(dLS)MTestFetchAllProcesseszTest which iterates over all running processes and performs some sanity checks against Process API's returned values. Uses a process pool to get info about all processes. cCstrtj|_dS)N) USE_PROC_POOLmultiprocessingPoolpool)selfr'r'r(setUpiszTestFetchAllProcesses.setUpcCstr|jj|jjdS)N)r6r9 terminatejoin)r:r'r'r(tearDownos zTestFetchAllProcesses.tearDowncCsNddlm}tr"|jj|tjSg}xtjD]}|j||q0W|SdS)Nr)r4)Zpsutil.tests.test_process_allr4r6r9Zimap_unorderedrZpidsappend)r:r4Zlsrr'r'r(iter_proc_infots z$TestFetchAllProcesses.iter_proc_infocCsg}x|jD]}x|jD]\}}t||}y|||Wntk rdddd}|d||dt||f7}|dd7}|dtj7}djdd |jDd}|j |YqX|d d gdd ifkr|st |qWqW|r|j d j|dS) N =Fz+FAIL: name=test_%s, pid=%s, ret=%s info=%s r-z %scss|]}d|VqdS) Nz r').0ir'r'r( sz1TestFetchAllProcesses.test_all..rg) r@itemsgetattr Exceptionr# traceback format_excr= splitlinesr?AssertionErrorZfail)r:Zfailuresr1rvaluemethsr'r'r(test_alls*   zTestFetchAllProcesses.test_allcCs*|j|tx|D]}|j|tqWdS)N)assertIsInstancelistr")r:retr1partr'r'r(cmdlines  zTestFetchAllProcesses.cmdlinec Cs|j|ttf|j|j||rtr8|jd r8dStjj |sLt |t rtjj |rt tdrt tdrytj|tjst Wn(t k rtjj|rt rYnXdS)Nz.exeaccessX_OK)rVr"rrstripr endswithospathisabsrQr isfilehasattrr[r\existsr)r:rXr1r'r'r(exeszTestFetchAllProcesses.execCs|j|t|j|ddS)Nr)rVintr)r:rXr1r'r'r(rs zTestFetchAllProcesses.pidcCs(|j|ttf|j|dt|dS)Nr)rVrfr rr4)r:rXr1r'r'r(rs zTestFetchAllProcesses.ppidcCsB|j|ttftr*| r*t|dr*dSts>|s>tt|dS)Nr)rVr"rr rrrQr#)r:rXr1r'r'r(rs zTestFetchAllProcesses.namec Cs^|j|ty|j|dWn*tk rFtr@|dtjkr@nYnXtjdtj |dS)Nrstatusz%Y %m %d %H:%M:%S) rVfloatrrQrr STATUS_ZOMBIEtimestrftime localtime)r:rXr1r'r'r( create_times z!TestFetchAllProcesses.create_timecCs6t|s tx$|D]}|j|t|j|dqWdS)Nr)rrQrVrfr)r:rXr1uidr'r'r(uidss   zTestFetchAllProcesses.uidscCsBt|s tx0|D](}|j|tt rt r|j|dqWdS)Nr)rrQrVrfrrr)r:rXr1gidr'r'r(gidss     zTestFetchAllProcesses.gidscCs,|j|t|j|j||js(tdS)N)rVr"rr]rQ)r:rXr1r'r'r(usernames zTestFetchAllProcesses.usernamecCs4|j|t|st||j|d|j|tdS)N?)rVr"rQassertNotEqualassertInr)r:rXr1r'r'r(rgs   zTestFetchAllProcesses.statuscCsBt|s tx0|D](}|j|ttf|dkr|j|dqWdS)Nr)rrQrVrfr r)r:rXr1fieldr'r'r( io_counterss   z!TestFetchAllProcesses.io_counterscCsztr>|j|jt|j|jt|j|jd|j|jdn8tjtjtj tj g}|j|t|j|d|j ||dS)Nr) rrVioclassrfrRrrZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_NORMALZ IOPRIO_HIGHru)r:rXr1choicesr'r'r(ionices  zTestFetchAllProcesses.ionicecCs8|j|ttr(|dkr(t|dr(dS|j|ddS)Nrrrv)rVrfr rr)r:rXr1r'r'r( num_threadss z!TestFetchAllProcesses.num_threadscCsr|j|tx`|D]X}t|s"t|j|jd|j|jd|j|jdx|D]}|j|tt fqRWqWdS)Nr) rVrWrrQrid user_time system_timerfrh)r:rXr1trxr'r'r(threads s    zTestFetchAllProcesses.threadscCs6t|s tx$|D]}|j|t|j|dqWdS)Nr)rrQrVrhr)r:rXr1nr'r'r( cpu_timess   zTestFetchAllProcesses.cpu_timescCs0|j|td|kodkns,t|dS)NggY@)rVrhrQ)r:rXr1r'r'r( cpu_percents z!TestFetchAllProcesses.cpu_percentcCs\|j|ttr|dkrdS|j|dtjdkr@|j|d|j|tt tjdS)Nrvrrw) rVrfrrr cpu_countrrurWrange)r:rXr1r'r'r(cpu_num"s     zTestFetchAllProcesses.cpu_numcCs~t|s tx(|D] }|j|ttf|j|dqWtrz|j|j|j|j|j |j |j|j |j |j|j |jdS)Nr)rrQrVrfr rr Z peak_wsetZwsetZpeak_paged_poolZ paged_poolZpeak_nonpaged_poolZ nonpaged_poolZ peak_pagefileZpagefile)r:rXr1rRr'r'r( memory_info+s  z!TestFetchAllProcesses.memory_infocCst|s ttjj}xd|jD]Z}t||}|j|tt f|j |d||fdt st rb|dkrbq|j |||||fdqWt r|j |j|jdS)Nr)msgvmsdata)rr)rrQrZvirtual_memorytotal_fieldsrLrVrfr rrr ZassertLessEqualZpssZuss)r:rXr1rrrRr'r'r(memory_full_info6s    z&TestFetchAllProcesses.memory_full_infoc Cs |j|tx |D]}|j|jt|j|jt|j|jj|jtr^|j|jdnht r|j|j t|j|j t|j|j t|j |j d|j|j d |j|j dntr|j rqtjj|jst|ytj|j}Wntk rYqXtj|jst|qWdS) Nrvrrwar+a+rw)rrrrr)rVrWfdrfr`r"rr]r rpositionmodeflagsrruZ assertGreaterrr_rarQstatFileNotFoundErrorS_ISREGst_mode)r:rXr1fstr'r'r( open_filesFs,  z TestFetchAllProcesses.open_filescCs|j|t|j|ddS)Nr)rVrfr)r:rXr1r'r'r(num_fds`s zTestFetchAllProcesses.num_fdsc CsPt@|jt|tt|x |D]}t|s6tt|q&WWdQRXdS)N)rrlensetrrQr)r:rXr1connr'r'r( connectionsds   z!TestFetchAllProcesses.connectionscCs|j|ttf|j|j||rtjj|s8t|ytj |}WnBt k r}z&t rjt j j|rjn|jtjkrxWYdd}~XnXt j|jstdS)N)rVr"rrr]r_r`rarQrOSErrorr rZ _psplatformZis_permission_errerrnoENOENTS_ISDIRr)r:rXr1rerrr'r'r(cwdks zTestFetchAllProcesses.cwdcCs0|j|td|kodkns,t|dS)Nrd)rVrhrQ)r:rXr1r'r'r(memory_percent{s z$TestFetchAllProcesses.memory_percentcCs|j|tdS)N)rVbool)r:rXr1r'r'r( is_runningsz TestFetchAllProcesses.is_runningcCsR|j|t|j|gtttj}x$|D]}|j|t|j||q.WdS)N)rVrWrtrrrrfru)r:rXr1Zcpusrr'r'r( cpu_affinitys     z"TestFetchAllProcesses.cpu_affinitycCsH|j|ttdf|dk rDtjj|s0t|tjj|sDt|dS)N)rVr"typer_r`rarQrd)r:rXr1r'r'r(terminalszTestFetchAllProcesses.terminalcCsx|D]}|j|jt|j|jt|j|jtx|jD]}t||}|dkrv|jdstjj |jst |jq<|dkr|st t |q<|dkrt s|st t |q<|j|t tf|j|dqddttD}|j||trd|j|tj n |j|tdS)NcSs g|]}|jdrtt|qS)Z_PRIORITY_CLASS)r^rLr)rGxr'r'r( sz.TestFetchAllProcesses.nice..i) rVrfr rQdirrrur enumIntEnum)r:rXr1Z prioritiesr'r'r(nices "  zTestFetchAllProcesses.nicecCs:t|s tx(|D] }|j|ttf|j|dqWdS)Nr)rrQrVrfr r)r:rXr1rRr'r'r(num_ctx_switchess  z&TestFetchAllProcesses.num_ctx_switchescCs@|j|t|jt|d|j|dd|j|dddS)Nrrvrwrw)rVtuplerrr)r:rXr1r'r'r(rlimits zTestFetchAllProcesses.rlimitcCs>|j|tx,|jD] \}}|j|t|j|tqWdS)N)rVdictrKr")r:rXr1kvr'r'r(environs  zTestFetchAllProcesses.environN))__name__ __module__ __qualname____doc__r;r>r@rUrZrerrrrmrorqrrrgryr|r}rrrrrrrrrrrrrrrrrrrrr'r'r'r(r5bsL      r5__main__) run_from_name)(rrrr7r_rrjrNrrrrrrrrr r r Zpsutil._compatr r rZ psutil.testsrrrrrrrrrr6r4r5rZpsutil.tests.runnerr__file__r'r'r'r( sN                       1 l