a
    QIhR                     @   sP  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% e&ed!e' Z(d"d# Z)ej*j+d$d%G d&d' d'eZ,G d(d) d)e,Z-ej*j+d$d%G d*d+ d+e,Z.ej*j+d$d%G d,d- d-e,Z/G d.d/ d/e,Z0ej*j1ed0d1G d2d3 d3e,Z2G d4d5 d5eZ3dS )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)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                 C   s$   t  j| d}| dv r t|S |S )Nkind>   allunix)psutilProcessnet_connectionsr   )r"   cons r)   W/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_connections.pythis_proc_net_connections1   s    r+   serial)namec                   @   s&   e Zd Zdd Zdd Zd	ddZdS )
ConnectionTestCasec                 C   s   t ddg ksJ d S Nr#   r!   r+   selfr)   r)   r*   setUp:   s    zConnectionTestCase.setUpc                 C   s   t ddg ksJ d S r/   r0   r1   r)   r)   r*   tearDown=   s    zConnectionTestCase.tearDownr#   c                    sd   zt j|d}W n  t jy0   tr*Y dS  Y n0  fdd|D }|  |  ||ks`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 )Npid.0cr6   r)   r*   
<listcomp>P       zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>)r%   r'   ZAccessDeniedr	   sort)r2   r7   Z	proc_consr"   Zsys_consr)   r6   r*   compare_procsys_connectionsA   s    z.ConnectionTestCase.compare_procsys_connectionsN)r#   )__name__
__module____qualname__r3   r4   r>   r)   r)   r)   r*   r.   8   s   r.   c                   @   s4   e Zd Zejjedddd Zdd Zdd Z	d	S )
TestBasicOperationsrequires rootreasonc                 C   sD   t  * tjddD ]}t| qW d    n1 s60    Y  d S r/   )r   r%   r'   r   r2   connr)   r)   r*   test_systemW   s    zTestBasicOperations.test_systemc                 C   sB   t  ( tddD ]}t| qW d    n1 s40    Y  d S r/   )r   r+   r   rF   r)   r)   r*   test_process]   s    z TestBasicOperations.test_processc                 C   sn   t t tdd W d    n1 s*0    Y  t t tjdd W d    n1 s`0    Y  d S )Nz???r!   )r   Zraises
ValueErrorr+   r%   r'   r1   r)   r)   r*   test_invalid_kindb   s    (z%TestBasicOperations.test_invalid_kindN)
r?   r@   rA   r   markskipifr   rH   rI   rK   r)   r)   r)   r*   rB   V   s   
rB   c                   @   s   e Zd ZdZdd Zdd Zdd Zejj	e
  dd	d
d Zdd Zejj	e
  dd	dd Zejj	e dd	dd Zejj	e dd	dd ZdS )TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c                 C   sp   t dd}dd |D }ts tr,||  S t|dks<J |d jdkrd||  j| ksdJ |d S d S )Nr#   r!   c                 S   s   i | ]}|j |qS r)   )fdr8   r)   r)   r*   
<dictcomp>o   r<   z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<dictcomp>   r   r5   )r+   r
   r   filenolenrO   )r2   sockr(   Zsmapr)   r)   r*   get_conn_from_sockm   s    
z)TestUnconnectedSockets.get_conn_from_sockc                 C   s   |  |}t| |jdkr.|j| ks.J |j|jks>J |j|tjtj	ksXJ |
 }|svt|trv| }|jtkr|dd }|j|ksJ |jtkrtrt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).
        r5   N   r#   r!   )rU   r   rO   rR   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsockname
isinstancebytesdecoder   laddrr   r   r+   r>   osgetpid)r2   rT   rG   ra   r(   r)   r)   r*   check_socketz   s     



z#TestUnconnectedSockets.check_socketc                 C   sb   d}t ttt|d8}| |}|jdks0J |jtjks@J W d    n1 sT0    Y  d S N	127.0.0.1r   addrr)   )	r   r   r   r   rd   raddrstatusr%   CONN_LISTENr2   ri   rT   rG   r)   r)   r*   test_tcp_v4   s
    
z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedrD   c                 C   sb   d}t ttt|d8}| |}|jdks0J |jtjks@J W d    n1 sT0    Y  d S N)::1r   rh   r)   )	r   r   r   r   rd   rj   rk   r%   rl   rm   r)   r)   r*   test_tcp_v6   s
    
