python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
_test_eintr.cpython-311.pyc

eG|dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZddlmZdZejdZejeedd	Gd
dejZejeedd	Gdd
eZejeedd	GddeZejeedd	GddeZejeedd	ejeeddGddeZejeedd	GddeZGddeZedkrej dSdS)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_helperg{Gz?c#K|5	|Vn#|xYw	ddddS#1swxYwYdS)zGContext manager killing the subprocess if a Python exception is raised.N)kill)procs D/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/_test_eintr.py
kill_on_errorr
"s
	JJJJ	IIKKK
s44#488	setitimerzrequires setitimer()cReZdZdZdZdZdZdZdZe	dZ
dZdZd	Z
d
S)
EINTRBaseTestz Base class for EINTR tests. g?g?c&|xjdz
c_dSN)signals)selfsignumframes   r	
sighandlerzEINTRBaseTest.sighandler9scd|_tjtj|j|_tjtj|j|jtj
ddtjdS)NriXT)exitfile)
rsignalSIGALRMrorig_handlerrITIMER_REALsignal_delay
signal_periodfaulthandlerdump_traceback_latersys
__stderr__rs r	setUpzEINTRBaseTest.setUp<su"M&.$/JJ+T->+	-	-	-
	)'/2~	?	?	?	?	?	?rcFtjtjdddSNr)rrrrr	
