
    bS/                        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mZ d dlZej        d             Zej        d             Zd Zd Zd Zd Zd	 Zd
 Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1e j2        dk    re3Z4ne5Z4d Z6d Z7d Z8dS )     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listen_fds_with_namesnotifyc               #      K   	 d V  d S # t           $ r.} | j        t          j        k    rt          j                      d } ~ ww xY wN)OSErrorerrnoENOSYSpytestskip)es    :/usr/lib/python3/dist-packages/systemd/test/test_daemon.pyskip_enosysr      sT         7el""KMMMs   
 
A)=Ac              #     K   t          j        |           }	 |V  |d                                          |d                                          d S # |d                                          |d                                          w xY w)Nr      )socket
socketpairclose)familypairs     r   closing_socketpairr$      st      V$$D


QQ 	QQs   A 6Bc                      t           j                            d          rt                      sJ d S t                      dv sJ d S )Nz/run/systemd/system>   FT)ospathexistsr        r   test_bootedr+   &   sG    	w~~+,, )xx xx=((((((r*   c                    |                      d          j        }t          j        |           t	          j        |t          j        t          j        z            }t          |d           sJ t          ||          sJ d S )N	test.fifo)	joinstrpathposixmkfifor&   openO_RDONLY
O_NONBLOCKr   )tmpdirr'   fds      r   test__is_fifor7   .   sr    ;;{##+D	L	r{2=0	1	1BBBr*   c                    |                      d          }|                    d           |j        }t          j        |t          j        t          j        z            }t          |d           rJ t          ||          rJ d S )Nr-   boo)r.   writer/   r&   r2   r3   r4   r   r5   filer'   r6   s       r   test__is_fifo_filer=   6   sx    ;;{##DJJu<D	r{2=0	1	1BD!!!!!D!!!!!!!r*   c                 L   |                      d          j        }t          j        t                    5  t          dd           rJ 	 d d d            n# 1 swxY w Y   t          j        t                    5  t          d|          rJ 	 d d d            d S # 1 swxY w Y   d S Nr-   )r.   r/   r   raisesr   r   r5   r'   s     r   test__is_fifo_bad_fdrC   ?   s#   ;;{##+D	w		 & &B%%%%%%& & & & & & & & & & & & & & & 
w		 & &B%%%%%%& & & & & & & & & & & & & & & & & &#   AAA8BB Bc                 t   |                      d          j        }t          j        |           t	          j        |t          j        t          j        z            }t	          j        |d          }t          |d           sJ t          ||          sJ t          |d           sJ t          ||          sJ d S )Nr-   r)
r.   r/   r0   r1   r&   r2   r3   r4   fdopenr   )r5   r'   r6   r<   s       r   test_is_fiforH   H   s    ;;{##+D	L	r{2=0	1	1B9RD442t2tr*   c                 z   |                      d          }|                    d           |j        }t          j        |t          j        t          j        z            }t          j        |d          }t          |d           rJ t          ||          rJ t          |d           rJ t          ||          rJ d S )Nr-   r9   rF   )	r.   r:   r/   r&   r2   r3   r4   rG   r   r;   s       r   test_is_fifo_filerJ   S   s    ;;{##DJJu<D	r{2=0	1	1B9RDtT"""""tT"""""r4     r4       r*   c                 L   |                      d          j        }t          j        t                    5  t          dd           rJ 	 d d d            n# 1 swxY w Y   t          j        t                    5  t          d|          rJ 	 d d d            d S # 1 swxY w Y   d S r?   )r.   r/   r   rA   r   r   rB   s     r   test_is_fifo_bad_fdrL   _   s#   ;;{##+D	w		 % %2t$$$$$$% % % % % % % % % % % % % % % 
w		 % %2t$$$$$$% % % % % % % % % % % % % % % % % %rD   c                     	 t          |           S # t          $ r"}|j        t          j        k    sJ Y d }~dS d }~ww xY wNF)r   r   r   EBADFargerrors     r   is_mq_wrapperrS   h   sT    Szz   {ek))))uuuuu    
=8=c                     	 t          |           S # t          $ r"}|j        t          j        k    sJ Y d }~dS d }~ww xY wrN   )r   r   r   rO   rP   s     r   _is_mq_wrapperrV   p   sT    c{{   {ek))))uuuuurT   c                  *   t          t          j                  5 } | D ][}t          |          rJ t	          |          rJ t          |          rJ t                      5  t          |d          rJ 	 d d d            n# 1 swxY w Y   |                                }t          |          rJ t	          |          rJ t          |          rJ t                      5  t          |d          rJ 	 d d d            n# 1 swxY w Y   t          |          rJ t          |          rJ t          |          rJ t                      5  t          |d          rJ 	 d d d            n# 1 swxY w Y   ]	 d d d            d S # 1 swxY w Y   d S )Nz127.0.0.1:2000)r$   r   AF_UNIXr   rS   r   r   r   filenor   rV   r	   r   r#   sockr6   s      r   test_no_mismatchr\   x   s   	FN	+	+ Et 	E 	EDt}}$$$$T*****%d+++++ F F-d4DEEEEEEF F F F F F F F F F F F F F F Br{{"""$R(((((%b))))) D D-b2BCCCCCCD D D D D D D D D D D D D D D  ||###%b)))))&r***** E E.r3CDDDDDDE E E E E E E E E E E E E E E#	EE E E E E E E E E E E E E E E E E Es   AF!B5FBFB	AF!D5FDFD	AFE-!F-E11F4E15FFFc                      t          t          j                  5 } | D ]}||                                fD ]}t	          |          sJ t	          |t          j                  sJ t	          |t          j                  rJ t	          |t          j        t          j                  sJ t	          |t          j        t          j                  rJ t                      5  t          |dt          j        dd          rJ 	 d d d            n# 1 swxY w Y   t          |          sJ t          |t          j                  sJ t          |t          j                  rJ t          |t          j        t          j                  sJ t          |t          j        t          j                  rJ t                      5  t          |dt          j        dd          rJ 	 d d d            n# 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )Nz8.8.8.8:2000r   )r$   r   rX   rY   r   AF_INETSOCK_STREAM
SOCK_DGRAMr   r   r   r   r#   r[   rQ   s      r   test_is_socketrb      s   	FN	+	+ ]t 	] 	]Ddkkmm, ` ` ~~%%% fn55555$S&.99999 fnf6HIIIII$S&.&:KLLLLL ]] ` `1#~vGXZ[]^______` ` ` ` ` ` ` ` ` ` ` ` ` ` ` c??"""c6>22222!#v~66666c6>63EFFFFF!#v~v7HIIIII ] ].sNFDUWXZ[\\\\\\] ] ] ] ] ] ] ] ] ] ] ] ] ] ]	]] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]s[   CH D
	>H
DHDB)H; G(H(G,,H/G,0HH
Hc            	      B   t          j        t          j        t          j                            5 } |                     d           |                                 \  }}d                    |          }dD ]}| |                                 fD ]}t                      5  t          |dt          j
                  sJ 	 d d d            n# 1 swxY w Y   t                      5  t          |d|z   t          j
                  sJ 	 d d d            n# 1 swxY w Y   t                      5  t          |d|z   |          sJ 	 d d d            n# 1 swxY w Y   t                      5  t          |d|z   d          sJ 	 d d d            n# 1 swxY w Y   t                      5  t          |d|z   |           rJ 	 d d d            n# 1 swxY w Y   t          j        t                    5  t          |dd           d d d            n# 1 swxY w Y   t                      5  t          |d	t          j
                  rJ 	 d d d            n# 1 swxY w Y   t                      5  t          |dt          j                  rJ 	 d d d            n# 1 swxY w Y   t          j        t                    5  t          |dd
