U |fmU@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-Z1e2ed/Gd0d1d1e-Z3Gd2d3d3eZ4e5d4kr\dd5l6m7Z7e7e8dS)6zFTests for psutil.net_connections() and Process.net_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_NET_CONNECTIONS_UNIX) SKIP_SYSCONS)PsutilTestCase) bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)filter_proc_net_connections) reap_children)retry_on_failure) serialrun)skip_on_access_denied)tcp_socketpair)unix_socketpair) wait_for_fileSOCK_SEQPACKETcCs$tj|d}|dkr t|S|S)Nkind)allunix)psutilProcessnet_connectionsr)r#consr*P/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_connections.pythis_proc_net_connections3sr,c@s&eZdZddZddZd ddZdS) ConnectionTestCasecCs|tddgdSNr$r" assertEqualr,selfr*r*r+setUp<szConnectionTestCase.setUpcCs|tddgdSr.r/r1r*r*r+tearDown?szConnectionTestCase.tearDownr$csfztj|d}Wn"tjk r2tr,YdSYnXfdd|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)Npid.0cr6r*r+ Rs zBConnectionTestCase.compare_procsys_connections..)r&r(Z AccessDeniedr sortr0)r2r7Z proc_consr#Zsys_consr*r6r+compare_procsys_connectionsCsz.ConnectionTestCase.compare_procsys_connectionsN)r$)__name__ __module__ __qualname__r3r4r=r*r*r*r+r-:sr-c@s0eZdZeedddZddZddZdS) TestBasicOperations requires rootc Cs0t tjddD] }t|qW5QRXdSr.)rr&r(rr2connr*r*r+ test_systemYszTestBasicOperations.test_systemc Cs.ttddD] }t|qW5QRXdSr.)rr,rrCr*r*r+ test_process_sz TestBasicOperations.test_processcCs&|jttdd|jttjdddS)Nz???r") assertRaises ValueErrorr,r&r(r1r*r*r+test_invalid_kinddsz%TestBasicOperations.test_invalid_kindN) r>r?r@unittestskipIfrrErFrIr*r*r*r+rAXs  rAc@seZdZdZddZddZddZee dd d Z d d Z ee dd dZ ee dddZee dddZdS)TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.cCsttdd}tdd|D}ts$tr0||S|t|d|djdkrh|||j||dSdS)Nr$r"cSsg|]}|j|fqSr*)fdr8r*r*r+r;osz=TestUnconnectedSockets.get_conn_from_sock..rr5)r,dictr rfilenor0lenrM)r2sockr)Zsmapr*r*r+get_conn_from_sockms  z)TestUnconnectedSockets.get_conn_from_sockcCs||}t||jdkr.||j|||j|j||j|tj tj | }|szt rzt |trz|}|jtkr|dd}||j||jtkrtrtdd}|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). r5Nr$r")rSrrMr0rPfamilytype getsockoptsocket SOL_SOCKETSO_TYPE getsocknamer isinstancebytesdecoderladdrrrr,r=osgetpid)r2rRrDr_r)r*r*r+ check_socketzs&     z#TestUnconnectedSockets.check_socketc CsNd}tttt|d.}||}||jd||jtj W5QRXdSN 127.0.0.1raddrr*) rrrrrbr0raddrstatusr& CONN_LISTENr2rgrRrDr*r*r+ test_tcp_v4s  z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc CsNd}tttt|d.}||}||jd||jtj W5QRXdSN)::1rrfr*) rrrrrbr0rhrir&rjrkr*r*r+ test_tcp_v6s  z"TestUnconnectedSockets.test_tcp_v6c CsNd}tttt|d.}||}||jd||jtj W5QRXdSrc) rrrrrbr0rhrir& CONN_NONErkr*r*r+ test_udp_v4s  z"TestUnconnectedSockets.test_udp_v4c CsNd}tttt|d.}||}||jd||jtj W5QRXdSrm) rrrrrbr0rhrir&rprkr*r*r+ test_udp_v6s  z"TestUnconnectedSockets.test_udp_v6 POSIX onlyc CsP|}tt|td.}||}||jd||jtj W5QRXdSN)rV get_testfnrrrrbr0rhrir&rpr2testfnrRrDr*r*r+ test_unix_tcps  z$TestUnconnectedSockets.test_unix_tcpc CsP|}tt|td.}||}||jd||jtj W5QRXdSrtrvrxr*r*r+ test_unix_udps  z$TestUnconnectedSockets.test_unix_udpN)r>r?r@__doc__rSrbrlrJrKrrorqrrr rzr{r*r*r*r+rLis       rLc@s:eZdZdZeedddZee dddZ dS) TestConnectedSocketzFTest socket pairs which are actually connected to each other. zunreliable on SUONScCsd}|tddgtt|d\}}zFtdd}|t|d||djtj||djtjW5||XdS)Nrdtcp4r"rfrTrrN) r0r,rrcloserQrir&ZCONN_ESTABLISHED)r2rgserverclientr)r*r*r+test_tcps zTestConnectedSocket.test_tcprscCs |}t|\}}ztdd}|djr<|djr.rTmsgru)rwrrr,r_rhAssertionErrorr rr0rQrr r )r2ryrrr)r*r*r+ test_unixs    zTestConnectedSocket.test_unixN) r>r?r@r|rJrKr rr rr*r*r*r+r}s    r}c@s.eZdZddZeedddZddZdS) TestFiltersc sfdd}t|dtttgtttg|dttgttg|dtgttg|dttgtg|dtgtg|dtgtg|d ttgtg|d tgtg|d tgtgtr|d tgtttgW5QRXdS) Ncsbt|dD] }|j||j|q ts^tj|dD] }|j||j|q.checkr$inetinet4tcpr~tcp6udpudp4udp6r%)rrrrrrr!r)r2rr*r1r+ test_filterss* 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}tD]}|}t|d |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:qdS)Nc sd}t||j||j||j||j||j||D]2} |j| d} | |kr|| gqV| gqVt r |j |gdS)N) r$rrinet6rr~rrrrr") rr0rUrVr_rhrir(ZassertNotEqualrr=r7) procrDrUrVr_rhrikindsZ all_kindsr#r)r1r*r+ check_conn%s  z+TestFilters.test_combos..check_conna4 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(0.1) for x in range(100)] 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(0.1) for x in range(100)] )dirre)rUrgryrnT)deleterNr*)r$rrrr~)r$rrrrr7)r$rrrr)r$rrrr)rtextwrapdedentr`pathbasenamerwgetcwdformatintrrpyrunevalr rr&r'childrenr(r0rQr7rrjrrpgetattr)r2rZ 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)rDr*r1r+ test_combos!s         zTestFilters.test_combosc Csttdd}|t|tr(dnd|D]$}||jttf||j t q2tdd}|t|d||djt||dj t trtdd}|t|d||djt||dj t tdd}|t|trdnd|D]&}||jttf||j t qtd d}|t|d||djt||dj t trtd d}|t|d||djt||dj t td d}|t|trd nd|D]*}||jttf||j t t fqtrRtd d}|t|d|D]&}||jt||j t t fq*t rt ststdd}|t|d|D]&}||jt||j t t fqW5QRXdS)Nrr"rTrNr~rrrrrrrr%)rr,r0rQrrrUrrrVrrrrr r)r2r)rDr*r*r+ test_counts\          zTestFilters.test_countN)r>r?r@rrr rrr*r*r*r+rs   rrBc@s&eZdZdZddZeddZdS)TestSystemWideConnectionszTests for net_connections().c sfdd}thddlm}|D]L\}}|dkr>ts>q(|\}}t|}t|tt |||||q(W5QRXdS)NcsD|D]:}j|j||d|jtkr6j|j||dt|qdS)Nr)rrUrrVr)r)rtypes_rDr1r*r+rs  z0TestSystemWideConnections.test_it..checkr) conn_tmapr%) rpsutil._commonritemsrr&r(r0rQset)r2rrr#groupsrrr)r*r1r+test_its    z!TestSystemWideConnections.test_itc st}t|}W5QRXgd}g}t|D]:}|}||td|}||}|jq.|D] }t |qnfddt j ddD} D]B| tfdd| D|t } | t| d|qdS)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(0.1) for x in range(100)] csg|]}|jkr|qSr*r6r9x)pidsr*r+r;s zFTestSystemWideConnections.test_multi_sockets_procs..r$r"csg|]}|jkr|qSr*r6rr6r*r+r;#s )rrQrangerwappendrrrr7r r&r(r0r') r2socksexpectedtimesfnames_fnamesrcZsprocZsysconsrr*)r7rr+test_multi_sockets_procss2       z2TestSystemWideConnections.test_multi_sockets_procsN)r>r?r@r|rrrr*r*r*r+rsrc@seZdZddZdS)TestMisccCsg}g}ttD]\}|drtt|}t|}|s@t||t||||||||qt r~tj tj t rtj dS)NZCONN_)rr& startswithrstrisupperrZ assertNotInrr Z CONN_IDLEZ CONN_BOUNDrZCONN_DELETE_TCB)r2ZintsstrsnamenumZstr_r*r*r+test_net_connection_constants*s        z&TestMisc.test_net_connection_constantsN)r>r?r@rr*r*r*r+r)sr__main__) run_from_name)9r|r`rXrrJ contextlibrrrrrr&rrr r r r r rrrZpsutil._compatrZ psutil.testsrrrrrrrrrrrrrrrr robjectr!r,r-rArLr}rrKrrr>Zpsutil.tests.runnerr__file__r*r*r*r+sj                               _7g A