
    ɧdS                     :   d 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
j(                    Z) e*ed" e+                      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%j2        ed-           G d. d/e-                      Z3 G d0 d1e          Z4e5d2k    rdd3l6m7Z7  e7e8           dS dS )4z;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)reap_children)retry_on_failure)	serialrun)skip_on_access_denied)tcp_socketpair)unittest)unix_socketpair)wait_for_fileSOCK_SEQPACKETc                   "    e Zd Zd Zd ZddZdS )ConnectionTestCasec                 x    t           s.t          s)t                              d          }|rJ |            d S d S d S Nallkind)r   r   thisprocconnectionsselfconss     =lib/python3.11/site-packages/psutil/tests/test_connections.pysetUpzConnectionTestCase.setUp6   sW     	"' 	"''U'33D!!T!!!	" 	" 	" 	" "!    c                 x    t           s.t          s)t                              d          }|rJ |            d S d S d S r&   )r   r   r*   r+   r,   s     r/   tearDownzConnectionTestCase.tearDown<   sY     	"6 	" ''U'33D!!T!!!		" 	" 	" 	" "!r1   r'   c                 
   	 t          j        |          }n# t           j        $ r t          rY dS  w xY wfd|D             }|                                 |                                 |                     ||           dS )zGiven a process PID and its list of connections compare
        those against system-wide connections retrieved via
        psutil.net_connections.
        r(   Nc                 :    g | ]}|j         k    |d d         S )Npid).0cr8   s     r/   
<listcomp>zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>R   s,    ===q=AcrcF===r1   )psutilnet_connectionsAccessDeniedr
   sortassertEqual)r-   r8   	proc_consr)   sys_conss    `   r/   compare_procsys_connectionsz.ConnectionTestCase.compare_procsys_connectionsC   s    
	-4888HH" 	 	 	  	 >===H===H-----s    44N)r'   )__name__
__module____qualname__r0   r3   rC    r1   r/   r$   r$   3   sF        " " "" " ". . . . . .r1   r$   c                   N    e Zd Z ej        ed          d             Zd Zd ZdS )TestBasicOperationsrequires rootc                     t                      5  t          j        d          D ]}t          |           	 d d d            d S # 1 swxY w Y   d S r&   )r   r<   r=   r   r-   conns     r/   test_systemzTestBasicOperations.test_systemZ   s     	. 	..E::: . .'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   (AA	A	c                     t                      5  t          j                                        d          D ]}t	          |           	 d d d            d S # 1 swxY w Y   d S r&   )r   r<   Processr+   r   rL   s     r/   test_processz TestBasicOperations.test_process`   s     	. 	.((44%4@@ . .'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   :AAAc                     |                      t          t          j        d           |                      t          t          j        d           d S )Nz???r(   )assertRaises
ValueErrorr*   r+   r<   r=   )r-   s    r/   test_invalid_kindz%TestBasicOperations.test_invalid_kinde   sD    *h&:GGG*f&<5IIIIIr1   N)	rD   rE   rF   r   skipIfr   rN   rQ   rU   rG   r1   r/   rI   rI   X   s_        X_\?33. . 43.
. . .
J J J J Jr1   rI   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dS )TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c                    t                               d          }t          d |D                       }t          st          r||                                         S |                     t          |          d           |d         j        dk    rE|                     ||                                         j        |                                           |d         S )Nr'   r(   c                      g | ]}|j         |fS rG   )fdr9   r:   s     r/   r;   z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<listcomp>p   s    ---1adAY---r1      r   r6   )	r*   r+   dictr   r   filenor@   lenr[   )r-   sockr.   smaps       r/   get_conn_from_sockz)TestUnconnectedSockets.get_conn_from_sockn   s    ###//-----.. 	W 	 &&SYY***AwzR H  dkkmm!4!7GGG7Nr1   c                 `   |                      |          }t          |           |j        dk    r-|                     |j        |                                           |                     |j        |j                   |                     |j        |                    t          j	        t          j
                             |                                }|s0t          r)t          |t                    r|                                }|j        t           k    r
