a Å¥ýfE(ã@sZddlZddlZddlZddlZddlZddlZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZddlZejdd„ƒZejdd„ƒZdd„Zd d „Zd d „Zd d„Zdd„Zdd„Zdd„Z dd„Z!dd„Z"dd„Z#dd„Z$dd„Z%dd „Z&d!d"„Z'd#d$„Z(d%d&„Z)d'd(„Z*d)d*„Z+d+d,„Z,ej-d-k�rBe.Z/ne0Z/d.d/„Z1d0d1„Z2dS)2é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 csJz dVWn:tyD}z"|jtjkr.t ¡‚WYd}~n d}~00dS©N)ÚOSErrorÚerrnoZENOSYSÚpytestÚskip)Úe©rú>/usr/lib64/python3.9/site-packages/systemd/test/test_daemon.pyÚ skip_enosyss   rccsLt |¡}z"|VW|d ¡|d ¡n|d ¡|d ¡0dS)Nré)ÚsocketZ socketpairÚclose)ZfamilyÚpairrrrÚclosing_socketpairs  ÿ rcCstj d¡rndS)Nz/run/systemd/system)ÚosÚpathÚexistsrrrrÚ test_booted&s r"cCs.| d¡j}t |¡t |tjtjB¡}dS©Nú test.fifo)ÚjoinÚstrpathÚposixÚmkfiforÚopenÚO_RDONLYÚ O_NONBLOCK)Útmpdirr ÚfdrrrÚ test__is_fifo.s  r.cCs2| d¡}| d¡|j}t |tjtjB¡}dS)Nr$Úboo)r%Úwriter&rr)r*r+©r,Úfiler r-rrrÚtest__is_fifo_file6s   r3cCsd| d¡j}t t¡�Wdƒn1s,0Yt t¡�Wdƒn1sV0YdSr#©r%r&rÚraisesr©r,r rrrÚtest__is_fifo_bad_fd?s    r7cCs:| d¡j}t |¡t |tjtjB¡}t |d¡}dS)Nr$Úr) r%r&r'r(rr)r*r+Úfdopen)r,r r-r2rrrÚ test_is_fifoHs    r:cCs>| d¡}| d¡|j}t |tjtjB¡}t |d¡}dS)Nr$r/r8)r%r0r&rr)r*r+r9r1rrrÚtest_is_fifo_fileSs    r;cCsd| d¡j}t t¡�Wdƒn1s,0Yt t¡�Wdƒn1sV0YdSr#r4r6rrrÚtest_is_fifo_bad_fd_s    r<c Cs6z t|ƒWSty0}zWYd}~dSd}~00dS©NF)r r©ÚargÚerrorrrrÚ is_mq_wrapperhs rAc Cs6z t|ƒWSty0}zWYd}~dSd}~00dSr=)rrr>rrrÚ_is_mq_wrapperps rBc Cs²ttjƒ�”}|D]~}tƒ�Wdƒn1s00Y| ¡}tƒ�Wdƒn1s^0Ytƒ�Wdƒq1s„0YqWdƒn1s¤0YdSr)rrÚAF_UNIXrÚfileno©rÚsockr-rrrÚtest_no_mismatchxs rGc Cs–ttjƒ�x}|D]b}|| ¡fD]*}tƒ�Wdƒq 1s@0Yq tƒ�Wdƒq1sh0YqWdƒn1sˆ0YdSr)rrrCrDr©rrFr?rrrÚtest_is_socketŽs  rIc CsXt t tj¡¡��.}| d¡| ¡\}}d |¡}dD�]ö}|| ¡fD�]N}tƒ�Wdƒn1sn0Ytƒ�Wdƒn1s”0Ytƒ�Wdƒn1sº0Ytƒ�Wdƒn1sà0Ytƒ�Wdƒn1�s0Yt   t ¡�t |ddd�Wdƒn1�sB0Ytƒ�Wdƒn1�sj0Ytƒ�WdƒqL1�s’0YqLt   t ¡�t |dddƒWdƒn1�sÎ0Ytƒ�Wdƒn1�sö0Ytƒ�Wdƒn1�s0Y| d¡q:Wdƒn1�sJ0YdS) N)ú 127.0.0.1rz:{})rrrJi@â)Zflowinforé )Ú contextlibÚclosingrZAF_INETÚbindZ getsocknameÚformatrDrrr5Ú ValueErrorr r Zlisten)rFZaddrÚportZ listeningr?rrrÚtest_is_socket_sockaddr¢s:      . " .  rRcCs@ttjƒ�"}|D] }| ¡}qWdƒn1s20YdSr©rrrCrDrErrrÚtest__is_socketÈs  rTcCsJttjƒ�,}|D]}|| ¡fD]}q qWdƒn1s<0YdSrrSrHrrrÚtest_is_socket_unixØs rUcCs@ttjƒ�"}|D] }| ¡}qWdƒn1s20YdSrrSrErrrÚtest__is_socket_unixás rVcCst d¡t d¡dS)NÚ LISTEN_FDSÚ LISTEN_PID)rÚunsetenvrrrrÚtest_listen_fds_no_fdsês  rZcCs dtjd<tt ¡ƒtjd<dS)NÚ3rWrX©rÚenvironÚstrÚgetpidrrrrÚtest_listen_fdsós r`cCs dtjd<tt ¡ƒtjd<dS)NÚ1rWrXr\rrrrÚtest_listen_fds_default_unsetûs rbcCs8tj dd¡tƒ�Wdƒn1s*0YdS)NÚ NOTIFY_SOCKET)rr]ÚpoprrrrrÚtest_notify_no_socketsre)éc CsPdtjd<t t¡�tdƒWdƒn1s20Yt t¡�Btƒ�tdgd�Wdƒn1sp0YWdƒn1sŽ0Yt t¡� tdddgd�Wdƒn1sÈ0Yt t¡� tdt ¡d�Wdƒn1�s0Yt t¡�"tdt ¡d d �Wdƒn1�sB0YdS) Nz /dev/nullrczREADY=1z FDSTORE=1)Úfdsré)Úpid)r)rirg)rr]rr5Úconnection_errorrrr_rrrrÚtest_notify_bad_sockets  & H . 0 rkc Cs°| d¡j}t tjtj¡}z| |¡Wn4tjy^}zt d|¡WYd}~n d}~00t tddƒ}|  tj |d¡|t j d<tƒ�Wdƒn1s¢0YdS)Nrzfailed to bind socket (%s)Ú SO_PASSCREDérrc)r%r&rrCZ SOCK_DGRAMrNr@rZxfailÚgetattrZ setsockoptZ SOL_SOCKETrr]r)r,r rFrrlrrrÚtest_notify_with_socket!s $  ro)3Úsysrr'rrLrZsystemd.daemonrrrrrrrr r r r r rrrrÚcontextmanagerrrr"r.r3r7r:r;r<rArBrGrIrRrTrUrVrZr`rbreÚ version_infoÚConnectionRefusedErrorrjrrkrorrrrÚsFD        &