d           d d d            n# 1 swxY w Y   t                      5  t          |d	t          j
                  rJ 	 d d d            n# 1 swxY w Y   t                      5  t          |dt          j                  rJ 	 d d d            n# 1 swxY w Y   |                     d           	 d d d            d S # 1 swxY w Y   d S )N)	127.0.0.1r   z:{})r   r   rd   )	listeningr@   i@ )flowinfoz129.168.11.11:23r      )
contextlibclosingr   r^   bindgetsocknameformatrY   r   r   r_   r   rA   
ValueErrorr`   r   listen)r[   addrportre   rQ   s        r   test_is_socket_sockaddrrq      s8   		FM&.99	:	: #d		"###%%''
d||D!! 	 	Idkkmm, W W ]] T T-c;@RSSSSSST T T T T T T T T T T T T T T ]] [ [-c;3EvGYZZZZZZ[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ !]] \ \-c;3EQZ[[[[[[[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ]] U U-c;3EQSTTTTTTTU U U U U U U U U U U U U U U ]] d d1#{T7IYbUbcccccccd d d d d d d d d d d d d d d ]:.. J J&sK&IIIIJ J J J J J J J J J J J J J J !]] _ _1#7I6K]^^^^^^_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ]] W W1#{FDUVVVVVVW W W W W W W W W W W W W W W z** A A#Ca@@@A A A A A A A A A A A A A A A  \ \.s4FHZ[[[[[[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ T T.sKARSSSSSST T T T T T T T T T T T T T T KKOOOO=	# # # # # # # # # # # # # # # # # #s  A.NC
	>N
CNCN#!D	NDNDN*E	NENEN(F	NFNFN&G	 NGNGN0H	NHNHN(I	NININ,J	NJNJN=KNK  N#K $N5L N L$$N'L$(N9M$N$M((N+M(,NNNc                     t          t          j                  5 } | D ]E}|                                }t	          |          sJ t	          |t          j                  sJ t	          |t          j                  rJ t	          |t          j        t          j                  sJ t	          |t          j        t          j                  rJ t	          |          sJ t	          |t          j                  sJ t	          |t          j                  rJ t	          |t          j        t          j                  sJ t	          |t          j        t          j                  rJ G	 d d d            d S # 1 swxY w Y   d S r   )r$   r   rX   rY   r   r^   r_   r`   rZ   s      r   test__is_socketrs      s   	FN	+	+ It 	I 	IDBb>>!!!b&.11111!"fn55555b&.&2DEEEEE!"fnf6GHHHHHb>>!!!b&.11111!"fn55555b&.&2DEEEEE!"fnf6GHHHHHH	II I I I I I I I I I I I I I I I I Is   E
E22E69E6c                  `   t          t          j                  5 } | D ]w}||                                fD ]^}t	          |          sJ t	          |d          rJ t	          |t          j                  sJ t	          |t          j                  rJ _x	 d d d            d S # 1 swxY w Y   d S )N/no/such/path)r'   )r$   r   rX   rY   r
   r_   r`   ra   s      r   test_is_socket_unixrv      s#   	FN	+	+ Bt 	B 	BDdkkmm, B B%c*****)#ODDDDDD%c6+=>>>>>)#v/@AAAAAA	B	BB B B B B B B B B B B B B B B B B Bs   A;B##B'*B'c                  X   t          t          j                  5 } | D ]s}|                                }t	          |          sJ t	          |ddd          rJ t	          |t          j                  sJ t	          |t          j                  rJ t	 d d d            d S # 1 swxY w Y   d S )Nr   r@   ru   )r$   r   rX   rY   r   r_   r`   rZ   s      r   test__is_socket_unixrx      s    	FN	+	+ >t 	> 	>DB"2&&&&&&r1b/BBBBB"2v'9:::::&r6+<======	>> > > > > > > > > > > > > > > > > >s   A7BB#&B#c                      t          j        d           t          j        d           t                      g k    sJ t          d          g k    sJ t          d          g k    sJ d S )N
