
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    =_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 r0   P/opt/alt/python38/lib64/python3.8/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 r&   )r   r
   r*   r+   r,   r-   r0   r0   r1   tearDown>   s    zConnectionTestCase.tearDownr'   c                    sf   zt j|d}W n" t jk
r2   tr,Y 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cr5   r0   r1   
<listcomp>T   s     
 zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>)psutilnet_connectionsAccessDeniedr	   sortassertEqual)r.   r6   Z	proc_consr)   Zsys_consr0   r5   r1   compare_procsys_connectionsE   s    z.ConnectionTestCase.compare_procsys_connectionsN)r'   )__name__
__module____qualname__r2   r3   r@   r0   r0   r0   r1   r%   5   s   r%   c                   @   s0   e Zd Zeeddd Zdd Zdd ZdS )	TestBasicOperationsrequires rootc              	   C   s0   t    tjddD ]}t| qW 5 Q R X d S r&   )r   r;   r<   r   r.   connr0   r0   r1   test_system\   s    zTestBasicOperations.test_systemc              	   C   s4   t  $ t jddD ]}t| qW 5 Q R X d S r&   )r   r;   Processr+   r   rF   r0   r0   r1   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+   r;   r<   r.   r0   r0   r1   test_invalid_kindg   s    z%TestBasicOperations.test_invalid_kindN)	rA   rB   rC   r   skipIfr   rH   rJ   rM   r0   r0   r0   r1   rD   Z   s   

rD   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 r0   )fdr7   r0   r0   r1   r:   r   s     z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<listcomp>   r   r4   )	r*   r+   dictr
   r   filenor?   lenrP   )r.   sockr/   Zsmapr0   r0   r1   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).
        r4   Nr"   r'   r(   )rV   r   rP   r?   rS   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsocknamer   
isinstancebytesdecoder   r   r   laddrr   r*   r+   r@   osgetpid)r.   rU   rG   ra   r/   r0   r0   r1   check_socket}   s*    

 
z#TestUnconnectedSockets.check_socketc              	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W 5 Q R X d S N	127.0.0.1r   addr)r   r   r   r   rd   raddrr,   r?   statusr;   CONN_LISTENr.   ri   rU   rG   r0   r0   r1   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 5 Q R X d S N)::1r   rh   )r   r   r   r   rd   rj   r,   r?   rk   r;   rl   rm   r0   r0   r1   test_tcp_v6   s
    

z"TestUnconnectedSockets.test_tcp_v6c              	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W 5 Q R X d S re   )r   r   r   r   rd   rj   r,   r?   rk   r;   	CONN_NONErm   r0   r0   r1   test_udp_v4   s
    

z"TestUnconnectedSockets.test_udp_v4c              	   C   sJ   d}t ttt|d*}| |}|jr,t| |jt	j
 W 5 Q R X d S ro   )r   r   r   r   rd   rj   r,   r?   rk   r;   rr   rm   r0   r0   r1   test_udp_v6   s
    

z"TestUnconnectedSockets.test_udp_v6
POSIX onlyc              	   C   sL   |   }tt|td*}| |}|jr.t| |jt	j
 W 5 Q R X d S N)rX   
get_testfnr   r   r   rd   rj   r,   r?   rk   r;   rr   r.   testfnrU   rG   r0   r0   r1   test_unix_tcp   s
    

z$TestUnconnectedSockets.test_unix_tcpc              	   C   sL   |   }tt|td*}| |}|jr.t| |jt	j
 W 5 Q R X d S rv   rw   ry   r0   r0   r1   test_unix_udp   s
    

z$TestUnconnectedSockets.test_unix_udpN)rA   rB   rC   __doc__rV   rd   rn   r   rN   r   rq   rs   rt   r   r{   r|   r0   r0   r0   r1   rO   l   s   #


rO   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 5 |  |  X d S )Nrf   tcp4r(   rh   r"   r   rQ   )r*   r+   r,   r   r   closer?   rT   rk   r;   CONN_ESTABLISHED)r.   ri   serverclientr/   r0   r0   r1   test_tcp   s    zTestConnectedSocket.test_tcpru   c                 C   s`  |   }t|\}}z2t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 nztr
|d j|d j|d j|d jfD ]}| 
|d	 qn<| 
|d jp"|d j| | 
|d jp@|d j| W 5 |  |  X d S )
Nunixr(   r   rQ   c                 S   s   g | ]}|j d kr|qS )z/var/run/log)rj   r7   r0   r0   r1   r:      s     
 z1TestConnectedSocket.test_unix.<locals>.<listcomp>r"   msg )rx   r   r   r*   r+   ra   rj   r,   r
   r   r?   rT   r   r   r   )r.   rz   r   r   r/   ri   r0   r0   r1   	test_unix   s.     "zTestConnectedSocket.test_unixN)
