<!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
X(                 @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ d dlZejdd Zejdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd  Z&d!d" Z'd#d$ Z(d%d& Z)d'd( Z*d)d* Z+d+d, Z,e j-d2krBe.Z/ne0Z/d.d/ Z1d0d1 Z2dS )3    N)bootedis_fifo_is_fifo	is_socket
_is_socketis_socket_inet_is_socket_inetis_socket_unix_is_socket_unixis_socket_sockaddr_is_socket_sockaddris_mq_is_mq
listen_fdsnotifyc              c   sH   y
d V  W n8 t k
rB }  z| jtjkr0tj   W Y d d } ~ X nX d S )N)OSErrorerrnoZENOSYSpytestskip)e r   #/usr/lib64/python3.6/test_daemon.pyskip_enosys   s    
r   c             c   s4   t j| }z
|V  W d |d j  |d j  X d S )Nr      )socketZ
socketpairclose)Zfamilypairr   r   r   closing_socketpair   s
    

r   c               C   s*   t jjdrt s&tnt dks&td S )Nz/run/systemd/systemFT>   FT)ospathexistsr   AssertionErrorr   r   r   r   test_booted&   s    r"   c             C   sJ   | j dj}tj| tj|tjtjB }t|d s8t	t||sFt	d S )Nz	test.fifo)
joinstrpathposixmkfifor   openO_RDONLY
O_NONBLOCKr   r!   )tmpdirr   fdr   r   r   test__is_fifo.   s
    
r,   c             C   sR   | j d}|jd |j}tj|tjtjB }t|d  s>tt|| sNtd S )Nz	test.fifoboo)	r#   writer$   r   r'   r(   r)   r   r!   )r*   filer   r+   r   r   r   test__is_fifo_file6   s    

r0   c             C   s\   | j dj}tjt tdd  s(tW d Q R X tjt td| sNtW d Q R X d S )Nz	test.fifor   r1   )r#   r$   r   raisesr   r   r!   )r*   r   r   r   r   test__is_fifo_bad_fd?   s
    r3   c             C   sr   | j dj}tj| tj|tjtjB }tj|d}t	|d sDt
t	||sRt
t	|d s`t
t	||snt
d S )Nz	test.fifor)r#   r$   r%   r&   r   r'   r(   r)   fdopenr   r!   )r*   r   r+   r/   r   r   r   test_is_fifoH   s    
r6   c             C   s~   | j d}|jd |j}tj|tjtjB }tj|d}t|d  sJt	t|| sZt	t|d  sjt	t|| szt	d S )Nz	test.fifor-   r4   )
r#   r.   r$   r   r'   r(   r)   r5   r   r!   )r*   r/   r   r+   r   r   r   test_is_fifo_fileS   s    

r7   c             C   s\   | j dj}tjt tdd  s(tW d Q R X tjt td| sNtW d Q R X d S )Nz	test.fifor   r1   r1   )r#   r$   r   r2   r   r   r!   )r*   r   r   r   r   test_is_fifo_bad_fd_   s
    r8   c             C   s>   yt | S  tk
r8 } z|jtjks*tdS d }~X nX d S )NF)r   r   r   EBADFr!   )argerrorr   r   r   is_mq_wrapperh   s
    r<   c             C   s>   yt | S  tk
r8 } z|jtjks*tdS d }~X nX d S )NF)r   r   r   r9   r!   )r:   r;   r   r   r   _is_mq_wrapperp   s
    r=   c               C   s  t tj } x| D ]}t| s&tt| s4tt| sBtt  t|d sZtW d Q R X |j	 }t| sztt| stt| stt  t|d stW d Q R X t
| stt| stt| stt  t|d stW d Q R X qW W d Q R X d S )Nz127.0.0.1:2000)r   r   AF_UNIXr   r!   r<   r   r   r   filenor   r=   r   r   )r   sockr+   r   r   r   test_no_mismatchx   s$    
rA   c              C   sL  t tj6} x,| D ]"}x||j fD ]}t|s:tt|tjsJtt|tj s\tt|tjtjsptt|tjtj stt	  t
|dtjdd stW d Q R X q*W t|stt|tjstt|tj stt|tjtjstt|tjtj stt	   t|dtjdd s0tW d Q R X qW W d Q R X d S )Nz8.8.8.8:2000r   )r   r   r>   r?   r   r!   AF_INETSOCK_STREAM
SOCK_DGRAMr   r   r   r   )r   r@   r:   r   r   r   test_is_socket   s"    &rE   c           E   C   s,  t jtjtj} | jd
 | j \}}dj|}xdD ]}xT| | j fD ]B}t  t	|dtj
sttW d Q R X t  t	|d| tj
stW d Q R X t  t	|d| |dstW d Q R X t  t	|d| ddstW d Q R X t " t	|d| | d stW d Q R X tjt t	|ddd W d Q R X t  t	|dtj
 sftW d Q R X t  t	|dtj stW d Q R X qTW tjt t|ddd W d Q R X t  t|dtj
 stW d Q R X t  t|dtj stW d Q R X | jd	 q>W W d Q R X d S )N	127.0.0.1r   z:{}r   )	listeningi@ )Zflowinfoz129.168.11.11:23   )rF   r   )r   r   r1   )
contextlibclosingr   rB   bindZgetsocknameformatr?   r   r   rC   r!   r   r2   
ValueErrorrD   r   Zlisten)r@   ZaddrZportrG   r:   r   r   r   test_is_socket_sockaddr   s:    

   & $  rN   c              C   s   t tj} x| D ]}|j }t|s*tt|tjs:tt|tj sLtt|tjtjs`tt|tjtj svtt|stt|tjstt|tj stt|tjtjstt|tjtj stqW W d Q R X d S )N)	r   r   r>   r?   r   r!   rB   rC   rD   )r   r@   r+   r   r   r   test__is_socket   s    
