
    bS/                        S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKr\R0                  S 5       r\R0                  S 5       rS rS rS rS rS	 rS
 r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1\ Rd                  S:  a  \3r4O\5r4S r6S r7S r8g)     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               #      #     S v   g ! [          a9  n U R                  [        R                  :X  a  [        R                  " 5         e S n A ff = f7fN)OSErrorerrnoENOSYSpytestskip)es    :/usr/lib/python3/dist-packages/systemd/test/test_daemon.pyskip_enosysr      s8      77ell"KKMs$   A	 A
A4AAAc              #      #    [         R                  " U 5      n Uv   US   R                  5         US   R                  5         g ! US   R                  5         US   R                  5         f = f7f)Nr      )socket
socketpairclose)familypairs     r   closing_socketpairr$      sV     V$D
QQ 	QQs   A0A 'A0(A--A0c                      [         R                  R                  S5      (       a  [        5       (       d   eg [        5       S;   d   eg )Nz/run/systemd/system>   FT)ospathexistsr        r   test_bootedr+   &   s3    	ww~~+,,xxx x=(((r*   c                    U R                  S5      R                  n[        R                  " U5        [        R
                  " U[        R                  [        R                  -  5      n[        US 5      (       d   e[        X!5      (       d   eg )N	test.fifo)	joinstrpathposixmkfifor&   openO_RDONLY
