<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZP                 @   s8  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' dd"lm(Z( dd#lm)Z) dd$lm*Z* e
j+ Z,G d%d& d&e-Z.G d'd( d(e.e'j/Z0G d)d* d*e.e'j/Z1G d+d, d,e.e'j/Z2G d-d. d.e'j/Z3e4d/kr4e!e5 dS )0z;Tests for net_connections() and Process.connections() APIs.    N)closing)AF_INET)AF_INET6)
SOCK_DGRAM)SOCK_STREAM)FREEBSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)supports_ipv6)PY3)AF_UNIX)bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)get_free_port)HAS_CONNECTIONS_UNIX)pyrun)reap_children)run_test_module_by_name)safe_rmpath)skip_on_access_denied)tcp_socketpair)TESTFN)TRAVIS)unittest)unix_socket_path)unix_socketpair)wait_for_filec               @   s8   e Zd Zdd Zdd Zdd Zddd	ZdddZdS )Basec             C   s   t stjdd}d S )Nall)kind)r	   thisprocconnections)selfcons r+   (/usr/lib64/python3.6/test_connections.pysetUp6   s    z
Base.setUpc             C   s"   t t t  tstjdd}d S )Nr%   )r&   )r   r   r   r	   r'   r(   )r)   r*   r+   r+   r,   tearDown<   s
    zBase.tearDownc             C   sr   t jdd}tdd |D }tr.||j  S | jt|d |d jdkrf| j||j  j|j  |d S d S )Nr%   )r&   c             S   s   g | ]}|j |fqS r+   )fd).0cr+   r+   r,   
<listcomp>G   s    z+Base.get_conn_from_sock.<locals>.<listcomp>   r   )r'   r(   dictr	   filenoassertEquallenr/   )r)   sockr*   Zsmapr+   r+   r,   get_conn_from_sockE   s    zBase.get_conn_from_sockNc             C   s   |dkr| j |}t| |jdkr6| j|j|j  | j|j|j | j|j|jtj	tj
 |j }| rtrt|tr|j }|jtkr|dd }|jtkrtrn| j|j| |jtkrtrtjdd}| jtj | |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).
        Nr3      r%   )r&   r4   )r:   r   r/   r7   r6   familytypeZ
getsockoptsocketZ
SOL_SOCKETZSO_TYPEZgetsocknamer   
isinstancebytesdecoder   r   r
   laddrr   r'   r(   compare_procsys_connectionsosgetpid)r)   r9   connrB   r*   r+   r+   r,   check_socketR   s(    


zBase.check_socketr%   c                sd   yt j|d}W n  t jk
r0   tr*dS  Y nX  fdd|D }|j  |j  | j|| dS )zGiven a process PID and its list of connections compare
        those against system-wide connections retrieved via
        psutil.net_connections.
        )r&   Nc                s"   g | ]}|j  kr|d d qS )Nr3   r4   )pid)r0   r1   )rH   r+   r,   r2      s    z4Base.compare_procsys_connections.<locals>.<listcomp>)psutilnet_connectionsZAccessDeniedr   sortr7   )r)   rH   Z	proc_consr&   Zsys_consr+   )rH   r,   rC   v   s    z Base.compare_procsys_connections)N)r%   )__name__
__module____qualname__r-   r.   r:   rG   rC   r+   r+   r+   r,   r$   4   s
   	
$r$   c               @   s|   e Zd ZdZdd Zeje  ddd Zdd Z	eje  dd	d
 Z
eje ddd Zeje ddd ZdS )TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c          
   C   sF   dt  f}tttt|d }| j|}| j|jtj	 W d Q R X d S )Nz	127.0.0.1)addr)
r   r   r   r   r   rG   r7   statusrI   CONN_LISTEN)r)   rP   r9   rF   r+   r+   r,   test_tcp_v4   s    

z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc          
   C   sF   dt  f}tttt|d }| j|}| j|jtj	 W d Q R X d S )Nz::1)rP   )
r   r   r   r   r   rG   r7   rQ   rI   rR   )r)   rP   r9   rF   r+   r+   r,   test_tcp_v6   s    

z"TestUnconnectedSockets.test_tcp_v6c          
   C   sF   dt  f}tttt|d }| j|}| j|jtj	 W d Q R X d S )Nz	127.0.0.1)rP   )
r   r   r   r   r   rG   r7   rQ   rI   	CONN_NONE)r)   rP   r9   rF   r+   r+   r,   test_udp_v4   s    

z"TestUnconnectedSockets.test_udp_v4c          
   C   sF   dt  f}tttt|d }| j|}| j|jtj	 W d Q R X d S )Nz::1)rP   )
r   r   r   r   r   rG   r7   rQ   rI   rU   )r)   rP   r9   rF   r+   r+   r,   test_udp_v6   s    

