python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
_test_eintr.cpython-312.pyc

͑eF"dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZddlmZej$dZej(eeddGd	d
ej,Zej(eeddGddeZej(eeddGd
deZej(eeddGddeZej(eeddej(eeddGddeZej(eeddGddeZGddeZedk(rej>yy)a
This test suite exercises some system calls subject to interruption with EINTR,
to check that it is actually handled transparently.
It is intended to be run by the main test suite within a child process, to
ensure there is no background thread running (so that signals are delivered to
the correct thread).
Signals are generated in-process using setitimer(ITIMER_REAL), which allows
sub-second periodicity (contrarily to signal()).
N)support)	os_helper)
socket_helperc#rK|5	|	dddy#|jxYw#1swYyxYww)zGContext manager killing the subprocess if a Python exception is raised.N)kill)procs D/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/_test_eintr.py
kill_on_errorr
sA
	J	IIKs 7+	7(+47	setitimerzrequires setitimer()cDeZdZdZdZdZdZdZdZe	dZ
dZdZy	)

EINTRBaseTestz Base class for EINTR tests. g?g?c.|xjdz
c_yN)signals)selfsignumframes   r	
sighandlerzEINTRBaseTest.sighandler3sc6d|_tjtj|j|_tj
tj|j|jtjddtjy)NriXT)exitfile)
rsignalSIGALRMrorig_handlerrITIMER_REALsignal_delay
signal_periodfaulthandlerdump_traceback_latersys
__stderr__rs r	setUpzEINTRBaseTest.setUp6sf"MM&..$//J++T->->++	-
	))'/2~~	?rcNtjtjddyNr)rrrrr	
stop_alarmzEINTRBaseTest.stop_alarmAs++Q2rc|jtjtj|jt	j
yN)r)rrrr cancel_dump_traceback_laterr$s r	tearDownzEINTRBaseTest.tearDownEs0

