3 ̪eT@s`dZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddl Z ddl m Z dd l m Z dd l mZdd l mZdd l mZdd l mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&dd lm'Z'dd!lm(Z(e)ed"e*Z+d#d$Z,e$Gd%d&d&eZ-Gd'd(d(e-Z.e$Gd)d*d*e-Z/e$Gd+d,d,e-Z0Gd-d.d.e-Z1ej2ed/Gd0d1d1e-Z3Gd2d3d3eZ4e5d4kr\dd5l6m7Z7e7e8dS)6z;Tests for net_connections() and Process.connections() APIs.N)closing)AF_INET)AF_INET6) SOCK_DGRAM) SOCK_STREAM)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS) supports_ipv6)PY3)AF_UNIX)HAS_CONNECTIONS_UNIX) SKIP_SYSCONS)PsutilTestCase) bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)filter_proc_connections) reap_children)retry_on_failure) serialrun)skip_on_access_denied)tcp_socketpair)unix_socketpair) wait_for_fileSOCK_SEQPACKETcCs$tjj|d}|dkr t|S|S)N)kindallunix)r#r$)psutilProcess connectionsr)r"consr)I/usr/local/lib64/python3.6/site-packages/psutil/tests/test_connections.pythis_proc_connections3sr+c@s&eZdZddZddZd ddZdS) ConnectionTestCasecCs|jtddgdS)Nr#)r") assertEqualr+)selfr)r)r*setUp<szConnectionTestCase.setUpcCs|jtddgdS)Nr#)r")r-r+)r.r)r)r*tearDown?szConnectionTestCase.tearDownr#c sdytj|d}Wn tjk r0tr*dSYnXfdd|D}|j|j|j||dS)zGiven a process PID and its list of connections compare those against system-wide connections retrieved via psutil.net_connections. )r"Ncs"g|]}|jkr|ddqS)N)pid).0c)r3r)r* RszBConnectionTestCase.compare_procsys_connections..)r%net_connections AccessDeniedr sortr-)r.r3Z proc_consr"Zsys_consr))r3r*compare_procsys_connectionsCsz.ConnectionTestCase.compare_procsys_connectionsN)r#)__name__ __module__ __qualname__r/r0r:r)r)r)r*r,:sr,c@s0eZdZejedddZddZddZdS) TestBasicOperationsz requires rootc Cs4t$xtjddD] }t|qWWdQRXdS)Nr#)r")rr%r7r)r.connr)r)r* test_systemYszTestBasicOperations.test_systemc Cs2t"xtddD] }t|qWWdQRXdS)Nr#)r")rr+r)r.r?r)r)r* test_process_sz TestBasicOperations.test_processcCs&|jttdd|jttjdddS)Nz???)r")Z assertRaises ValueErrorr+r%r7)r.r)r)r*test_invalid_kinddsz%TestBasicOperations.test_invalid_kindN) r;r<r=unittestskipIfrr@rArCr)r)r)r*r>Xsr>c@seZdZdZddZddZddZeje dd d Z d d Z eje dd dZ eje dddZeje dddZdS)TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.cCsttdd}tdd|D}ts$tr0||jS|jt|d|djdkrh|j||jj|j|dSdS)Nr#)r"cSsg|]}|j|fqSr))fd)r4r5r)r)r*r6osz=TestUnconnectedSockets.get_conn_from_sock..r1rr2)r+dictr rfilenor-lenrG)r.sockr(Zsmapr)r)r*get_conn_from_sockms  z)TestUnconnectedSockets.get_conn_from_sockcCs|j|}t||jdkr.|j|j|j|j|j|j|j|j|jtj tj |j }| r|t r|t |tr||j}|jtkr|dd}|j|j||jtkrtrtdd}|jtj|dd|S)zGiven 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). r1Nr#)r"r2)rLrrGr-rIfamilytype getsockoptsocket SOL_SOCKETSO_TYPE getsocknamer isinstancebytesdecoderladdrrrr+r:osgetpid)r.rKr?rXr(r)r)r* check_socketzs"     z#TestUnconnectedSockets.check_socketc CsNd}tttt|d.}|j|}|j|jf|j|jtj WdQRXdS)N 127.0.0.1r)addr)r\r) rrrrr[r-raddrstatusr% CONN_LISTEN)r.r]rKr?r)r)r* test_tcp_v4s  z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc CsNd}tttt|d.}|j|}|j|jf|j|jtj WdQRXdS)N::1r)r])rbr) rrrrr[r-r^r_r%r`)r.r]rKr?r)r)r* test_tcp_v6s  z"TestUnconnectedSockets.test_tcp_v6c CsNd}tttt|d.}|j|}|j|jf|j|jtj WdQRXdS)N 127.0.0.1r)r])rdr) rrrrr[r-r^r_r% CONN_NONE)r.r]rKr?r)r)r* test_udp_v4s  z"TestUnconnectedSockets.test_udp_v4c CsNd}tttt|d.}|j|}|j|jf|j|jtj WdQRXdS)N::1r)r])rgr) rrrrr[r-r^r_r%re)r.r]rKr?r)r)r* test_udp_v6s  z"TestUnconnectedSockets.test_udp_v6z POSIX onlyc CsP|j}tt|td.}|j|}|j|jd|j|jtj WdQRXdS)N)rO) get_testfnrrrr[r-r^r_r%re)r.testfnrKr?r)r)r* test_unix_tcps  z$TestUnconnectedSockets.test_unix_tcpc CsP|j}tt|td.}|j|}|j|jd|j|jtj WdQRXdS)N)rOri) rjrrrr[r-r^r_r%re)r.rkrKr?r)r)r* test_unix_udps  z$TestUnconnectedSockets.test_unix_udpN)r;r<r=__doc__rLr[rarDrErrcrfrhr rlrmr)r)r)r*rFis  rFc@s:eZdZdZejedddZeje dddZ dS) TestConnectedSocketzFTest socket pairs which are actually connected to each other. zunreliable on SUONSc Csd}|jtddgtt|d\}}zFtdd}|jt|d|j|djtj|j|djtjWd|j|jXdS) N 127.0.0.1rtcp4)r")r]rMr1)rpr) r-r+rrrJr_r%CONN_ESTABLISHEDclose)r.r]serverclientr(r)r)r*test_tcps zTestConnectedSocket.test_tcpz POSIX onlyc Cs|j}t|\}}ztdd}|djo2|dj s>t||djoP|dj s\t|tsdtrrdd|D}|jt |d|dt stst st r|j|djd |j|djd |j||djp|djn|j|djp|dj|Wd|j |j XdS) Nr$)r"rr1cSsg|]}|jdkr|qS)z /var/run/log)r^)r4r5r)r)r*r6sz1TestConnectedSocket.test_unix..rM)msgri)rjrr+rXr^AssertionErrorr rr-rJrr r rs)r.rkrtrur(r)r)r* test_unixs    zTestConnectedSocket.test_unixN) r;r<r=rnrDrEr rvr ryr)r)r)r*rosroc@s.eZdZddZeedddZddZdS) TestFiltersc sfdd}t|dtttgtttg|dttgttg|dtgttg|dttgtg|dtgtg|dtgtg|d ttgtg|d tgtg|d tgtgtr|d tgtttgWdQRXdS) Ncsjx.t|dD] }j|j|j|j|q Wtsfx0tj|dD] }j|j|j|j|qBWdS)N)r")r+assertInrNrOrr%r7)r"familiestypesr?)r.r)r*checksz'TestFilters.test_filters..checkr#inetinet4tcprqtcp6udpudp4udp6r$)rrrrrrr!r)r.r~r))r.r* test_filterss&  zTestFilters.test_filters)Zonly_ifcstfdd}tjd}tjd}tjjjtjd}|jt t d|d}|jt t d|d}|jt t d|d}|jt t d|d}j |} t t|d d } j |} t t|d d } trj |} t t|d d }j |}t t|d d }nd} d}d}d}xtjjD]}|j}jt|d x|D]}|j| jkrn|||t t| ftjdn|j| jkr|||t t| ftjdnZ|jt| ddkr|||t t|ftjdn,|jt|ddkrB|||t t|ftjdqBWqWdS)Nc sd }t|j|j|j|j|j|j|j|j|j|j|x:|D]2} |j| d } | |kr~j| gqXj| gqXWt rj |j |gdS) Nr#rrinet6rrqrrrr)r") r#rrrrrqrrrr) rr-rNrOrXr^r_r'ZassertNotEqualrr:r3) procr?rNrOrXr^r_ZkindsZ all_kindsr"r()r.r)r* check_conn%s.  z+TestFilters.test_combos..check_conna import socket, time s = socket.socket({family}, socket.SOCK_STREAM) s.bind(('{addr}', 0)) s.listen(5) with open('{testfn}', 'w') as f: f.write(str(s.getsockname()[:2])) time.sleep(60) a 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) )dirz 127.0.0.1)rNr]rkz::1T)deleter1r#rrrrqrrr3rrr)r#rrrrq)r#rrrr)r#rrrr)r#rrrr)rtextwrapdedentrYpathbasenamerjgetcwdformatintrrpyrunevalr rr%r&childrenr'r-rJr3rr`rregetattr)r.rZ tcp_templateZ udp_templateZtestfileZ tcp4_templateZ udp4_templateZ tcp6_templateZ udp6_templateZ tcp4_procZ tcp4_addrZ udp4_procZ udp4_addrZ tcp6_procZ tcp6_addrZ udp6_procZ udp6_addrpr(r?r))r.r* test_combos!s      zTestFilters.test_combosc Csttdd}|jt|tr(dndx,|D]$}|j|jttf|j|j t q4Wtdd}|jt|d|j|djt|j|dj t trtdd}|jt|d|j|djt|j|dj t tdd}|jt|trdndx.|D]&}|j|jttf|j|j t qWtd d}|jt|d|j|djt|j|dj t trtd d}|jt|d|j|djt|j|dj t td d}|jt|trd ndx2|D]*}|j|jttf|j|j t t fqWtrbtd d}|jt|dx.|D]&}|j|jt|j|j t t fq8Wt rt ppt rtdd}|jt|dx.|D]&}|j|jt|j|j t t fqWWdQRXdS)Nr)r"rMr1rqrrrrrrrr$)rr+r-rJrr{rNrrrOrrrrr r)r.r(r?r)r)r* test_counts\               zTestFilters.test_countN)r;r<r=rrr rrr)r)r)r*rzs rzz requires rootc@s&eZdZdZddZeddZdS)TestSystemWideConnectionszTests for net_connections().c sfdd}tnddlm}xZ|jD]N\}}|dkrBt rBq*|\}}tj|}jt|tt |||||q*WWdQRXdS)NcsHxB|D]:}j|j||d|jtkr8j|j||dt|qWdS)N)rw)r{rNrrOr)r(r|types_r?)r.r)r*r~s   z0TestSystemWideConnections.test_it..checkr) conn_tmapr$) rpsutil._commonritemsrr%r7r-rJset)r.r~rr"groupsr|rr(r))r.r*test_its   z!TestSystemWideConnections.test_itc st}t|}WdQRXgd}g}xFt|D]:}|j}|j|tjd|}|j|}j|jq0Wx|D] }t |qtWfddt j ddD} xJD]B|j tfdd| D|t j } |j t| jd|qWdS)N a  import time, os from psutil.tests import create_sockets with create_sockets(): with open(r'%s', 'w') as f: f.write("hello") time.sleep(60) csg|]}|jkr|qSr))r3)r4x)pidsr)r*r6szFTestSystemWideConnections.test_multi_sockets_procs..r#)r"csg|]}|jkr|qSr))r3)r4r)r3r)r*r6#s)rrJrangerjappendrrrr3r r%r7r-r&r') r.ZsocksZexpectedtimesfnames_fnamesrcZsprocZsysconsrr))r3rr*test_multi_sockets_procss(       z2TestSystemWideConnections.test_multi_sockets_procsN)r;r<r=rnrrrr)r)r)r*rsrc@seZdZddZdS)TestMisccCsg}g}xhttD]\}|jdrtt|}t|}|jsBt||jt||j|||j||j|qWt rtj tj t rtj dS)NZCONN_)rr% startswithrstrisupperrxZ assertNotInrr Z CONN_IDLEZ CONN_BOUNDrZCONN_DELETE_TCB)r.intsstrsnamenumZstr_r)r)r*test_connection_constants*s      z"TestMisc.test_connection_constantsN)r;r<r=rr)r)r)r*r)sr__main__) run_from_name)9rnrYrQrrD contextlibrrrrrr%rrr r r r r rrrZpsutil._compatrZ psutil.testsrrrrrrrrrrrrrrrr robjectr!r+r,r>rFrorzrErrr;Zpsutil.tests.runnerr__file__r)r)r)r*sj                                 _ 7gA