z"TestUnconnectedSockets.test_udp_v6z
POSIX onlyc             C   sL   t  <}tt|td }| j|}| j|jtj W d Q R X W d Q R X d S )N)r=   )	r!   r   r   r   rG   r7   rQ   rI   rU   )r)   namer9   rF   r+   r+   r,   test_unix_tcp   s    
z$TestUnconnectedSockets.test_unix_tcpc             C   sL   t  <}tt|td }| j|}| j|jtj W d Q R X W d Q R X d S )N)r=   )	r!   r   r   r   rG   r7   rQ   rI   rU   )r)   rX   r9   rF   r+   r+   r,   test_unix_udp   s    
z$TestUnconnectedSockets.test_unix_udpN)rL   rM   rN   __doc__rS   r    skipIfr   rT   rV   rW   r   rY   rZ   r+   r+   r+   r,   rO      s   rO   c               @   sT   e Zd ZdZejeddd Zeje ddd Z	e
edd	d
 Zdd ZdS )TestConnectedSocketPairszJTest socket pairs which are are actually connected to
    each other.
    zunreliable on SUONSc          
   C   sz   dt  f}tt|d\}}zHtjdd}| jt|d | j|d jtj	 | j|d jtj	 W d |j
  |j
  X d S )Nz	127.0.0.1)rP   tcp4)r&   r;   r   r3   )r   r   r   r'   r(   r7   r8   rQ   rI   ZCONN_ESTABLISHEDclose)r)   rP   serverclientr*   r+   r+   r,   test_tcp   s    
z!TestConnectedSocketPairs.test_tcpz
POSIX onlyc             C   s2  t   }t|\}}ztjdd}tr6dd |D }| jt|d tsRtsRt	r| j|d j
d | j|d j
d | j||d jp|d j nztrxt|d j|d j
|d j|d j
fD ]}| j|d qW n:| j|d jp|d j| | j|d j
p|d j
| W d |j  |j  X W d Q R X d S )	Nunix)r&   c             S   s   g | ]}|j d kr|qS )z/var/run/log)raddr)r0   r1   r+   r+   r,   r2      s    z6TestConnectedSocketPairs.test_unix.<locals>.<listcomp>r;   r    r3   )r!   r"   r'   r(   r	   r7   r8   r   r   r   rd   rB   r
   r_   )r)   rX   r`   ra   r*   rP   r+   r+   r,   	test_unix   s&    
"z"TestConnectedSocketPairs.test_unix)Zonly_ifc                s    fdd}t jd}t jd}ddlm} tjjt}||jt	t
d|d}||jt	t
d|d}||jt	td	|d}||jt	td	|d}	t|}
tt|}t|}tt|}t rt|}tt|}t|	}tt|}nd }d }d }d } xtj D  ]}|j } jt|d
 x|D ]}|j|
jkr\|||t
t|f tjd n|j|jkr|||t
t|f tjd nZ|jt|dd kr|||tt|f tjd n,|jt|dd kr0|||tt|f tjd q0W qW  jt|jdd d S )Nc          
      s   d}t |  j|j|  j|j|  j|j|  j|j|  j|j| x"|D ]}	| j|	d}
|	|krXqXqXW tr j	| j
|g d S )Nr%   inetinet4inet6tcpr^   tcp6udpudp4udp6)r&   )
r%   rg   rh   ri   rj   r^   rk   rl   rm   rn   )r   r7   r<   r=   rB   rd   rQ   r(   r   rC   rH   )procrF   r<   r=   rB   rd   rQ   ZkindsZ	all_kindsr&   r*   )r)   r+   r,   
check_conn  s     
z8TestConnectedSocketPairs.test_combos.<locals>.check_conna  
            import socket, time
            s = socket.socket($family, socket.SOCK_STREAM)
            s.bind(('$addr', 0))
            s.listen(1)
            with open('$testfn', 'w') as f:
                f.write(str(s.getsockname()[:2]))
            time.sleep(60)
        z
            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)
        r   )Templatez	127.0.0.1)r<   rP   Ztestfnz::1r3   r%   rg   rh   rj   r^   rl   rm   rH   ri   rk   rn   z???)r&   )r%   rg   rh   rj   r^   )r%   rg   rh   rl   rm   )r%   rg   ri   rj   rk   )r%   rg   ri   rl   rn   )textwrapdedentstringrq   rD   pathbasenamer   Z
substituteintr   r   r   evalr#   r   r'   Zchildrenr(   r7   r8   rH   r   rI   rR   r   rU   getattrassertRaises
ValueError)r)   rp   Ztcp_templateZudp_templaterq   ZtestfileZtcp4_templateZudp4_templateZtcp6_templateZudp6_templateZ	tcp4_procZ	tcp4_addrZ	udp4_procZ	udp4_addrZ	tcp6_procZ	tcp6_addrZ	udp6_procZ	udp6_addrpr*   rF   r+   )r)   r,   test_combos  sb    
z$TestConnectedSocketPairs.test_combosc             C   s  t  }tjdd}| jt|t| tjdd}| jt|t rJdnd x,|D ]$}| j|jtt	f | j|j
t qVW tjdd}| jt|d | j|d jt | j|d j
t t rtjdd}| jt|d | j|d jt	 | j|d j
t tjd	d}| jt|t r(dnd x.|D ]&}| j|jtt	f | j|j
t q4W tjd
d}| jt|d | j|d jt | j|d j
t t rtjdd}| jt|d | j|d jt	 | j|d j
t tjdd}| jt|t rdnd x2|D ]*}| j|jtt	f | j|j
ttf qW t rtjdd}| jt|d x.|D ]&}| j|jt	 | j|j
ttf qlW trtjdd}| jt|d x.|D ]&}| j|jt | j|j
ttf qW W d Q R X d S )Nr%   )r&   rj   r;   r3   r^   r   rk   rl   rm   rn   rg      ri   rc      )r   r'   r(   r7   r8   r   assertInr<   r   r   r=   r   r   r   r   )r)   socksr*   rF   r+   r+   r,   test_multi_sockets_filteringe  s`    





