B =_S@srdZddlZddlZddlZddlZddlmZddlmZddlmZddlm 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 )Z*e+ed"e,Z-ej.dd#d$kZ/e"Gd%d&d&eZ0Gd'd(d(e0Z1e"Gd)d*d*e0Z2e"Gd+d,d,e0Z3Gd-d.d.e0Z4e&5e$d/Gd0d1d1e0Z6Gd2d3d3eZ7e8d4krndd5l9m:Z:e:e;dS)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) bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)HAS_CONNECTIONS_UNIX)PsutilTestCase) reap_children)retry_on_failure) serialrun)skip_on_access_denied) SKIP_SYSCONS)tcp_socketpair)unittest)unix_socketpair) wait_for_fileSOCK_SEQPACKET) c@s&eZdZddZddZd ddZdS) ConnectionTestCasecCstststjdd}dS)Nall)kind)r rthisproc connections)selfconsr,P/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_connections.pysetUp8s zConnectionTestCase.setUpcCstststjdd}dS)Nr&)r')rr r(r))r*r+r,r,r-tearDown>s zConnectionTestCase.tearDownr&csdytj|d}Wn tjk r0tr*dSYnXfdd|D}|||||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)r1r,r- TszBConnectionTestCase.compare_procsys_connections..)psutilnet_connectionsZ AccessDeniedr sort assertEqual)r*r1Z proc_consr'Zsys_consr,)r1r-compare_procsys_connectionsEsz.ConnectionTestCase.compare_procsys_connectionsN)r&)__name__ __module__ __qualname__r.r/r9r,r,r,r-r%5sr%c@s0eZdZeedddZddZddZdS) TestBasicOperationsz requires rootc Cs4t$xtjddD] }t|qWWdQRXdS)Nr&)r')rr5r6r)r*connr,r,r- test_system\szTestBasicOperations.test_systemc Cs8t(x tjddD] }t|qWWdQRXdS)Nr&)r')rr5Processr)r)r*r>r,r,r- test_processbsz TestBasicOperations.test_processcCs(|jttjdd|jttjdddS)Nz???)r')Z assertRaises ValueErrorr(r)r5r6)r*r,r,r-test_invalid_kindgsz%TestBasicOperations.test_invalid_kindN) r:r;r<rskipIfrr?rArCr,r,r,r-r=Zsr=c@seZdZdZddZddZddZee dd d Z d d Z ee dd dZ ee dddZee dddZdS)TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.cCsvtjdd}tdd|D}ts&tr2||S|t|d|djdkrj|||j||dSdS)Nr&)r'cSsg|]}|j|fqSr,)fd)r2r3r,r,r-r4rsz=TestUnconnectedSockets.get_conn_from_sock..rr0) r(r)dictr rfilenor8lenrF)r*sockr+Zsmapr,r,r-get_conn_from_sockps  z)TestUnconnectedSockets.get_conn_from_sockcCs||}t||jdkr.||j|||j|j||j|tj tj | }|szt rzt |trz|}|jtkr|dd}|jtkrtrn||j||jtkrtrtjdd}|jt|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). r0Nr"r&)r')rLrrFr8rIfamilytypeZ getsockoptsocketZ SOL_SOCKETZSO_TYPEZ getsocknamer isinstancebytesdecoderrr laddrrr(r)r9osgetpid)r*rKr>rSr+r,r,r- check_socket}s&     z#TestUnconnectedSockets.check_socketc Cs@d}tttt|d }||}||jtjWdQRXdS)N)z 127.0.0.1r)addr) rrrrrVr8statusr5 CONN_LISTEN)r*rWrKr>r,r,r- test_tcp_v4s z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc Cs@d}tttt|d }||}||jtjWdQRXdS)N)z::1r)rW) rrrrrVr8rXr5rY)r*rWrKr>r,r,r- test_tcp_v6s z"TestUnconnectedSockets.test_tcp_v6c Cs@d}tttt|d }||}||jtjWdQRXdS)N)z 127.0.0.1r)rW) rrrrrVr8rXr5 CONN_NONE)r*rWrKr>r,r,r- test_udp_v4s z"TestUnconnectedSockets.test_udp_v4c Cs@d}tttt|d }||}||jtjWdQRXdS)N)z::1r)rW) rrrrrVr8rXr5r\)r*rWrKr>r,r,r- test_udp_v6s z"TestUnconnectedSockets.test_udp_v6z POSIX onlyc CsB|}tt|td }||}||jtjWdQRXdS)N)rN) get_testfnrrrrVr8rXr5r\)r*testfnrKr>r,r,r- test_unix_tcps z$TestUnconnectedSockets.test_unix_tcpc CsB|}tt|td }||}||jtjWdQRXdS)N)rN) r_rrrrVr8rXr5r\)r*r`rKr>r,r,r- test_unix_udps z$TestUnconnectedSockets.test_unix_udpN)r:r;r<__doc__rLrVrZrrDrr[r]r^r rarbr,r,r,r-rEls #rEc@s:eZdZdZeedddZee dddZ dS) TestConnectedSocketzJTest socket pairs which are are actually connected to each other. zunreliable on SUONScCstd}tt|d\}}zHtjdd}|t|d||djtj||djtjWd| | XdS)N)z 127.0.0.1r)rWtcp4)r'r"rrG) rrr(r)r8rJrXr5ZCONN_ESTABLISHEDclose)r*rWserverclientr+r,r,r-test_tcps zTestConnectedSocket.test_tcpz POSIX onlycCs0|}t|\}}ztjdd}ts,tr:dd|D}|jt|d|dtsZtsZt r||dj d||d j d|||dj p|d j nzt rxt|dj |dj |d j |d j fD]}||dqWn:||dj p|d j |||dj p|d j |Wd| | XdS) Nunix)r'cSsg|]}|jdkr|qS)z /var/run/log)raddr)r2r3r,r,r-r4sz1TestConnectedSocket.test_unix..r")msgrrG)r_rr(r)r rr8rJrr rkrSr rf)r*r`rgrhr+rWr,r,r- test_unixs&   "zTestConnectedSocket.test_unixN) r:r;r<rcrrDr rir rnr,r,r,r-rdsrdc@s.eZdZddZeedddZddZdS) TestFiltersc sfdd}t|dtttgtttg|dttgttg|dtgttg|dttgtg|dtgtg|dtgtg|d ttgtg|d tgtg|d tgtgtr|d tgtttgWdQRXdS) Ncslx0tj|dD] }|j||j|qWtshx0tj|dD] }|j||j|qDWdS)N)r')r(r)assertInrMrNrr5r6)r'familiestypesr>)r*r,r-checksz'TestFilters.test_filters..checkr&inetinet4tcpretcp6udpudp4udp6rj)rrrrrrr!r)r*rsr,)r*r- test_filterssB    zTestFilters.test_filters)Zonly_ifc stfdd}td}td}tjjtd}|jt t d|d}|jt t d|d}|jt t d|d}|jt t d|d} |} t t|d d } |} t t|d d } tr |} t t|d d } |}t t|d d }nd} d}d}d}xtD]}|}t|d x|D]}|j| jkrf|||t t| d tjd n|j| jkr|||t t| d tjdnZ|jt| ddkr|||t t|d tjdn,|jt|ddkr:|||t t|d tjdq:WqWdS)Nc sd}t||j||j||j||j||j|x"|D]} |j| d} | |krXqXqXWtr |j |gdS)N) r&rtruinet6rvrerwrxryrz)r') rr8rMrNrSrkrXr)rr9r1) procr>rMrNrSrkrXZkindsZ 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)rMrWr`z::1T)deleterGr,)r&rtrurvre)r&rtrurxryr1)r&rtr|rvrw)r&rtr|rxrz)rtextwrapdedentrTpathbasenamer_getcwdformatintrrpyrunevalr rr(Zchildrenr)r8rJr1rr5rYrr\getattr)r*r~Z 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 Csttjdd}|t|tr*dndx,|D]$}||jtt f||j t q6Wtjdd}|t|d||djt||dj t trtjdd}|t|d||djt ||dj t tjdd}|t|trdndx.|D]&}||jtt f||j t qWtjd d}|t|d||djt||dj t trtjd d}|t|d||djt ||dj t tjd d}|t|trd ndx2|D]*}||jtt f||j t t fqWtrttjd d}|t|dx.|D]&}||jt ||j t t fqJWt rtststjdd}|t|dx.|D]&}||jt||j t t fqWWdQRXdS)Nrv)r'r"rGrerrwrxryrzrtr|rjr#)rr(r)r8rJrrprMrrrNrrrrr r)r*r+r>r,r,r- test_counts\               zTestFilters.test_countN)r:r;r<r{rr rrr,r,r,r-ro s+aroz requires rootc@s&eZdZdZddZeddZdS)TestSystemWideConnectionszTests for net_connections().c sfdd}tlddlm}xX|D]L\}}|dkr@ts@q*|\}}t|}t|tt |||||q*WWdQRXdS)NcsHxB|D]:}j|j||d|jtkr8j|j||dt|qWdS)N)rl)rprMrrNr)r+rqtypes_r>)r*r,r-rss   z0TestSystemWideConnections.test_it..checkr) conn_tmaprj) rpsutil._commonritemsrr5r6r8rJset)r*rsrr'groupsrqrr+r,)r*r-test_its    z!TestSystemWideConnections.test_itc st}t|}WdQRXgd}g}xFt|D]:}|}||td|}||}|jq0Wx|D] }t |qtWfddt j ddD} xJD]B| tfdd| D|t } | t| d|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,)r1)r2x)pidsr,r-r4 szFTestSystemWideConnections.test_multi_sockets_procs..r&)r'csg|]}|jkr|qSr,)r1)r2r)r1r,r-r4s)rrJranger_appendrrrr1r r5r6r8r@r)) r*ZsocksZexpectedtimesfnamesiZfnamesrcZsprocZsysconsrr,)r1rr-test_multi_sockets_procss(       z2TestSystemWideConnections.test_multi_sockets_procsN)r:r;r<rcrrrr,r,r,r-rsrc@seZdZddZdS)TestMisccCsg}g}xXttD]L}|drtt|}t|}|t||||||||qWtrrtjtj t r|tj dS)NZCONN_) rr5 startswithrstrZ assertNotInrr Z CONN_IDLEZ CONN_BOUNDrZCONN_DELETE_TCB)r*ZintsZstrsnameZnumZstr_r,r,r-test_connection_constantss     z"TestMisc.test_connection_constantsN)r:r;r<rr,r,r,r-rsr__main__) run_from_name)sl                                $ b =J>