|dd         }|j        t"          k    rt$          rn|                     |j        |           |j        t"          k    rKt(          rDt*                              d          }|                     t1          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).
        r6   N   r'   r(   )rc   r   r[   r@   r_   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsocknamer   
isinstancebytesdecoder   r   r   laddrr   r*   r+   rC   osgetpid)r-   ra   rM   rp   r.   s        r/   check_socketz#TestUnconnectedSockets.check_socket{   s   
 &&t,,%%% 7b= 	5TWdkkmm444dk222Itv'8&.II	K 	K 	K   "" 	# 	#E5!9!9 	#LLNNE;(" 	"1"IE;'! 	0g 	0TZ/// ;'! 	L&: 	L''U'33D,,RY[[$U,KKKr1   c                    d}t          t          t          t          |                    5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S N	127.0.0.1r   addr)
r   r   r   r   rs   raddrr@   statusr<   CONN_LISTENr-   ry   ra   rM   s       r/   test_tcp_v4z"TestUnconnectedSockets.test_tcp_v4   s    [+DAAABB 	>d$$T**Dz!!!T[&*<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>   AA==BBzIPv6 not supportedc                    d}t          t          t          t          |                    5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S N)::1r   rx   )
r   r   r   r   rs   rz   r@   r{   r<   r|   r}   s       r/   test_tcp_v6z"TestUnconnectedSockets.test_tcp_v6   s    [;TBBBCC 	>t$$T**Dz!!!T[&*<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>r   c                    d}t          t          t          t          |                    5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S ru   )
r   r   r   r   rs   rz   r@   r{   r<   	CONN_NONEr}   s       r/   test_udp_v4z"TestUnconnectedSockets.test_udp_v4   s    [*4@@@AA 	<T$$T**Dz!!!T[&*:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r   c                    d}t          t          t          t          |                    5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S r   )
r   r   r   r   rs   rz   r@   r{   r<   r   r}   s       r/   test_udp_v6z"TestUnconnectedSockets.test_udp_v6   s    [:DAAABB 	<d$$T**Dz!!!T[&*:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r   
POSIX onlyc                 ,   |                                  }t          t          |t                              5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S N)rg   

get_testfnr   r   r   rs   rz   r@   r{   r<   r   r-   testfnra   rM   s       r/   test_unix_tcpz$TestUnconnectedSockets.test_unix_tcp       ""%f;???@@ 	<D$$T**Dz!!!T[&*:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<   AB		BBc                 ,   |                                  }t          t          |t                              5 }|                     |          }|j        rJ |                     |j        t          j	                   d d d            d S # 1 swxY w Y   d S r   r   r   s       r/   test_unix_udpz$TestUnconnectedSockets.test_unix_udp   r   r   N)rD   rE   rF   __doc__rc   rs   r~   r   rV   r   r   r   r   r   r   r   rG   r1   r/   rX   rX   j   s       EE  ! ! !F> > > X_(*>??> > @?>< < < X_(*>??< < @?< X_Y--< < .-< X_Y--< < .-< < <r1   rX   c                   |    e Zd ZdZ ej        ed          d             Z ej        e d          d             Z	dS )TestConnectedSocketzJTest socket pairs which are are actually connected to
    each other.
    zunreliable on SUONSc                 J   d}t                               d          rJ t          t          |          \  }}	 t                               d          }|                     t          |          d           |                     |d         j        t          j                   |                     |d         j        t          j                   |	                                 |	                                 d S # |	                                 |	                                 w xY w)Nrv   tcp4r(   rx   re   r   r]   )
