ó 4­¯\c@sdZddlZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddl Z ddl m Z dd l m Z dd l m Z dd l mZdd l mZdd l mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%dd lm&Z&dd!lm'Z'dd"lm(Z(dd#lm)Z)e j*ƒZ+d$e,fd%„ƒYZ-d&e-e&j.fd'„ƒYZ/d(e-e&j.fd)„ƒYZ0d*e-e&j.fd+„ƒYZ1d,e&j.fd-„ƒYZ2e3d.krþdd/l4m5Z5e5e6ƒndS(0s;Tests for net_connections() and Process.connections() APIs.iÿÿÿÿN(tclosing(tAF_INET(tAF_INET6(t SOCK_DGRAM(t SOCK_STREAM(tFREEBSD(tLINUX(tMACOS(tNETBSD(tOPENBSD(tPOSIX(tSUNOS(tWINDOWS(t supports_ipv6(tPY3(tAF_UNIX(t bind_socket(tbind_unix_socket(tcheck_connection_ntuple(tcreate_sockets(t get_free_port(tHAS_CONNECTIONS_UNIX(tpyrun(t reap_children(t safe_rmpath(tskip_on_access_denied(ttcp_socketpair(tTESTFN(tTRAVIS(tunittest(tunix_socket_path(tunix_socketpair(t wait_for_filetBasecBs;eZd„Zd„Zd„Zdd„Zdd„ZRS(cCs<ttƒts8tjddƒ}| s8t|ƒ‚ndS(Ntkindtall(RRRtthisproct connectionstAssertionError(tselftcons((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pytsetUp6s cCsCttƒtƒts?tjddƒ}| s?t|ƒ‚ndS(NR"R#(RRRRR$R%R&(R'R(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttearDown=s  cCs©tjddƒ}tg|D]}|j|f^qƒ}trN||jƒS|jt|ƒdƒ|djdkr|j||jƒj|jƒƒn|dSdS(NR"R#iiiÿÿÿÿ(R$R%tdicttfdRtfilenot assertEqualtlen(R'tsockR(tctsmap((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pytget_conn_from_sockFs(&cCsP|dkr|j|ƒ}nt|ƒ|jdkrS|j|j|jƒƒn|j|j|jƒ|j|j|jt j t j ƒƒ|j ƒ}| rÅt rÅt|tƒrÅ|jƒ}n|jtkrá|d }n|jtkrùtrùn|j|j|ƒ|jtkrLtrLtjddƒ}|jtjƒ|ƒn|S(s±Given a socket, makes sure it matches the one obtained via psutil. It assumes this process created one connection only (the one supposed to be checked). iÿÿÿÿiR"R#N(tNoneR3RR,R.R-tfamilyttypet getsockopttsockett SOL_SOCKETtSO_TYPEt getsocknameRt isinstancetbytestdecodeRRR tladdrRR$R%tcompare_procsys_connectionstostgetpid(R'R0tconnR?R(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt check_socketSs(    R#cCsŽytjd|ƒ}Wn!tjk r9tr3dS‚nXg|D]}|j|krA|d ^qA}|jƒ|jƒ|j||ƒdS(sœGiven a process PID and its list of connections compare those against system-wide connections retrieved via psutil.net_connections. R"Niÿÿÿÿ(tpsutiltnet_connectionst AccessDeniedRtpidtsortR.(R'RHt proc_consR"tsys_consR1((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyR@ws,  N(t__name__t __module__R)R*R3R4RDR@(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyR!4s   $tTestUnconnectedSocketscBs–eZdZd„Zejeƒ dƒd„ƒZd„Zejeƒ dƒd„ƒZ eje dƒd„ƒZ eje dƒd„ƒZ RS( s;Tests sockets which are open but not connected to anything.cCsldtƒf}ttttd|ƒƒ<}|j|ƒ}|j sLt‚|j|j t j ƒWdQXdS(Ns 127.0.0.1taddr( RRRRRRDtraddrR&R.tstatusREt CONN_LISTEN(R'ROR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_tcp_v4”s sIPv6 not supportedcCsldtƒf}ttttd|ƒƒ<}|j|ƒ}|j sLt‚|j|j t j ƒWdQXdS(Ns::1RO( RRRRRRDRPR&R.RQRERR(R'ROR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_tcp_v6›s cCsldtƒf}ttttd|ƒƒ<}|j|ƒ}|j sLt‚|j|j t j ƒWdQXdS(Ns 127.0.0.1RO( RRRRRRDRPR&R.RQREt CONN_NONE(R'ROR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_udp_v4£s cCsldtƒf}ttttd|ƒƒ<}|j|ƒ}|j sLt‚|j|j t j ƒWdQXdS(Ns::1RO( RRRRRRDRPR&R.RQRERU(R'ROR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_udp_v6ªs s POSIX onlyc Csltƒ]}tt|dtƒƒ<}|j|ƒ}|j sFt‚|j|jt j ƒWdQXWdQXdS(NR6( RRRRRDRPR&R.RQRERU(R'tnameR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_unix_tcp²s  c Csltƒ]}tt|dtƒƒ<}|j|ƒ}|j sFt‚|j|jt j ƒWdQXWdQXdS(NR6( RRRRRDRPR&R.RQRERU(R'RXR0RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_unix_udpºs  ( RLRMt__doc__RSRtskipIfR RTRVRWR RYRZ(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyRN‘s  tTestConnectedSocketPairscBsfeZdZejedƒd„ƒZeje dƒd„ƒZe de ƒd„ƒZ d„Z RS(sJTest socket pairs which are are actually connected to each other. sunreliable on SUONScCs¼dtƒf}tjddƒ s(t‚ttd|ƒ\}}z`tjddƒ}|jt|ƒdƒ|j|djt j ƒ|j|djt j ƒWd|j ƒ|j ƒXdS(Ns 127.0.0.1R"ttcp4ROiii( RR$R%R&RRR.R/RQREtCONN_ESTABLISHEDtclose(R'ROtservertclientR(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_tcpÏs s POSIX onlyc CsàtƒÑ}t|ƒ\}}z tjddƒ}|djoJ|dj sTt‚|djok|dj sut‚tr¦g|D]}|jdkr‚|^q‚}n|jt |ƒdƒt sÎt sÎt r#|j|djdƒ|j|djdƒ|j||djp|djƒnšt rux‘|dj|dj|dj|djfD]}|j|dƒqXWnH|j|djp’|dj|ƒ|j|djp¶|dj|ƒWd|jƒ|jƒXWdQXdS(NR"tunixiis /var/run/logit(RRR$R%R?RPR&RR.R/RRR R R`(R'RXRaRbR(R1RO((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_unixãs* !!+'$( tonly_ifcsè‡fd†}tjdƒ}tjdƒ}ddlm}tjjtƒ}||ƒjdt t ƒddd |ƒ}||ƒjdt t ƒddd |ƒ}||ƒjdt t ƒdd d |ƒ}||ƒjdt t ƒdd d |ƒ} t |ƒ} t t|ƒƒ} t |ƒ} t t|ƒƒ} tƒr{t |ƒ}t t|ƒƒ}t | ƒ}t t|ƒƒ}nd}d}d}d}x5tjƒD]'}|jƒ}ˆjt|ƒd ƒxü|D]ô}|j| jkr |||t t| dtjdƒqÏ|j| jkrC|||t t| dtjdƒqÏ|jt|ddƒkrƒ|||t t|dtjdƒqÏ|jt|ddƒkrÏ|||t t|dtjd ƒqÏqÏWq Wˆjt|jddƒdS(!Nc sãd }t|ƒˆj|j|ƒˆj|j|ƒˆj|j|ƒˆj|j|ƒˆj|j|ƒxN|D]F} |jd | ƒ} | |kr©| s¼t‚qv| svt| ƒ‚qvWt r߈j |j |gƒndS( NR#tinettinet4tinet6ttcpR^ttcp6tudptudp4tudp6R"( sallsinetsinet4sinet6stcpstcp4stcp6sudpsudp4sudp6( RR.R5R6R?RPRQR%R&RR@RH( tprocRCR5R6R?RPRQtkindst all_kindsR"R((R'(sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt check_conns   s import socket, time s = socket.socket($family, socket.SOCK_STREAM) s.bind(('$addr', 0)) s.listen(1) with open('$testfn', 'w') as f: f.write(str(s.getsockname()[:2])) time.sleep(60) sý import socket, time s = socket.socket($family, socket.SOCK_DGRAM) s.bind(('$addr', 0)) with open('$testfn', 'w') as f: f.write(str(s.getsockname()[:2])) time.sleep(60) iÿÿÿÿ(tTemplateR5ROs 127.0.0.1ttestfns::1iR#RhRiRkR^RmRnRHRjRlRoR"s???((sallsinetsinet4stcpstcp4((sallsinetsinet4sudpsudp4((sallsinetsinet6stcpstcp6((sallsinetsinet6sudpsudp6(ttextwraptdedenttstringRtRAtpathtbasenameRt substitutetintRRRtevalR R R4R$tchildrenR%R.R/RHRRERRRRUtgetattrt assertRaisest ValueError(R'Rst tcp_templatet udp_templateRtttestfilet tcp4_templatet udp4_templatet tcp6_templatet udp6_templatet tcp4_proct tcp4_addrt udp4_proct udp4_addrt tcp6_proct tcp6_addrt udp6_proct udp6_addrtpR(RC((R'sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyt test_combossb            c Csõtƒæ}tjddƒ}|jt|ƒt|ƒƒtjddƒ}|jt|ƒtƒrjdndƒx:|D]2}|j|jtt fƒ|j|j t ƒqxWtjddƒ}|jt|ƒdƒ|j|djtƒ|j|dj t ƒtƒrftjddƒ}|jt|ƒdƒ|j|djt ƒ|j|dj t ƒntjdd ƒ}|jt|ƒtƒr–dndƒx:|D]2}|j|jtt fƒ|j|j t ƒq¤Wtjdd ƒ}|jt|ƒdƒ|j|djtƒ|j|dj t ƒtƒr’tjdd ƒ}|jt|ƒdƒ|j|djt ƒ|j|dj t ƒntjdd ƒ}|jt|ƒtƒrÂd ndƒx@|D]8}|j|jtt fƒ|j|j t t fƒqÐWtƒr}tjddƒ}|jt|ƒdƒx=|D]2}|j|jt ƒ|j|j t t fƒqDWnt rëtjddƒ}|jt|ƒdƒx=|D]2}|j|jtƒ|j|j t t fƒq²WnWdQXdS(NR"R#RkiiR^iRlRmRnRoRhiRjRdi(RR$R%R.R/R tassertInR5RRR6RRRR(R'tsocksR(RC((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_multi_sockets_filteringfs` %  %  %     ( RLRMR[RR\R RcR RfRRR’R•(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyR]Ès !btTestSystemWideConnectionscBs\eZdZeƒd„ƒZeƒd„ƒZeƒejeoEe dƒd„ƒƒZ RS(sTests for net_connections().c sχfd†}tƒ±ddlm}x€|jƒD]r\}}|dkr[t r[q6n|\}}tj|ƒ}ˆjt|ƒtt |ƒƒƒ||||ƒq6Wˆj t tjddƒWdQXdS(Ncsxttdtƒƒ}x\|D]T}ˆj|j|d|ƒ|j|krfˆj|j|d|ƒnt|ƒqWdS(NRtmsg(RR8tobjectR“R5R6R(R(tfamiliesttypes_RRC(R'(sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pytcheck¬s  iÿÿÿÿ(t conn_tmapRdR"s???( Rtpsutil._commonRœtitemsRRERFR.R/tsetR€R(R'R›RœR"tgroupsR™RšR(((R'sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_itªs  "cCsltƒ]}gtjddƒD]!}|jtjƒkr|^q}|jt|ƒt|ƒƒWdQXdS(NR"R#(RRERFRHRARBR.R/(R'R”txR(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_multi_socksÁs !sunreliable on MACOS + TRAVISc Cs|tƒ}t|ƒ}WdQXg}d}xot|ƒD]a}tjjtƒt|ƒ}tj d|ƒ}t |ƒ}|j |j ƒ|j t|ƒq7Wx.t|ƒD] }tt|ƒ}t|ƒq©WgtjddƒD]} | j |krà| ^qà} xt|D]l} |jtg| D]} | j | kr| ^qƒ|ƒtj| ƒ} |jt| jdƒƒ|ƒqWdS(Ni s import time, os from psutil.tests import create_sockets with create_sockets(): with open(r'%s', 'w') as f: f.write(str(os.getpid())) time.sleep(60) R"R#(RR/trangeRARytrealpathRtstrRvRwRtappendRHt addCleanupRR RERFR.tProcessR%( R'R”texpectedtpidsttimestitfnametsrctsprocR¢tsysconsRHR‘((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_multi_sockets_procsÈs*    1( RLRMR[RR¡R£RR\RRR²(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyR–§s tTestMisccBseZd„ZRS(cCsÍg}g}x“ttƒD]…}|jdƒrtt|ƒ}t|ƒ}|jƒsat|ƒ‚|jt|ƒ|j||ƒ|j|ƒ|j|ƒqqWt r¹tj tj nt rÉtj ndS(NtCONN_(tdirREt startswithRR¦tisupperR&t assertNotInR§R t CONN_IDLEt CONN_BOUNDR tCONN_DELETE_TCB(R'tintststrsRXtnumtstr_((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyttest_connection_constantsùs    (RLRMRÀ(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyR³÷st__main__(trun(7R[RAR8Rvt contextlibRRRRRRERRRRR R R R RR tpsutil._compatRt psutil.testsRRRRRRRRRRRRRRRRRR R©R$R˜R!tTestCaseRNR]R–R³RLtpsutil.tests.runnerRÂt__file__(((sC/usr/lib64/python2.7/site-packages/psutil/tests/test_connections.pyts\     ]7ßP