z"TestUnconnectedSockets.test_tcp_v6c                 C   sb   d}t ttt|d8}| |}|jdks0J |jtjks@J W d    n1 sT0    Y  d S re   )	r   r   r   r   rd   rj   rk   r%   	CONN_NONErm   r)   r)   r*   test_udp_v4   s
    
z"TestUnconnectedSockets.test_udp_v4c                 C   sb   d}t ttt|d8}| |}|jdks0J |jtjks@J W d    n1 sT0    Y  d S ro   )	r   r   r   r   rd   rj   rk   r%   rr   rm   r)   r)   r*   test_udp_v6   s
    
z"TestUnconnectedSockets.test_udp_v6
POSIX onlyc                 C   sd   |   }tt|td8}| |}|jdks2J |jtjksBJ W d    n1 sV0    Y  d S N)rX    	
get_testfnr   r   r   rd   rj   rk   r%   rr   r2   testfnrT   rG   r)   r)   r*   test_unix_tcp   s
    
z$TestUnconnectedSockets.test_unix_tcpc                 C   sd   |   }tt|td8}| |}|jdks2J |jtjksBJ W d    n1 sV0    Y  d S rv   rx   rz   r)   r)   r*   test_unix_udp   s
    
z$TestUnconnectedSockets.test_unix_udpN)r?   r@   rA   __doc__rU   rd   rn   r   rL   rM   r   rq   rs   rt   r   r|   r}   r)   r)   r)   r*   rN   i   s   


rN   c                   @   sB   e Zd ZdZejjedddd Zejje	 dddd Z
d	S )
TestConnectedSocketzFTest socket pairs which are actually connected to
    each other.
    zunreliable on SUONSrD   c                 C   s   d}t ddg ksJ tt|d\}}zVt dd}t|dksBJ |d jtjksVJ |d jtjksjJ W |  |  n|  |  0 d S )Nrf   tcp4r!   rh   rV   r   rQ   )r+   r   r   rS   rk   r%   ZCONN_ESTABLISHEDclose)r2   ri   serverclientr(   r)   r)   r*   test_tcp   s    