rO   c              C   s~   t tjj} xb| D ]Z}xT||j fD ]D}t|s4tt|dd sFtt|tjsVtt|tj s$tq$W qW W d Q R X d S )Nz/no/such/path)r   )r   r   r>   r?   r	   r!   rC   rD   )r   r@   r:   r   r   r   test_is_socket_unix   s    
rP   c              C   sr   t tj^} xV| D ]N}|j }t|s*tt|ddd s>tt|tjsNtt|tj stqW W d Q R X d S )Nr   r   z/no/such/pathr1   )r   r   r>   r?   r
   r!   rC   rD   )r   r@   r+   r   r   r   test__is_socket_unix   s    
rQ   c               C   sF   t jd t jd t g ks"ttdg ks2ttdg ksBtd S )N
LISTEN_FDS
LISTEN_PIDTF)r   unsetenvr   r!   r   r   r   r   test_listen_fds_no_fds   s
    

rU   c               C   sZ   dt jd< tt j t jd< tddddgks2ttddddgksHtt g ksVtd S )	N3rR   rS   F         T)r   environstrgetpidr   r!   r   r   r   r   test_listen_fds   s
    
r]   c               C   sP   dt jd< tt j t jd< tddgks.tt dgks>tt g ksLtd S )N1rR   rS   FrW   )r   rZ   r[   r\   r   r!   r   r   r   r   test_listen_fds_default_unset   s
    
r_   c               C   s   t ddkstt  t dg ddks,tW d Q R X t dddgddksNtt dtj ddksftt dtj d	ddkstd S )
NzREADY=1Fz	FDSTORE=1)fdsr      )pid)rb   r`   )r   )r   r!   r   r   r\   r   r   r   r   test_notify_no_socket  s    rc   rW   c            /   C   s   dt jd< tjt td W d Q R X tjt$ t  tdg d W d Q R X W d Q R X tjt tdddgd W d Q R X tjt tdt j d W d Q R X tjt tdt j d
d	 W d Q R X d S )Nz	/dev/nullNOTIFY_SOCKETzREADY=1z	FDSTORE=1)r`   r   ra   )rb   )rb   r`   )r   )r   rZ   r   r2   connection_errorr   r   r\   r   r   r   r   test_notify_bad_socket  s    
 rf   c             C   s   | j dj}tjtjtj}y|j| W n2 tjk
r\ } ztjd|  W Y d d }~X nX t	tdd}|j
tj|d |tjd< tdstt  tdg d	stW d Q R X tddd
gd	sttdtj dsttdtj ddstd S )Nr   zfailed to bind socket (%s)SO_PASSCRED   r   rd   zREADY=1z	FDSTORE=1)r`   ra   )rb   )rb   r`   )r   )r#   r$   r   r>   rD   rK   r;   r   ZxfailgetattrZ
setsockoptZ
SOL_SOCKETr   rZ   r   r!   r   r\   )r*   r   r@   r   rg   r   r   r   test_notify_with_socket  s     
rj   )rW   )3sysr   r%   r   rI   r   Zsystemd.daemonr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   contextmanagerr   r   r"   r,   r0   r3   r6   r7   r8   r<   r=   rA   rE   rN   rO   rP   rQ   rU   r]   r_   rc   version_infoConnectionRefusedErrorre   r   rf   rj   r   r   r   r   <module>   sB   D
	
			&			