fnnd&7&78002rcXtjdf|z}tj|fi|S)Nz-c)r"
executable
subprocessPopen)rargskwcmd_argss    r	r0zEINTRBaseTest.subprocessJs+NND)D0/B//rN)
__name__
__module____qualname____doc__rr
sleep_timerr%staticmethodr)r-r0r(rr	r
r
's@'LMJ	?333
0rr
ceZdZdZdZdZdZeje	e
dddZdZd	Z
eje	e
d
ddZd
ZdZy)OSEINTRTestz  EINTR tests for the os module. cBd|jz}|j|S)Nzimport time; time.sleep(%r))r9r0)rcodes  r	new_sleep_processzOSEINTRTest.new_sleep_processSs,t>t$$rcd}t|Dcgc]}|j}}t|D]	}||D]}|jycc}w)N)ranger?wait)r	wait_funcnum_	processesrs      r	_test_wait_multiplezOSEINTRTest._test_wait_multipleWs_7<SzB!T++-B	Bs	AK		DIIK		CsAcB|jtjyr+)rHosrCr$s r		test_waitzOSEINTRTest.test_wait`s  )rwait3zrequires wait3()c(|jdy)Nc,tjdSr')rJrLr(rr	<lambda>z(OSEINTRTest.test_wait3.<locals>.<lambda>es!r)rHr$s r	
test_wait3zOSEINTRTest.test_wait3cs  !45rch|j}||j|jyr+)r?pidrC)rrDrs   r	_test_wait_singlezOSEINTRTest._test_wait_singlegs%%%'$((		rc(|jdy)Nc.tj|dSr')rJwaitpidrRs r	rOz*OSEINTRTest.test_waitpid.<locals>.<lambda>ns2::c1+=rrSr$s r	test_waitpidzOSEINTRTest.test_waitpidms=>rwait4zrequires wait4()c(|jdy)Nc.tj|dSr')rJrZrWs r	rOz(OSEINTRTest.test_wait4.<locals>.<lambda>rs288C+;rrXr$s r	
test_wait4zOSEINTRTest.test_wait4ps;<rc"tj\}}|jtj|gd}dj	dddd|zd|j
zddd	d
df
}|j
|t||g}t|5tj||D]1}|j|tj|t|3|j|jd
dddy#1swYyxYw)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)
rJpipe
addCleanupclosejoinr9r0strr
assertEqualreadlenrC)rrdwrdatasr>rdatas       r		test_readzOSEINTRTest.test_readtsB"%
.yy"#5 / 2($
tSWt<
4
 	-HHRL
?  rwwr3t9'=>
?TYY[!,		-	-	-s
A,DDctj\}}|jtj|dtj
z}dj
dddd|jzdtj
zddd	d
dddd
ddddddf}|j|t||g}t|5tj|d}|t|kr4|tj|t||dz
}|t|kr4|j|jddddy#1swYyxYw)Nxr_zimport io, os, sys, timer`zrd = int(sys.argv[1])rbzdata = 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))rdr)rJrfrgrhr
PIPE_MAX_SIZErir9r0rjr
rmwrite
memoryviewrkrC)rrnrorqr>rwrittens       r	
test_writezOSEINTRTest.test_writes/B"%g+++yy&#/!6!66"/$&93(*>;'
,tSWt<
4
 	-HHRLGCI%288B
4(8(BCCCI%TYY[!,	-	-	-s6AD9 D99EN)r5r6r7r8r?rHrKunittest
skipUnlesshasattrrJrPrSrYr]rrr{r(rr	r<r<Os*%*XW-/AB6C6?XW-/AB=C=-:$-rr<c&eZdZdZej
eedddZdZ	ej
eejdddZ
d	Zd
ZdZ
ej
eejdd
dZdZej"ddej
eedddZdZej*ej.dk(ddZdZej*ej.dk(ddZy)SocketEINTRTestz$ EINTR tests for the socket module. 
socketpairzneeds socketpair()cxtj\}}|j|jgd}dj	ddddt|jzdt|jzd|zd	|jzdd
dddd
dddf}|j}|j|t||g}t|5|j|D]$}|j|||t|&|j|jddddy#1swYyxYw)N)rtyzr_import os, socket, sys, timer`fd = int(sys.argv[1])family = %ssock_type = %srarbz)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)rdr)socketrrgrhriintfamilytyper9filenor0rjr
rkrmrC)	r	recv_funcrnrorpr>fdrrqs	         r	
_test_recvzSocketEINTRTest._test_recvs%""$B!#yy*#C		N*s277|+5 /7$6,&!
&YY[tSWt<
4
 	-HHJ
A  ySY'?@
ATYY[!,		-	-	-s

AD00D9cV|jtjjyr+)rrrecvr$s r		test_recvzSocketEINTRTest.test_recv

**+rrecvmsgzneeds recvmsg()c(|jdy)Nc*|j|dSr')rsockrqs  r	rOz.SocketEINTRTest.test_recvmsg.<locals>.<lambda>s4<<+=a+@r)rr$s r	test_recvmsgzSocketEINTRTest.test_recvmsgs@Arctj\}}|j|jdtj
dzz}dj
ddddt|jzdt|jzd	|jzd
tj
dzzdddd
dddddddddddddf}|j}|j|t||g}t|5|jd}|t|kr6||t!||d}	||	t|n|	z
}|t|kr6|j#|j%ddddy#1swYyxYw)NsxyzrAr_rr`rrrrbzdata = b"xyz" * %sruz)rd = socket.fromfd(fd, family, sock_type)rzwith rd:z$    # let the parent block on send()rcz'    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))rdr)rrrgrhr
SOCK_MAX_SIZErirrrr9rr0rjr
rmryrkrC)
r	send_funcrnrorqr>rrrzsents
          r	
_test_sendzSocketEINTRTest._test_sendsy""$B!..!34yy*#C		N*s277|+/ G$9$9Q$>?"72(5%F'>C1
6YY[tSWt<
4
 	-HHJGCI% Z%5gh%?@3t9$>CI%
TYY[!,	-	-	-s8AE8 E88FcV|jtjjyr+)rrsendr$s r		test_sendzSocketEINTRTest.test_sendrrcV|jtjjyr+)rrsendallr$s r	test_sendallzSocketEINTRTest.test_sendalls

