
    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j0                  d        Zej0                  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 jd                  dk\  re3Z4ne5Z4d Z6d Z7d Z8y)     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  y # t         $ r7} | j                  t        j                  k(  rt        j                           d } ~ ww xY wwN)OSErrorerrnoENOSYSpytestskip)es    :/usr/lib/python3/dist-packages/systemd/test/test_daemon.pyskip_enosysr      s9      77ell"KKMs$   A	 A	A	2AA		Ac              #      K   t        j                  |       }	 | |d   j                          |d   j                          y # |d   j                          |d   j                          w xY ww)Nr      )socket
socketpairclose)familypairs     r   closing_socketpairr$      sW     V$D
QQ 	QQs   A/A 'A/(A,,A/c                  x    t         j                  j                  d      rt               sJ y t               dv sJ y )Nz/run/systemd/system>   FT)ospathexistsr        r   test_bootedr+   &   s.    	ww~~+,xx x=(((r*   c                    | j                  d      j                  }t        j                  |       t	        j
                  |t        j                  t        j                  z        }t        |d       sJ t        ||      sJ y )N	test.fifo)	joinstrpathposixmkfifor&   openO_RDONLY
O_NONBLOCKr   )tmpdirr'   fds      r   test__is_fifor7   .   s_    ;;{#++D	LL	r{{2==0	1BBBr*   c                    | j                  d      }|j                  d       |j                  }t        j                  |t        j
                  t        j                  z        }t        |d       rJ t        ||      rJ y )Nr-   boo)r.   writer/   r&   r2   r3   r4   r   r5   filer'   r6   s       r   test__is_fifo_filer=   6   se    ;;{#DJJu<<D	r{{2==0	1BD!!!D!!!!r*   c                 .   | j                  d      j                  }t        j                  t              5  t        dd       rJ 	 d d d        t        j                  t              5  t        d|      rJ 	 d d d        y # 1 sw Y   ;xY w# 1 sw Y   y xY wNr-   )r.   r/   r   raisesr   r   r5   r'   s     r   test__is_fifo_bad_fdrC   ?   s    ;;{#++D	w	 &B%%%%& 
w	 &B%%%%& && && &   A?&B?BBc                 j   | j                  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 y )Nr-   r)
r.   r/   r0   r1   r&   r2   r3   r4   fdopenr   )r5   r'   r6   r<   s       r   test_is_fiforH   H   s    ;;{#++D	LL	r{{2==0	1B99RD442t2tr*   c                 f   | j                  d      }|j                  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 y )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	1B99RDtT"""tT"""r4   r4    r*   c                 .   | j                  d      j                  }t        j                  t              5  t        dd       rJ 	 d d d        t        j                  t              5  t        d|      rJ 	 d d d        y # 1 sw Y   ;xY w# 1 sw Y   y xY w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 }~yd }~ww xY wNF)r   r   r   EBADFargerrors     r   is_mq_wrapperrS   h   s:    Sz {{ekk)))   
 	?:?c                     	 t        |       S # t        $ r)}|j                  t        j                  k(  sJ Y d }~yd }~ww xY wrN   )r   r   r   rO   rP   s     r   _is_mq_wrapperrV   p   s:    c{ {{ekk)))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        |j                         }t        |      rJ t	        |      rJ t        |      rJ t               5  t        |d      rJ 	 d d d        t        |      rJ t        |      rJ t        |      rJ t               5  t        |d      rJ 	 d d d         	 d d d        y # 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   se   	FNN	+ Et 	EDt}$$$T***%d+++ F-d4DEEEEF Br{"?$R(((%b))) D-b2BCCCCD  |##%b)))&r*** E.r3CDDDDE E#	EE E
