U
    ;gR                     @   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kr t|S |S )Nkind>   allunix)psutilProcessnet_connectionsr   )r"   cons r)   ]/opt/bot/vods_filmes/script/venv/lib/python3.8/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td S Nr#   r!   r+   AssertionErrorselfr)   r)   r*   setUp:   s    zConnectionTestCase.setUpc                 C   s   t ddg kstd S r/   r0   r2   r)   r)   r*   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 }|  |  ||ksbt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cr7   r)   r*   
<listcomp>P   s     
 zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>)r%   r'   ZAccessDeniedr	   sortr1   )r3   r8   Z	proc_consr"   Zsys_consr)   r7   r*   compare_procsys_connectionsA   s    z.ConnectionTestCase.compare_procsys_connectionsN)r#   )__name__
__module____qualname__r4   r5   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   s0   t    tjddD ]}t| qW 5 Q R X d S r/   )r   r%   r'   r   r3   connr)   r)   r*   test_systemW   s    zTestBasicOperations.test_systemc              	   C   s.   t   tddD ]}t| qW 5 Q R X d S r/   )r   r+   r   rF   r)   r)   r*   test_process]   s    z TestBasicOperations.test_processc              	   C   sF   t t tdd W 5 Q R X t t tjdd W 5 Q R X d S )Nz???r!   )r   Zraises
ValueErrorr+   r%   r'   r2   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<t|d jdkrd||  j| ksdt|d S d S )Nr#   r!   c                 S   s   i | ]}|j |qS r)   )fdr9   r)   r)   r*   
<dictcomp>o   s      z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<dictcomp>   r   r6   )r+   r
   r   filenolenr1   rO   )r3   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.t|j|jks>t|j|tj	tj
ksXt| }|svt|trv| }|jtkr|dd }|j|kst|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).
        r6   N   r#   r!   )rU   r   rO   rR   r1   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsockname
isinstancebytesdecoder   laddrr   r   r+   r>   osgetpid)r3   rT   rG   ra   r(   r)   r)   r*   check_socketz   s     



z#TestUnconnectedSockets.check_socketc              	   C   sN   d}t ttt|d.}| |}|jdks0t|jtj	ks@tW 5 Q R X d S N	127.0.0.1r   addrr)   )
r   r   r   r   rd   raddrr1   statusr%   CONN_LISTENr3   ri   rT   rG   r)   r)   r*   test_tcp_v4   s
    
z"TestUnconnectedSockets.test_tcp_v4zIPv6 not supportedrD   c              	   C   sN   d}t ttt|d.}| |}|jdks0t|jtj	ks@tW 5 Q R X d S N)::1r   rh   r)   )
r   r   r   r   rd   rj   r1   rk   r%   rl   rm   r)   r)   r*   test_tcp_v6   s
    
z"TestUnconnectedSockets.test_tcp_v6c              	   C   sN   d}t ttt|d.}| |}|jdks0t|jtj	ks@tW 5 Q R X d S re   )
r   r   r   r   rd   rj   r1   rk   r%   	CONN_NONErm   r)   r)   r*   test_udp_v4   s
    
z"TestUnconnectedSockets.test_udp_v4c              	   C   sN   d}t ttt|d.}| |}|jdks0t|jtj	ks@tW 5 Q R X d S ro   )
r   r   r   r   rd   rj   r1   rk   r%   rr   rm   r)   r)   r*   test_udp_v6   s
    
z"TestUnconnectedSockets.test_udp_v6
POSIX onlyc              	   C   sP   |   }tt|td.}| |}|jdks2t|jtj	ksBtW 5 Q R X d S N)rX    

get_testfnr   r   r   rd   rj   r1   rk   r%   rr   r3   testfnrT   rG   r)   r)   r*   test_unix_tcp   s
    