--.rsendmsgzneeds sendmsg()c(|jdy)Nc&|j|gSr+)rrs  r	rOz.SocketEINTRTest.test_sendmsg.<locals>.<lambda>s4<<+?r)rr$s r	test_sendmsgzSocketEINTRTest.test_sendmsgs?@rc
tjtjdf}|j	|j
|j
d}djdddtjzd|zd|jzdd	d
ddf
}|j|}t|5|j\}}|j|j|jddddy#1swYyxYw)
Nrrr_zimport socket, timer`z	host = %rz	port = %srbz# let parent block on accept()rvz,with socket.create_connection((host, port)):rc)r
create_serverrHOSTrgrhgetsocknamerir9r0r
acceptrkrC)rrportr>rclient_sockrFs       r	test_acceptzSocketEINTRTest.test_accepts##]%7%7$;<

#!!$yy!-,,,$/,$:(
t$
4
 	-![[]NKTYY[!,	-	-	-s
,AC99D
rAmkfifozneeds mkfifo()ctj}tj|	tj||jtj|djddd|zd|jzdddd|f	}|j|}t|5|||j|jd	dddy#t
$r}|j
d|zYd}~d}~wwxYw#1swYyxYw)
Nzos.mkfifo(): %sr_import os, timer`z	path = %arbz# let the parent blockrvr)rTESTFNunlinkrJrPermissionErrorskipTestrgrir9r0r
rkrC)rdo_open_close_readerdo_open_close_writerfilenameer>rs       r	
_test_openzSocketEINTRTest._test_open;s##	"	1IIh	
	(((3yy("/$$ 


t$
4
 	- *TYY[!,	-	-#	1MM+a/00	1"	-	-s#C")C>	C;C66C;>Dc<t|d}|jy)Nw)openrh)rpathfps   r	python_openzSocketEINTRTest.python_openZs
$_

rdarwinz+hangs under macOS; see bpo-25234, bpo-35363c<|jd|jy)Nzfp = open(path, 'r')
fp.close())rrr$s r		test_openzSocketEINTRTest.test_open^s	
:((	*rcvtj|tj}tj|yr+)rJrO_WRONLYrh)rrrs   r	os_openzSocketEINTRTest.os_opends!
WWT2;;
'
rc<|jd|jy)Nz,fd = os.open(path, os.O_RDONLY)
os.close(fd))rrr$s r	test_os_openzSocketEINTRTest.test_os_openhs	
G	&rN)r5r6r7r8r|r}r~rrrrrrrrrrrequires_freebsd_versionrJrrskipIfr"platformrrrr(rr	rrsY.X68LM!-N!-F,X	:<MNBOB,-\,/X	:<MNAOA-8&W%%b!,XX.0@A-B--:X__S\\X-BD*D*X__S\\X-BD&D&rrceZdZdZdZy)
TimeEINTRTestz" EINTR tests for the time module. ctj}tj|j|j	tj|z
}|j||jyr+)time	monotonicsleepr9r)assertGreaterEqualrt0dts   r	
test_sleepzTimeEINTRTest.test_sleepssM
^^


4??#
^^

"DOO4rN)r5r6r7r8rr(rr	rros
,5rrpthread_sigmaskzneed signal.pthread_sigmask()ceZdZdZdZejeedddZ	ejeedddZ
y)	SignalEINTRTestz$ EINTR tests for the signal module. ctj}tj}tj|d}|j	tj||djddtjzdt
|zd|jzddf}tjtj|g}|j	tjtj|g|j|}t|5||ddd|j|jd	y#1swY*xYw)
Ncyr+r()r2s r	rOz/SignalEINTRTest.check_sigwait.<locals>.<lambda>srr_rzpid = %szsignum = %srbrvzos.kill(pid, signum)r)rSIGUSR1rJgetpidrgrirr9r	SIG_BLOCKSIG_UNBLOCKr0r
rkrC)rrDrrRold_handlerr>old_maskrs        r	
check_sigwaitzSignalEINTRTest.check_sigwaitsiikmmF,>?

v{;yy$CK'/$"

))&*:*:VHE..0B0BVHMt$
4
 	f		