F FD DE E%E EsT   7D<D!A	D<*D#:9D<3D/
D<D D<#D,(D</D94D<<Ec                     t        t        j                        5 } | D ]  }||j                         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         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         	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   	FNN	+ ]t 	]Ddkkm, ` ~%~ fnn555$S&..999 fnnf6H6HIII$S&..&:K:KLLL ] `1#~vGXGXZ[]^____` `` c?"?c6>>222!#v~~666c6>>63E3EFFF!#v~~v7H7HIII ].sNFDUDUWXZ[\\\\] ]	]] ]` `] ]!] ]s=   CG; G!	<B/G;+ G.G;!G+&G;.G83G;;Hc            	         t        j                  t        j                  t        j                              5 } | j	                  d       | j                         \  }}dj                  |      }dD ],  }| | j                         fD ]p  }t               5  t        |dt        j                        sJ 	 d d d        t               5  t        |d|z   t        j                        sJ 	 d d d        t               5  t        |d|z   |      sJ 	 d d d        t               5  t        |d|z   d      sJ 	 d d d        t               5  t        |d|z   |       rJ 	 d d d        t        j                  t              5  t        |dd       d d d        t               5  t        |d	t        j                        rJ 	 d d d        t               5  t        |dt        j                        rJ 	 d d d        s t        j                  t              5  t        dd
d       d d d        t               5  t        d	t        j                        rJ 	 d d d        t               5  t        dt        j                        rJ 	 d d d        | j!                  d       / 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   <xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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      s   			FMM&..9	: #d		"#%%'
d||D! 	Idkkm, W ] T-c;@R@RSSST ] [-c;3EvGYGYZZZ[ !] \-c;3EQZ[[[\ ] U-c;3EQSTTTU ] d1#{T7IYbUbccccd ]]:. J&sK&IJ !] _1#7I6K]K]^^^^_ ] W1#{FDUDUVVVVW W%W* z* A#Ca@A  \.s4FHZHZ[[[[\ T.sKARARSSSST KKO=	# #T T[ [\ \U Ud dJ J_ _W WA A\ \T TA# #s  AL5J)	2L5!J6	&L58K	L5K	4L5K	!L5=K*	L5K7	=L5L	.$L5L!L53LL5$L)L5)J3.L56K ;L5KL5KL5K'"L5*K4/L57L<L5L	L5LL5L&"L5)L2.L55L>c                      t        t        j                        5 } | D ]I  }|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 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                        sJJ  	 d d d        y # 1 sw Y   y xY wr   )r$   r   rX   rY   r   r^   r_   r`   rZ   s      r   test__is_socketrs      s   	FNN	+ It 	IDBb>!>b&..111!"fnn555b&..&2D2DEEE!"fnnf6G6GHHHb>!>b&..111!"fnn555b&..&2D2DEEE!"fnnf6G6GHHH	II I Is   EE4'E44E=c                  F   t        t        j                        5 } | D ]m  }||j                         fD ]V  }t	        |      sJ t	        |d      rJ t	        |t        j
                        sJ t	        |t        j                        sVJ  o 	 d d d        y # 1 sw Y   y xY w)N/no/such/path)r'   )r$   r   rX   rY   r
   r_   r`   ra   s      r   test_is_socket_unixrv      s    	FNN	+ Bt 	BDdkkm, B%c***)#ODDD%c6+=+=>>>)#v/@/@AAA	B	BB B Bs   A-BBB c                  :   t        t        j                        5 } | D ]g  }|j                         }t	        |      sJ t	        |ddd      rJ t	        |t        j
                        sJ t	        |t        j                        sgJ  	 d d d        y # 1 sw Y   y xY w)Nr   r@   ru   )r$   r   rX   rY   r   r_   r`   rZ   s      r   test__is_socket_unixrx      s    	FNN	+ >t 	>DB"2&&&&r1b/BBB"2v'9'9:::&r6+<+<===	>> > >s   A)B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 y )N
LISTEN_FDS
LISTEN_PIDTF)r&   unsetenvr   r)   r*   r   test_listen_fds_no_fdsr}      sP    KKKK<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 y )N3rz   r{   F         Tr&   environstrgetpidr   r)   r*   r   test_listen_fdsr      s_    "BJJ|"299;/BJJ|e	)))dy(((<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 y )N1rz   r{   Fr   r   r)   r*   r   test_listen_fds_default_unsetr      s`    "BJJ|"299;/BJJ|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 y )Nrz   r{   LISTEN_FDNAMESTF)r&   r|   r   r)   r*   r   "test_listen_fds_with_names_nothingr     s^    KKKKKK ! "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 y )	Nr   rz   r{   r   Fr   unknownT)r&   r   r   r   r|   r   r)   r*   r   #test_listen_fds_with_names_no_namesr     su    "BJJ|"299;/BJJ|KK ! 'Ay>999 &1i.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 y )	Nr   rz   r{   cmdsr   Fr   Tr&   r   r   r   r   r)   r*   r   !test_listen_fds_with_names_singler     sw    "BJJ|"299;/BJJ|#)BJJ  'Av;666 "q&k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 y )Nr   rz   r{   zcmds:data:errsr   Fr   dataerrsr   Tr   r)   r*   r   #test_listen_fds_with_names_multipler   !  s}    "BJJ|"299;/BJJ|#3BJJ  'v&V+LLLL &fF*KKKK "b(((r*   c                  x   t         j                  j                  dd        t        d      du sJ t	               5  t        dg       du sJ 	 d d d        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 y # 1 sw Y   dxY w)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    JJNN?D))%%%	 4kr*e3334+Aq6*e333+299;/5888+299;D9UBBB	4 4s   B00B9)r   c                     dt         j                  d<   t        j                  t              5  t        d       d d d        t        j                  t              5  t               5  t        dg        d d d        d d d        t        j                  t              5  t        dddg       d d d        t        j                  t              5  t        dt        j                                d d d        t        j                  t              5  t        dt        j                         d	
       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)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   "-BJJ	'	( y	'	( (] 	(;B'	(( 
'	( ({A'(	'	( -{		,-	'	( 7{		67 7 	( 	(( (( (- -7 7sS   D8E%E3EE E)!E58EE	
EEE&)E25E>c                    | j                  d      j                  }t        j                  t        j                  t        j                        }	 |j                  |       t        t        dd      }|j                  t        j                  |d       |t        j                  d<   t        d      sJ t               5  t        dg 	      sJ 	 d d d        t        ddd
g	      sJ t        dt        j                                sJ t        dt        j                          d      sJ y # t        j                  $ r"}t        j                  d|z         Y d }~d }~ww xY w# 1 sw Y   xY w)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		$ &-4KOOF%%{A6"&BJJ)	 +kr***++Aq6***+299;///+299;D999 << 71A5667+ +s$   D* <E"*E=EE"E+c                      d} | g}t        j                  |       }	 t        ddd|       t        j                  |       |k  sJ d       y # t        $ r Y +w xY w)Nr    Tr   leak)sysgetrefcountr   r   )r6   r   ref_cnts      r   test_daemon_notify_memleakr   \  sa    	
B$Coob!Gr4C  ??2')161)  s   A
 
	AA)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,]($LI B>#.)-)C t-7:&2r*   