LISTEN_FDS
LISTEN_PIDTF)r&   unsetenvr   r)   r*   r   test_listen_fds_no_fdsr}      so    KK<<2dr!!!!e""""""r*   c                     dt           j        d<   t          t          j                              t           j        d<   t	          d          g dk    sJ t	          d          g dk    sJ t	                      g k    sJ d S )N3rz   r{   F         Tr&   environstrgetpidr   r)   r*   r   test_listen_fdsr      s}    "BJ|"29;;//BJ|e			))))dyyy((((<<2r*   c                      dt           j        d<   t          t          j                              t           j        d<   t	          d          dgk    sJ t	                      dgk    sJ t	                      g k    sJ d S )N1rz   r{   Fr   r   r)   r*   r   test_listen_fds_default_unsetr      su    "BJ|"29;;//BJ|e####<<A3<<2r*   c                      t          j        d           t          j        d           t          j        d           t                      i k    sJ t          d          i k    sJ t          d          i k    sJ d S )Nrz   r{   LISTEN_FDNAMESTF)r&   r|   r   r)   r*   r   "test_listen_fds_with_names_nothingr     s    KKK !!! ""b(((( &&",,,, ''2------r*   c                  *   dt           j        d<   t          t          j                              t           j        d<   t          j        d           t          d          ddik    sJ t          d          ddik    sJ t                      i k    sJ d S )	Nr   rz   r{   r   Fr   unknownT)r&   r   r   r   r|   r   r)   r*   r   #test_listen_fds_with_names_no_namesr     s    "BJ|"29;;//BJ|K !!! ''Ay>9999 &&1i.8888 ""b((((((r*   c                      dt           j        d<   t          t          j                              t           j        d<   dt           j        d<   t	          d          ddik    sJ t	                      ddik    sJ t	          d          i k    sJ d S )	Nr   rz   r{   cmdsr   Fr   Tr&   r   r   r   r   r)   r*   r   !test_listen_fds_with_names_singler     s    "BJ|"29;;//BJ|#)BJ  ''Av;6666 ""q&k1111 &&",,,,,,r*   c                  (   dt           j        d<   t          t          j                              t           j        d<   dt           j        d<   t	          d          ddd	d
k    sJ t	          d          ddd	d
k    sJ t	                      i k    sJ d S )Nr   rz   r{   zcmds:data:errsr   Fr   dataerrsr   Tr   r)   r*   r   #test_listen_fds_with_names_multipler   !  s    "BJ|"29;;//BJ|#3BJ  ''v&V+L+LLLLL &&fF*K*KKKKK ""b((((((r*   c                     t           j                            dd            t          d          du sJ t	                      5  t          dg           du sJ 	 d d d            n# 1 swxY w Y   t          dddg          du sJ t          dt          j                              du sJ t          dt          j                    d	
          du sJ d S )NNOTIFY_SOCKETREADY=1F	FDSTORE=1fdsr      pidr   r   r   )r&   r   popr   r   r   r)   r*   r   test_notify_no_socketr   +  s#   JNN?D))))%%%%	 4 4kr***e333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4+Aq6***e3333+29;;///58888+29;;D999UBBBBBBs   A%%A),A))r   c                  L   dt           j        d<   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t                      5  t          dg            d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5  t          dddg           d d d            n# 1 swxY w Y   t          j        t                    5  t          dt          j                               d d d            n# 1 swxY w Y   t          j        t                    5  t          dt          j                    d	
           d d d            d S # 1 swxY w Y   d S )Nz	/dev/nullr   r   r   r   r   r   r   r   r   )r&   r   r   rA   connection_errorr   r   r   r)   r*   r   test_notify_bad_socketr   :  s   "-BJ	'	(	(  y              	'	(	( ( (]] 	( 	(;B''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
