
    gS                     T   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(ed" e)             Z*d# Z+e!jX                  j[                  d$%       G d& d'e             Z. G d( d)e.      Z/e!jX                  j[                  d$%       G d* d+e.             Z0e!jX                  j[                  d$%       G d, d-e.             Z1 G d. d/e.      Z2e!jX                  jg                  ed01       G d2 d3e.             Z4 G d4 d5e      Z5y)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)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     R/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_connections.pythis_proc_net_connectionsr-   2   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 r4   r5   r6   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)r7   r>   	proc_consr%   sys_conscs         r,   compare_procsys_connectionsz.ConnectionTestCase.compare_procsys_connectionsB   s    
	--48H %-=HqAcrFH=H$$$ "" 	 	 >s   A" BB"A?=A?N)r&   )__name__
__module____qualname__r8   r:   rC    r.   r,   r2   r2   9   s    ;;%r.   r2   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r4   )r   r(   r*   r   r7   conns     r,   test_systemzTestBasicOperations.test_systemX   s1    ..E:'- ; s	   '<Ac                 |    t               5  t        d      D ]  }t        |        	 d d d        y # 1 sw Y   y xY wr4   )r   r-   r   rN   s     r,   test_processz TestBasicOperations.test_process^   s+    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*   r6   s    r,   test_invalid_kindz%TestBasicOperations.test_invalid_kindc   sM    ]]:&%51 ']]:&"". '& '&&&s   A(A4(A14A=N)
rD   rE   rF   r   markskipifr   rP   rR   rV   rG   r.   r,   rI   rI   W   s2    [[_=. >.
.
/r.   rI   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                 Z   t        d      }t        |D cg c]  }|j                  |f c}      }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-   dictfdr   r   filenolen)r7   sockr+   rB   smaps        r,   get_conn_from_sockz)TestUnconnectedSockets.get_conn_from_sockn   s    (e4-1addAY-.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        r 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$   )rc   r   r^   r_   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsocknamer   
isinstancebytesdecoder   laddrr   r   r-   rC   osgetpid)r7   ra   rO   rp   r+   s        r,   check_socketz#TestUnconnectedSockets.check_socket{   s   
 &&t,% 77b=77dkkm+++{{dkk)))yyDOOF,=,=v~~NNNN   "E5!9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   addrrG   )	r   r   r   r   rs   raddrstatusr(   CONN_LISTENr7   ry   ra   rO   s       r,   test_tcp_v4z"TestUnconnectedSockets.test_tcp_v4   sa    [+DABd$$T*D::###;;&"4"4444 CBB   AA..A7zIPv6 not supportedrK   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   rx   rG   )	r   r   r   r   rs   rz   r{   r(   r|   r}   s       r,   test_tcp_v6z"TestUnconnectedSockets.test_tcp_v6   sa    [;TBCt$$T*D::###;;&"4"4444 DCCr   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ru   )	r   r   r   r   rs   rz   r{   r(   	CONN_NONEr}   s       r,   test_udp_v4z"TestUnconnectedSockets.test_udp_v4   sa    [*4@AT$$T*D::###;;&"2"2222 BAAr   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   rs   rz   r{   r(   r   r}   s       r,   test_udp_v6z"TestUnconnectedSockets.test_udp_v6   sa    [:DABd$$T*D::###;;&"2"2222 CBBr   
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)rg    	
get_testfnr   r   r   rs   rz   r{   r(   r   r7   testfnra   rO   s       r,   test_unix_tcpz$TestUnconnectedSockets.test_unix_tcp   g    "%f;?@D$$T*D::###;;&"2"2222 A@@   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)rD   rE   rF   __doc__rc   rs   r~   r   rW   rX   r   r   r   r   r   r   r   rG   r.   r,   rZ   rZ   j   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.   rZ   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 SUONSrK   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)Nrv   tcp4r$   rx   re   r   r\   )r-   r   r   r`   r{   r(   CONN_ESTABLISHEDclose)r7   ry   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/logre   r   )r   r    r-   rp   rz   r   r   r`   r	   r   r   r   )r7   r   r   r   r+   rB   s         r,   	test_unixzTestConnectedSocket.test_unix   sL   "(0	,&9DQ$q'-->$>8Q$q'-->$>8 $(E4a177n+D4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)rD   rE   rF   r   r   rW   rX   r   r   r   r   rG   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-   rf   rg   r   r(   r*   )r%   familiestypesrO   s       r,   checkz'TestFilters.test_filters.<locals>.check  sx    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   )r7   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   rf   rg   rp   rz   r{   r*   r   rC   r>   )procrO   rf   rg   rp   rz   r{   kinds	all_kindsr%   r+   r7   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)]
            )dirrw   )rf   ry   r   r   T)deleter\   rG   )r&   r   r   r   r   )r&   r   r   r   r   r>   )r&   r   r   r   r   )r&   r   r   r   r   )r   textwrapdedentrq   pathbasenamer   getcwdformatintr   r   pyrunevalr!   r   r(   r)   childrenr*   r`   r>   r   r|   r   r   getattr)r7   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+   rO   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!**,A$$&Dt9>!>55IMM)#!**?	 UUimm+"!((?	 UUgi== #!**?	 UUgi== "!((?	O  -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$   re   r\   r   r   r   r   r   r   r      r   r'      )r   r-   r`   r   rf   r   r   rg   r   r   r   r   r   r   )r7   r+   rO   s      r,   
test_countzTestFilters.test_count  s   ,%8Dt9mo1==={{w&9999yyK///  -&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~%~ D;;(22299j(AAAA !
 (F0f=4yA~%~ D;;'11199j(AAAA !k s.   AL8'C?L8'DL8,AL8A#L8,L88MN)rD   rE   rF   r   r   r
   r   r   rG   r.   r,   r   r      s)    > 5)H *HT8Br.   r   rJ   rK   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)rf   r   rg   r   )r+   r   types_rO   s       r,   r   z0TestSystemWideConnections.test_it.<locals>.check  sD    {{h...;;')99...'-	 r.   r   )	conn_tmapr'   )	r   psutil._commonr   itemsr   r(   r*   r`   set)r7   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- !2 s   A1B		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 ]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   3x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*   r)   )r7   socksexpectedpidstimesfnames_fnamesrcsprocxsysconsr>   r   s                 r,   test_multi_sockets_procsz2TestSystemWideConnections.test_multi_sockets_procs  sI    5zH uAOO%EMM% // # # C JJsOEKK		"  E%   --59
9!QUUd]A9 	 
 C7;7aaeesl7;<HHHs#Aq((/0H<<< 5 .
 <s#   EEE,E
E
EN)rD   rE   rF   r   r   r   r   rG   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)r7   intsstrsr0   numstr_s         r,   test_net_connection_constantsz&TestMisc.test_net_connection_constants'  s    KDw'fd+3x||~+t+~$&$&C D!   "" r.   N)rD   rE   rF   r  rG   r.   r,   r   r   &  s    #r.   r   )6r   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!   r   objectr"   r-   rW   xdist_groupr2   rI   rZ   r   r   rX   r   r   rG   r.   r,   <module>r
     sv   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.   