<!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}| st|d S )Nall)kind)r	   thisprocconnectionsAssertionError)selfcons r,   (/usr/lib64/python3.6/test_connections.pysetUp6   s    z
Base.setUpc             C   s0   t t t  ts,tjdd}| s,t|d S )Nr%   )r&   )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lenr0   )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).
        Nr4      r%   )r&   r5   )r;   r   r0   r8   r7   familytypeZ
getsockoptsocketZ
SOL_SOCKETZSO_TYPEZgetsocknamer   
isinstancebytesdecoder   r   r
   laddrr   r'   r(   compare_procsys_connectionsosgetpid)r*   r:   connrC   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 )Nr4   r5   )pid)r1   r2   )rI   r,   r-   r3      s    z4Base.compare_procsys_connections.<locals>.<listcomp>)psutilnet_connectionsZAccessDeniedr   sortr8   )r*   rI   Z	proc_consr&   Zsys_consr,   )rI   r-   rD   v   s    z Base.compare_procsys_connections)N)r%   )__name__
__module____qualname__r.   r/   r;   rH   rD   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   sR   dt  f}tttt|d,}| j|}|j s4t| j|j	t
j W d Q R X d S )Nz	127.0.0.1)addr)r   r   r   r   r   rH   raddrr)   r8   statusrJ   CONN_LISTEN)r*   rQ   r:   rG   r,   r,   r-   test_tcp_v4   s
    

z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc          
   C   sR   dt  f}tttt|d,}| j|}|j s4t| j|j	t
j W d Q R X d S )Nz::1)rQ   )r   r   r   r   r   rH   rR   r)   r8   rS   rJ   rT   )r*   rQ   r:   rG   r,   r,   r-   test_tcp_v6   s
    

z"TestUnconnectedSockets.test_tcp_v6c          
   C   sR   dt  f}tttt|d,}| j|}|j s4t| j|j	t
j W d Q R X d S )Nz	127.0.0.1)rQ   )r   r   r   r   r   rH   rR   r)   r8   rS   rJ   	CONN_NONE)r*   rQ   r:   rG   r,   r,   r-   test_udp_v4   s
    

z"TestUnconnectedSockets.test_udp_v4c          
   C   sR   dt  f}tttt|d,}| j|}|j s4t| j|j	t
j W d Q R X d S )Nz::1)rQ   )r   r   r   r   r   rH   rR   r)   r8   rS   rJ   rW   )r*   rQ   r:   rG   r,   r,   r-   test_udp_v6   s
    

z"TestUnconnectedSockets.test_udp_v6z
POSIX onlyc             C   sX   t  H}tt|td,}| j|}|j s0t| j|jt	j
 W d Q R X W d Q R X d S )N)r>   )r!   r   r   r   rH   rR   r)   r8   rS   rJ   rW   )r*   namer:   rG   r,   r,   r-   test_unix_tcp   s
    
z$TestUnconnectedSockets.test_unix_tcpc             C   sX   t  H}tt|td,}| j|}|j s0t| j|jt	j
 W d Q R X W d Q R X d S )N)r>   )r!   r   r   r   rH   rR   r)   r8   rS   rJ   rW   )r*   rZ   r:   rG   r,   r,   r-   test_unix_udp   s
    
z$TestUnconnectedSockets.test_unix_udpN)rM   rN   rO   __doc__rU   r    skipIfr   rV   rX   rY   r   r[   r\   r,   r,   r,   r-   rP      s   rP   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   s   dt  f}tjdd st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tcp4)r&   )rQ   r<   r   r4   )r   r'   r(   r)   r   r   r8   r9   rS   rJ   ZCONN_ESTABLISHEDclose)r*   rQ   serverclientr+   r,   r,   r-   test_tcp   s    
z!TestConnectedSocketPairs.test_tcpz
POSIX onlyc             C   sl  t  Z}t|\}}z2tjdd}|d jo8|d j s@t|d joR|d j sZttrldd |D }| jt	|d t
ststr| j|d jd | j|d jd | j||d jp|d j n~trxv|d j|d j|d j|d jfD ]}| j|d qW n<| j|d jp$|d j| | j|d jpB|d j| W d |j  |j  X W d Q R X d S )	Nunix)r&   r   r4   c             S   s   g | ]}|j d kr|qS )z/var/run/log)rR   )r1   r2   r,   r,   r-   r3      s    z6TestConnectedSocketPairs.test_unix.<locals>.<listcomp>r<    )r!   r"   r'   r(   rC   rR   r)   r	   r8   r9   r   r   r   r
   ra   )r*   rZ   rb   rc   r+   rQ   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| x8|D ]0}	| j|	d}