z$TestUnconnectedSockets.test_unix_tcpc              	   C   sP   |   }tt|td.}| |}|jdks2t|jtj	ksBtW 5 Q R X 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ttt|d\}}zFt dd}t|dksBt|d jtjksVt|d jtjksjtW 5 |  |  X d S )Nrf   tcp4r!   rh   rV   r   rQ   )	r+   r1   r   r   closerS   rk   r%   ZCONN_ESTABLISHED)r3   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<t||d jrX|d jrXt|ts`trndd |D }t	|dks~tt
stststr|d jdkst|d jdkst||d jp|d jkstn|d jp|d j|kstW 5 |  |  X d S )	Nr$   r!   r   rQ   c                 S   s   g | ]}|j d kr|qS )z/var/run/log)rj   r9   r)   r)   r*   r<      s     
 z1TestConnectedSocket.test_unix.<locals>.<listcomp>rV   rw   )ry   r   r   r+   ra   rj   r1   r
   r   rS   r   r   r   )r3   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 5 Q R X d S )Nc                 S   sb   t | dD ] }|j|kst|j|ks
tq
ts^tj| dD ] }|j|ksNt|j|ks<tq<d S )Nr!   )r+   rW   r1   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   )r3   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s8t|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t|j|ks(t|j|ks6t|j|ksDt|j|ksRt|D ]2}	| j|	d}
|	|kr||
g kstqV|
g ksVtqVtr 	| j
|g d S )N)
r#   r   r   inet6r   r   r   r   r   r   r!   )r   rW   r1   rX   ra   rj   rk   r'   r   r>   r8   )procrG   rW   rX   ra   rj   rk   kindsZ	all_kindsr"   r(   r2   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   r8   )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   r1   r8   r   rl   r   rr   getattr)r3   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)   r2   r*   test_combos  s    



        



zTestFilters.test_combosc              	   C   s  t   tdd}t|t r$dndks.t|D ]$}|jtthksHt|jt	ks2tq2tdd}t|dksrt|d jtkst|d jt	kstt rtdd}t|dkst|d jtkst|d jt	ksttdd}t|t rdndkst|D ]*}|jtthkst|jt
kstqtd	d}t|dksJt|d jtks^t|d jt
ksrtt rtd
d}t|dkst|d jtkst|d jt
ksttdd}t|t rdndkst|D ].}|jtthkst|jt	t
hkstqt rntdd}t|dks>t|D ]*}|jtksVt|jt	t
hksBtqBtrtststdd}t|dkst|D ]*}|jtkst|jt	t
hkstqW 5 Q R X d S )Nr   r!   rV   rQ   r   r   r   r   r   r   r      r   r$      )r   r+   rS   r   r1   rW   r   r   rX   r   r   r   r   r
   r   )r3   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  h ddlm} | D ]L\}}|dkr:ts:q$|\}}t|}t|tt|ksdt	|||| q$W 5 Q R X d S )Nc                 S   s<   | D ]2}|j |kst|j tkr.|j|ks.tt| qd S )N)rW   r1   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   setr1   )r3   r   r   r"   groupsr   r   r(   r)   r)   r*   test_it  s    
z!TestSystemWideConnections.test_itc              	      s   t  }t|}W 5 Q R X g d}g }t|D ]>}|  }|| td| d}| |}|j q.|D ]}t	| qrfddt
jddD }	D ]B t fdd|	D |kstt
 }
t|
d|kst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  kr|qS r)   r7   r:   x)pidsr)   r*   r<     s    
 zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>r#   r!   c                    s   g | ]}|j  kr|qS r)   r7   r   r7   r)   r*   r<      s     
 )r   rS   rangery   appendr   r   r   r8   r   r%   r'   r1   r&   )r3   socksexpectedtimesfnames_fnamesrcZsprocZsysconsr   r)   )r8   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@t|t|ksLt||ksXt|| || qtr~tj	 tj
 trtj d S )NZCONN_)r   r%   
startswithr   strisupperr1   r   r   Z	CONN_IDLEZ
CONN_BOUNDr   ZCONN_DELETE_TCB)r3   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?