
    ztfmU                        d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& dd lm'Z' dd!lm(Z(  e)ed" e*             Z+d# Z,e$ G d$ d%e             Z- G d& d'e-      Z.e$ G d( d)e-             Z/e$ G d* d+e-             Z0 G d, d-e-      Z1 ejd                  ed.       G d/ d0e-             Z3 G d1 d2e      Z4e5d3k(  rdd4l6m7Z7  e7e8       yy)5zFTests 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_fileSOCK_SEQPACKETc                 l    t        j                         j                  |       }| dv rt        |      S |S )Nkind)allunix)psutilProcessnet_connectionsr   )r%   conss     g/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/psutil/tests/test_connections.pythis_proc_net_connectionsr-   3   s4    >>+++6D*400K    c                        e Zd Zd Zd ZddZy)ConnectionTestCasec                 <    | j                  t        d      g        y Nr&   r$   assertEqualr-   selfs    r,   setUpzConnectionTestCase.setUp<   s    2>Cr.   c                 <    | j                  t        d      g        y r2   r3   r5   s    r,   tearDownzConnectionTestCase.tearDown?   s    2>Cr.   c                 $   	 t        j                  |      }|D cg c]  }|j                  |k(  s|dd  }}|j                          |j                          | j                  ||       y# t         j                  $ r
 t        rY y w xY wc c}w )zGiven a process PID and its list of connections compare
        those against system-wide connections retrieved via
        psutil.net_connections.
        r$   N)r(   r*   AccessDeniedr
   pidsortr4   )r6   r=   	proc_consr%   sys_conscs         r,   compare_procsys_connectionsz.ConnectionTestCase.compare_procsys_connectionsC   s    
	--48H %-=qAcrF==H- "" 	 	 >s   A- BB-B
