509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<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|ƒ sˆt‚t|ƒ s–t‚tƒ � t|dƒ s®t‚W d Q R X t
|ƒ sÆt‚t|ƒ sÔt‚t|ƒ sât‚tƒ � t|dƒ sút‚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ƒ s†t‚t	ƒ � t
|dtjddƒ s¦t‚W d Q R X q*W t|ƒsÀt‚t|tjƒsÐt‚t|tjƒ sât‚t|tjtjƒsöt‚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|ƒ}�xädD �]Ú}�xT| | jƒ fD �]B}tƒ � t	|dtj
ƒstt‚W d Q R X tƒ � t	|d| tj
ƒsœt‚W d Q R X tƒ � t	|d| |d�sÄt‚W d Q R X tƒ � t	|d| dd�sìt‚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ƒ �sŽt‚W d Q R X qTW tjtƒ� t|dddƒ W d Q R X tƒ � t|dtj
ƒ �sÞt‚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|ƒs‚t‚t|tjƒs’t‚t|tjƒ s¤t‚t|tjtjƒs¸t‚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s€t‚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ƒs�t‚tƒ � tdg d	�s¨t‚W d Q R X tddd
gd	�sÆt‚tdtjƒ d�sÚt‚tdtjƒ dd�sðt‚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
	
			&			