a ťfE(@sZddlZddlZddlZddlZddlZddlZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZddlZejddZejddZddZd d Zd d Zd dZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%dd Z&d!d"Z'd#d$Z(d%d&Z)d'd(Z*d)d*Z+d+d,Z,ej-d-krBe.Z/ne0Z/d.d/Z1d0d1Z2dS)2N)bootedis_fifo_is_fifo is_socket _is_socketis_socket_inet_is_socket_inetis_socket_unix_is_socket_unixis_socket_sockaddr_is_socket_sockaddris_mq_is_mq listen_fdsnotifyc csJz dVWn:tyD}z"|jtjkr.tWYd}~n d}~00dSN)OSErrorerrnoZENOSYSpytestskip)er>/usr/lib64/python3.9/site-packages/systemd/test/test_daemon.py skip_enosyss   rccsLt|}z"|VW|d|dn|d|d0dS)Nr)socketZ socketpairclose)Zfamilypairrrrclosing_socketpairs   rcCstjdrndS)Nz/run/systemd/system)ospathexistsrrrr test_booted&s r"cCs.|dj}t|t|tjtjB}dSN test.fifo)joinstrpathposixmkfiforopenO_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-rrrtest__is_fifo_file6s   r3cCsd|dj}ttWdn1s,0YttWdn1sV0YdSr#r%r&rraisesrr,r rrrtest__is_fifo_bad_fd?s    r7cCs:|dj}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+r9r1rrrtest_is_fifo_fileSs    r;cCsd|dj}ttWdn1s,0YttWdn1sV0YdSr#r4r6rrrtest_is_fifo_bad_fd_s    r<c Cs6z t|WSty0}zWYd}~dSd}~00dSNF)r rargerrorrrr is_mq_wrapperhs rAc Cs6z t|WSty0}zWYd}~dSd}~00dSr=)rrr>rrr_is_mq_wrapperps rBc Csttj}|D]~}tWdn1s00Y|}tWdn1s^0YtWdq1s0YqWdn1s0YdSr)rrAF_UNIXrfilenorsockr-rrrtest_no_mismatchxs rGc Csttjx}|D]b}||fD]*}tWdq 1s@0Yq tWdq1sh0YqWdn1s0YdSr)rrrCrDrrrFr?rrrtest_is_sockets  rIc CsXtttj.}|d|\}}d|}dD]}||fD]N}tWdn1sn0YtWdn1s0YtWdn1s0YtWdn1s0YtWdn1s0Yt t t |dddWdn1sB0YtWdn1sj0YtWdqL1s0YqLt t t |dddWdn1s0YtWdn1s0YtWdn1s0Y|dq:Wdn1sJ0YdS) N) 127.0.0.1rz:{})rrrJi@)Zflowinfor ) contextlibclosingrZAF_INETbindZ getsocknameformatrDrrr5 ValueErrorr r Zlisten)rFZaddrportZ listeningr?rrrtest_is_socket_sockaddrs:      . " .  rRcCs@ttj"}|D] }|}qWdn1s20YdSrrrrCrDrErrrtest__is_sockets  rTcCsJttj,}|D]}||fD]}q qWdn1s<0YdSrrSrHrrrtest_is_socket_unixs rUcCs@ttj"}|D] }|}qWdn1s20YdSrrSrErrrtest__is_socket_unixs rVcCstdtddS)N LISTEN_FDS LISTEN_PID)runsetenvrrrrtest_listen_fds_no_fdss  rZcCs dtjd<tttjd<dS)N3rWrXrenvironstrgetpidrrrrtest_listen_fdss r`cCs dtjd<tttjd<dS)N1rWrXr\rrrrtest_listen_fds_default_unsets rbcCs8tjddtWdn1s*0YdS)N NOTIFY_SOCKET)rr]poprrrrrtest_notify_no_socketsre)c CsPdtjd<tttdWdn1s20YttBttdgdWdn1sp0YWdn1s0Ytt tdddgdWdn1s0Ytt tdtdWdn1s0Ytt"tdtd d Wdn1sB0YdS) Nz /dev/nullrczREADY=1z FDSTORE=1)fdsr)pid)r)rirg)rr]rr5connection_errorrrr_rrrrtest_notify_bad_sockets  & H . 0 rkc Cs|dj}ttjtj}z||Wn4tjy^}ztd|WYd}~n d}~00t tdd}| tj |d|t j d<tWdn1s0YdS)Nrzfailed to bind socket (%s) SO_PASSCREDrrc)r%r&rrCZ SOCK_DGRAMrNr@rZxfailgetattrZ setsockoptZ SOL_SOCKETrr]r)r,r rFrrlrrrtest_notify_with_socket!s $  ro)3sysrr'rrLrZsystemd.daemonrrrrrrrr r r r r rrrrcontextmanagerrrr"r.r3r7r:r;r<rArBrGrIrRrTrUrVrZr`rbre version_infoConnectionRefusedErrorrjrrkrorrrrsFD        &