B
N)r&   )__name__
__module____qualname__r7   r9   rB    r.   r,   r0   r0   :   s    DD.r.   r0   c                   J    e Zd Z ej                  ed      d        Zd Zd Zy)TestBasicOperationsrequires rootc                     t               5  t        j                  d      D ]  }t        |        	 d d d        y # 1 sw Y   y xY wr2   )r   r(   r*   r   r6   conns     r,   test_systemzTestBasicOperations.test_systemY   s?     	...E: .'-.	. 	. 	.s	   '<Ac                 |    t               5  t        d      D ]  }t        |        	 d d d        y # 1 sw Y   y xY wr2   )r   r-   r   rK   s     r,   test_processz TestBasicOperations.test_process_   s9     	.1u= .'-.	. 	. 	.s   2;c                     | j                  t        t        d       | j                  t        t        j                  d       y )Nz???r$   )assertRaises
ValueErrorr-   r(   r*   r5   s    r,   test_invalid_kindz%TestBasicOperations.test_invalid_kindd   s3    *&?eL*f&<&<5Ir.   N)	rC   rD   rE   unittestskipIfr   rM   rO   rS   rF   r.   r,   rH   rH   X   s,    X__\?3. 4.
.
Jr.   rH   c                      e Zd ZdZd Zd Zd Z ej                   e	        d      d        Z
d Z ej                   e	        d      d        Z ej                  e d	      d
        Z ej                  e d	      d        Zy)TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c                    t        d      }t        |D cg c]  }|j                  |f c}      }t        st        r||j                            S | j                  t        |      d       |d   j                  dk7  r;| j                  ||j                            j                  |j                                |d   S c c}w )Nr&   r$      r   r;   )r-   dictfdr   r   filenor4   len)r6   sockr+   rA   smaps        r,   get_conn_from_sockz)TestUnconnectedSockets.get_conn_from_sockm   s    (e4-1addAY-.W &&SY*AwzzR  dkkm!4!7!7G7N .s   B>c                    | j                  |      }t        |       |j                  dk7  r*| j                  |j                  |j	                                | j                  |j
                  |j
                         | j                  |j                  |j                  t        j                  t        j                               |j                         }|s&t        r t        |t              r|j                         }|j
                  t         k(  r|dd }| j                  |j"                  |       |j
                  t$        k(  r8t&        r2t)        d      }| j+                  t-        j.                         |d       |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).
        r;   N   r&   r$   )r`   r   r[   r4   r\   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsocknamer   
isinstancebytesdecoder   laddrr   r   r-   rB   osgetpid)r6   r^   rL   rm   r+   s        r,   check_socketz#TestUnconnectedSockets.check_socketz   s   
 &&t,% 77b=TWWdkkm4dkk2IItv'8'8&..I	

   "E5!9LLNE;;(""1IEU+ ;;'!&>,%8D,,RYY[$U,Kr.   c                    d}t        t        t        t        |            5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wN	127.0.0.1r   addrrF   )
r   r   r   r   rp   r4   raddrstatusr(   CONN_LISTENr6   rv   r^   rL   s       r,   test_tcp_v4z"TestUnconnectedSockets.test_tcp_v4   sm    [+DAB 	>d$$T*DTZZ,T[[&*<*<=	> 	> 	>   ABBzIPv6 not supportedc                    d}t        t        t        t        |            5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wN)::1r   ru   rF   )
r   r   r   r   rp   r4   rw   rx   r(   ry   rz   s       r,   test_tcp_v6z"TestUnconnectedSockets.test_tcp_v6   sm    [;TBC 	>t$$T*DTZZ,T[[&*<*<=	> 	> 	>r|   c                    d}t        t        t        t        |            5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wrr   )
r   r   r   r   rp   r4   rw   rx   r(   	CONN_NONErz   s       r,   test_udp_v4z"TestUnconnectedSockets.test_udp_v4   sm    [*4@A 	<T$$T*DTZZ,T[[&*:*:;	< 	< 	<r|   c                    d}t        t        t        t        |            5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wr~   )
r   r   r   r   rp   r4   rw   rx   r(   r   rz   s       r,   test_udp_v6z"TestUnconnectedSockets.test_udp_v6   sm    [:DAB 	<d$$T*DTZZ,T[[&*:*:;	< 	< 	<r|   
POSIX onlyc                 0   | j                         }t        t        |t                    5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wN)rd    

get_testfnr   r   r   rp   r4   rw   rx   r(   r   r6   testfnr^   rL   s       r,   test_unix_tcpz$TestUnconnectedSockets.test_unix_tcp   s    "%f;?@ 	<D$$T*DTZZ,T[[&*:*:;	< 	< 	<   ABBc                 0   | j                         }t        t        |t                    5 }| j	                  |      }| j                  |j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY wr   r   r   s       r,   test_unix_udpz$TestUnconnectedSockets.test_unix_udp   r   r   N)rC   rD   rE   __doc__r`   rp   r{   rT   rU   r   r   r   r   r   r   r   rF   r.   r,   rW   rW   i   s    E@> X__(*>?> @>< X__(*>?< @< X__Y-< .< X__Y-< .<r.   rW   c                   v    e Zd ZdZ ej
                  ed      d        Z ej
                  e d      d        Z	y)TestConnectedSocketzFTest socket pairs which are actually connected to
    each other.
    zunreliable on SUONSc                    d}| j                  t        d      g        t        t        |      \  }}	 t        d      }| j                  t	        |      d       | j                  |d   j
                  t        j                         | j                  |d   j
                  t        j                         |j                          |j                          y # |j                          |j                          w xY w)Nrs   tcp4r$   ru   rb   r   rY   )	r4   r-   r   r   r]   rx   r(   CONN_ESTABLISHEDclose)r6   rv   serverclientr+   s        r,   test_tcpzTestConnectedSocket.test_tcp   s    2?D'd;	,&9DSY*T!W^^V-D-DET!W^^V-D-DE LLNLLN LLNLLNs   BC "C8r   c                    | j                         }t        |      \  }}	 t        d      }|d   j                  r|d   j                  rJ |       |d   j                  r|d   j                  rJ |       t
        st        r|D cg c]  }|j                  dk7  s| }}| j                  t        |      d|       t        st        st        st        ro| j                  |d   j                  d       | j                  |d   j                  d       | j                  ||d   j                  xs |d   j                         n0| j                  |d   j                  xs |d   j                  |       |j                          |j                          y c c}w # |j                          |j                          w xY w)	Nr'   r$   r   rY   z/var/run/logrb   msgr   )r   r    r-   rm   rw   r   r   r4   r]   r	   r   r   r   )r6   r   r   r   r+   rA   s         r,   	test_unixzTestConnectedSocket.test_unix   s\   "(0	,&9DQ$q'-->$>8Q$q'-->$>8 $(Ea177n+DEESYt45G  a3  a3  a)G$q'--H   a!?$q'--HLLNLLN F LLNLLNs%   A&F FFCF F "F=N)
rC   rD   rE   r   rT   rU   r   r   r   r   rF   r.   r,   r   r      sL     X__U12 3& X__Y- .r.   r   c                   6    e Zd Zd Z ee      d        Zd Zy)TestFiltersc                 X     fd}t               5   |dt        t        t        gt        t
        t        g        |dt        t        gt        t
        g        |dt        gt        t
        g        |dt        t        gt        g        |dt        gt        g        |dt        gt        g        |dt        t        gt
        g        |d	t        gt
        g        |d