stop_alarmzEINTRBaseTest.stop_alarmGs +Q22222rc|tjtj|jt	jdSN)r)rrrr cancel_dump_traceback_laterr$s r	tearDownzEINTRBaseTest.tearDownKs>
fnd&7888022222rcHtjdf|z}tj|fi|S)Nz-c)r"
executable
subprocessPopen)rargskwcmd_argss    r	r0zEINTRBaseTest.subprocessPs,ND)D0//B///rcL|||jtz
dSr+)assertGreaterEqual
sleep_time	CLOCK_RES)relapseds  r	check_elapsed_timez EINTRBaseTest.check_elapsed_timeTs%9)DEEEEErN)__name__
__module____qualname____doc__rrr7rr%staticmethodr)r-r0r:r(rr	r
r
-s''LMJ	?	?	?33\3333
000FFFFFrr
ceZdZdZdZdZdZeje	e
dddZdZd	Z
eje	e
d
ddZd
ZdZdS)OSEINTRTestz  EINTR tests for the os module. c@d|jz}||S)Nzimport time; time.sleep(%r))r7r0)rcodes  r	new_sleep_processzOSEINTRTest.new_sleep_process\s ,t>t$$$rcd}fdt|D}t|D]}|
|D]}|dS)Nc8g|]}Sr()rD).0_rs  r	
<listcomp>z3OSEINTRTest._test_wait_multiple.<locals>.<listcomp>bs%BBB!T++--BBBr)rangewait)r	wait_funcnum	processesrIrs`     r	_test_wait_multiplezOSEINTRTest._test_wait_multiple`sqBBBBuSzzBBB	s		AIKKKK		DIIKKKK		rcD|tjdSr+)rPosrLr$s r		test_waitzOSEINTRTest.test_waitis  )))))rwait3zrequires wait3()c2|ddS)Nc*tjdSr')rRrTr(rr	<lambda>z(OSEINTRTest.test_wait3.<locals>.<lambda>ns!r)rPr$s r	
test_wait3zOSEINTRTest.test_wait3ls   !4!455555rcv|}||j|dSr+)rDpidrL)rrMrs   r	_test_wait_singlezOSEINTRTest._test_wait_singleps6%%''	$(		rc2|ddS)Nc,tj|dSr')rRwaitpidrZs r	rWz*OSEINTRTest.test_waitpid.<locals>.<lambda>ws2:c1+=+=rr[r$s r	test_waitpidzOSEINTRTest.test_waitpidvs ==>>>>>rwait4zrequires wait4()c2|ddS)Nc,tj|dSr')rRrbr_s r	rWz(OSEINTRTest.test_wait4.<locals>.<lambda>{s28C+;+;rr`r$s r	
test_wait4zOSEINTRTest.test_wait4ys ;;<<<<<rcXtj\}}|tj|gd}ddddd|zd|jzddd	d
df
}||t||g}t|5tj||D]8}|	|tj
|t|9|	|d
ddddS#1swxYwYdS)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)
rRpipe
addCleanupclosejoinr7r0strr
assertEqualreadlenrL)rrdwrdatasrCrdatas       r		test_readzOSEINTRTest.test_read}snB"%%%
.--yy"#5 / 2($
tSWWt<<
4
 
 	-	-HRLLL
?
?  rwr3t99'='=>>>>TYY[[!,,,		-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-sA8DD#&D#ctj\}}|tj|dtjz}ddddd|jzdtjzddd	d
dddd
ddddddf}||t||g}t|5tj|d}|t|kr@|tj|t||dz
}|t|k@||dddddS#1swxYwYdS)Nxrgzimport io, os, sys, timerhzrd = int(sys.argv[1])rjzdata = 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))rlr)rRrnrorpr
PIPE_MAX_SIZErqr7r0rrr
ruwrite
memoryviewrsrL)rrvrwryrCrwrittens       r	
test_writezOSEINTRTest.test_writesB"%%%g++yy&#/!66"/$&93(*>;'
,tSWWt<<
4
 
 	-	-HRLLLGCII%%28B
4(8(8(BCCCCII%%TYY[[!,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-s8BEEEN)r;r<r=r>rDrPrSunittest
skipUnlesshasattrrRrXr[rarerzrr(rr	rArAXs**%%%***XW--/ABB66CB6???XW--/ABB==CB=---:$-$-$-$-$-rrAc*eZdZdZejeedddZdZ	ejeejdddZ
d	Zd
ZdZ
ejeejdd
dZdZejddejeedddZdZejejdkddZdZejejdkddZdS)SocketEINTRTestz$ EINTR tests for the socket module. 
socketpairzneeds socketpair()ctj\}}||jgd}dddddt|jzdt|jzd|zd	|jzdd
dddd
dddf}|	}|
|t||g}t|5||D]/}|
|||t|0|
|dddddS#1swxYwYdS)N)r|yzrgimport os, socket, sys, timerhfd = int(sys.argv[1])family = %ssock_type = %srirjz)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)rlr)socketrrorprqintfamilytyper7filenor0rrr
rsrurL)	r	recv_funcrvrwrxrCfdrrys	         r	
_test_recvzSocketEINTRTest._test_recvs"$$B!!!#""yy*#C	NN*s27||+5 /7$6,&!
&YY[[tSWWt<<
4
 
 	-	-HHJJJ
A
A  yySYY'?'?@@@@TYY[[!,,,		-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-sA/EEEcN|tjjdSr+)rrrecvr$s r		test_recvzSocketEINTRTest.test_recv
*+++++rrecvmsgzneeds recvmsg()c2|ddS)Nc8||dSr')rsockrys  r	rWz.SocketEINTRTest.test_recvmsg.<locals>.<lambda>s4<<+=+=a+@r)rr$s r	test_recvmsgzSocketEINTRTest.test_recvmsgs@@AAAAArcbtj\}}||jdtjdzz}dddddt|jzdt|j	zd	|j
zd
tjdzzdddd
dddddddddddddf}|}||t||g}t|5|d}|t|krJ||t!||d}	||	t|n|	z
}|t|kJ||dddddS#1swxYwYdS)NsxyzrFrgrrhrrrrjzdata = b"xyz" * %sr}z)rd = socket.fromfd(fd, family, sock_type)rzwith rd:z$    # let the parent block on send()rkz'    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))rlr)rrrorpr
SOCK_MAX_SIZErqrrrr7rr0rrr
rurrsrL)
r	send_funcrvrwryrCrrrsents
          r	
_test_sendzSocketEINTRTest._test_sends"$$B!!!.!34yy*#C	NN*s27||+/ G$9Q$>?"72(5%F'>C1
6YY[[tSWWt<<
4
 
 	-	-HHJJJGCII%% yZ%5%5ghh%?@@3t999$>CII%%
TYY[[!,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-s;BF$$F(+F(cN|tjjdSr+)rrsendr$s r		test_sendzSocketEINTRTest.test_sendrrcN|tjjdSr+)rrsendallr$s r	test_sendallzSocketEINTRTest.test_sendall!s
-.....rsendmsgzneeds sendmsg()c2|ddS)Nc.||gSr+)rrs  r	rWz.SocketEINTRTest.test_sendmsg.<locals>.<lambda>&s4<<+?+?r)rr$s r	test_sendmsgzSocketEINTRTest.test_sendmsg$s??@@@@@rc<tjtjdf}||j|d}ddddtjzd|zd|jzdd	d
ddf
}|	|}t|5|\}}|||
dddddS#1swxYwYdS)
Nrrrgzimport socket, timerhz	host = %rz	port = %srjz# let parent block on accept()r~z,with socket.create_connection((host, port)):rk)r
create_serverrHOSTrorpgetsocknamerqr7r0r
acceptrsrL)rrportrCrclient_sockrIs       r	test_acceptzSocketEINTRTest.test_accept(sT#]%7$;<<
###!!!$yy!-,,$/,$:(
t$$
4
 
 	-	-![[]]NKTYY[[!,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-s0ADDD
rFmkfifozneeds mkfifo()cBtj}tj|	tj|n/#t
$r"}|d|zYd}~nd}~wwxYw|tj|dddd|zd|j	zdddd|f	}|
|}t|5||||
d	ddddS#1swxYwYdS)
Nzos.mkfifo(): %srgimport os, timerhz	path = %arjz# let the parent blockr~r)rTESTFNunlinkrRrPermissionErrorskipTestrorqr7r0r
rsrL)rdo_open_close_readerdo_open_close_writerfilenameerCrs       r	
_test_openzSocketEINTRTest._test_openDs#	"""	1Ih	1	1	1MM+a/00000000	1	((333yy("/$$ 



t$$
4
 
 	-	-  ***TYY[[!,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-s'7
A#AA#4DDDcNt|d}|dS)Nw)openrp)rpathfps   r	python_openzSocketEINTRTest.python_opencs 
$__





rdarwinz+hangs under macOS; see bpo-25234, bpo-35363c<|d|jdS)Nzfp = open(path, 'r')
fp.close())rrr$s r		test_openzSocketEINTRTest.test_opengs-	
:(	*	*	*	*	*rcltj|tj}tj|dSr+)rRrO_WRONLYrp)rrrs   r	os_openzSocketEINTRTest.os_openms&
WT2;
'
'
rc<|d|jdS)Nz,fd = os.open(path, os.O_RDONLY)
os.close(fd))rrr$s r	test_os_openzSocketEINTRTest.test_os_openqs,	
G	&	&	&	&	&rN)r;r<r=r>rrrrrrrrrrrrrrequires_freebsd_versionrRrrskipIfr"platformrrrr(rr	rrs..X668LMM!-!-NM!-F,,,X	::<MNNBBONB,-,-,-\,,,///X	::<MNNAAONA---8&W%b!,,XX..0@AA--BA-,-:X_S\X-BDD**DD*X_S\X-BDD&&DD&&&rrceZdZdZdZdS)
TimeEINTRTestz" EINTR tests for the time module. ctj}tj|j|tj|z
}||dSr+)time	monotonicsleepr7r)r:rt0dts   r	
test_sleepzTimeEINTRTest.test_sleep|s]
^


4?###
^


"#####rN)r;r<r=r>rr(rr	rrxs),,$$$$$rrpthread_sigmaskzneed signal.pthread_sigmask()ceZdZdZdZejeedddZ	ejeedddZ
dS)	SignalEINTRTestz$ EINTR tests for the signal module. ctj}tj}tj|d}|tj||dddtjzdt
|zd|jzddf}tjtj	|g}|tjtj
|gtj}|
|}t|5||tj|z
}	dddn#1swxYwY||d	dS)
NcdSr+r()r2s r	rWz/SignalEINTRTest.check_sigwait.<locals>.<lambda>s$rrgrzpid = %szsignum = %srjr~zos.kill(pid, signum)r)rSIGUSR1rRgetpidrorqrr7r	SIG_BLOCKSIG_UNBLOCKrrr0r
rsrL)
rrMrrZold_handlerrCold_maskrrrs
          r	
check_sigwaitzSignalEINTRTest.check_sigwaitsikkmF,>,>??
v{;;;yy$CKK'/$"

)&*:VHEE.0BVHMMM
^

t$$
4
 
 	'	'If!!B&B	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'	
a(((((s!"EEEsigwaitinfozneed signal.sigwaitinfo()c6d}||dS)Nc0tj|gdSr+)rrrs r	rMz3SignalEINTRTest.test_sigwaitinfo.<locals>.wait_funcsx(((((rrrrMs  r	test_sigwaitinfoz SignalEINTRTest.test_sigwaitinfos-	)	)	)	
9%%%%%rsigtimedwaitc6d}||dS)Nc2tj|gddS)Ng^@)rrrs r	rMz4SignalEINTRTest.test_sigtimedwait.<locals>.wait_funcs%00000rrrs  r	test_sigtimedwaitz!SignalEINTRTest.test_sigtimedwaits-	1	1	1	
9%%%%%rN)r;r<r=r>rrrrrrrr(rr	rrs/.)))6X77466&&66&X88466&&66&&&rrcxeZdZdZdZejejdkdej	e
edddZej	e
edd	d
Z
ej	e
eddd
Zej	e
edddZdS)SelectEINTRTestz$ EINTR tests for the select module. ctj}tjggg|jtj|z
}|||dSr+)rrselectr7r)r:rs   r	test_selectzSelectEINTRTest.test_selectsc
^


b"b$/222
^


"#####rrz(poll may fail on macOS; see issue #28087pollzneed select.pollc
tj}tj}||jdztj|z
}|||dSNg@@)rrrrr7r)r:rpollerrrs    r		test_pollzSelectEINTRTest.test_pollsq
^

DOc)***
^


"#####repollzneed select.epollc8tj}||jt	j}||jt	j|z
}||	|dSr+)
rrrorprrrr7r)r:rs    r	
test_epollzSelectEINTRTest.test_epolls~%%%
^

DO$$$
^


"#####rkqueuezneed select.kqueuec<tj}||jt	j}|dd|jt	j|z
}||	|dSr)
rrrorprrcontrolr7r)r:)rrrrs    r	test_kqueuezSelectEINTRTest.test_kqueues%%%
^

tQ000
^


"#####rdevpollzneed select.devpollc>tj}||jt	j}||jdzt	j|z
}||	|dSr)
rrrorprrrr7r)r:rs    r	test_devpollzSelectEINTRTest.test_devpolls!!%%%
^

DOc)***
^


"#####rN)r;r<r=r>rrrr"rrrrrrrrr(rr	rrs8..$$$X_S\X-?AAX002DEE$$FEAA$X113FGG$$HG$X224HII$$JI$X335JKK$$LK$$$rrcpeZdZdZejejdkddZdZ	dS)
FNTLEINTRTestc|tjtjdddtjzd|zd|jzf}t
j}||}t|5ttjd5}	t
j|z
}|dkrtd	|z	||tj
tjz||tjt
jd
n#t"$rYnwxYw||tj
t
j|z
}|||dddn#1swxYwY|ddddS#1swxYwYdS)Nrgzimport fcntl, timezwith open('%s', 'wb') as f:z   fcntl.%s(f, fcntl.LOCK_EX)z   time.sleep(%s)wbTgN@z failed to sync child in %.1f secg{Gz?)rorrrrqr7rrr0r
r	ExceptionfcntlLOCK_EXLOCK_NBLOCK_UNrBlockingIOErrorr)r:rL)r	lock_func	lock_namerC
start_timerfrs        r	_lockzFNTLEINTRTest._locksF	()*:;;;yy )I,<<+i7$/1	344
^%%
t$$
4
 
 		i&--
,	))J6BDyy'(JR(OPPP!	!U]U]%BCCC!	!U]333
4((((*		!U]+++^%%
2!!!''+++#
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,$
IIKKK'																		s\G.0FA
D-,F-
D:7F9D::AFGF#	#G&F#	'GGGAIXzAIX returns PermissionErrorcF|tjddS)Nlockf)rrr r$s r	
test_lockfzFNTLEINTRTest.test_lockfs

5;(((((rcF|tjddS)Nflock)rrr#r$s r	
test_flockzFNTLEINTRTest.test_flocks

5;(((((rN)
r;r<r=rrrrsystemr!r$r(rr	rrsn@X__X_&&%/1NOO))PO))))))rr__main__)!r>
contextlibr rrRrrrrr0r"rrtestrtest.supportrrr8contextmanagerr
rrTestCaser
rArrrrrr;mainr(rr	<module>r-s{				















""""""&&&&&&

	WWV[113IJJ'F'F'F'F'FH%'F'FKJ'FTWWV[113IJJe-e-e-e-e--e-e-KJe-PWWV[113IJJs&s&s&s&s&ms&s&KJs&lWWV[113IJJ$$$$$M$$KJ$WWV[113IJJWWV%677466,&,&,&,&,&m,&,&66KJ
,&^WWV[113IJJ5$5$5$5$5$m5$5$KJ5$p&)&)&)&)&)M&)&)&)RzHMOOOOOr