a(		s	EEsigwaitinfozneed signal.sigwaitinfo()c,d}|j|y)Nc0tj|gyr+)rrrs r	rDz3SignalEINTRTest.test_sigwaitinfo.<locals>.wait_funcsx(rrrrDs  r	test_sigwaitinfoz SignalEINTRTest.test_sigwaitinfos	)	
9%rsigtimedwaitc,d}|j|y)Nc2tj|gdy)Ng^@)rrrs r	rDz4SignalEINTRTest.test_sigtimedwait.<locals>.wait_funcs%0rrrs  r	test_sigtimedwaitz!SignalEINTRTest.test_sigtimedwaits	1	
9%rN)r5r6r7r8rr|r}r~rrrr(rr	rr{sf/)2X746&6&X846&6&rrc\eZdZdZdZejejdk(deje
edddZeje
edd	d
Z
eje
eddd
Zeje
edddZy)SelectEINTRTestz$ EINTR tests for the select module. ctj}tjggg|jtj|z
}|j	|j||jyr+)rrselectr9r)rrs   r	test_selectzSelectEINTRTest.test_selectsS
^^


b"b$//2
^^

"DOO4rrz(poll may fail on macOS; see issue #28087pollzneed select.pollctj}tj}|j|jdztj|z
}|j|j
||jyNg@@)rrrrr9r)rrpollerrrs    r		test_pollzSelectEINTRTest.test_polls_
^^
DOOc)*
^^

"DOO4repollzneed select.epollcFtj}|j|jt	j
}|j
|jt	j
|z
}|j|j||jyr+)
rrrgrhrrrr9r)rrs    r	
test_epollzSelectEINTRTest.test_epollsh%
^^
DOO$
^^

"DOO4rkqueuezneed select.kqueuecJtj}|j|jt	j
}|j
dd|jt	j
|z
}|j|j||jyr)
rrrgrhrrcontrolr9r)r)rrrrs    r	test_kqueuezSelectEINTRTest.test_kqueuesl%
^^
tQ0
^^

"DOO4rdevpollzneed select.devpollcLtj}|j|jt	j
}|j
|jdzt	j
|z
}|j|j||jyr)
rrrgrhrrrr9r)rrs    r	test_devpollzSelectEINTRTest.test_devpollsn!%
^^
DOOc)*
^^

"DOO4rN)r5r6r7r8rr|rr"rr}r~rrrrrr(rr	rrs.5X__S\\X-?AX02DE5FA5X13FG5H5X24HI5J5X35JK5L5rrcneZdZdZej
ejdk(ddZdZ	y)
FNTLEINTRTestc|jtjtjdj	ddtjzd|zd|j
zf}t
j}|j|}t|5ttjd5}t
j}tjtjdD]B}	||tjtj z||tj"Dt
j|z
}t'd	|z#t$$rYnwxYw||tjt
j|z
}|j)||j
|j+dddn#1swYnxYw|j-dddy#1swYyxYw)
Nr_zimport fcntl, timezwith open('%s', 'wb') as f:z   fcntl.%s(f, fcntl.LOCK_EX)z   time.sleep(%s)wbF)errorz failed to sync child in %.1f sec)rgrrrrir9rrr0r
rrsleeping_retryLONG_TIMEOUTfcntlLOCK_EXLOCK_NBLOCK_UNBlockingIOError	Exceptionrr)rC)	r	lock_func	lock_namer>
start_timerfrFrs	         r	_lockzFNTLEINTRTest._locks	(()*:*:;yy )I,<,<<+i7$//1	34
^^%
t$
4
 	i&&-
"!^^-
 //0D0DERMA!!U]]U]]%BC!!U]]3M)J6B#$F$KLL	+!U]]+^^%
2''DOO<!'
"
"
"(
IIK+			sIG,0=G.?E-'G	E!	G E!	!AG>	G,G	G,,G5AIXzAIX returns PermissionErrorcD|jtjdy)Nlockf)rrrr$s r	
test_lockfzFNTLEINTRTest.test_lockf	s

5;;(rcD|jtjdy)Nflock)rrrr$s r	
test_flockzFNTLEINTRTest.test_flock
s

5;;(rN)
r5r6r7rr|rrsystemrr r(rr	r	r	s>DX___X__&%/1NO)P))rr	__main__) r8
contextlibr rrJrrrrr0r"rr|testrtest.supportrrcontextmanagerr
r}r~TestCaser
r<rrrrr	r5mainr(rr	<module>r)s	



"&WV[13IJ$0H%%$0K$0NWV[13IJe--e-Ke-PWV[13IJs&ms&Ks&lWV[13IJ5M5K5WV[13IJWV%6746*&m*&6K
*&ZWV[13IJ55m55K55p()M()VzHMMOr