t        gt
        g       t        r |dt        gt        t
        t        g       d d d        y # 1 sw Y   y xY w)Nc                 L   t        |       D ]:  }j                  |j                  |       j                  |j                  |       < t        sTt        j                  |       D ]:  }j                  |j                  |       j                  |j                  |       < y y )Nr$   )r-   assertInrc   rd   r   r(   r*   )r%   familiestypesrL   r6   s       r,   checkz'TestFilters.test_filters.<locals>.check  s    1t< 0dkk84dii/0  "22= 4DMM$++x8MM$))U34  r.   r&   inetinet4tcpr   tcp6udpudp4udp6r'   )r   r   r   r   r   r   r"   r   )r6   r   s   ` r,   test_filterszTestFilters.test_filters  s    	4  	(G,j.9
 &7H-Z/HI'G9{J&?@%'8,{m<&7)k]3&8*{m4%'8,zl;&7)j\2&8*zl3'I *n=	 	 	s   DD  D))only_ifc                     t                 fd}t        j                  d      }t        j                  d      }t        j                  j                   j                  t        j                                     }|j                  t        t              d|      }|j                  t        t              d|      }|j                  t        t              d|      }|j                  t        t              d|      } j                  |      }	t        t        |d	            }
 j                  |      }t        t        |d	            }t               rO j                  |      }t        t        |d	            } j                  |      }t        t        |d	            }nd }d }d }d }t!        j"                         j%                         D ]5  }|j'                         } j)                  t+        |      d
       |D ]  }|j,                  |	j,                  k(  r& |||t        t.        |
dt         j0                  d       C|j,                  |j,                  k(  r& |||t        t2        |dt         j4                  d       |j,                  t7        |dd       k(  r& |||t        t.        |dt         j0                  d       |j,                  t7        |dd       k(  s |||t        t2        |dt         j4                  d        8 y )Nc                    d}t        |       j                  |j                  |       j                  |j                  |       j                  |j                  |       j                  |j
                  |       j                  |j                  |       |D ]=  }	| j                  |	      }
|	|v rj                  |
g        ,j                  |
g        ? t        rj                  | j                  |g       y y )N)
r&   r   r   inet6r   r   r   r   r   r   r$   )r   r4   rc   rd   rm   rw   rx   r*   assertNotEqualr   rB   r=   )procrL   rc   rd   rm   rw   rx   kinds	all_kindsr%   r+   r6   s              r,   
check_connz+TestFilters.test_combos.<locals>.check_conn%  s    I $D)T[[&1TYY-TZZ/TZZ/T[[&1! /+++65=''b1$$T2./ (00D6B (r.   a4  
            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)]
            )dirrt   )rc   rv   r   r   T)deleterY   rF   )r&   r   r   r   r   )r&   r   r   r   r   r=   )r&   r   r   r   r   )r&   r   r   r   r   )r   textwrapdedentrn   pathbasenamer   getcwdformatintr   r   pyrunevalr!   r   r(   r)   childrenr*   r4   r]   r=   r   ry   r   r   getattr)r6   r   tcp_templateudp_templatetestfiletcp4_templateudp4_templatetcp6_templateudp6_template	tcp4_proc	tcp4_addr	udp4_proc	udp4_addr	tcp6_proc	tcp6_addr	udp6_proc	udp6_addrpr+   rL   s   `                   r,   test_comboszTestFilters.test_combos!  s   	C>   (    (  77##DOO		O$DE$++w<k( , 
 %++w<k( , 
 %++x=uX , 
 %++x=uX , 
 JJ}-	x=>	JJ}-	x=>	?

=1I]8DABI

=1I]8DABIIIII!**, 3	A$$&DSY* 055IMM)#!**?	 UUimm+"!((?	 UUgi== #!**?	 UUgi== "!((?	O03	r.   c                    t               5  t        d      }| j                  t        |      t	               rdnd       |D ]H  }| j                  |j                  t        t        f       | j                  |j                  t               J t        d      }| j                  t        |      d       | j                  |d   j                  t               | j                  |d   j                  t               t	               rmt        d      }| j                  t        |      d       | j                  |d   j                  t               | j                  |d   j                  t               t        d      }| j                  t        |      t	               rdnd       |D ]H  }| j                  |j                  t        t        f       | j                  |j                  t               J t        d	      }| j                  t        |      d       | j                  |d   j                  t               | j                  |d   j                  t               t	               rmt        d
      }| j                  t        |      d       | j                  |d   j                  t               | j                  |d   j                  t               t        d      }| j                  t        |      t	               rdnd       |D ]N  }| j                  |j                  t        t        f       | j                  |j                  t        t        f       P t	               rtt        d      }| j                  t        |      d       |D ]H  }| j                  |j                  t               | j                  |j                  t        t        f       J t        rt        szt        stt        d      }| j                  t        |      d       |D ]H  }| j                  |j                  t               | j                  |j                  t        t        f       J d d d        y # 1 sw Y   y xY w)Nr   r$   rb   rY   r   r   r   r   r   r   r      r   r'      )r   r-   r4   r]   r   r   rc   r   r   rd   r   r   r   r   r   r   )r6   r+   rL   s      r,   
test_countzTestFilters.test_count  sK    7	H,%8DSY]_!D 9dkkGX+>?  K89 -&9DSY*T!W^^W5T!W\\;70f=  TA.  a:  a{;,%8DSY]_!D 8dkkGX+>?  J78 -&9DSY*T!W^^W5T!W\\:60f=  TA.  a:  az:,&9DSY]_!D DdkkGX+>?dii+z)BCD 0g>  TA.  HD$$T[[(;MM$))k:-FGH
 (F0f=  TA.  HD$$T[[':MM$))k:-FGHk7	H 7	H 7	Hs   QQ''Q0N)rC   rD   rE   r   r   r
   r   r   rF   r.   r,   r   r     s)    > 5)H *HT8Hr.   r   rI   c                   0    e Zd ZdZd Z e       d        Zy)TestSystemWideConnectionszTests for net_connections().c           
      F     fd}t               5  ddlm} |j                         D ]b  \  }}|dk(  rt        s|\  }}t        j                  |      } j                  t        |      t        t        |                    ||||       d 	 d d d        y # 1 sw Y   y xY w)Nc                     | D ]\  }j                  |j                  ||       |j                  t        k7  rj                  |j                  ||       t	        |       ^ y )Nr   )r   rc   r   rd   r   )r+   r   types_rL   r6   s       r,   r   z0TestSystemWideConnections.test_it.<locals>.check  sR     .dkk8>;;')MM$))VM>'-	.r.   r   )	conn_tmapr'   )
r   psutil._commonr   itemsr   r(   r*   r4   r]   set)r6   r   r   r%   groupsr   r   r+   s   `       r,   test_itz!TestSystemWideConnections.test_it  s    	.  
	.0 ) 1 .f6>*B#) &--d3  TCD	N;dHf-.
	. 
	. 
	.s   A<BB c           
         t               5 }t        |      }d d d        g }d}g }t        |      D ]g  }| j                         }|j	                  |       t        j                  d|z        }| j                  |      }	|j	                  |	j                         i |D ]  }t        |        t        j                  d      D 