'	(	( ( ({A''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	'	(	( - -{	,,,,- - - - - - - - - - - - - - -	'	(	( 7 7{	66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s}   AA	A	)B-8B
B-B	B-B	B--B14B1C11C58C5#EEE($FF Fc                    |                      d          j        }t          j        t          j        t          j                  }	 |                    |           n3# t          j        $ r!}t          j        d|z             Y d }~nd }~ww xY wt          t          dd          }|
                    t          j        |d           |t          j        d<   t          d          sJ t                      5  t          dg 	          sJ 	 d d d            n# 1 swxY w Y   t          ddd
g	          sJ t          dt          j                              sJ t          dt          j                    d          sJ d S )Nr   zfailed to bind socket (%s)SO_PASSCRED   r   r   r   r   r   r   r   r   r   )r.   r/   r   rX   r`   rj   rR   r   xfailgetattr
setsockopt
SOL_SOCKETr&   r   r   r   r   )r5   r'   r[   r   r   s        r   test_notify_with_socketr   I  s   ;;x  (D=):;;D7		$< 7 7 71A5666666667 &-44KOOF%{A666"&BJ)	 + +kr*******+ + + + + + + + + + + + + + ++Aq6******+29;;//////+29;;D99999999s*   A B*BB3DDDc                      d} | g}t          j        |           }	 t          ddd|           n# t          $ r Y nw xY wt          j        |           |k    s
J d            d S )Nr    Tr   leak)sysgetrefcountr   r   )r6   r   ref_cnts      r   test_daemon_notify_memleakr   \  s    	
B$Cob!!Gr4C        ?2')))6)))))s   . 
;;)9r   r&   r0   r   rh   r   systemd.daemonr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   contextmanagerr   r$   r+   r7   r=   rC   rH   rJ   rL   rS   rV   r\   rb   rq   rs   rv   rx   r}   r   r   r   r   r   r   r   version_infoConnectionRefusedErrorr   r   r   r   r   r)   r*   r   <module>r      s   



 				       $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $      ) ) )  " " "& & &	 	 	
! 
! 
!% % %    E E E,] ] ]($ $ $LI I I B B B> > ># # #    . . .) ) )- - -) ) )C C C t-7 7 7: : :&2 2 2 2 2r*   