3 JZ9@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ddlm+Z+ddlm,Z,ddlm-Z-dd lm.Z.dd!lm/Z/dd"lm0Z0dd#lm1Z1dd$lm2Z2dd%lm3Z3dd&lm4Z4dd'lm5Z5dd(lm6Z6dd)lm7Z7dd*lm8Z8dd+lm9Z9dd,lm:Z:dd-lm;Z;dd.lmZ?erej@dkrGd2d3d3e?ZAGd4d5d5e;j>ZBeCd6kre2eDdS)7zTests for psutil.Process class.N)AIX)BSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)long)PY3)APPVEYOR) call_until)copyload_shared_lib) create_exe)create_proc_children_pair)create_zombie_proc)enum)get_test_subprocess) get_winver)HAS_CPU_AFFINITY) HAS_ENVIRON) HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS) HAS_RLIMIT) HAS_THREADS)mock)PYPY) PYTHON_EXE) reap_children)retry_before_failing)run_test_module_by_name) safe_rmpath)sh)skip_on_access_denied)skip_on_not_implemented)TESTFILE_PREFIX)TESTFN) ThreadTask)TRAVIS)unittest) wait_for_pid) WIN_VISTAc@sreZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZeje dddZdd Zeje d!ejed"d#d$Zeje deed%d&d'Zeje dejeoee kdd(d)Z!eje dejeoee kdd*d+Z"eje# dd,d-Z$eje# dd.d/Z%eje# dd0d1Z&eje# dd2d3Z'eje# dd4d5Z(d6d7Z)eje d8d9d:Z*eje+ dd;d<Z,e-e.e/d%eje+ dd=d>Z0d?d@Z1dAdBZ2eje3 ddCdDZ4eje3 ddEdFZ5dGdHZ6dIdJZ7dKdLZ8dMdNZ9dOdPZ:eje;dQejeeje d!dWdXZ?dYdZZ@d[d\ZAd]d^ZBd_d`ZCdadbZDejeE ddcddZFejeE ddedfZGejeE ddgdhZHejeIdiejeJdjdkdlZKejeIdiejeJdjdmdnZLeje d!dodpZMeed%ejeNpzeOdqdrdsZPdtduZQdvdwZRdxdyZSdzd{ZTd|d}ZUd~dZVddZWddZXddZYddZZddZ[ddZ\eje d!ddZ]eje d!ddZ^eje d!ddZ_ddZ`ejea dddZbejea deje d!ddZcdS) TestProcesszTests for psutil.Process class.cCs ttdS)N)r$r))selfr1$/usr/lib64/python3.6/test_process.pysetUpNszTestProcess.setUpcCs tdS)N)r!)r0r1r1r2tearDownQszTestProcess.tearDownc CsXtj}|j|jtjt}|jtj|jj|j|jt d|_WdQRXdS)N!) psutilProcess assertEqualpidosgetpidr assertRaisesAttributeError)r0psprocr1r1r2test_pidTs  zTestProcess.test_pidcCsNt}|j}tj|}|j|j}|jtj|trJ|j |t j dS)N) rr9r6r7killwait assertFalse pid_existsrr8signalSIGKILL)r0r?r@r>sigr1r1r2 test_kill\s zTestProcess.test_killcCsNt}|j}tj|}|j|j}|jtj|trJ|j |t j dS)N) rr9r6r7 terminaterBrCrDrr8rESIGTERM)r0r?r@r>rGr1r1r2test_terminatefs zTestProcess.test_terminatec CsLtr tjntj}t}tj|j}|j||j }|j tj |jtrH|j || t}tj|j}|j|t jdttjdd(|jtj|j|WdQRXWdQRXt}tj|j}|j|t jdttjdd,|jtjtjj|WdQRXWdQRXdtjkrHtjd}|jt|jtjdS)Nzpsutil.os.kill) side_effectr)rrErFrJrr6r7r9 send_signalrBrCrDr8rpatchOSErrorerrnoZESRCHr< NoSuchProcessZEPERM AccessDeniedpids ValueError)r0rGr?r>Zexit_sigr1r1r2test_send_signalps2      " zTestProcess.test_send_signalcCs^t}tj|j}|j|j}tr8|j|tj n|j|tj |j |j t}tj|j}|j |j}tr|j|tj n|j|tj |j |j d}ttd|g}tj|j}|j|jd|j |j ttd|g}tj|j}|j|jd|j|jdt}tj|j}|j|jtj|jd|jt|jddS)Nz0import time, sys; time.sleep(0.01); sys.exit(5);z-cg{Gz?)rWN)rr6r7r9rArBrr8rErFrJrC is_runningrIr assertInnamer<TimeoutExpiredrU)r0r?r>coder1r1r2 test_waits<     zTestProcess.test_waitcCst\}}|jtj|jd|jtj|jd|j|j|j}|j}trp|j|tj |j|dn|j|tj |j|tj dS)Ng{Gz?) rr<r6r]rBrIrr8rErJ)r0p1p2Zret1Zret2r1r1r2test_wait_non_childrens z"TestProcess.test_wait_non_childrenc Cst}tj|j}|jtj|jd|jtjd}x:y|jd}Wn$tjk rltj|krhYq:XPq:Wt r|j |t j n|j |t j |j|jdS)Nr)rr6r7r9r<r]rBrAtimerr8rErFrJrCrZ)r0r?r>Zstop_atr^r1r1r2test_wait_timeout_0s    zTestProcess.test_wait_timeout_0c Cstj}|jdd|jddxRtdD]F}|jdd}|j|t|j|dtsd|j|dq*|j|dq*W|j t |jddWdQRXdS)NgMbP?)ZintervaldggY@rXrY) r6r7 cpu_percentrangeassertIsInstancefloatassertGreaterEqualrassertLessEqualr<rU)r0r>xZpercentr1r1r2test_cpu_percents      zTestProcess.test_cpu_percentc Cs4tjddd}tjj|js&tWdQRXdS)Nzpsutil.cpu_count)Z return_value)rrOr6r7rgcalledAssertionError)r0mr1r1r2test_cpu_percent_numcpus_nones z)TestProcess.test_cpu_percent_numcpus_nonecCsxtjj}|jdks(|jdks(t||jdks:t||jdksLt|x&|jD]}t j dt j t ||qTWdS)Ngz%H:%M:%S) r6r7 cpu_timesusersystemrp children_userchildren_system_fieldsrdstrftime localtimegetattr)r0timesr\r1r1r2test_cpu_timess   zTestProcess.test_cpu_timescCstjjdd\}}tjdd\}}t||gt||gdkrZ|jd||ft||gt||gdkr|jd||fdS)Nrcg?zexpected: %s, found: %s)r6r7rsr:r|maxminfail)r0 user_timeZ kernel_timeutimeZktimer1r1r2test_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPtj}|j}|j|dtjdkr4|j|d|j|jttjdS)NrrX)r6r7Zcpu_numrk cpu_countr8r[rh)r0r>Znumr1r1r2 test_cpu_nums    zTestProcess.test_cpu_numcCsdt}tj}tj|j}|j}t||}|dkrJ|jd|||ftjdtj |jdS)Nrcz'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S) rrdr6r7r9 create_timeabsrryrz)r0r?Znowr>r differencer1r1r2test_create_times  zTestProcess.test_create_timez POSIX onlyznot reliable on TRAVIScCsLtjj}tjjs tjjr>tjj t d}|j ||n |j |dS)Ntty) r6r7terminalsysstdinisattystdoutr:pathrealpathr%r8 assertIsNone)r0rrr1r1r2 test_terminal-s  zTestProcess.test_terminal)Zonly_ifcCstj}|j}ttd}|jWdQRX|j}t rt r|j|j |j |j |j |j t r|j|j |j |j |j|jn |j|j|j|j|j|j|j}tjtd.}tr|jtdddn|jddWdQRX|j}|j|j |j |j|j|j|j|j |j |j|j|jt r^|j|j|j|j|j |j xJtt|D]:}tr|dkrql|j||d|j||dqlWdS)Nrb)prefixrmi@Basciircr)r6r7Z io_countersopenr readrr assertGreaterZ read_countr8Z write_countrZ read_charsZ write_charsrkZ read_bytesZ write_bytestempfileZ TemporaryFiler(r writebytesrhlen)r0r>Zio1fZio2ir1r1r2test_io_counters7s>  zTestProcess.test_io_countersc CstrZioclassvalueoriginalr1r1r2 test_ionicecsJ                      zTestProcess.test_ionicecCst}tj|j}tr|jt|jdd|jt|jdd |jt|jd|jt|jdd|j td|jtj d|j td|jtj d|j td|jdd n"|jt|jd |jt|jdddS) Nrc rXrfooz*can't specify value with IOPRIO_CLASS_NONEz*can't specify value with IOPRIO_CLASS_IDLEz$'ioclass' argument must be specified)rrrY) rr6r7r9rr<rUr TypeErrorZassertRaisesRegexrr)r0r?r>r1r1r2test_ionice_errss$ zTestProcess.test_ionice_errscCsddl}tjtj}ddttD}|s4t|x|D]}tt|}|j|d|t|kr|j |t||t rxq:|j |j ||j |q:|j |}|j t |d|j|dd|j|ddq:WdS)NrcSsg|]}|jdr|qS)ZRLIMIT) startswith).0rmr1r1r2 sz/TestProcess.test_rlimit_get..rcrXrYrY)resourcer6r7r:r;dirrpr{rkr8rrlimitZ getrlimitr)r0rr>namesr\rretr1r1r2test_rlimit_gets       zTestProcess.test_rlimit_getcCst}tj|j}|jtjd|j|jtjd|jttj jdjdWdQRX|jt|jtjdWdQRXdS)NrWr)rWrW)rWrW)rWrWrW) rr6r7r9r RLIMIT_NOFILEr8r<rUZ _psplatform)r0r?r>r1r1r2test_rlimit_sets   zTestProcess.test_rlimit_setc Cstj}|jtj\}}z|jtjd|fttd}|jddWdQRX|jt*}ttd}|jddWdQRXWdQRX|j t r|j j n|j dt j Wd|jtj||f|j |jtj||fXdS)NiwbXir)r6r7r RLIMIT_FSIZErr)rr<IOErrorr8r Z exceptionrQZEFBIG)r0r>softhardrexcr1r1r2 test_rlimits   " zTestProcess.test_rlimitcCstj}|jtj\}}zN|jtjd|f|jtjtj|fttd}|jddWdQRXWd|jtj||f|j|jtj||fXdS)Nirri) r6r7rr RLIM_INFINITYrr)rr8)r0r>rrrr1r1r2test_rlimit_infinitys z TestProcess.test_rlimit_infinitycCs<tj}|jtj\}}|jtj||jtj||fdS)N)r6r7rrr8r)r0r>rrr1r1r2test_rlimit_infinity_valuesz&TestProcess.test_rlimit_infinity_valuecCsrtj}trstep1step2r1r1r2test_num_threadss zTestProcess.test_num_threadsz WINDOWS onlycCstj}|j|jddS)Nr)r6r7rZ num_handles)r0r>r1r1r2test_num_handles szTestProcess.test_num_handlescCstj}trrrZathreadr1r1r2 test_threadss  zTestProcess.test_threadsc Cst}tj|j}trDy |jWn tjk rBtjdYnX|j |j j t dd|jDdd|j |j j t dd|jDdddS)Nz$on OpenBSD this requires root accesscSsg|] }|jqSr1)r)rrmr1r1r2r7sz.TestProcess.test_threads_2..g?)ZdeltacSsg|] }|jqSr1)r)rrmr1r1r2r:s)rr6r7r9rrrSr,rZassertAlmostEqualrsrtsumru)r0r?r>r1r1r2test_threads_2)s   zTestProcess.test_threads_2c Cstj}|jdd\}}|j}|j|d|j|ddgd}|jdd\}}|j}|j|||j|||j||~tr|j} |j| j| j |j| j | j |j} x | j D]} |jt | | dqWdS)Nrcri`)r6r7Z memory_infomemory_percentrrkr r8ZrssZwsetvmsZpagefilerxr{) r0r>Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2memr\r1r1r2test_memory_info<s&       zTestProcess.test_memory_infocCstjj}tjj}xB|jD]8}t||}|j|d||fd|j|||||fdqWt sft sft rt|j|j dt r|j|j d|j|jddS)Nr)msg)r6Zvirtual_memorytotalr7Zmemory_full_inforxr{rkrlrr russZpssZswap)r0rrr\rr1r1r2test_memory_full_infoZs     z!TestProcess.test_memory_full_infoc Cstj}|j}dd|D}|jt|tt||jdd}x|D]}|jjdsHtjj |jspt |jt ry*tjj |jstjj |jst |jWnHt k rtsn,td}|j}WdQRXd|j|krYnXqHdtjj|jkrHtjj |jsHt |jqHWxv|D]n}xf|jD]\}t||} |d krHq*n<|d krb| st | n"|j| ttf| d ks*t | q*WqWdS)NcSsg|]}|qSr1r1)rrmr1r1r2rksz0TestProcess.test_memory_maps..F)Zgrouped[z/proc/self/smapsz %s (deleted)Z64raddrpermsr)rr)r6r7 memory_mapsr8rsetrrr:isabsrprexistsislinkrrrbasenamerxr{rirr ) r0r>mapspathsZext_mapsntrdataZfnamerr1r1r2test_memory_mapsgs<          zTestProcess.test_memory_mapsc sHt8}ddfddtjjD}|j||WdQRXdS)NcSstjjtjj|S)N)r:rrnormcase)r>r1r1r2normpathsz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}|jqSr1)r)rrm)rr1r2rsz:TestProcess.test_memory_maps_lists_lib..)rr6r7rr[)r0rZlibpathsr1)rr2test_memory_maps_lists_libs  z&TestProcess.test_memory_maps_lists_libcCstj}|j}d|ko"dkns0t||jdd}d|koNdkns\t|d|kondkns|t||jt|jddtststr|jdd}d|kodknst|d|kodknst|dS)Nrrfr)Zmemtypez?!?r) r6r7rrpr<rUrrr )r0r>rr1r1r2test_memory_percents       zTestProcess.test_memory_percentcCsZt}tj|j}|jst|js*t|j|j|j sHt|j sVtdS)N)rr6r7r9rZrprArB)r0r?r>r1r1r2test_is_runnings   zTestProcess.test_is_runningcCst}tj|jj}y|j|tWntk rtrht |t tkrht j j }|j|||tnNdt jdt jdf}y |j|j|dtj|dWntk rYnXYnXt|ddg}|j|ddS)Nz%s.%srrXrLz-czimport os; print('hey')Zhey)rr6r7r9exer8r rpr rr:rrr version_inforeplacer%)r0r?rrZveroutr1r1r2test_exes  zTestProcess.test_exec Cstddg}t|}y(|jdjtj|jjdj|Wn@tk rzt sVt sVt rt|jtj|jjdtnYnXdS)Nz-czimport time; time.sleep(60) r) r rr8joinr6r7r9cmdlinerprrr)r0rr?r1r1r2 test_cmdlines  zTestProcess.test_cmdlinecCsPtt}tj|jjj}tjj tjj t j j}|j |sLt||fdS)N)rr r6r7r9r\lowerr:rrrr executablerrp)r0r?r\Zpyexer1r1r2 test_nameszTestProcess.test_namezbroken on SUNOSz broken on AIXcsfdd}tdt|j|ddddddg}t|}tj|j}trZt|j|j |j ||j |j t j j|j t j j|jt j jdS) Nc s&y tWntk r YnXdS)N)r$rPr1) funky_pathr1r2rms z.TestProcess.test_prog_w_funky_name..rmz foo bar )z-cz9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rLZarg3)r)r addCleanuprr6r7r9r+r-r8rr\r:rrrr)r0rrr?r>r1)rr2test_prog_w_funky_names     z"TestProcess.test_prog_w_funky_namecCsXtj}|j\}}}|j|tj|j|tjttdrT|jtj|jdS)N getresuid) r6r7uidsr8r:getuidgeteuidhasattrr)r0r>real effectivesavedr1r1r2 test_uidss  zTestProcess.test_uidscCsXtj}|j\}}}|j|tj|j|tjttdrT|jtj|jdS)Nr) r6r7gidsr8r:getgidgetegidr getresgid)r0r>rrrr1r1r2 test_gidss  zTestProcess.test_gidscCstj}|jt|jdtrz||j}tjdkr@|j|t j n |j|t |j |tj |jtj|j |jtj|jtj |j |jtj Wd|jtj Xn|j}zyttdr|j tjtjtj|j|jd|j |jdttdr"|j tjtjtj|jtsB|jd|j |jdWntjk r\YnXWdy|j|Wntjk rYnXXdS)Nstrrr getpriorityrXr)rr)r6r7r<rnicer rrrirrrr8NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSrr:r PRIO_PROCESSr;rrS)r0r>ZinitZ first_nicer1r1r2 test_nice"sB         zTestProcess.test_nicecCstj}|j|jtjdS)N)r6r7r8statusZSTATUS_RUNNING)r0r>r1r1r2 test_statusKszTestProcess.test_statuscCsnt}tj|j}|j}trZ|jd\}}|j|tj dt j krj|j|t j dn|j|tj dS)N\Z USERDOMAIN) rr6r7r9usernamer splitr8getpassZgetuserr:environ)r0r?r>rZdomainr1r1r2 test_usernameOs  zTestProcess.test_usernamecCs*t}tj|j}|j|jtjdS)N)rr6r7r9r8cwdr:getcwd)r0r?r>r1r1r2test_cwd[s zTestProcess.test_cwdcCs.tddg}t|}tj|j}t|jddS)Nz-cz/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))r rr6r7r9rr)r0cmdr?r>r1r1r2 test_cwd_2`s  zTestProcess.test_cwd_2cCstj}|j}|st||j|j|ttdrL|j|ttj |j |jt |t t |tt t tjdd}xzts|n|D]j}|j|g|j|j|gttdr|j|jttj |j t|dr|j|jd|jqW|jgtr |j|j|jjn|j|j|ttdrX|j|jttj |j |jt|jd|j||jt ||jt|dS)Nsched_getaffinityT)percpunum_cpurrX)r6r7 cpu_affinityrprrr:r8listr r9rrrhrgr+r"r_procZ_get_eligible_cpusr<rtuple)r0r>initialZall_cpusnr1r1r2test_cpu_affinitygs6          zTestProcess.test_cpu_affinitycCszt}tj|j}ttjdddg}|jt|j||jt|jt dd|jt |jddg|jt|jdd gdS) NT)r!ri'i*r1rXrY) rr6r7r9rrsr<rUr#rhr)r0r?r>Z invalid_cpur1r1r2test_cpu_affinity_errss z"TestProcess.test_cpu_affinity_errscCstj}|j}|st||j|j|g}xBtdt|dD],}x&tj||D]}|rT|j t |qTWqBWx&|D]}|j||j |j|qxWdS)NrrX) r6r7r#rprrhr itertools combinationsappendr$r8)r0r>r'ZcomboslZsubsetZcombor1r1r2"test_cpu_affinity_all_combinationss   z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc CsRtj}|j}|jt|kttdn}|jdd|jt|jdt |}x<|D]"}|j tkrZt rz|j |j dPqZW|jdt|WdQRXx"|D]}tj j|j st|qWdt}ttd|g}tj|j}xDtdD],}d d |jD}t|krPtjd qW|jt|x$|D]}tj j|s.t|q.WdS) Nrxizlen(ret) != %izno file found; files=%sz2import time; f = open(r'%s', 'r'); time.sleep(60);z-crfcSsg|] }|jqSr1)r)rrmr1r1r2rsz/TestProcess.test_open_files..g{Gz?)r6r7 open_filesrCr)rrflushrrrrr8Zpositionrreprr:isfilerprr r9rhrdsleepr[) r0r>filesrfilerr?rm filenamesr1r1r2test_open_filess4        zTestProcess.test_open_filesc Csttd}tj}xB|jD] }|j|jks<|j|jkrPqW|j dt |j|j |j|jt r||j |jdn|j |j|j|jd}|j |d|j|j |d|j|j |j|jWdQRXdS)Nwzno file found; files=%srXrrY)rr)r6r7r2rr\fdfilenorr4r8r assertNotIn)r0Zfileobjr>r8Zntupler1r1r2test_open_files_2s  zTestProcess.test_open_files_2cCstj}|j}ttd}|j|j|j|j|dtj}|j|j|j|j|d|j|j|j|j|dS)Nr;rXrc) r6r7Znum_fdsrr)rcloser8socket)r0r>startr8Zsockr1r1r2 test_num_fdss   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsLtj}t|j}x(tdD]}t|j}||krdSqW|jddS)Ni z7num ctx switches still the same after 50.000 iterations)r6r7rZnum_ctx_switchesrhr)r0r>Zbeforermafterr1r1r2test_num_ctx_switchess  z!TestProcess.test_num_ctx_switchescCsttdr"|jtjjtjtj}t}tj|j }|j|j|t ddt r^dSx2tj D]&}|j |j krzqh|j |j||dqhWdS)NgetppidT) recursive)r)rr:r8r6r7ppidrFr;rr9r!r process_iterassertNotEqual)r0 this_parentr?r>r1r1r2 test_ppids    zTestProcess.test_ppidcCs0tj}t}tj|j}|j|jj|dS)N)r:r;rr6r7r9r8parent)r0rKr?r>r1r1r2 test_parents zTestProcess.test_parentc CsFt}tj|j}tjdtjddd|j|jWdQRXdS)Nzpsutil.Processrr)rM) rr6r7r9rrOrRrrM)r0r?r>r1r1r2test_parent_disappeared s  z#TestProcess.test_parent_disappearedcCstj}|j|jg|j|jddgtdd}|j}|jdd}xL||fD]@}|jt|d|j|dj|j|j|djtj qTWdS)NT)rGr)Z creationflagsrX) r6r7r8childrenrrr9rHr:r;)r0r>r?Z children1Z children2rPr1r1r2 test_children(s  zTestProcess.test_childrencCsdt\}}tj}|j|j|g|j|jdd||g|j|j|j|jddgdS)NT)rG)rr6r7r8rPrIrB)r0r`rar>r1r1r2test_children_recursive7s z#TestProcess.test_children_recursivec Cstjt}x@tjD]4}y||jd7<Wqtjk rFYqXqWt|jddddd}tj |}y|j dd}Wntj k rYnX|j t |t t|dS) NrXcSs|dS)NrXr1)rmr1r1r2Msz6TestProcess.test_children_duplicates..)keyrT)rGrY) collections defaultdictrr6rIrHErrorsorteditemsr7rPrSr8rr)r0tabler>r9cr1r1r2test_children_duplicatesDs   z$TestProcess.test_children_duplicatescCsdt}tj|j}|jx*tdD]}|jtjkr8Ptj dq$W|j |j |jtjdS)Nrfg{Gz?) rr6r7r9suspendrhrZSTATUS_STOPPEDrdr6resumerJ)r0r?r>rmr1r1r2test_suspend_resumeVs zTestProcess.test_suspend_resumecCs$|jttjd|jttjddS)Nr*rXrY)r<rr6r7rU)r0r1r1r2test_invalid_pidaszTestProcess.test_invalid_pidc;Cstj}|jddgd}|jt|jddgtjttj}|jdgdd}t|dt sp|j|ddt j ddtj d "|j|jd gd dd d iWdQRXt j ddtj |jdd |jtj |jd gdWdQRXt j ddtj|jdd "|j|jd gddd diWdQRXt j ddtd F|j}|jd t |j|jt|jd gdWdQRXWdQRX|jt|jdWdQRX|jt|jdgWdQRX|jt|jdd gWdQRXdS) Nrr\)attrsZ connectionsr)raZad_valuezpsutil.Process.niceT)ZcreaterMrrXZbar)r6r7as_dictr8rXkeysrrT isinstancer$rrOrSrRr9r< ZombieProcessNotImplementedErrorr>rrU)r0r>dr1r1r2 test_as_dictes> ""  "   zTestProcess.test_as_dictcCstjd@}tj}|j|j|jWdQRX|j|jdWdQRXtjd}|j|jWdQRX|j|jddS)Nz$psutil._psplatform.Process.cpu_timesrXrc)rrOr6r7oneshotrsr8 call_count)r0rqr>r1r1r2 test_oneshots   zTestProcess.test_oneshotc&Cstjd}tjdr}tj}|j:|j|j|j|j|jWdQRXWdQRX|j|jd|j|jdWdQRXWdQRXtjd}|j|jWdQRX|j|jddS)Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterrXrc)rrOr6r7rirsr8rj)r0m1m2r>rqr1r1r2test_oneshot_twices    " zTestProcess.test_oneshot_twicec Cst}tj|j}|j|jtr8ttjd|j|j |j ddddddg}t rjt rj|j dxTt|D]F}|jd sv||krqvyt||}|d krtr|d }n |tj}np|d kr|}|d }nX|dkr|tj}|tjd}n8|dkr|}|dg}n|dkr(|tj}n|}Wnztjk rV|jd|Yqvtjk rlYqvtjk rtr|dkrnYqvtk rYqvX|jd||fqvWdS)Nz %s not in retr9rZrBrriZmemory_info_exr_rrXrrcrWr#rrNz/ZombieProcess for %r was not supposed to happenrrz4NoSuchProcess exception not raised for %r, retval=%s)rWrW)rr)rr6r7r9rIrBr rrTrCrZrrr.rrr{rrrrErJrerrRrSrrf)r0r?r>Zexcluded_namesr\methrr1r1r2test_halfway_terminated_processs^               z+TestProcess.test_halfway_terminated_processcCsdd}t}|jtddtj|}|j|jtj|j|j |j ||j }|dk rl|j|gt |dr||j tj||j tjd||jt |dry||jdgWn:tk r}ztrtrd t|krnWYdd}~XnX||jdt |d r0tr$||jd dn ||jdt |drL||j tjd||j ||j||j||j|jtj|t rtr|j|tj|j|d d tjDit_|j|dd tjDdS)Nc _s,y |||Stjtjfk r&YnXdS)N)r6rerS)Zfunargskwargsr1r1r2succeed_or_zombie_p_excs z@TestProcess.test_zombie_process..succeed_or_zombie_p_excT)rGrrWr#rz not eligiblerrccSsg|] }|jqSr1)r9)rrmr1r1r2r9sz3TestProcess.test_zombie_process..cSsg|] }|jqSr1)r9)rrmr1r1r2r;s)rWrW)rWrW) rrr!r6r7r8r STATUS_ZOMBIE assertTruerZrbr]rrrrMr#rUr+rr rrr^rIrArDrr[rTrIZ_pmap)r0rtZzpidZzprocrerrr1r1r2test_zombie_processsP                zTestProcess.test_zombie_processc CsBtj}tjdtjdd}|js*t|js4tWdQRXdS)Nzpsutil.Processr)rM)r6r7rrOrerZrpro)r0r>rqr1r1r2$test_zombie_process_is_running_w_exc=s  z0TestProcess.test_zombie_process_is_running_w_excc CsHtj}tjdtjdd"}|j|jtj|js:t WdQRXdS)Nz!psutil._psplatform.Process.statusr)rM) r6r7rrOrer8rrurorp)r0r>rqr1r1r2 test_zombie_process_status_w_excGs z,TestProcess.test_zombie_process_status_w_excc Cs:dtjkr"|jtjtjddStjd}xtjD]}|dkrBq4t||}y |}Wntjk rlYq4X|d kr|j|j dq4|dkrt r|j|j dqt r|j|j dq4|dkr4|s4t |q4Wt|d ry|jtjWntjk rYnX|jts6|jdtj|jtjddS) Nrr9rrrrootzNT AUTHORITY\SYSTEMr\r)rr)r6rTr<rRr7Z_as_dict_attrnamesr{rSr8rrrr rprrrrbrr[rvrD)r0r>r\rprr1r1r2 test_pid_0Qs<      zTestProcess.test_pid_0cCs@dd}d|_tj}||j}|tjj}|j||dS)NcSsb|jdd|jdd|jddtrL|jdd|jdd|jddtdd|jDS) NZPSUTIL_TESTINGZPLATHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs$g|]\}}|jd|jdfqS)z )rstrip)rkvr1r1r2rsz@TestProcess.test_environ..clean_dict..)poprdictrY)rgr1r1r2 clean_dictzs      z,TestProcess.test_environ..clean_dict)ZmaxDiffr6r7rr:copyr8)r0rr>Zd1Zd2r1r1r2 test_environxs   zTestProcess.test_environcCstjd}t}t||d|jt|t|gtjtjd}t j |j }t |j |j |j|j|jjd|j|jddd|j|j|jddS) Na #include #include char * const argv[] = {"cat", 0}; char * const envp[] = {"A=1", "X", "C=3", 0}; int main(void) { /* Close stderr on exec so parent can wait for the execve to * finish. */ if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0) return 0; return execve("/bin/cat", argv, envp); } )Zc_code)rstderrr*3)ACr)textwrapdedentr)rrr$r subprocessPIPEr6r7r9r-rvrZr8rrr communicate returncode)r0r^rr?r>r1r1r2test_weird_environs      zTestProcess.test_weird_environN)d__name__ __module__ __qualname____doc__r3r4r@rHrKrVr_rbrernrrr}rr,ZskipIfrrrrr+rrr'rrrr rr.rrrrrrrrrrrrr"r&rrrrrrrrrrrrr rrrr rrrrrrr)r+r0rr r:r?rCrrrErLrNrOrQrRr\r_r`rhrkrnrqrxryrzr|rrrr1r1r1r2r/Ks   /     +  . "   )    ) *  %    . @I  ' r/c@sReZdZdZeedr&ejZejZ ddZ ddZ ddZ d d Z d d Zd S)LimitedUserTestCasezRepeat the previous tests by using a limited user. Executed only on UNIX and only if the user who run the test script is root. rcs\tj|f||xDddt|DD].}t||fdd}t||tj||q&WdS)NcSsg|]}|jdr|qS)Ztest)r)rrmr1r1r2rsz0LimitedUserTestCase.__init__..c s&y Wntjk r YnXdS)N)r6rS)r0)rpr1r2test_s z+LimitedUserTestCase.__init__..test_)r/__init__rr{setattrtypes MethodType)r0rrrsattrrr1)rpr2rs   zLimitedUserTestCase.__init__cCs*tttj|tjdtjddS)Ni)r$r)r/r3r:setegidseteuid)r0r1r1r2r3s  zLimitedUserTestCase.setUpcCs&tj|jtj|jtj|dS)N)r:r PROCESS_UIDr PROCESS_GIDr/r4)r0r1r1r2r4s  zLimitedUserTestCase.tearDownc Cs8ytjjdWntjk r(Yn X|jddS)NrXzexception not raisedrY)r6r7rrSr)r0r1r1r2rs zLimitedUserTestCase.test_nicecCsdS)Nr1)r0r1r1r2rxsz'LimitedUserTestCase.test_zombie_processN)rrrrrr:rrr rrr3r4rrxr1r1r1r2rs rc@s0eZdZdZddZddZddZdd Zd S) TestPopenzTests for psutil.Popen class.cCs tdS)N)r!)r0r1r1r2r4szTestPopen.tearDownc Csjtddg}tj|tjtjdB}|j|j|j|jt ||j t t |d|j WdQRXdS)Nz-czimport time; time.sleep(60);)rrr)r r6Popenrrr\rsrrvrr<r=r{rI)r0rprocr1r1r2 test_miscs   zTestPopen.test_miscc Csftjtdgtjtjtjd}|jWdQRX|jjss                                             q53