cg c]  }
|
j                  |v s|
 }}
|D ]z  }| j                  t        |D 
cg c]  }
|
j                  |k(  s|
 c}
             t        j                  |      }| j                  t        |j                  d            |       | y # 1 sw Y   IxY wc c}
w c c}
w )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)]
                r&   r$   )r   r]   ranger   appendr   r   r   r=   r!   r(   r*   r4   r)   )r6   socksexpectedpidstimesfnames_fnamesrcsprocxsysconsr=   r   s                 r,   test_multi_sockets_procsz2TestSystemWideConnections.test_multi_sockets_procs  sc     	"5zH	"u 	#AOO%EMM% // # # C JJsOEKK		"	#  	!E% 	! --59
QUUd]A
 
  	FC81155C<Q898 s#AS!2!25!9:HE	F5	" 	".

 9s#   EE+E+7E0E0E(N)rC   rD   rE   r   r   r   r   rF   r.   r,   r   r     s#    &.( &F &Fr.   r   c                       e Zd Zd Zy)TestMiscc                    g }g }t        t              D ]  }|j                  d      st        t        |      }t	        |      }|j                         sJ |       | j                  t        |       | j                  ||       |j                  |       |j                  |        t        r t        j                   t        j                   t        rt        j                   y y )NCONN_)r   r(   
startswithr   strisupperassertNotInr   r   	CONN_IDLE
CONN_BOUNDr   CONN_DELETE_TCB)r6   intsstrsnamenumstr_s         r,   test_net_connection_constantsz&TestMisc.test_net_connection_constants*  s    K 	"Dw'fd+3x||~+t+~  d+  d+C D!	" "" r.   N)rC   rD   rE   r  rF   r.   r,   r   r   )  s    #r.   r   __main__)run_from_name)9r   rn   rf   r   rT   
contextlibr   r   r   r   r   r(   r   r	   r
   r   r   r   r   r   r   r   psutil._compatr   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   objectr"   r-   r0   rH   rW   r   r   rU   r   r   rC   psutil.tests.runnerr	  __file__rF   r.   r,   <module>r     s[   M 	                  (    1 % ' $ ) 0 ' 4 & ) " . ' ( & !168< . . .:J, J" \</ \< \<~ 4, 4 4ncH$ cHL />F 2 >F 0>FB#~ #( z1( r.   