rA   rB   rC   r}   r   rN   r   r   r   r   r0   r0   r0   r1   r~      s
   

r~   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 5 Q R X d S )Nc                    sd   t j| dD ] } |j|  |j| qts`tj| dD ] } |j|  |j| q>d S )Nr(   )r*   r+   assertInrW   rX   r   r;   r<   )r)   familiestypesrG   rL   r0   r1   check  s    z'TestFilters.test_filters.<locals>.checkr'   inetinet4tcpr   tcp6udpudp4udp6r   )r   r   r   r   r   r   r!   r   )r.   r   r0   rL   r1   test_filters  sV    	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 }t D ]}| } t|d |D ]}|j|	jkrb|||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r6|||tt|dtjd q6qd S )Nc                    s   d}t |  |j|  |j|  |j|  |j|  |j| |D ].}	| j|	d}
|	|krx|
stqV|
rVt|
qVt	r 
| j|g d S )N)
r'   r   r   inet6r   r   r   r   r   r   r(   )r   r?   rW   rX   ra   rj   rk   r+   r,   r   r@   r6   )procrG   rW   rX   ra   rj   rk   ZkindsZ	all_kindsr)   r/   rL   r0   r1   
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)
            )dirrg   )rW   ri   rz   rp   T)deleterQ   r0   )r'   r   r   r   r   )r'   r   r   r   r   r6   )r'   r   r   r   r   )r'   r   r   r   r   )r   textwrapdedentrb   pathbasenamerx   getcwdformatintr   r   pyrunevalr    r   r*   childrenr+   r?   rT   r6   r   r;   rl   r   rr   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/   rG   r0   rL   r1   test_combos:  s|    



        



zTestFilters.test_combosc              	   C   s  t   tjdd}| t|t r*dnd |D ]$}| |jtt	f | |j
t q4t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 |D ]&}| |jtt	f | |j
t q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 |D ]*}| |jtt	f | |j
ttf qt rdtjdd}| t|d |D ]&}| |jt	 | |j
ttf q<trtststjdd}| t|d |D ]&}| |jt | |j
ttf qW 5 Q R X d S )Nr   r(   r"   rQ   r   r   r   r   r   r   r      r   r   r#   )r   r*   r+   r?   rT   r   r   rW   r   r   rX   r   r   r   r   r
   r   )r.   r/   rG   r0   r0   r1   
test_count  s\    
zTestFilters.test_countN)rA   rB   rC   r   r   r	   r   r   r0   r0   r0   r1   r     s   +
`r   rE   c                   @   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  h ddlm} | D ]L\}}|dkr>ts>q(|\}}t|} t|tt	| |||| q(W 5 Q R X d S )Nc                    sD   | D ]:} j |j||d |jtkr6 j |j||d t| qd S )Nr   )r   rW   r   rX   r   )r/   r   types_rG   rL   r0   r1   r     s
    
z0TestSystemWideConnections.test_it.<locals>.checkr   )	conn_tmapr   )
r   psutil._commonr   itemsr   r;   r<   r?   rT   set)r.   r   r   r)   groupsr   r   r/   r0   rL   r1   test_it  s    
z!TestSystemWideConnections.test_itc              	      s   t  }t|}W 5 Q R X g d}g }t|D ]:}|  }|| td| }| |}|j q.|D ]}t	| qnfddt
jddD }	D ]B | t fdd|	D | t
 }
| t|
d| qd 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 r0   r5   r8   x)pidsr0   r1   r:     s
      zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r'   r(   c                    s   g | ]}|j  kr|qS r0   r5   r   r5   r0   r1   r:     s     
 )r   rT   rangerx   appendr   r   r   r6   r    r;   r<   r?   rI   r+   )r.   ZsocksZexpectedtimesfnamesifnamesrcZsprocZsysconsr   r0   )r6   r   r1   test_multi_sockets_procs  s,    



z2TestSystemWideConnections.test_multi_sockets_procsN)rA   rB   rC   r}   r   r   r   r0   r0   r0   r1   r     s   r   c                   @   s   e Zd Zdd ZdS )TestMiscc                 C   s   g }g }t tD ]\}|drtt|}t|}| s@t|| t| | || || || qt	r~tj
 tj trtj d S )NZCONN_)r   r;   
startswithr   strisupperr,   ZassertNotInr   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r.   ZintsstrsnamenumZstr_r0   r0   r1   test_connection_constants  s     


z"TestMisc.test_connection_constantsN)rA   rB   rC   r   r0   r0   r0   r1   r     s   r   __main__)run_from_name)<r}   rb   rZ   sysr   
contextlibr   r   r   r   r   r;   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    rI   r*   r   objectr!   version_infoZ	PYTHON_39r%   rD   rO   r~   r   rN   r   r   rA   Zpsutil.tests.runnerr   __file__r0   r0   r0   r1   <module>   sl   $b= J
>
