
    XhR                     H   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%  e&ed! e'             Z(d" Z)ejT                  jW                  d#$       G d% d&e             Z, G d' d(e,      Z-ejT                  jW                  d#$       G d) d*e,             Z.ejT                  jW                  d#$       G d+ d,e,             Z/ G d- d.e,      Z0ejT                  jc                  ed/0       G d1 d2e,             Z2 G d3 d4e      Z3y)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)AF_UNIX)HAS_NET_CONNECTIONS_UNIX)SKIP_SYSCONS)PsutilTestCase)bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)filter_proc_net_connections)pytest)reap_children)retry_on_failure)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     i/var/www/html/cjf29f/d23bf782/d32178f2/venv/lib/python3.12/site-packages/psutil/tests/test_connections.pythis_proc_net_connectionsr,   1   s4    >>+++6D*400K    serial)namec                        e Zd Zd Zd ZddZy)ConnectionTestCasec                 &    t        d      g k(  sJ y Nr%   r#   r,   selfs    r+   setUpzConnectionTestCase.setUp:   s    (e4:::r-   c                 &    t        d      g k(  sJ y r3   r4   r5   s    r+   tearDownzConnectionTestCase.tearDown=   s    (e4:::r-   c                    	 t        j                  |      }|D cg c]  }|j                  |k(  s|dd  }}|j                          |j                          ||k(  s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sort)r6   r=   	proc_consr$   sys_conscs         r+   compare_procsys_connectionsz.ConnectionTestCase.compare_procsys_connectionsA   s    
	--48H %-=qAcrF==H$$$ "" 	 	 >s   A" BB"A?=A?N)r%   )__name__
__module____qualname__r7   r9   rB    r-   r+   r1   r1   8   s    ;;%r-   r1   c                   ^    e Zd Zej                  j                  ed      d        Zd Zd Z	y)TestBasicOperationsrequires rootreasonc                     t               5  t        j                  d      D ]  }t        |        	 d d d        y # 1 sw Y   y xY wr3   )r   r'   r)   r   r6   conns     r+   test_systemzTestBasicOperations.test_systemW   s?     	...E: .'-.	. 	. 	.s	   '<Ac                 |    t               5  t        d      D ]  }t        |        	 d d d        y # 1 sw Y   y xY wr3   )r   r,   r   rM   s     r+   test_processz TestBasicOperations.test_process]   s9     	.1u= .'-.	. 	. 	.s   2;c                     t        j                  t              5  t        d       d d d        t        j                  t              5  t	        j
                  d       d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)Nz???r#   )r   raises