O_NONBLOCKr   )tmpdirr'   fds      r   test__is_fifor7   .   sc    ;;{#++D	LL	r{{2==0	1BBBr*   c                    U R                  S5      nUR                  S5        UR                  n[        R                  " U[        R
                  [        R                  -  5      n[        US 5      (       a   e[        X25      (       a   eg )Nr-   boo)r.   writer/   r&   r2   r3   r4   r   r5   filer'   r6   s       r   test__is_fifo_filer=   6   si    ;;{#DJJu<<D	r{{2==0	1BD!!!!!!!!!r*   c                 Z   U R                  S5      R                  n[        R                  " [        5         [        SS 5      (       a   e S S S 5        [        R                  " [        5         [        SU5      (       a   e S S S 5        g ! , (       d  f       NF= f! , (       d  f       g = fNr-   )r.   r/   r   raisesr   r   r5   r'   s     r   test__is_fifo_bad_fdrC   ?   s{    ;;{#++D	w	B%%%%% 
  
w	B%%%%% 
 	 
 	 
 	   B-B
B
B*c                    U R                  S5      R                  n[        R                  " U5        [        R
                  " U[        R                  [        R                  -  5      n[        R                  " US5      n[        US 5      (       d   e[        X15      (       d   e[        US 5      (       d   e[        X!5      (       d   eg )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2r*   c                    U R                  S5      nUR                  S5        UR                  n[        R                  " U[        R
                  [        R                  -  5      n[        R                  " US5      n[        US 5      (       a   e[        X5      (       a   e[        US 5      (       a   e[        X25      (       a   eg )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""""t""""r4    r     r*   c                 Z   U R                  S5      R                  n[        R                  " [        5         [        SS 5      (       a   e S S S 5        [        R                  " [        5         [        SU5      (       a   e S S S 5        g ! , (       d  f       NF= f! , (       d  f       g = fr?   )r.   r/   r   rA   r   r   rB   s     r   test_is_fifo_bad_fdrL   _   s{    ;;{#++D	w	2t$$$$$ 
  
w	2t$$$$$ 
 	 
 	 
 	rD   c                      [        U 5      $ ! [         a*  nUR                  [        R                  :X  d   e S nAgS nAff = fNF)r   r   r   EBADFargerrors     r   is_mq_wrapperrS   h   s:    Sz {{ekk)))   
 
A <Ac                      [        U 5      $ ! [         a*  nUR                  [        R                  :X  d   e S nAgS nAff = frN   )r   r   r   rO   rP   s     r   _is_mq_wrapperrV   p   s:    c{ {{ekk)))rT   c                  8   [        [        R                  5       n U  GH+  n[        U5      (       a   e[	        U5      (       a   e[        U5      (       a   e[        5          [        US5      (       a   e S S S 5        UR                  5       n[        U5      (       a   e[	        U5      (       a   e[        U5      (       a   e[        5          [        US5      (       a   e S S S 5        [        U5      (       a   e[        U5      (       a   e[        U5      (       a   e[        5          [        US5      (       a   e S S S 5        GM.     S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GMk  = f! , (       d  f       g = f)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   sI   	FNN	+tDt}}$$$T****%d++++-d4DEEEEE  Br{{"?$R((((%b))))-b2BCCCCC   ||##%b))))&r****.r3CDDDDD #  
,	+
   % 
,	+sV   AF!E6AFE'#AF+E8 F
E$ F'
E51F8
F	F
Fc                     [        [        R                  5       n U  GH  nXR                  5       4 H  n[	        U5      (       d   e[	        U[        R                  5      (       d   e[	        U[        R
                  5      (       a   e[	        U[        R                  [        R                  5      (       d   e[	        U[        R
                  [        R                  5      (       a   e[        5          [        US[        R                  SS5      (       a   e S S S 5        M     [        W5      (       d   e[        U[        R                  5      (       d   e[        U[        R
                  5      (       a   e[        U[        R                  [        R                  5      (       d   e[        U[        R
                  [        R                  5      (       a   e[        5          [        US[        R                  SS5      (       a   e S S S 5        GM     S S S 5        g ! , (       d  f       GM  = f! , (       d  f       GM%  = f! , (       d  f       g = f)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kkm, ~~%~ fnn5555$S&..9999 fnnf6H6HIIII$S&..&:K:KLLLL ]1#~vGXGXZ[]^_____ #] - c??"?c6>>2222!#v~~6666c6>>63E3EFFFF!#v~~v7H7HIIII.sNFDUDUWXZ[\\\\\   
,	+ #] ! 
,	+s=   CI3%H	C
I#%H2	I
H/)	I2
I<	I
Ic            
      T   [         R                  " [        R                  " [        R                  5      5       n U R	                  S5        U R                  5       u  pSR                  U5      nS GHU  nX R                  5       4 GH  n[        5          [        US[        R                  5      (       d   e S S S 5        [        5          [        USU-   [        R                  5      (       d   e S S S 5        [        5          [        USU-   US9(       d   e S S S 5        [        5          [        USU-   SS9(       d   e S S S 5        [        5          [        USU-   U(       + S9(       a   e S S S 5        [        R                  " [        5         [        USSS9  S S S 5        [        5          [        US	[        R                  5      (       a   e S S S 5        [        5          [        US[        R                  5      (       a   e S S S 5        GM     [        R                  " [        5         [        WSS
S5        S S S 5        [        5          [        WS	[        R                  5      (       a   e S S S 5        [        5          [        WS[        R                  5      (       a   e S S S 5        U R!                  S5        GMX     S S S 5        g ! , (       d  f       GN#= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNr= f! , (       d  f       GM  = f! , (       d  f       GN+= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)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!Ikkm, ]-c;@R@RSSSS # ]-c;3EvGYGYZZZZ # !]-c;3EQZ[[[ # ]-c;3EQSTTT # ]1#{T7IYbUbcccc # ]]:.&sK&I / !]1#7I6K]K]^^^^^ # ]1#{FDUDUVVVVV #]% -* z*#Ca@ + .s4FHZHZ[[[[[ .sKARARSSSSS  KKO=   
;	: #]"] #]"]"] /. #]"] +* A 
;	:s  AN#K	7N	&K%	0NK7	N+L		NL	0"NL-	N0#L?	N&#M	
'N1M$ N#M66N#N,N
K"N%
K4/N7
LN	
LN
L*%N-
L<7N?
M	N
M!	N$
M3.N6
N N
NN
N'c                  p   [        [        R                  5       n U  GH|  nUR                  5       n[	        U5      (       d   e[	        U[        R                  5      (       d   e[	        U[        R
                  5      (       a   e[	        U[        R                  [        R                  5      (       d   e[	        U[        R
                  [        R                  5      (       a   e[	        U5      (       d   e[	        U[        R                  5      (       d   e[	        U[        R
                  5      (       a   e[	        U[        R                  [        R                  5      (       d   e[	        U[        R
                  [        R                  5      (       d  GM}   e   S S S 5        g ! , (       d  f       g = fr   )r$   r   rX   rY   r   r^   r_   r`   rZ   s      r   test__is_socketrs      s%   	FNN	+tDBb>>!>b&..1111!"fnn5555b&..&2D2DEEEE!"fnnf6G6GHHHHb>>!>b&..1111!"fnn5555b&..&2D2DEEEE!"fnnf6G6GHHHH  
,	+	+s   E;F'F''
F5c                  v   [        [        R                  5       n U  H  nXR                  5       4 Hh  n[	        U5      (       d   e[	        USS9(       a   e[	        U[        R
                  5      (       d   e[	        U[        R                  5      (       d  Mh   e   M     S S S 5        g ! , (       d  f       g = f)N/no/such/path)r'   )r$   r   rX   rY   r
   r_   r`   ra   s      r   test_is_socket_unixrv      s    	FNN	+tDkkm,%c****)#ODDD%c6+=+=>>>>)#v/@/@AAAA	 -  
,	+	+s   A;B*B**
B8c                  n   [        [        R                  5       n U  H|  nUR                  5       n[	        U5      (       d   e[	        USSS5      (       a   e[	        U[        R
                  5      (       d   e[	        U[        R                  5      (       d  M|   e   S S S 5        g ! , (       d  f       g = f)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B"2v'9'9::::&r6+<+<====  
,	+	+s   A;B&B&&
B4c                      [         R                  " S5        [         R                  " S5        [        5       / :X  d   e[        S5      / :X  d   e[        S5      / :X  d   eg )N
LISTEN_FDS
LISTEN_PIDTF)r&   unsetenvr   r)   r*   r   test_listen_fds_no_fdsr}      sP    KKKK<2dr!!!e"""r*   c                      S[         R                  S'   [        [         R                  " 5       5      [         R                  S'   [	        S5      / SQ:X  d   e[	        S5      / SQ:X  d   e[	        5       / :X  d   eg )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                      S[         R                  S'   [        [         R                  " 5       5      [         R                  S'   [	        S5      S/:X  d   e[	        5       S/:X  d   e[	        5       / :X  d   eg )N1rz   r{   Fr   r   r)   r*   r   test_listen_fds_default_unsetr      s`    "BJJ|"299;/BJJ|e###<A3<2r*   c                      [         R                  " S5        [         R                  " S5        [         R                  " S5        [        5       0 :X  d   e[        S5      0 :X  d   e[        S5      0 :X  d   eg )Nrz   r{   LISTEN_FDNAMESTF)r&   r|   r   r)   r*   r   "test_listen_fds_with_names_nothingr     s^    KKKKKK ! "b((( &",,, '2---r*   c                      S[         R                  S'   [        [         R                  " 5       5      [         R                  S'   [         R                  " S5        [        S5      SS0:X  d   e[        S5      SS0:X  d   e[        5       0 :X  d   eg )	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                     S[         R                  S'   [        [         R                  " 5       5      [         R                  S'   S[         R                  S'   [	        S5      SS0:X  d   e[	        5       SS0:X  d   e[	        S5      0 :X  d   eg )	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                  "   S[         R                  S'   [        [         R                  " 5       5      [         R                  S'   S[         R                  S'   [	        S5      SSS	S
.:X  d   e[	        S5      SSS	S
.:X  d   e[	        5       0 :X  d   eg )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   [         R                  R                  SS 5        [        S5      SL d   e[	        5          [        S/ S9SL d   e S S S 5        [        SSS/S9SL d   e[        S[         R
                  " 5       S9SL d   e[        S[         R
                  " 5       S	S
9SL d   eg ! , (       d  f       Ne= f)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))%%%	kr*e333 
+Aq6*e333+299;/5888+299;D9UBBB	 
s   B++
B9)r   c                  2   S[         R                  S'   [        R                  " [        5         [        S5        S S S 5        [        R                  " [        5         [        5          [        S/ S9  S S S 5        S S S 5        [        R                  " [        5         [        SSS/S9  S S S 5        [        R                  " [        5         [        S[         R                  " 5       S9  S S S 5        [        R                  " [        5         [        S[         R                  " 5       S	S
9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)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' 
)	'	({		, 
)	'	({		6 
)	( 
)	( ] 
)	( 
)	(	(	(	(	(sS   D3E'E2EE&E7F3
E
E	E
E#&
E47
F
Fc                    U R                  S5      R                  n[        R                  " [        R                  [        R                  5      n UR                  U5        [        [        SS5      nUR                  [        R                  US5        U[        R                  S'   [        S5      (       d   e[        5          [        S/ S	9(       d   e S S S 5        [        SSS
/S	9(       d   e[        S[        R                   " 5       S9(       d   e[        S[        R                   " 5       SS9(       d   eg ! [        R                   a$  n[        R                  " SU-  5         S nAGNS nAff = f! , (       d  f       N= f)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: E5:E2E--E25
Fc                      Sn U /n[         R                  " U 5      n [        SSSU5        [         R                  " U 5      U::  d   S5       eg ! [         a     N.f = f)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*   