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) ConnectionTestCasecCs$ts ts tjdd}|r t|dS)Nall)kind)r rthisproc connectionsAssertionError)selfconsr-P/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_connections.pysetUp8s zConnectionTestCase.setUpcCs$ts ts tjdd}|r t|dS)Nr&)r')rr r(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)r2r-r. TszBConnectionTestCase.compare_procsys_connections..)psutilnet_connectionsZ AccessDeniedr sort assertEqual)r+r2Z proc_consr'Zsys_consr-)r2r.compare_procsys_connectionsEsz.ConnectionTestCase.compare_procsys_connectionsN)r&)__name__ __module__ __qualname__r/r0r:r-r-r-r.r%5sr%c@s0eZdZeedddZddZddZdS) TestBasicOperationsz requires rootc Cs4t$xtjddD] }t|qWWdQRXdS)Nr&)r')rr6r7r)r+connr-r-r. test_system\szTestBasicOperations.test_systemc Cs8t(x tjddD] }t|qWWdQRXdS)Nr&)r')rr6Processr)r)r+r?r-r-r. test_processbsz TestBasicOperations.test_processcCs(|jttjdd|jttjdddS)Nz???)r')Z assertRaises ValueErrorr(r)r6r7)r+r-r-r.test_invalid_kindgsz%TestBasicOperations.test_invalid_kindN) r;r<r=rskipIfrr@rBrDr-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)r3r4r-r-r.r5rsz=TestUnconnectedSockets.get_conn_from_sock..rr1) r(r)dictr rfilenor9lenrG)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). r1Nr"r&)r')rMrrGr9rJfamilytypeZ getsockoptsocketZ SOL_SOCKETZSO_TYPEZ getsocknamer isinstancebytesdecoderrr laddrrr(r)r:osgetpid)r+rLr?rTr,r-r-r. check_socket}s&     z#TestUnconnectedSockets.check_socketc CsJd}tttt|d*}||}|jr,t||jt j WdQRXdS)N)z 127.0.0.1r)addr) rrrrrWraddrr*r9statusr6 CONN_LISTEN)r+rXrLr?r-r-r. test_tcp_v4s   z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc CsJd}tttt|d*}||}|jr,t||jt j WdQRXdS)N)z::1r)rX) rrrrrWrYr*r9rZr6r[)r+rXrLr?r-r-r. test_tcp_v6s   z"TestUnconnectedSockets.test_tcp_v6c CsJd}tttt|d*}||}|jr,t||jt j WdQRXdS)N)z 127.0.0.1r)rX) rrrrrWrYr*r9rZr6 CONN_NONE)r+rXrLr?r-r-r. test_udp_v4s   z"TestUnconnectedSockets.test_udp_v4c CsJd}tttt|d*}||}|jr,t||jt j WdQRXdS)N)z::1r)rX) rrrrrWrYr*r9rZr6r^)r+rXrLr?r-r-r. test_udp_v6s   z"TestUnconnectedSockets.test_udp_v6z POSIX onlyc CsL|}tt|td*}||}|jr.t||jt j WdQRXdS)N)rO) get_testfnrrrrWrYr*r9rZr6r^)r+testfnrLr?r-r-r. test_unix_tcps   z$TestUnconnectedSockets.test_unix_tcpc CsL|}tt|td*}||}|jr.t||jt j WdQRXdS)N)rO) rarrrrWrYr*r9rZr6r^)r+rbrLr?r-r-r. test_unix_udps   z$TestUnconnectedSockets.test_unix_udpN)r;r<r=__doc__rMrWr\rrErr]r_r`r rcrdr-r-r-r.rFls #rFc@s:eZdZdZeedddZee dddZ dS) TestConnectedSocketzJTest socket pairs which are are actually connected to each other. zunreliable on SUONScCsd}tjddrttt|d\}}zHtjdd}|t|d||djtj ||djtj Wd| | XdS)N)z 127.0.0.1rtcp4)r')rXr"rrH) r(r)r*rrr9rKrZr6ZCONN_ESTABLISHEDclose)r+rXserverclientr,r-r-r.test_tcps zTestConnectedSocket.test_tcpz POSIX onlycCsd|}t|\}}z6tjdd}|djr<|djr.r")msg)rarr(r)rTrYr*r rr9rKrr r rh)r+rbrirjr,rXr-r-r. test_unixs*   "zTestConnectedSocket.test_unixN) r;r<r=rerrEr rkr ror-r-r-r.rfsrfc@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)assertInrNrOrr6r7)r'familiestypesr?)r+r-r.checksz'TestFilters.test_filters..checkr&inetinet4tcprgtcp6udpudp4udp6rl)rrrrrrr!r)r+rtr-)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|x6|D].} |j| d} | |krz| stqX| rXt| qXWt r |j |gdS)N) r&rurvinet6rwrgrxryrzr{)r') rr9rNrOrTrYrZr)r*rr:r2) procr?rNrOrTrYrZZkindsZ 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)rNrXrbz::1T)deleterHr-)r&rurvrwrg)r&rurvryrzr2)r&rur}rwrx)r&rur}ryr{)rtextwrapdedentrUpathbasenameragetcwdformatintrrpyrunevalr rr(Zchildrenr)r9rKr2rr6r[rr^getattr)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 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)Nrw)r'r"rHrgrrxryrzr{rur}rlr#)rr(r)r9rKrrqrNrrrOrrrrr r)r+r,r?r-r-r. test_counts\               zTestFilters.test_countN)r;r<r=r|rr rrr-r-r-r.rp s+arpz 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)rm)rqrNrrOr)r,rrtypes_r?)r+r-r.rts   z0TestSystemWideConnections.test_it..checkr) conn_tmaprl) rpsutil._commonritemsrr6r7r9rKset)r+rtrr'groupsrrrr,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-)r2)r3x)pidsr-r.r5 szFTestSystemWideConnections.test_multi_sockets_procs..r&)r'csg|]}|jkr|qSr-)r2)r3r)r2r-r.r5s)rrKrangeraappendrrrr2r r6r7r9rAr)) r+ZsocksZexpectedtimesfnamesiZfnamesrcZsprocZsysconsrr-)r2rr.test_multi_sockets_procss(       z2TestSystemWideConnections.test_multi_sockets_procsN)r;r<r=rerrrr-r-r-r.rsrc@seZdZddZdS)TestMisccCsg}g}xhttD]\}|drtt|}t|}|sBt||t||||||||qWt rtj tj t rtj dS)NZCONN_)rr6 startswithrstrisupperr*Z 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)rFrfrprErrr;Zpsutil.tests.runnerr__file__r-r-r-r.sl                                $ b =J>