zTestConnectedSocket.test_tcpru   c                 C   s  |   }t|\}}ztdd}|d jr<|d jr<J ||d jrX|d jrXJ |ts`trndd |D }t|dks~J tstst	st
r|d jdksJ |d jdksJ ||d jp|d jksJ n|d jp|d j|ksJ W |  |  n|  |  0 d S )	Nr$   r!   r   rQ   c                 S   s   g | ]}|j d kr|qS )z/var/run/log)rj   r8   r)   r)   r*   r;      r<   z1TestConnectedSocket.test_unix.<locals>.<listcomp>rV   rw   )ry   r   r+   ra   rj   r
   r   rS   r   r   r   r   )r2   r{   r   r   r(   r)   r)   r*   	test_unix   s$    

zTestConnectedSocket.test_unixN)r?   r@   rA   r~   r   rL   rM   r   r   r   r   r)   r)   r)   r*   r      s
   
r   c                   @   s.   e Zd Zdd Zeeddd Zdd ZdS )	TestFiltersc                 C   s   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    n1 s0    Y  d S )Nc                 S   sb   t | dD ] }|j|v sJ |j|v s
J q
ts^tj| dD ] }|j|v sNJ |j|v s<J q<d S )Nr!   )r+   rW   rX   r   r%   r'   )r"   familiestypesrG   r)   r)   r*   check  s    z'TestFilters.test_filters.<locals>.checkr#   inetinet4tcpr   tcp6udpudp4udp6r$   )r   r   r   r   r   r   r    r   )r2   r   r)   r)   r*   test_filters   s*    	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ks8J |D ]}|j|	jkrh|||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<qd S )Nc                    s   d}t | |j|ksJ |j|ks(J |j|ks6J |j|ksDJ |j|ksRJ |D ]2}	| j|	d}
|	|v r||
g ksJ qV|
g ksVJ qVtr | j	|g d S )N)
r#   r   r   inet6r   r   r   r   r   r   r!   )
r   rW   rX   ra   rj   rk   r'   r   r>   r7   )procrG   rW   rX   ra   rj   rk   kindsZ	all_kindsr"   r(   r1   r)   r*   
check_conn#  s    z+TestFilters.test_combos.<locals>.check_conna4  
            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)]
            )dirrg   )rW   ri   r{   rp   T)deleterQ   r)   )r#   r   r   r   r   )r#   r   r   r   r   r7   )r#   r   r   r   r   )r#   r   r   r   r   )r   textwrapdedentrb   pathbasenamery   getcwdformatintr   r   pyrunevalr   r   r%   r&   childrenr'   rS   r7   r   rl   r   rr   getattr)r2   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   r)   r1   r*   test_combos  s    











zTestFilters.test_combosc                 C   s  t   tdd}t|t r$dndks.J |D ]$}|jtthv sHJ |jtks2J q2tdd}t|dksrJ |d jtksJ |d jtksJ t rtdd}t|dksJ |d jtksJ |d jtksJ tdd}t|t rdndksJ |D ]*}|jtthv sJ |jt	ksJ qtd	d}t|dksJJ |d jtks^J |d jt	ksrJ t rtd
d}t|dksJ |d jtksJ |d jt	ksJ tdd}t|t rdndksJ |D ].}|jtthv sJ |jtt	hv sJ qt rntdd}t|dks>J |D ]*}|jtksVJ |jtt	hv sBJ qBt
rtststdd}t|dksJ |D ]*}|jtksJ |jtt	hv sJ qW d    n1 s0    Y  d S )Nr   r!   rV   rQ   r   r   r   r   r   r   r      r   r$      )r   r+   rS   r   rW   r   r   rX   r   r   r   r   r
   r   )r2   r(   rG   r)   r)   r*   
test_count  s\    









zTestFilters.test_countN)r?   r@   rA   r   r   r	   r   r   r)   r)   r)   r*   r      s
   
 r   rC   rD   c                   @   s&   e Zd ZdZdd Ze dd ZdS )TestSystemWideConnectionszTests for net_connections().c                 C   s   dd }t  r ddlm} | D ]L\}}|dkr:ts:q$|\}}t|}t|tt|ksdJ |||| q$W d    n1 s0    Y  d S )Nc                 S   s<   | D ]2}|j |v sJ |j tkr.|j|v s.J t| qd S )N)rW   r   rX   r   )r(   r   types_rG   r)   r)   r*   r     s
    
z0TestSystemWideConnections.test_it.<locals>.checkr   )	conn_tmapr$   )	r   psutil._commonr   itemsr   r%   r'   rS   set)r2   r   r   r"   groupsr   r   r(   r)   r)   r*   test_it  s    
z!TestSystemWideConnections.test_itc                    s   t  }t|}W d    n1 s$0    Y  g d}g }t|D ]>}|  }|| td| d}| |}|j qB|D ]}t	| qfddt
jddD }	D ]B t fdd|	D |ksJ t
 }
t|
d|ksJ qd S )	N
   z                import time, os
                from psutil.tests import create_sockets
                with create_sockets():
                    with open(r'z', 'w') as f:
                        f.write("hello")
                    [time.sleep(0.1) for x in range(100)]
                c                    s   g | ]}|j  v r|qS r)   r6   r9   x)pidsr)   r*   r;     s   zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r#   r!   c                    s   g | ]}|j  kr|qS r)   r6   r   r6   r)   r*   r;      r<   )r   rS   rangery   appendr   r   r   r7   r   r%   r'   r&   )r2   socksexpectedtimesfnames_fnamesrcZsprocZsysconsr   r)   )r7   r   r*   test_multi_sockets_procs  s,    &






z2TestSystemWideConnections.test_multi_sockets_procsN)r?   r@   rA   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 }t tD ]\}|drtt|}t|}| s@J |t|vsLJ ||vsXJ || || qtr~tj tj	 t
rtj d S )NZCONN_)r   r%   
startswithr   strisupperr   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r2   Zintsstrsr-   numZstr_r)   r)   r*   test_net_connection_constants&  s     


z&TestMisc.test_net_connection_constantsN)r?   r@   rA   r   r)   r)   r)   r*   r   %  s   r   )4r~   rb   rZ   r   
contextlibr   r   r   r   r   r%   r   r   r	   r
   r   r   r   r   r   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr    r+   rL   Zxdist_groupr.   rB   rN   r   r   rM   r   r   r)   r)   r)   r*   <module>   s`   ]7 g?