r*   r+   r   r   r@   r`   r{   r<   CONN_ESTABLISHEDclose)r-   ry   serverclientr.   s        r/   test_tcpzTestConnectedSocket.test_tcp   s    ''V'44444'd;;;	''V'44DSYY***T!W^V-DEEET!W^V-DEEE LLNNNLLNNNNN LLNNNLLNNNNs   BC8 8*D"r   c                    |                                  }t          |          \  }}	 t                              d          }|d         j        r|d         j        rJ |d         j        r|d         j        rJ t          st          rd |D             }|                     t          |          d|           t          st          st          rq|                     |d         j        d           |                     |d         j        d           |                     ||d         j        p|d         j                   nt          rL|d         j        |d         j        |d         j        |d         j        fD ]}|                     |d           n\|                     |d         j        p|d         j        |           |                     |d         j        p|d         j        |           |                                 |                                 d S # |                                 |                                 w xY w)	Nunixr(   r   r]   c                 (    g | ]}|j         d k    |S )z/var/run/log)rz   r\   s     r/   r;   z1TestConnectedSocket.test_unix.<locals>.<listcomp>   s$    EEEa17n+DEEEEr1   re   msg )r   r    r*   r+   rp   rz   r   r   r@   r`   r	   r   r   r   )r-   r   r   r   r.   ry   s         r/   	test_unixzTestConnectedSocket.test_unix   s$   ""(00	''V'44DQ8$q'-888Q8$q'-888 F F FE4EEESYYt444 I I5 I  a333  a333  a)G$q'-HHHH 	I!!W]DGM!!W]DGM; / /D$$T2..../   a!?$q'-HHH  a!?$q'-HHHLLNNNLLNNNNN LLNNNLLNNNNs   GH *IN)
rD   rE   rF   r   r   rV   r   r   r   r   rG   r1   r/   r   r      su          X_U122  32& X_Y--  .-  r1   r   c                   D    e Zd Zd Z ee          d             Zd ZdS )TestFiltersc                      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            d S # 1 swxY w Y   d S )Nc                 ^   t                               |           D ]8}                    |j        |                               |j        |           9t
          sNt          j        |           D ]:}                    |j        |                               |j        |           9d S d S )Nr(   )r*   r+   assertInrf   rg   r   r<   r=   )r)   familiestypesrM   r-   s       r/   checkz'TestFilters.test_filters.<locals>.check  s     ,,$,77 0 0dk8444di//// 4"2=== 4 4DMM$+x888MM$)U33334 44 4r1   r'   inetinet4tcpr   tcp6udpudp4udp6r   )r   r   r   r   r   r   r"   r   )r-   r   s   ` r/   test_filterszTestFilters.test_filters  s   	4 	4 	4 	4 	4  	A 	AE%Hg.
N;= = = E&H%
+- - - E')
+- - - E%H%-! ! ! E&)-! ! ! E&*-! ! ! E%H%,      E&),      E&*,      $ Afi"J?A A A;	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   EE&&E*-E*)only_ifc                     t                        fd}t          j        d          }t          j        d          }t          j                                                 t          j                                        }|                    t          t                    d|          }|                    t          t                    d|          }|                    t          t                    d|          }|                    t          t                    d|          }                     |          }	t          t          |d	                    }
                     |          }t          t          |d	                    }t                      rg                     |          }t          t          |d	                    }                     |          }t          t          |d	                    }nd }d }d }d }t                                           D ].}|                                }                     t)          |          d
           |D ]}|j        |	j        k    r' |||t          t,          |
dt.          j        d           9|j        |j        k    r' |||t          t2          |dt.          j        d           p|j        t7          |dd           k    r' |||t          t,          |dt.          j        d           |j        t7          |dd           k    r& |||t          t2          |dt.          j        d           0d S )Nc                    d}t          |                               |j        |                               |j        |                               |j        |                               |j        |                               |j        |           |D ]-}	|                     |	          }
|	|v r|
sJ !|
r
J |
            .t          r	                    | j
        |g           d S d S )N)