|	|krz|
stqX|
 sXt|
qXW t	r j
| j|g d S )Nr%   inetinet4inet6tcpr`   tcp6udpudp4udp6)r&   )
r%   rh   ri   rj   rk   r`   rl   rm   rn   ro   )r   r8   r=   r>   rC   rR   rS   r(   r)   r   rD   rI   )procrG   r=   r>   rC   rR   rS   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=   rQ   Ztestfnz::1r4   r%   rh   ri   rk   r`   rm   rn   rI   rj   rl   ro   z???)r&   )r%   rh   ri   rk   r`   )r%   rh   ri   rm   rn   )r%   rh   rj   rk   rl   )r%   rh   rj   rm   ro   )textwrapdedentstringrr   rE   pathbasenamer   Z
substituteintr   r   r   evalr#   r   r'   Zchildrenr(   r8   r9   rI   r   rJ   rT   r   rW   getattrassertRaises
ValueError)r*   rq   Ztcp_templateZudp_templaterr   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+   rG   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&   rk   r<   r4   r`   r   rl   rm   rn   ro   rh      rj   re      )r   r'   r(   r8   r9   r   assertInr=   r   r   r>   r   r   r   r   )r*   socksr+   rG   r,   r,   r-   test_multi_sockets_filteringe  s`    





z5TestConnectedSocketPairs.test_multi_sockets_filteringN)rM   rN   rO   r]   r    r^   r   rd   r   rg   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)rz   r?   objectr   r=   r>   r   )r+   familiestypes_r   rG   )r*   r,   r-   check  s    

z0TestSystemWideConnections.test_it.<locals>.checkr   )	conn_tmapre   z???)r&   )r   psutil._commonr   itemsr   rJ   rK   r8   r9   setr{   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,   )rI   rE   rF   )r1   xr,   r,   r-   r3     s    z>TestSystemWideConnections.test_multi_socks.<locals>.<listcomp>r%   )r&   )r   rJ   rK   r8   r9   )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,   )rI   )r1   r   )pidsr,   r-   r3     s    zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r%   )r&   c                s   g | ]}|j  kr|qS r,   )rI   )r1   r   )rI   r,   r-   r3     s    )r   r9   rangerE   rv   realpathr   strrs   rt   r   appendrI   Z
addCleanupr   r#   rJ   rK   r8   Processr(   )
r*   r   ZexpectedtimesiZfnamesrcZsprocZsysconsr}   r,   )rI   r   r-   test_multi_sockets_procs  s(    



z2TestSystemWideConnections.test_multi_sockets_procsN)rM   rN   rO   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 }xht tD ]\}|jdrtt|}t|}|j sBt|| jt| | j|| |j| |j| qW t	rtj
 tj trtj d S )NZCONN_)dirrJ   
startswithrz   r   isupperr)   ZassertNotInr   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r*   ZintsZstrsrZ   ZnumZstr_r,   r,   r-   test_connection_constants  s     


z"TestMisc.test_connection_constantsN)rM   rN   rO   r   r,   r,   r,   r-   r     s   r   __main__)6r]   rE   r?   rs   
contextlibr   r   r   r   r   rJ   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TestCaserP   r_   r   r   rM   __file__r,   r,   r,   r-   <module>   s^   \7 `P
