a  zelF@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZejddZe eeddGdd d e jZe eeddGd d d eZe eeddGd d d eZe eeddGdddeZe eedde eeddGdddeZe eeddGdddeZGdddeZedkre dS)N)support) socket_helperccsJ|2z |VWn|Yn0Wdn1s<0YdSN)kill)procrO/opt/bitninja-python-dojo/embedded/lib/python3.9/test/eintrdata/eintr_tester.py kill_on_errors  r setitimerzrequires setitimer()c@sDeZdZdZdZdZddZddZeddZ d d Z d d Z d S) EINTRBaseTestg?g?cCs|jd7_dSN)signals)selfsignumframerrr sighandler2szEINTRBaseTest.sighandlercCsBd|_ttj|j|_ttj|j|jt j ddt j ddS)NriXT)exitfile) rsignalSIGALRMr orig_handlerr ITIMER_REAL signal_delay signal_period faulthandlerZdump_traceback_latersys __stderr__rrrrsetUp5s zEINTRBaseTest.setUpcCsttjdddSNr)rr rrrrr stop_alarm@szEINTRBaseTest.stop_alarmcCs$|ttj|jtdSr)r!rrrrZcancel_dump_traceback_laterrrrrtearDownDszEINTRBaseTest.tearDowncOs tjdf|}tj|fi|S)Nz-c)r executable subprocessPopen)rargskwZcmd_argsrrrr$IszEINTRBaseTest.subprocessN) __name__ __module__ __qualname__rr sleep_timerr staticmethodr!r"r$rrrrr &s  r c@sxeZdZddZddZddZeee ddd d Z d d Z d dZ eee ddddZ ddZddZdS) OSEINTRTestcCsd|j}||S)Nzimport time; time.sleep(%r))r+r$)rcoderrrnew_sleep_processRs zOSEINTRTest.new_sleep_processcsDd}fddt|D}t|D] }|q"|D] }|q2dS)Ncsg|] }qSr)r/).0_rrr Xz3OSEINTRTest._test_wait_multiple..)rangewait)r wait_funcnum processesr2rrrr_test_wait_multipleVs  zOSEINTRTest._test_wait_multiplecCs|tjdSr)r:osr6rrrr test_wait_szOSEINTRTest.test_waitwait3zrequires wait3()cCs|dddS)NcSs tdSr )r;r=rrrrdr4z(OSEINTRTest.test_wait3..)r:rrrr test_wait3bszOSEINTRTest.test_wait3cCs|}||j|dSr)r/pidr6)rr7rrrr_test_wait_singlefs zOSEINTRTest._test_wait_singlecCs|dddS)NcSs t|dSr )r;waitpidr@rrrr>mr4z*OSEINTRTest.test_waitpid..rArrrr test_waitpidlszOSEINTRTest.test_waitpidwait4zrequires wait4()cCs|dddS)NcSs t|dSr )r;rFrCrrrr>qr4z(OSEINTRTest.test_wait4..rDrrrr test_wait4oszOSEINTRTest.test_wait4c Cst\}}|tj|gd}ddddd|d|jddd d d f }|j|t||gd }t|Lt||D]}| |t |t |qx| | d Wdn1s0YdS)N)shellosworldsspam zimport os, sys, timezwr = int(sys.argv[1]) datas = %rsleep_time = %rzfor data in datas:z$ # let the parent block on read() time.sleep(sleep_time)z os.write(wr, data)pass_fdsr) r;pipe addCleanupclosejoinr+r$strr assertEqualreadlenr6)rrdwrdatasr.rdatarrr test_readss*    zOSEINTRTest.test_readcCst\}}|tj|dtj}ddddd|jdtjddd d dd d d ddddddf}|j|t ||gd}t |Xt|d}|t |kr|t |t ||d7}q||dWdn1s0YdS)NxrHzimport io, os, sys, timerIzrd = int(sys.argv[1])rKzdata = b"x" * %sdata_len = len(data)z!# let the parent block on write()time.sleep(sleep_time)zread_data = io.BytesIO()z+while len(read_data.getvalue()) < data_len:z% chunk = os.read(rd, 2 * data_len)z read_data.write(chunk)zvalue = read_data.getvalue()zif value != data:z0 raise Exception("read error: %s vs %s bytes"z- % (len(value), data_len))rMr)r;rOrPrQrZ PIPE_MAX_SIZErRr+r$rSr rVwrite memoryviewrTr6)rrWrXrZr.rwrittenrrr test_writes>     zOSEINTRTest.test_writeN)r(r)r*r/r:r<unittest skipUnlesshasattrr;r?rArErGr[rbrrrrr-Ns   r-c@seZdZeeeddddZddZeeejddd d Z d d Z d dZ ddZ eeejddddZ ddZeddeeeddddZddZeejdkd d!d"Zd#d$Zeejdkd d%d&Zd'S)(SocketEINTRTest socketpairzneeds socketpair()c Cst\}}||jgd}dddddt|jdt|jd|d |jdd d dd d dddf}| }|j |t ||gd}t |H||D]}| |||t|q| |dWdn1s0YdS)N)r\yzrHimport os, socket, sys, timerIfd = int(sys.argv[1]) family = %ssock_type = %srJrKz)wr = socket.fromfd(fd, family, sock_type) os.close(fd)zwith wr:z for data in datas:z( # let the parent block on recv()z time.sleep(sleep_time)z wr.sendall(data)rMr)socketrgrPrQrRintfamilytyper+filenor$rSr rTrVr6) rZ recv_funcrWrXrYr.fdrrZrrr _test_recvs8     zSocketEINTRTest._test_recvcCs|tjjdSr)rurorecvrrrr test_recvszSocketEINTRTest.test_recvrecvmsgzneeds recvmsg()cCs|dddS)NcSs||dSr )rxsockrZrrrr>r4z.SocketEINTRTest.test_recvmsg..)rurrrr test_recvmsgszSocketEINTRTest.test_recvmsgc Cs(t\}}||jdtjd}dddddt|jdt|j d |j d tjdd dd d dddddddddddddf}| }|j |t ||gd}t|h|d}|t|kr||t||d} || durt|n| 7}q||dWdn1s0YdS)Nsxyzr0rHrjrIrkrlrmrKzdata = b"xyz" * %sr]z)rd = socket.fromfd(fd, family, sock_type)rnzwith rd:z$ # let the parent block on send()rLz' received_data = bytearray(data_len)z n = 0z while n < data_len:z8 n += rd.recv_into(memoryview(received_data)[n:])zif received_data != data:z0 raise Exception("recv error: %s vs %s bytes"z5 % (len(received_data), data_len))rMr)rorgrPrQrZ SOCK_MAX_SIZErRrprqrrr+rsr$rSr rVr`rTr6) rZ send_funcrWrXrZr.rtrrasentrrr _test_sendsL       zSocketEINTRTest._test_sendcCs|tjjdSr)r}rosendrrrr test_sendszSocketEINTRTest.test_sendcCs|tjjdSr)r}rosendallrrrr test_sendallszSocketEINTRTest.test_sendallsendmsgzneeds sendmsg()cCs|dddS)NcSs ||gSr)rryrrrr>r4z.SocketEINTRTest.test_sendmsg..)r}rrrr test_sendmsgszSocketEINTRTest.test_sendmsgc Csttjdf}||j|d}ddddtjd|d|jdd d d d f }| |}t |4| \}}|| | dWdn1s0YdS) Nrr rHzimport socket, timerIz host = %rz port = %srKz# let parent block on accept()r^z,with socket.create_connection((host, port)):rL)ro create_serverrZHOSTrPrQ getsocknamerRr+r$r acceptrTr6)rrzportr.rZ client_sockr2rrr test_accepts(     zSocketEINTRTest.test_accept r0mkfifozneeds mkfifo()c Cstj}t|zt|Wn2tyP}z|d|WYd}~n d}~00|tj|dddd|d|j dddd|f }| |}t |(||| | d Wdn1s0YdS) Nzos.mkfifo(): %srHimport os, timerIz path = %arKz# let the parent blockr^r)rTESTFNunlinkr;rPermissionErrorZskipTestrPrRr+r$r rTr6)rZdo_open_close_readerZdo_open_close_writerfilenameer.rrrr _test_open:s, $  zSocketEINTRTest._test_opencCst|d}|dS)Nw)openrQ)rpathfprrr python_openYs zSocketEINTRTest.python_opendarwinz+hangs under macOS; see bpo-25234, bpo-35363cCs|d|jdS)Nzfp = open(path, 'r') fp.close())rrrrrr test_open]szSocketEINTRTest.test_opencCst|tj}t|dSr)r;rO_WRONLYrQ)rrrtrrros_opencszSocketEINTRTest.os_opencCs|d|jdS)Nz,fd = os.open(path, os.O_RDONLY) os.close(fd))rrrrrr test_os_opengszSocketEINTRTest.test_os_openN)r(r)r*rcrdrerorurwr{r}rrrrrZrequires_freebsd_versionr;rrskipIfrplatformrrrrrrrrfs0 # .      rfc@seZdZddZdS) TimeEINTRTestcCs:t}t|j|t|}|||jdSr)time monotonicsleepr+r!assertGreaterEqualrt0dtrrr test_sleeprs   zTimeEINTRTest.test_sleepN)r(r)r*rrrrrrnsrpthread_sigmaskzneed signal.pthread_sigmask()c@sHeZdZddZeeeddddZeeedddd Z d S) SignalEINTRTestc Cstj}t}t|dd}|tj||dddtdt|d|jdd f}ttj |g}|tjtj |gt }| |}t|$||t |} Wdn1s0Y||d dS) NcWsdSrr)r&rrrr>r4z/SignalEINTRTest.check_sigwait..rHrzpid = %sz signum = %srKr^zos.kill(pid, signum)r)rSIGUSR1r;getpidrPrRrpr+r SIG_BLOCK SIG_UNBLOCKrrr$r rTr6) rr7rr@Z old_handlerr.Zold_maskrrrrrr check_sigwaits(     *zSignalEINTRTest.check_sigwait sigwaitinfozneed signal.sigwaitinfo()cCsdd}||dS)NcSst|gdSr)rrrrrrr7sz3SignalEINTRTest.test_sigwaitinfo..wait_funcrrr7rrrtest_sigwaitinfosz SignalEINTRTest.test_sigwaitinfo sigtimedwaitcCsdd}||dS)NcSst|gddS)Ng^@)rrrrrrr7sz4SignalEINTRTest.test_sigtimedwait..wait_funcrrrrrtest_sigtimedwaitsz!SignalEINTRTest.test_sigtimedwaitN) r(r)r*rrcrdrerrrrrrrrzs   rc@seZdZddZeejdkdee e ddddZ ee e d d d d Z ee e d dddZ ee e ddddZdS)SelectEINTRTestcCs@t}tggg|jt|}||||jdSr)rrselectr+r!rrrrr test_selects  zSelectEINTRTest.test_selectrz(poll may fail on macOS; see issue #28087pollzneed select.pollcCsFt}t}||jdt|}||||jdSNg@@)rrrrr+r!rrZpollerrrrrr test_polls  zSelectEINTRTest.test_pollepollzneed select.epollcCsNt}||jt}||jt|}|| ||jdSr) rrrPrQrrrr+r!rrrrr test_epolls   zSelectEINTRTest.test_epollkqueuezneed select.kqueuecCsRt}||jt}|dd|jt|}|| ||jdSr ) rrrPrQrrZcontrolr+r!r)rrrrrrr test_kqueues  zSelectEINTRTest.test_kqueuedevpollzneed select.devpollcCsRt}||jt}||jdt|}|| ||jdSr) rrrPrQrrrr+r!rrrrr test_devpolls  zSelectEINTRTest.test_devpollN)r(r)r*rrcrrrrdrerrrrrrrrrrs    rc@s8eZdZddZeedkdddZddZ d S) FNTLEINTRTestc Cs<|tjtjdddtjd|d|jf}t}||}t |t tjd}t|}|dkr|t d|z,||t j t jB||t jtd Wq\tyYqYq\0q\||t j t|}|||j|Wdn1s0Y|Wdn1s.0YdS) NrHzimport fcntl, timezwith open('%s', 'wb') as f:z fcntl.%s(f, fcntl.LOCK_EX)z time.sleep(%s)wbgN@z failed to sync child in %.1f secg{Gz?)rPrrrrRr+rrr$r r ExceptionfcntlZLOCK_EXZLOCK_NBZLOCK_UNrBlockingIOErrorrr!r6)rZ lock_funcZ lock_namer.Z start_timerfrrrr_locks2         (zFNTLEINTRTest._lockZAIXzAIX returns PermissionErrorcCs|tjddS)Nlockf)rrrrrrr test_lockfszFNTLEINTRTest.test_lockfcCs|tjddS)Nflock)rrrrrrr test_flock szFNTLEINTRTest.test_flockN) r(r)r*rrcrrsystemrrrrrrrs  r__main__) contextlibrrr;rrrror$rrrctestrZ test.supportrcontextmanagerr rdreZTestCaser r-rfrrrrr(mainrrrr sD   'h7  /8)