r'   r   r   inet6r   r   r   r   r   r   r(   )r   r@   rf   rg   rp   rz   r{   r+   r   rC   r8   )procrM   rf   rg   rp   rz   r{   kinds	all_kindsr)   r.   r-   s              r/   
check_connz+TestFilters.test_combos.<locals>.check_conn<  s   8I#D)))T[&111TY---TZ///TZ///T[&111! * *''T'225= *KKKK#))T)))) $ C00D6BBBBBC Cr1   a  
            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)
            )dirrw   )rf   ry   r   r   T)deleter]   rG   )r'   r   r   r   r   )r'   r   r   r   r   r8   )r'   r   r   r   r   )r'   r   r   r   r   )r   textwrapdedentrq   pathbasenamer   getcwdformatintr   r   pyrunevalr!   r   r*   childrenr+   r@   r`   r8   r   r<   r|   r   r   getattr)r-   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.   rM   s   `                   r/   test_comboszTestFilters.test_combos8  s   	C 	C 	C 	C 	C*   (     (   7##DOO	O$D$DEE$++w<<k( , D D$++w<<k( , D D$++x==uX , ? ?$++x==uX , ? ?
 JJ}--	x===>>	JJ}--	x===>>	?? 		

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

=11I]8DAAABBIIIIII""$$ 	H 	HA==??DSYY*** H H5IM) HJq$i%1FH H H H Uim+ HJq$Y%/FH H H H Ugi=== HJq$+y"%1FH H H H Ugi=== HJq$*i%/FH H H%H	H 	Hr1   c                 
   t                      5  t                              d          }|                     t	          |          t                      rdnd           |D ]I}|                     |j        t          t          f           |                     |j
        t                     Jt                              d          }|                     t	          |          d           |                     |d         j        t                     |                     |d         j
        t                     t                      rt                              d          }|                     t	          |          d           |                     |d         j        t                     |                     |d         j
        t                     t                              d          }|                     t	          |          t                      rdnd           |D ]I}|                     |j        t          t          f           |                     |j
        t                     Jt                              d	          }|                     t	          |          d           |                     |d         j        t                     |                     |d         j
        t                     t                      rt                              d
          }|                     t	          |          d           |                     |d         j        t                     |                     |d         j
        t                     t                              d          }|                     t	          |          t                      rdnd           |D ]P}|                     |j        t          t          f           |                     |j
        t          t          f           Qt                      rt                              d          }|                     t	          |          d           |D ]I}|                     |j        t                     |                     |j
        t          t          f           Jt          rt          st          st                              d          }|                     t	          |          d           |D ]I}|                     |j        t                      |                     |j
        t          t          f           Jd d d            d S # 1 swxY w Y   d S )Nr   r(   re   r]   r   r   r   r   r   r   r      r   r      )r   r*   r+   r@   r`   r   r   rf   r   r   rg   r   r   r   r   r   r   )r-   r.   rM   s      r/   
test_countzTestFilters.test_count  s    7	H 7	H''U'33DSYY]__(C!DDD 9 9dkGX+>???  K8888''V'44DSYY***T!W^W555T!W\;777 <+++88  TA...  a:::  a{;;;''U'33DSYY]__(C!DDD 8 8dkGX+>???  J7777''V'44DSYY***T!W^W555T!W\:666 ;+++88  TA...  a:::  az:::''V'44DSYY]__(C!DDD D DdkGX+>???di+z)BCCCC H+++99  TA...  H HD$$T[(;;;MM$)k:-FGGGG $ HW H H+++88  TA...  H HD$$T[':::MM$)k:-FGGGGo7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	H 7	Hs   UU--U14U1N)rD   rE   rF   r   r   r
   r   r   rG   r1   r/   r   r     sl        )A )A )AV 5)))^H ^H *)^H@8H 8H 8H 8H 8Hr1   r   rJ   c                   >    e Zd ZdZd Z e            d             ZdS )TestSystemWideConnectionszTests for net_connections().c           
           fd}t                      5  ddlm} |                                D ]v\  }}|dk    rt          s|\  }}t          j        |          }                     t          |          t          t          |                                ||||           w	 d d d            d S # 1 swxY w Y   d S )Nc                     | D ][}                     |j        ||           |j        t          k    r                     |j        ||           t	          |           \d S )Nr   )r   rf   r   rg   r   )r.   r   types_rM   r-   s       r/   r   z0TestSystemWideConnections.test_it.<locals>.check  sp     . .dk8>>>;') ?MM$)VM>>>'----	. .r1   r   )	conn_tmapr   )