ValueErrorr,   r'   r)   r5   s    r+   test_invalid_kindz%TestBasicOperations.test_invalid_kindb   s_    ]]:& 	2%51	2]]:& 	/"".	/ 	/	2 	2	/ 	/s   A(A4(A14A=N)
rC   rD   rE   r   markskipifr   rO   rQ   rU   rF   r-   r+   rH   rH   V   s2    [[_=. >.
.
/r-   rH   c                   \   e Zd ZdZd Zd Zd Zej                  j                   e
        d      d        Zd Zej                  j                   e
        d      d	        Zej                  j                  e d
      d        Zej                  j                  e d
      d        Zy)TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c                 D   t        d      }|D ci c]  }|j                  | }}t        st        r||j	                            S t        |      dk(  sJ |d   j                  dk7  r0||j	                            j                  |j	                         k(  sJ |d   S c c}w )Nr%   r#      r   r;   )r,   fdr   r   filenolen)r6   sockr*   rA   smaps        r+   get_conn_from_sockz)TestUnconnectedSockets.get_conn_from_sockm   s    (e4!%&Aa&&W &&t9>!>AwzzRDKKM*-->>>7N 's   Bc                    | j                  |      }t        |       |j                  dk7  r|j                  |j                         k(  sJ |j                  |j                  k(  sJ |j
                  |j                  t        j                  t        j                        k(  sJ |j                         }|s t        |t              r|j                         }|j                  t        k(  r|dd }|j                  |k(  s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#   )ra   r   r\   r]   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsockname
isinstancebytesdecoder   laddrr   r   r,   rB   osgetpid)r6   r_   rN   rn   r*   s        r+   check_socketz#TestUnconnectedSockets.check_socketz   s	   
 &&t,% 77b=77dkkm+++{{dkk)))yyDOOF,=,=v~~NNNN   "E51LLNE;;(""1IEzzU""" ;;'!&>,%8D,,RYY[$U,Kr-   c                     d}t        t        t        t        |            5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  sJ 	 d d d        y # 1 sw Y   y xY wN	127.0.0.1r   addrrF   )	r   r   r   r   rq   raddrstatusr'   CONN_LISTENr6   rw   r_   rN   s       r+   test_tcp_v4z"TestUnconnectedSockets.test_tcp_v4   si    [+DAB 	5d$$T*D::###;;&"4"4444	5 	5 	5   AA..A7zIPv6 not supportedrJ   c                     d}t        t        t        t        |            5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  sJ 	 d d d        y # 1 sw Y   y xY wN)::1r   rv   rF   )	r   r   r   r   rq   rx   ry   r'   rz   r{   s       r+   test_tcp_v6z"TestUnconnectedSockets.test_tcp_v6   si    [;TBC 	5t$$T*D::###;;&"4"4444	5 	5 	5r}   c                     d}t        t        t        t        |            5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  sJ 	 d d d        y # 1 sw Y   y xY wrs   )	r   r   r   r   rq   rx   ry   r'   	CONN_NONEr{   s       r+   test_udp_v4z"TestUnconnectedSockets.test_udp_v4   si    [*4@A 	3T$$T*D::###;;&"2"2222	3 	3 	3r}   c                     d}t        t        t        t        |            5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  sJ 	 d d d        y # 1 sw Y   y xY wr   )	r   r   r   r   rq   rx   ry   r'   r   r{   s       r+   test_udp_v6z"TestUnconnectedSockets.test_udp_v6   si    [:DAB 	3d$$T*D::###;;&"2"2222	3 	3 	3r}   
POSIX onlyc                    | j                         }t        t        |t                    5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  sJ 	 d d d        y # 1 sw Y   y xY wN)re    	
get_testfnr   r   r   rq   rx   ry   r'   r   r6   testfnr_   rN   s       r+   test_unix_tcpz$TestUnconnectedSockets.test_unix_tcp   o    "%f;?@ 	3D$$T*D::###;;&"2"2222	3 	3 	3   AA77B c                    | j                         }t        t        |t                    5 }| j	                  |      }|j
                  dk(  sJ |j                  t        j                  k(  s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__ra   rq   r|   r   rV   rW   r   r   r   r   r   r   r   rF   r-   r+   rY   rY   i   s    E<5 [[MO+4HI5 J53 [[MO+4HI3 J3 [[E	,73 83 [[E	,73 83r-   rY   c                       e Zd ZdZej
                  j                  ed      d        Zej
                  j                  e	 d      d        Z
y)TestConnectedSocketzFTest socket pairs which are actually connected to
    each other.
    zunreliable on SUONSrJ   c                    d}t        d      g k(  sJ t        t        |      \  }}	 t        d      }t        |      dk(  sJ |d   j                  t
        j                  k(  sJ |d   j                  t
        j                  k(  sJ 	 |j                          |j                          y # |j                          |j                          w xY w)Nrt   tcp4r#   rv   rc   r   r[   )r,   r   r   r^   ry   r'   CONN_ESTABLISHEDclose)r6   rw   serverclientr*   s        r+   test_tcpzTestConnectedSocket.test_tcp   s    (f5;;;'d;	,&9Dt9>!>7>>V%<%<<<<7>>V%<%<<<< LLNLLN LLNLLNs   A B+ +"C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| }}t        |      dk(  sJ t        st        st        st        rM|d   j                  dk(  sJ |d   j                  dk(  sJ ||d   j                  xs |d   j                  k(  s'J |d   j                  xs |d   j                  |k(  sJ |j                          |j                          y c c}w # |j                          |j                          w xY w)Nr&   r#   r   r[   z/var/run/logrc   r   )r   r   r,   rn   rx   r   r   r^   r	   r   r   r   )r6   r   r   r   r*   rA   s         r+   	test_unixzTestConnectedSocket.test_unix   sK   "(0	,&9DQ$q'-->$>8Q$q'-->$>8 $(Ea177n+DEEt9>!>5GAw}}***Aw}}***$q'--"@47==AAA Q6a6AAALLNLLN F LLNLLNs%   A&E! EEBE! E! !"FN)rC   rD   rE   r   r   rV   rW   r   r   r   r   rF   r-   r+   r   r      sZ     [[&;< =& [[E	,7 8r-   r   c                   6    e Zd Zd Z ee      d        Zd Zy)TestFiltersc                 R   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                     t        |       D ]"  }|j                  |v sJ |j                  |v r"J  t        s<t	        j
                  |       D ]"  }|j                  |v sJ |j                  |v r"J  y y )Nr#   )r,   rd   re   r   r'   r)   )r$   familiestypesrN   s       r+   checkz'TestFilters.test_filters.<locals>.check  s    1t< *{{h...yyE)))*  "22= .D;;(22299---.  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    	.  	(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 ]*  }|j'                         }t)        |      d
k(  sJ |D ]  }|j*                  |	j*                  k(  r& |||t        t,        |
dt         j.                  d       C|j*                  |j*                  k(  r& |||t        t0        |dt         j2                  d       |j*                  t5        |dd       k(  r& |||t        t,        |dt         j.                  d       |j*                  t5        |dd       k(  s |||t        t0        |dt         j2                  d        - y )Nc                 j   d}t        |       |j                  |k(  sJ |j                  |k(  sJ |j                  |k(  sJ |j                  |k(  sJ |j
                  |k(  sJ |D ]'  }	| j                  |	      }
|	|v r|
g k7  rJ |
g k(  r'J  t        rj                  | j                  |g       y y )N)
r%   r   r   inet6r   r   r   r   r   r   r#   )
r   rd   re   rn   rx   ry   r)   r   rB   r=   )procrN   rd   re   rn   rx   ry   kinds	all_kindsr$   r*   r6   s              r+   
check_connz+TestFilters.test_combos.<locals>.check_conn#  s    I $D);;&(((99$$$::&&&::&&&;;&(((! &+++65=2:%:2:%:& (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)]
            )dirru   )rd   rw   r   r   T)deleter[   rF   )r%   r   r   r   r   )r%   r   r   r   r   r=   )r%   r   r   r   r   )r%   r   r   r   r   )r   textwrapdedentro   pathbasenamer   getcwdformatintr   r   pyrunevalr    r   r'   r(   childrenr)   r^   r=   r   rz   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*   rN   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t9>!> 055IMM)#!**?	 UUimm+"!((?	 UUgi== #!**?	 UUgi== "!((?	O03	r-   c                    t               5  t        d      }t        |      t               rdndk(  sJ |D ]1  }|j                  t
        t        hv sJ |j                  t        k(  r1J  t        d      }t        |      dk(  sJ |d   j                  t
        k(  sJ |d   j                  t        k(  sJ t               rLt        d      }t        |      dk(  sJ |d   j                  t        k(  sJ |d   j                  t        k(  sJ t        d      }t        |      t               rdndk(  sJ |D ]1  }|j                  t
        t        hv sJ |j                  t        k(  r1J  t        d	      }t        |      dk(  sJ |d   j                  t
        k(  sJ |d   j                  t        k(  sJ t               rLt        d
      }t        |      dk(  sJ |d   j                  t        k(  sJ |d   j                  t        k(  sJ t        d      }t        |      t               rdndk(  sJ |D ]6  }|j                  t
        t        hv sJ |j                  t        t        hv r6J  t               rRt        d      }t        |      dk(  sJ |D ]1  }|j                  t        k(  sJ |j                  t        t        hv r1J  t        r^t        sXt        sRt        d      }t        |      dk(  sJ |D ]1  }|j                  t        k(  sJ |j                  t        t        hv r1J  d d d        y # 1 sw Y   y xY w)Nr   r#   rc   r[   r   r   r   r   r   r   r      r   r&      )r   r,   r^   r   rd   r   r   re   r   r   r   r   r   r   )r6   r*   rN   s      r+   
test_countzTestFilters.test_count  s    7	B,%8Dt9mo1=== 0{{w&9999yyK///0 -&9Dt9>!>7>>W,,,7<<;...0f=4yA~%~Aw~~111Aw||{222,%8Dt9mo1=== /{{w&9999yyJ.../ -&9Dt9>!>7>>W,,,7<<:---0f=4yA~%~Aw~~111Aw||z111,&9Dt9mo1=== >{{w&9999yy[*$====> 0g>4yA~%~  BD;;(22299j(AAAAB
 (F0f=4yA~%~  BD;;'11199j(AAAABk7	B 7	B 7	Bs.   AL8'C?L8'DL8,AL8A#L8,L88MN)rC   rD   rE   r   r   r
   r   r   rF   r-   r+   r   r      s)    > 5)H *HT8Br-   r   rI   rJ   c                   0    e Zd ZdZd Z e       d        Zy)TestSystemWideConnectionszTests for net_connections().c                 *   d }t               5  ddlm} |j                         D ]W  \  }}|dk(  rt        s|\  }}t        j                  |      }t        |      t        t        |            k(  sJ  ||||       Y 	 d d d        y # 1 sw Y   y xY w)Nc                     | D ]@  }|j                   |v sJ |j                   t        k7  r|j                  |v sJ t        |       B y )N)rd   r   re   r   )r*   r   types_rN   s       r+   r   z0TestSystemWideConnections.test_it.<locals>.check  sI     .{{h...;;')99...'-	.r-   r   )	conn_tmapr&   )	r   psutil._commonr   itemsr   r'   r)   r^   set)r6   r   r   r$   groupsr   r   r*   s           r+   test_itz!TestSystemWideConnections.test_it  s    	.  
	.0 ) 1 .f6>*B#) &--d34yCD	N222dHf-.
	. 
	. 
	.s   A1B		Bc                    t               5 }t        |      }d d d        g }d}g }t        |      D ]h  }| j                         }|j	                  |       t        j                  d| d      }| j                  |      }	|j	                  |	j                         j |D ]  }t        |        t        j                  d      D 
