<!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>
B
    =_S                 @   sr  d Z ddl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) Z*e+ed"e, Z-ej.dd# d$kZ/e"G d%d& d&eZ0G d'd( d(e0Z1e"G d)d* d*e0Z2e"G d+d, d,e0Z3G d-d. d.e0Z4e&5e$d/G d0d1 d1e0Z6G d2d3 d3eZ7e8d4krndd5l9m:Z: e:e; dS )6z;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)bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)HAS_CONNECTIONS_UNIX)PsutilTestCase)reap_children)retry_on_failure)	serialrun)skip_on_access_denied)SKIP_SYSCONS)tcp_socketpair)unittest)unix_socketpair)wait_for_fileSOCK_SEQPACKET   )   	   c               @   s&   e Zd Zdd Zdd Zd	ddZdS )
ConnectionTestCasec             C   s$   t s ts tjdd}|r t|d S )Nall)kind)r
   r   thisprocconnectionsAssertionError)selfcons r-   P/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_connections.pysetUp8   s    zConnectionTestCase.setUpc             C   s$   t s ts tjdd}|r t|d S )Nr&   )r'   )r   r
   r(   r)   r*   )r+   r,   r-   r-   r.   tearDown>   s    zConnectionTestCase.tearDownr&   c                sd   yt j|d}W n  t jk
r0   tr*dS  Y nX  fd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                s"   g | ]}|j  kr|d d qS )N)pid).0c)r2   r-   r.   
<listcomp>T   s    zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>)psutilnet_connectionsAccessDeniedr	   sortassertEqual)r+   r2   Z	proc_consr'   Zsys_consr-   )r2   r.   compare_procsys_connectionsE   s    z.ConnectionTestCase.compare_procsys_connectionsN)r&   )__name__
__module____qualname__r/   r0   r;   r-   r-   r-   r.   r%   5   s   r%   c               @   s0   e Zd Zeeddd Zdd Zdd ZdS )	TestBasicOperationszrequires rootc          	   C   s4   t  $ xtjddD ]}t| qW W d Q R X d S )Nr&   )r'   )r   r6   r7   r   )r+   connr-   r-   r.   test_system\   s    zTestBasicOperations.test_systemc          	   C   s8   t  ( x t jddD ]}t| qW W d Q R X d S )Nr&   )r'   )r   r6   Processr)   r   )r+   r@   r-   r-   r.   test_processb   s    z TestBasicOperations.test_processc             C   s(   | j ttjdd | j ttjdd d S )Nz???)r'   )ZassertRaises
ValueErrorr(   r)   r6   r7   )r+   r-   r-   r.   test_invalid_kindg   s    z%TestBasicOperations.test_invalid_kindN)	r<   r=   r>   r   skipIfr   rA   rC   rE   r-   r-   r-   r.   r?   Z   s   r?   c               @   s   e Zd ZdZdd Zdd Zdd Zee	  dd	d
 Z
dd Zee	  ddd Zee ddd Zee ddd ZdS )TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c             C   sv   t jdd}tdd |D }ts&tr2||  S | t|d |d jdkrj| ||  j|  |d S d S )Nr&   )r'   c             S   s   g | ]}|j |fqS r-   )fd)r3   r4   r-   r-   r.   r5   r   s    z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<listcomp>   r   r1   )	r(   r)   dictr
   r   filenor:   lenrH   )r+   sockr,   Zsmapr-   r-   r.   get_conn_from_sockp   s    z)TestUnconnectedSockets.get_conn_from_sockc             C   s   |  |}t| |jdkr.| |j|  | |j|j | |j|tj	tj
 | }|sztrzt|trz| }|jtkr|dd }|jtkrtrn| |j| |jtkrtrtjdd}| jt |d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).
        r1   Nr"   r&   )r'   )rN   r   rH   r:   rK   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsocknamer   
isinstancebytesdecoder   r   r   laddrr   r(   r)   r;   osgetpid)r+   rM   r@   rY   r,   r-   r-   r.   check_socket}   s&    


z#TestUnconnectedSockets.check_socketc          	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W d Q R X d S )N)z	127.0.0.1r   )addr)r   r   r   r   r\   raddrr*   r:   statusr6   CONN_LISTEN)r+   r]   rM   r@   r-   r-   r.   test_tcp_v4   s
    

