\c@sdZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddl Z d e$j(fd!YZ)d"e$j(fd#YZ*d$e$j(fd%YZ+d&e$j(fd'YZ,e-d(krdd)l.m/Z/e/e0ndS(*sContracts tests. These tests mainly check API sanity in terms of returned types and APIs availability. Some of these are duplicates of tests test_system.py and test_process.py iN(tclosing(tAIX(tBSD(tFREEBSD(tLINUX(tMACOS(tNETBSD(tOPENBSD(tOSX(tPOSIX(tSUNOS(tWINDOWS(tlong(tbind_unix_socket(tcheck_connection_ntuple(tget_kernel_version(tHAS_CONNECTIONS_UNIX(tHAS_NET_IO_COUNTERS(t HAS_RLIMIT(tHAS_SENSORS_FANS(tHAS_SENSORS_TEMPERATURES(t is_namedtuple(t safe_rmpath(tskip_on_access_denied(tTESTFN(tunittest(tunix_socket_path(tVALID_PROC_STATUSES(twarntTestAvailabilitycBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZRS(sQMake sure code reflects what doc promises in terms of APIs availability. cCs2tptpt}|jttjd|dS(Nt cpu_affinity(RR Rt assertEqualthasattrtpsutiltProcess(tselfthasit((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_cpu_affinity=scCs6|jttdt|jttdtdS(Ntwin_service_itertwin_service_get(RR R!R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_win_serviceAscCs)|jttdtp!tp!tdS(Nt PROCFS_PATH(RR R!RR R(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_PROCFS_PATHEscCs|j}|ttdt|ttdt|ttdt|ttdt|ttdt|ttdtdS(NtABOVE_NORMAL_PRIORITY_CLASStBELOW_NORMAL_PRIORITY_CLASStHIGH_PRIORITY_CLASStIDLE_PRIORITY_CLASStNORMAL_PRIORITY_CLASStREALTIME_PRIORITY_CLASS(RR R!R (R#tae((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_win_priorityIs cCse|j}|ttdt|ttdt|ttdt|ttdtdS(NtIOPRIO_CLASS_NONEtIOPRIO_CLASS_RTtIOPRIO_CLASS_BEtIOPRIO_CLASS_IDLE(RR R!R(R#R1((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_linux_ioprioRs  cCs|j}totdk}|ttjd||ttd||ttd||ttd||ttd||ttd ||ttd ||ttd ||ttd ||ttd ||ttd||ttd||ttd|toQtdk}|ttd||ttd||ttd||ttd||ttd|dS(Niii$trlimitt RLIM_INFINITYt RLIMIT_ASt RLIMIT_COREt RLIMIT_CPUt RLIMIT_DATAt RLIMIT_FSIZEt RLIMIT_LOCKStRLIMIT_MEMLOCKt RLIMIT_NOFILEt RLIMIT_NPROCt RLIMIT_RSSt RLIMIT_STACKiitRLIMIT_MSGQUEUEt RLIMIT_NICEt RLIMIT_RTPRIOt RLIMIT_RTTIMEtRLIMIT_SIGPENDING(iii$(ii(RRRR R!R"(R#R1R$((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_linux_rlimitYs* cCsYto'tjjdp'tjjd}|jttd|pQtpQtpQt dS(Ns/sys/devices/system/cpu/cpufreqs$/sys/devices/system/cpu/cpu0/cpufreqtcpu_freq( RtostpathtexistsRR R!RR R(R#tlinux((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt test_cpu_freqqs cCs#|jttdtptdS(Ntsensors_temperatures(RR R!RR(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_sensors_temperaturesxscCs|jttdtdS(Nt sensors_fans(RR R!R(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_sensors_fans|scCs/|jttdtp'tp'tp'tdS(Ntsensors_battery(RR R!RR RR(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt test_batteryscCs8|jttjdtp0tp0tp0tp0tdS(Ntenviron( RR R!R"RRR RR (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_environscCs |jttjdtdS(Ntuids(RR R!R"R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_uidsscCs |jttjdtdS(NRY(RR R!R"R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_gidsscCs |jttjdtdS(Ntterminal(RR R!R"R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_terminalscCs&|jttjdtptdS(Ntionice(RR R!R"RR (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_ionicescCs |jttjdtdS(NR8(RR R!R"R(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_rlimitscCs8ttjd}|j|ts'tr-tntdS(Nt io_counters(R R!R"RRR tFalsetTrue(R#R$((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_io_countersscCs |jttjdtdS(Ntnum_fds(RR R!R"R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_num_fdsscCs |jttjdtdS(Nt num_handles(RR R!R"R (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_num_handlesscCs,|jttjdtp$tp$tdS(NR(RR R!R"RR R(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_cpu_affinityscCs,|jttjdtp$tp$tdS(Ntcpu_num(RR R!R"RRR (R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_cpu_numscCsDttjd}|j|ts3ts3ts3tr9tnt dS(Nt memory_maps( R R!R"RRRRRRbRc(R#R$((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_proc_memory_mapss(t__name__t __module__t__doc__R%R(R*R2R7RJRPRRRTRVRXRZR[R]R_R`RdRfRhRiRkRm(((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyR8s.                    tTestDeprecationscBseZdZRS(cCstjdt}tjjWdQX|d}|j|jt|j dt |j |j dt |j dS(Ntrecordismemory_info_ex() is deprecatedsuse memory_info() instead( twarningstcatch_warningsRcR!R"tmemory_info_extassertIsInstancetcategorytDeprecationWarningtassertIntstrtmessage(R#twstw((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_memory_info_exs  (RnRoR~(((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRqst TestSystemcBseZdZedZdZdZdZdZe j e de j e de ded Zd Zd Ze j e d d Ze j e d dZe j e d dZdZRS(sCheck the return types of system related APIs. Mainly we want to test we never return unicode on Python 2, see: https://github.com/giampaolo/psutil/issues/1039 cCstj|_dS(N(R!R"tproc(tcls((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt setUpClassscCsttdS(N(RR(R#((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttearDownscCsStj}t|stx.|D]&}|j|t|j|dq%WdS(Ni(R!t cpu_timesRtAssertionErrorRvtfloattassertGreaterEqual(R#trettn((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_cpu_timess   cCs1x*tjdtD]}|j|tqWdS(Ntperdisk(R!tdisk_io_countersRcRvRz(R#tk((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_io_countersscCsgx`tjD]R}|j|jt|j|jt|j|jt|j|jtq WdS(N(R!tdisk_partitionsRvtdeviceRzt mountpointtfstypetopts(R#tdisk((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_disk_partitionss s POSIX onlyscan't list UNIX socketstonly_ifc Csqtb}tt|Gtjdd}|s=tx!|D]}|j|jtqDWWdQXWdQXdS(Ntkindtunix( RRR R!tnet_connectionsRRvtladdrRz(R#tnametconstconn((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_net_connectionss    cCsxtjjD]~\}}|j|tx_|D]W}|j|jt|j|jttdf|j|j ttdfq6WqWdS(N( R!t net_if_addrstitemsRvRztaddresstnetmaskttypetNonet broadcast(R#tifnametaddrstaddr((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_net_if_addrss  cCs7x0tjjD]\}}|j|tqWdS(N(R!t net_if_statsRRvRz(R#Rt_((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_net_if_statsss not supportedcCs=x6tjdtjD]\}}|j|tqWdS(Ntpernic(R!tnet_io_countersRcRRvRz(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_net_io_counterss%cCs[xTtjjD]@\}}|j|tx!|D]}|j|jtq6WqWdS(N(R!RSRRvRztlabel(R#Rtunitstunit((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRTs cCs[xTtjjD]@\}}|j|tx!|D]}|j|jtq6WqWdS(N(R!RQRRvRzR(R#RRR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRR s cCsxtjD]v}|j|jt|j|jttdf|j|jttdf|j|j t tdfq WdS(N( R!tusersRvRRzR\RRthosttpidtint(R#tuser((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt test_userss (RnRoRpt classmethodRRRRRRtskipIfR RRRRRRRRRRTRRRR(((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRs     tTestFetchAllProcessescBs[eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'RS(&s~Test which iterates over all running processes and performs some sanity checks against Process API's returned values. c Cstddddddddd d d d g }trMt rM|jd ng}xKttjD]:}|jdr~qcn||krqcn|j|qcW|S(Nt send_signaltsuspendtresumet terminatetkilltwaittas_dicttparenttparentstchildrenRutoneshotR8R( tsetRRtaddtdirR!R"t startswithtappend(R#texcluded_namestattrsR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytget_attr_names's   ccsV|j}xCtjD]5}|j!x|D]}||fVq3WWdQXqWdS(N(RR!t process_iterR(R#RtpR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt iter_procs8s    cCsd}i}t||d}|dk rzt|rz|dkrQtjf}n|dkrmitd6}n|||S|SdS(NR8Rltgrouped((tgetattrRtcallableR!RARb(R#RRtargstkwargstattr((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt call_meth?s   c CsBd}t}g}x|jD]\}}|}y|j||}Wnitk rd|jjd|}t|q"tjtj fk r}|j |j |j |j r|j |j |j nt |st|jstq"tk rdddd} | d||f7} ||krO| dt|7} n| d 7} | d d7} | d tj7} djd | jD} | d7} |j| Pq"X|d 7}|ddgddifkr|st|nt||} | ||q"W|r2|jdj|n|s>tdS(Nis&%r was skipped because not implementeds.test_s t=iFsFAIL: test_%s (proc=%ss , ret=%s)s) t-s %scss|]}d|VqdS(t iNs ((t.0ti((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pys hsigt(tobjectRRtNotImplementedErrort __class__RnRR!t NoSuchProcesst AccessDeniedRRRRzRtmsgt Exceptiontreprt tracebackt format_exctjoint splitlinesRRRtfail( R#t valid_procstdefaulttfailuresRRRRterrtstmeth((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyttest_fetch_allLsJ          cCs5|j|tx|D]}|j|tqWdS(N(RvtlistRz(R#RRtpart((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytcmdlinezs cCs|j|ttdf|s5|j|dnutjj|sSt|t rtjj |rt tdrt tdrtj |tj stqndS(NRtaccesstX_OK(RvRzRRRRLRMtisabsRR tisfileR RR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytexescCs$|j|t|j|ddS(Ni(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRscCs*|j|ttf|j|ddS(Ni(RvRR R(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytppidscCs)|j|tts%|s%tndS(N(RvRzRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRscCsv|j|ty|j|dWn2tk rXtrR|jtjkrRqYnXtj dtj |dS(Nis%Y %m %d %H:%M:%S( RvRRRRtstatusR!t STATUS_ZOMBIEttimetstrftimet localtime(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt create_times cCsGt|stx.|D]&}|j|t|j|dqWdS(Ni(RRRvRR(R#RRtuid((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRYs cCsXt|stx?|D]7}|j|tt rt r|j|dqqWdS(Ni(RRRvRRRR(R#RRtgid((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytgidss  cCs |j|t|stdS(N(RvRzR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytusernamescCs@|j|t|st|j|d|j|tdS(Nt?(RvRzRtassertNotEqualRyR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRs cCs\t|stxC|D];}|j|ttf|dkr|j|dqqWdS(Nii(RRRvRR R(R#RRtfield((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRas   cCstr<t|stx!|D]}|j|tqWntrk|j|jd|j|jdn |j|d|j |ddS(Niii(iii( R RRRvRRRtioclasstvalueRy(R#RRR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyR^s cCs$|j|t|j|ddS(Ni(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt num_threadsscCs|j|tx|D]x}t|s/t|j|jd|j|jd|j|jdx$|D]}|j|tt fqoWqWdS(Ni( RvRRRRtidt user_timet system_timeRR(R#RRttR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytthreadss  cCsGt|stx.|D]&}|j|t|j|dqWdS(Ni(RRRvRR(R#RRR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRs cCs<|j|td|ko'dkns8t|dS(NggY@(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt cpu_percentscCs|j|ttr&|dkr&dS|j|dtjdkr[|j|dn|j|tt tjdS(Niii( RvRRRR!t cpu_countRRyRtrange(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRjscCst|stx4|D],}|j|ttf|j|dqWtrt r|jdkrx|j D]=}|dkrot ||}|j |j|d|qoqoWnat r|j|j |j|j|j|j|j|j|j|j|j|jndS(NitvmsR(RRRvRR RR RRt_fieldsRt assertGreaterR t peak_wsettwsettpeak_paged_poolt paged_pooltpeak_nonpaged_poolt nonpaged_poolt peak_pagefiletpagefile(R#RRR R((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt memory_infos  #c Cst|sttjj}x|jD]}t||}|j|tt f|j |dd||ft s+t r|dkrq+n|j ||d|||fq+Wt r|j |j|jndS(NiRRtdata(svmssdata(RRR!tvirtual_memoryttotalRRRvRR RRRtassertLessEqualtpsstuss(R#RRR"RR ((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytmemory_full_info s#cCs:|j|tx#|D]}|j|jt|j|jttr_|j|jdntr|j|j t|j|j t|j|j t|j |j d|j |j d|j|j dntr|j rqntjj|jst|tjj|jst|qWdS( NiitrR}tasr+sa+(R'R}R(sr+sa+(RvRtfdRRMRzR RRtpositiontmodetflagsRRyRRRLRRR(R#RRtf((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt open_filess" !cCs$|j|t|j|ddS(Ni(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRe.scCsA|jt|tt|x|D]}t|q)WdS(N(RtlenRR(R#RRR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt connections2s" cCs|r|j|ttjj|s4t|ytj|}WnItk r}trw|j t j j krwq|j t j krqqXtj|jstndS(N(RvRzRLRMRRtstattOSErrorR terrnoR!t _psplatformtACCESS_DENIED_SETtENOENTtS_ISDIRtst_mode(R#RRtstR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytcwd7s  cCs<|j|td|ko'dkns8t|dS(Niid(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytmemory_percentGscCs|j|tdS(N(Rvtbool(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt is_runningKscCso|j|t|gks(t|ttj}x.|D]&}|j|t|j||qAWdS(N(RvRRRR!RRRy(R#RRtcpusR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRNs  cCsk|j|ttdf|dk rgtjj|sFt|tjj|sgt|ndS(N( RvRzRRRLRMRRRN(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyR\Vs cCs3x,|D]$}|j|jt|j|jt|j|jtx|jD]}t||}|dkr|jds'tjj |jst |jq'qP|dkr|s't t |qP|dkrt s'|st t |q'qP|j|t tf|j|dqPWqWdS(NRMt[Rtpermsi(RvRRzR@RMRRRRLRRRR RR R(R#RRtnttfnameR ((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRl\s   *  cCs$|j|t|j|ddS(Ni(RvRR(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRgrscCs|j|ttrAd|ko-dknst|nGgttD]$}|jdrNtt|^qN}|j||dS(Niit_PRIORITY_CLASS( RvRR RRR!tendswithRRy(R#RRtxt priorities((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytnicevs +$cCsMt|stx4|D],}|j|ttf|j|dqWdS(Ni(RRRvRR R(R#RRR ((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pytnum_ctx_switchess cCsR|j|t|jt|d|j|dd|j|dddS(Niiii(RvttupleRR/R(R#RR((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyR8scCsQ|j|tx:|jD],\}}|j|t|j|tqWdS(N(RvtdictRRz(R#RRRtv((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyRWs((RnRoRpRRRRRRRRRRRYRRRRaR^R RRRRjRR&R.ReR0R:R;R=RR\RlRgRGRHR8RW(((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyR"sL   .                           t__main__(trun(1RpR3RLR1RRRst contextlibRR!RRRRRRRRR R R tpsutil._compatR t psutil.testsR RRRRRRRRRRRRRRRtTestCaseRRqRRRntpsutil.tests.runnerRMt__file__(((sA/usr/lib64/python2.7/site-packages/psutil/tests/test_contracts.pyt sX       {_q