cg c]  }
|
j                  |v s|
 }}
|D ]d  }t        |D 
cg c]  }
|
j                  |k(  s|
 c}
      k(  sJ t        j                  |      }t        |j                  d            |k(  rdJ  y # 1 sw Y   4xY wc c}
w c c}
w )N
   z                import time, os
                from psutil.tests import create_sockets
                with create_sockets():
                    with open(r'z', '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)   r(   )r6   socksexpectedpidstimesfnames_fnamesrcsprocxsysconsr=   r   s                 r+   test_multi_sockets_procsz2TestSystemWideConnections.test_multi_sockets_procs  s_     	"5zH	"u 	#AOO%EMM% // '! "' (	# C JJsOEKK		"	#  	!E% 	! --59
QUUd]A
 
  	=C7;aaeesl;<HHHs#Aq((/0H<<<	=5	" 	".
 <s#   E	EE-E
E
	EN)rC   rD   rE   r   r   r   r   rF   r-   r+   r   r     s!    &.( $= $=r-   r   c                       e Zd Zd Zy)TestMiscc                    g }g }t        t              D ]x  }|j                  d      st        t        |      }t	        |      }|j                         sJ |       t        |vsJ ||vsJ |j                  |       |j                  |       z t        r t        j                   t        j                   t        rt        j                   y y )NCONN_)r   r'   
startswithr   strisupperr   r   	CONN_IDLE
CONN_BOUNDr   CONN_DELETE_TCB)r6   intsstrsr/   numstr_s         r+   test_net_connection_constantsz&TestMisc.test_net_connection_constants&  s    K 	"Dw'fd+3x||~+t+~$&$&C D!	" "" r-   N)rC   rD   rE   r  rF   r-   r+   r   r   %  s    #r-   r   )4r   ro   rg   r   
contextlibr   r   r   r   r   r'   r   r	   r
   r   r   r   r   r   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   objectr!   r,   rV   xdist_groupr1   rH   rY   r   r   rW   r   r   rF   r-   r+   <module>r     ss   M 	                 (   1 % ' $ ) 0 ' 4  & ) . ' ( & !168< h'% % (%:/, /& h'Z3/ Z3 (Z3z h'4, 4 (4ncB$ cBL L9<= 2 <= :<=~#~ #r-   