z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedc          	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W d Q R X d S )N)z::1r   )r]   )r   r   r   r   r\   r^   r*   r:   r_   r6   r`   )r+   r]   rM   r@   r-   r-   r.   test_tcp_v6   s
    

z"TestUnconnectedSockets.test_tcp_v6c          	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W d Q R X d S )N)z	127.0.0.1r   )r]   )r   r   r   r   r\   r^   r*   r:   r_   r6   	CONN_NONE)r+   r]   rM   r@   r-   r-   r.   test_udp_v4   s
    

z"TestUnconnectedSockets.test_udp_v4c          	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W d Q R X d S )N)z::1r   )r]   )r   r   r   r   r\   r^   r*   r:   r_   r6   rc   )r+   r]   rM   r@   r-   r-   r.   test_udp_v6   s
    

z"TestUnconnectedSockets.test_udp_v6z
POSIX onlyc          	   C   sL   |   }tt|td*}| |}|jr.t| |jt	j
 W d Q R X d S )N)rP   )
get_testfnr   r   r   r\   r^   r*   r:   r_   r6   rc   )r+   testfnrM   r@   r-   r-   r.   test_unix_tcp   s
    

z$TestUnconnectedSockets.test_unix_tcpc          	   C   sL   |   }tt|td*}| |}|jr.t| |jt	j
 W d Q R X d S )N)rP   )rf   r   r   r   r\   r^   r*   r:   r_   r6   rc   )r+   rg   rM   r@   r-   r-   r.   test_unix_udp   s
    

z$TestUnconnectedSockets.test_unix_udpN)r<   r=   r>   __doc__rN   r\   ra   r   rF   r   rb   rd   re   r   rh   ri   r-   r-   r-   r.   rG   l   s   #rG   c               @   s:   e Zd ZdZeeddd Zee ddd Z	dS )	TestConnectedSocketzJTest socket pairs which are are actually connected to
    each other.
    zunreliable on SUONSc             C   s   d}t jddrttt|d\}}zHt jdd}| t|d | |d jtj	 | |d jtj	 W d |
  |
  X d S )N)z	127.0.0.1r   tcp4)r'   )r]   r"   r   rI   )r(   r)   r*   r   r   r:   rL   r_   r6   CONN_ESTABLISHEDclose)r+   r]   serverclientr,   r-   r-   r.   test_tcp   s    zTestConnectedSocket.test_tcpz
POSIX onlyc             C   sd  |   }t|\}}z6tjdd}|d jr<|d jr<t|d jrT|d jrTtts\trjdd |D }| j	t
|d|d tststr| 	|d jd	 | 	|d jd	 | 	||d jp|d j n~trxv|d j|d j|d j|d jfD ]}| 	|d	 qW n<| 	|d jp&|d j| | 	|d jpD|d j| W d |  |  X d S )
Nunix)r'   r   rI   c             S   s   g | ]}|j d kr|qS )z/var/run/log)r^   )r3   r4   r-   r-   r.   r5      s    z1TestConnectedSocket.test_unix.<locals>.<listcomp>r"   )msg )rf   r   r(   r)   rY   r^   r*   r
   r   r:   rL   r   r   r   rn   )r+   rg   ro   rp   r,   r]   r-   r-   r.   	test_unix   s*    "zTestConnectedSocket.test_unixN)
r<   r=   r>   rj   r   rF   r   rq   r   ru   r-   r-   r-   r.   rk      s   rk   c               @   s.   e Zd Zdd Zeeddd Zdd ZdS )	TestFiltersc          	      s    fdd}t   |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 W d Q R X d S )Nc                sl   x0t j| dD ] } |j|  |j| qW tshx0tj| dD ] } |j|  |j| qDW d S )N)r'   )r(   r)   assertInrO   rP   r   r6   r7   )r'   familiestypesr@   )r+   r-   r.   check  s    z'TestFilters.test_filters.<locals>.checkr&   inetinet4tcprl   tcp6udpudp4udp6rr   )r   r   r   r   r   r   r!   r   )r+   rz   r-   )r+   r.   test_filters  sB    	

zTestFilters.test_filters)Zonly_ifc                s  t    fdd}td}td}tj jt d}|jt	t
d|d}|jt	t
d|d}|jt	td|d}|jt	td|d} |}	tt|d	d
}
 |}tt|d	d
}t r |}tt|d	d
} |}tt|d	d
}nd }d }d }d }xt D ]}| } t|d x|D ]}|j|	jkrf|||t
t|
dtjd n|j|jkr|||t
t|dtjd nZ|jt|dd kr|||tt|dtjd n,|jt|dd kr:|||tt|dtjd q:W qW d S )Nc                s   d}t |  |j|  |j|  |j|  |j|  |j| x6|D ].}	| j|	d}
|	|krz|
stqX|
rXt|
qXW t	r 
| j|g d S )N)
r&   r{   r|   inet6r}   rl   r~   r   r   r   )r'   )r   r:   rO   rP   rY   r^   r_   r)   r*   r   r;   r2   )procr@   rO   rP   rY   r^   r_   ZkindsZ	all_kindsr'   r,   )r+   r-   r.   
check_conn>  s    

z+TestFilters.test_combos.<locals>.check_conna  
            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)
            )dirz	127.0.0.1)rO   r]   rg   z::1T)deleterI   r-   )r&   r{   r|   r}   rl   )r&   r{   r|   r   r   r2   )r&   r{   r   r}   r~   )r&   r{   r   r   r   )r   textwrapdedentrZ   pathbasenamerf   getcwdformatintr   r   pyrunevalr    r   r(   childrenr)   r:   rL   r2   r   r6   r`   r   rc   getattr)r+   r   Ztcp_templateZudp_templateZ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,   r@   r-   )r+   r.   test_combos:  s`    




zTestFilters.test_combosc          	   C   s  t   tjdd}| t|t r*dnd x,|D ]$}| |jtt	f | |j
t q6W tjdd}| t|d | |d jt | |d j
t t rtjdd}| t|d | |d jt	 | |d j
t tjdd}| t|t rdnd x.|D ]&}| |jtt	f | |j
t qW tjd	d}| t|d | |d jt | |d j
t t rtjd
d}| t|d | |d jt	 | |d j
t tjdd}| t|t rdnd x2|D ]*}| |jtt	f | |j
ttf qW t rttjdd}| t|d x.|D ]&}| |jt	 | |j
ttf qJW trtststjdd}| t|d x.|D ]&}| |jt | |j
ttf qW W d Q R X d S )Nr}   )r'   r"   rI   rl   r   r~   r   r   r   r{      r   rr   r#   )r   r(   r)   r:   rL   r   rw   rO   r   r   rP   r   r   r   r   r
   r   )r+   r,   r@   r-   r-   r.   
test_count  s\    





zTestFilters.test_countN)r<   r=   r>   r   r   r	   r   r   r-   r-   r-   r.   rv     s   +arv   zrequires rootc               @   s&   e Zd ZdZdd Ze dd ZdS )TestSystemWideConnectionszTests for net_connections().c          	      s    fdd}t  l ddlm} xX| D ]L\}}|dkr@ts@q*|\}}t|} t|tt	| |||| q*W W d Q R X d S )Nc                sH   xB| D ]:} j |j||d |jtkr8 j |j||d t| qW d S )N)rs   )rw   rO   r   rP   r   )r,   rx   types_r@   )r+   r-   r.   rz     s
    

z0TestSystemWideConnections.test_it.<locals>.checkr   )	conn_tmaprr   )
r   psutil._commonr   itemsr   r6   r7   r:   rL   set)r+   rz   r   r'   groupsrx   r   r,   r-   )r+   r.   test_it  s    
z!TestSystemWideConnections.test_itc          	      s   t  }t|}W d Q R X g d}g }xFt|D ]:}|  }|| td| }| |}|j q0W x|D ]}t	| qtW fddt
jddD }	xJD ]B | t fdd|	D | t
 }
| t|
d| qW 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                s   g | ]}|j  kr|qS r-   )r2   )r3   x)pidsr-   r.   r5     s    zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r&   )r'   c                s   g | ]}|j  kr|qS r-   )r2   )r3   r   )r2   r-   r.   r5     s    )r   rL   rangerf   appendr   r   r   r2   r    r6   r7   r:   rB   r)   )r+   ZsocksZexpectedtimesfnamesifnamesrcZsprocZsysconsr   r-   )r2   r   r.   test_multi_sockets_procs  s(    





z2TestSystemWideConnections.test_multi_sockets_procsN)r<   r=   r>   rj   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 ]\}|drtt|}t|}| sBt|| t| | || || || qW t	rtj
 tj trtj d S )NZCONN_)r   r6   
startswithr   strisupperr*   ZassertNotInr   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r+   intsstrsnamenumZstr_r-   r-   r.   test_connection_constants  s     


z"TestMisc.test_connection_constantsN)r<   r=   r>   r   r-   r-   r-   r.   r     s   r   __main__)run_from_name)<rj   rZ   rR   sysr   
contextlibr   r   r   r   r   r6   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    rB   r(   r   objectr!   version_infoZ	PYTHON_39r%   r?   rG   rk   rv   rF   r   r   r<   Zpsutil.tests.runnerr   __file__r-   r-   r-   r.   <module>   sl   $b= J>