r   psutil._commonr   itemsr   r<   r=   r@   r`   set)r-   r   r   r)   groupsr   r   r.   s   `       r/   test_itz!TestSystemWideConnections.test_it  s2   	. 	. 	. 	. 	.  		. 		.000000 ) 1 1 . .f6> *> #) &-d33  TCD		NN;;;dHf----.		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		. 		.s   BB55B9<B9c                    t                      5 }t          |          }d d d            n# 1 swxY w Y   g d}g }t          |          D ]q}|                                 }|                    |           t          j        d|z            }|                     |          }                    |j                   r|D ]}t          |           fdt          j        d          D             }	D ]{|                     t          fd|	D                       |           t          j                  }
|                     t          |
                    d                    |           |d S )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)
                c                 &    g | ]}|j         v |S rG   r7   )r9   xpidss     r/   r;   zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>
  s7       AEE 1   r1   r'   r(   c                 *    g | ]}|j         k    |S rG   r7   )r9   r   r8   s     r/   r;   zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>  s$    !E!E!E!E!!E!E!Er1   )r   r`   ranger   appendr   r   r   r8   r!   r<   r=   r@   rP   r+   )r-   socksexpectedtimesfnamesifnamesrcsprocsysconsr   r8   r   s              @@r/   test_multi_sockets_procsz2TestSystemWideConnections.test_multi_sockets_procs  s     	"5zzH	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"u 	# 	#AOO%%EMM%   / # #  C JJsOOEKK	""""  	! 	!E%       f4%@@@    	B 	BCS!E!E!E!EW!E!E!EFF%' ' 's##ASu!5!566AAAA		B 	Bs   -11N)rD   rE   rF   r   r   r   r   rG   r1   r/   r   r     sS        &&. . .& $B $B $B $B $Br1   r   c                       e Zd Zd ZdS )TestMiscc                    g }g }t          t                    D ]}|                    d          rt          t          |          }t	          |          }|                                s
J |            |                     t          |           |                     ||           |                    |           |                    |           t          rt          j	         t          j
         t          rt          j         d S d S )NCONN_)r   r<   
startswithr   strisupperassertNotInr   r   	CONN_IDLE
CONN_BOUNDr   CONN_DELETE_TCB)r-   intsstrsnamenumstr_s         r/   test_connection_constantsz"TestMisc.test_connection_constants  s    KK 	" 	"Dw'' "fd++3xx||~~++t+++  d+++  d+++C   D!!! 	 	#""""	# 	#r1   N)rD   rE   rF   r  rG   r1   r/   r   r     s#        # # # # #r1   r   __main__)run_from_name)9r   rq   ri   r   
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!   rP   r*   r   objectr"   r$   rI   rX   r   r   rV   r   r   rD   psutil.tests.runnerr  __file__rG   r1   r/   <module>r     sc   B A 				                                                                                  ( ( ( ( ( (                   - - - - - - % % % % % % ' ' ' ' ' ' $ $ $ $ $ $ ) ) ) ) ) ) 0 0 0 0 0 0 ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) " " " " " " . . . . . . ' ' ' ' ' ' ! ! ! ! ! ! ( ( ( ( ( ( & & & & & & 6>!16688<< !. !. !. !. !. !. !. !.HJ J J J J, J J J$ _< _< _< _< _</ _< _< _<D : : : : :, : : :zFH FH FH FH FH$ FH FH FHR //;B ;B ;B ;B ;B 2 ;B ;B 0/;B|# # # # #~ # # #* z 111111M( r1   