z5TestConnectedSocketPairs.test_multi_sockets_filteringN)rL   rM   rN   r[   r    r\   r   rb   r   rf   r   r   r}   r   r+   r+   r+   r,   r]      s
   !br]   c               @   sJ   e Zd ZdZe dd Ze dd Ze eje	o6e
ddd Zd	S )
TestSystemWideConnectionszTests for net_connections().c                s    fdd}t   ddlm} xZ|j D ]N\}}|dkrBt rBq*|\}}tj|} jt|tt	| |||| q*W  j
ttjdd W d Q R X d S )Nc                sV   t tdt }xB| D ]:} j|j||d |j|krF j|j||d t| qW d S )Nr   )msg)ry   r>   objectr   r<   r=   r   )r*   familiestypes_r   rF   )r)   r+   r,   check  s    

z0TestSystemWideConnections.test_it.<locals>.checkr   )	conn_tmaprc   z???)r&   )r   psutil._commonr   itemsr   rI   rJ   r7   r8   setrz   r{   )r)   r   r   r&   groupsr   r   r*   r+   )r)   r,   test_it  s    
z!TestSystemWideConnections.test_itc             C   s@   t  0}dd tjddD }| jt|t| W d Q R X d S )Nc             S   s   g | ]}|j tj kr|qS r+   )rH   rD   rE   )r0   xr+   r+   r,   r2     s    z>TestSystemWideConnections.test_multi_socks.<locals>.<listcomp>r%   )r&   )r   rI   rJ   r7   r8   )r)   r   r*   r+   r+   r,   test_multi_socks  s    z*TestSystemWideConnections.test_multi_sockszunreliable on OSX + TRAVISc       
         s  t  }t|}W d Q R X g d}xRt|D ]F}tjjtt| }tj	d| }t
|}j|j | jt| q,W x$t|D ]}tt| }t| qW fddtjddD }xJD ]B | jt fdd|D | tj }	| jt|	jd| qW d S )N
   a                  import time, os
                from psutil.tests import create_sockets
                with create_sockets():
                    with open('%s', 'w') as f:
                        f.write(str(os.getpid()))
                    time.sleep(60)
                c                s   g | ]}|j  kr|qS r+   )rH   )r0   r   )pidsr+   r,   r2     s    zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r%   )r&   c                s   g | ]}|j  kr|qS r+   )rH   )r0   r   )rH   r+   r,   r2     s    )r   r8   rangerD   ru   realpathr   strrr   rs   r   appendrH   Z
addCleanupr   r#   rI   rJ   r7   Processr(   )
r)   r   ZexpectedtimesiZfnamesrcZsprocZsysconsr|   r+   )rH   r   r,   test_multi_sockets_procs  s(    



z2TestSystemWideConnections.test_multi_sockets_procsN)rL   rM   rN   r[   r   r   r   r    r\   r   r   r   r+   r+   r+   r,   r     s
   r   c               @   s   e Zd Zdd ZdS )TestMiscc             C   s   g }g }xXt tD ]L}|jdrtt|}t|}| jt| | j|| |j| |j| qW trrtj tj	 t
r|tj d S )NZCONN_)dirrI   
startswithry   r   ZassertNotInr   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r)   ZintsZstrsrX   ZnumZstr_r+   r+   r,   test_connection_constants  s    


z"TestMisc.test_connection_constantsN)rL   rM   rN   r   r+   r+   r+   r,   r     s   r   __main__)6r[   rD   r>   rr   
contextlibr   r   r   r   r   rI   r   r   r	   r
   r   r   r   r   r   r   Zpsutil._compatr   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r   r'   r   r$   ZTestCaserO   r]   r   r   rL   __file__r+   r+   r+   r,   <module>   s^   \7 `P
