Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/eintrdata/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/eintrdata/__pycache__/eintr_tester.cpython-35.pyc



��YfI?�@s
dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZej
dd��Ze
jeed�d�Gdd	�d	e
j��Ze
jeed�d�Gd
d�de��Ze
jeed�d�Gdd
�d
e��Ze
jeed�d�Gdd�de��Ze
jeed�d�e
jeed�d�Gdd�de���Ze
jeed�d�Gdd�de��Zdd�Zedkre�dS)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)�supportccs3|�&y	|VWn|j��YnXWdQRXdS)zGContext manager killing the subprocess if a Python exception is raised.N)�kill)�proc�r�@/opt/alt/python35/lib64/python3.5/test/eintrdata/eintr_tester.py�
kill_on_errors	
r�	setitimerzrequires setitimer()c@sjeZdZdZdZdZdZedd��Zedd��Z	edd	��Z
d
d�ZdS)
�
EINTRBaseTestz Base class for EINTR tests. g�������?g�������?cCs`tjtjdd��|_tjtj|j|j�ttd�r\tj	ddd�dS)	NcWsdS)Nr)�argsrrr�<lambda>1sz*EINTRBaseTest.setUpClass.<locals>.<lambda>�dump_traceback_later�
�<�exitTiX)
�signal�SIGALRM�orig_handlerr�ITIMER_REAL�signal_delay�
signal_period�hasattr�faulthandlerr)�clsrrr�
setUpClass/s

zEINTRBaseTest.setUpClasscCstjtjdd�dS)Nr)rrr)rrrr�
stop_alarm9szEINTRBaseTest.stop_alarmcCs=|j�tjtj|j�ttd�r9tj�dS)N�cancel_dump_traceback_later)rrrrrrr)rrrr�
tearDownClass=s
zEINTRBaseTest.tearDownClasscOs#tjdf|}tj||�S)Nz-c)�sys�
executable�
subprocess�Popen)�selfr
�kwZcmd_argsrrrrDszEINTRBaseTest.subprocessN)�__name__�
__module__�__qualname__�__doc__rr�
sleep_time�classmethodrrrrrrrrr	#s
r	c@s�eZdZdZdd�Zdd�Zdd�Zeje	e
d�d	�d
d��Zdd
�Zdd�Z
eje	e
d�d�dd��Zdd�Zdd�ZdS)�OSEINTRTestz  EINTR tests for the os module. cCsd|j}|j|�S)Nzimport time; time.sleep(%r))r'r)r!�coderrr�new_sleep_processMs
zOSEINTRTest.new_sleep_processcsbd}�fdd�t|�D�}xt|�D]
}|�q2Wx|D]}|j�qJWdS)N�csg|]}�j��qSr)r+)�.0�_)r!rr�
<listcomp>Ss	z3OSEINTRTest._test_wait_multiple.<locals>.<listcomp>)�range�wait)r!�	wait_funcZnumZ	processesr.rr)r!r�_test_wait_multipleQs
zOSEINTRTest._test_wait_multiplecCs|jtj�dS)N)r3�osr1)r!rrr�	test_waitZszOSEINTRTest.test_wait�wait3zrequires wait3()cCs|jdd��dS)NcSs
tjd�S)Nr)r4r6rrrrr_sz(OSEINTRTest.test_wait3.<locals>.<lambda>)r3)r!rrr�
test_wait3]szOSEINTRTest.test_wait3cCs'|j�}||j�|j�dS)N)r+�pidr1)r!r2rrrr�_test_wait_singleas
zOSEINTRTest._test_wait_singlecCs|jdd��dS)NcSstj|d�S)Nr)r4�waitpid)r8rrrrhsz*OSEINTRTest.test_waitpid.<locals>.<lambda>)r9)r!rrr�test_waitpidgszOSEINTRTest.test_waitpid�wait4zrequires wait4()cCs|jdd��dS)NcSstj|d�S)Nr)r4r<)r8rrrrlsz(OSEINTRTest.test_wait4.<locals>.<lambda>)r9)r!rrr�
test_wait4jszOSEINTRTest.test_wait4cCs�tj�\}}|jtj|�dddg}djdddd|d	|jdd
ddd
f
�}|j|t|�d|g�}t|��[tj|�x0|D](}|j	|tj
|t|���q�W|j	|j�d�WdQRXdS)Nshellosworldsspam�
zimport os, sys, time�zwr = int(sys.argv[1])z
datas = %rzsleep_time = %rzfor data in datas:z$    # let the parent block on read()z    time.sleep(sleep_time)z    os.write(wr, data)�pass_fdsr)
r4�pipe�
addCleanup�close�joinr'r�strr�assertEqual�read�lenr1)r!�rd�wr�datasr*r�datarrr�	test_readns(
!


&zOSEINTRTest.test_readcCs)tj�\}}|jtj|�dtj}djdddd|jdtjddd	d
dddd
ddddddf�}|j|t	|�d|g�}t
|��mtj|�d}x<|t|�kr|tj|t
|�|d��7}q�W|j|j�d�WdQRXdS)N�xr>zimport io, os, sys, timer?zrd = int(sys.argv[1])zsleep_time = %rzdata = b"x" * %szdata_len = len(data)z!# let the parent block on write()ztime.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))r@r)r4rArBrCrZ
PIPE_MAX_SIZErDr'rrErrH�write�
memoryviewrFr1)r!rIrJrLr*r�writtenrrr�
test_write�s<


!

*zOSEINTRTest.test_writeN)r#r$r%r&r+r3r5�unittest�
skipUnlessrr4r7r9r;r=rMrRrrrrr)Is	''r)c@sleZdZdZejeed�d�dd��Zdd�Z	ejeejd�d	�d
d��Z
dd
�Zdd�Zdd�Z
ejeejd�d�dd��Zdd�Zejdd�ejeed�d�dd���Zdd�Zd d!�Zejejd"kd#�d$d%��Zejejd"kd#�d&d'��Zd(S))�SocketEINTRTestz$ EINTR tests for the socket module. �
socketpairzneeds socketpair()c	Cs*tj�\}}|j|j�dddg}djddddt|j�d	t|j�d
|d|jddd
ddddddf�}|j	�}|j
|t|�d|g�}t|��U|j�x-|D]%}|j
|||t|���q�W|j
|j�d�WdQRXdS)NrN�y�zr>zimport os, socket, sys, timer?zfd = int(sys.argv[1])zfamily = %szsock_type = %sz
datas = %rzsleep_time = %rz)wr = socket.fromfd(fd, family, sock_type)z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)r@r)�socketrVrBrCrD�int�family�typer'�filenorrErrFrHr1)	r!Z	recv_funcrIrJrKr*�fdrrLrrr�
_test_recv�s6
!


#zSocketEINTRTest._test_recvcCs|jtjj�dS)N)r_rYZrecv)r!rrr�	test_recv�szSocketEINTRTest.test_recv�recvmsgzneeds recvmsg()cCs|jdd��dS)NcSs|j|�dS)Nr)ra)�sockrLrrrr�sz.SocketEINTRTest.test_recvmsg.<locals>.<lambda>)r_)r!rrr�test_recvmsg�szSocketEINTRTest.test_recvmsgc
Cs{tj�\}}|j|j�dtjd}djddddt|j�dt|j	�d	|j
d
tjddddd
dddddddddddddf�}|j�}|j|t
|�d|g�}t|���|j�d}xW|t|�krY||t|�|d��}	||	dkrOt|�n|	7}qW|j|j�d�WdQRXdS)Nsxyzr,r>zimport os, socket, sys, timer?zfd = int(sys.argv[1])zfamily = %szsock_type = %szsleep_time = %rzdata = b"xyz" * %szdata_len = len(data)z)rd = socket.fromfd(fd, family, sock_type)zos.close(fd)zwith rd:z$    # let the parent block on send()z    time.sleep(sleep_time)z'    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))r@r)rYrVrBrCrZ
SOCK_MAX_SIZErDrZr[r\r'r]rrErrHrPrFr1)
r!Z	send_funcrIrJrLr*r^rrQZsentrrr�
_test_send�sJ
!

&zSocketEINTRTest._test_sendcCs|jtjj�dS)N)rdrY�send)r!rrr�	test_sendszSocketEINTRTest.test_sendcCs|jtjj�dS)N)rdrYZsendall)r!rrr�test_sendallszSocketEINTRTest.test_sendall�sendmsgzneeds sendmsg()cCs|jdd��dS)NcSs|j|g�S)N)rh)rbrLrrrrsz.SocketEINTRTest.test_sendmsg.<locals>.<lambda>)rd)r!rrr�test_sendmsgszSocketEINTRTest.test_sendmsgcCs�tjtjtj�}|j|j�|jtjdf�|j�d}|j	�dj
dddtjd|d|jdd	d
ddf
�}|j|�}t
|��7|j�\}}|j�|j|j�d�WdQRXdS)
Nr�r>zimport socket, timer?z	host = %rz	port = %szsleep_time = %rz# let parent block on accept()ztime.sleep(sleep_time)z,with socket.create_connection((host, port)):z    time.sleep(sleep_time))rYZAF_INETZSOCK_STREAMrBrCZbindrZHOSTZgetsocknameZlistenrDr'rrZacceptrFr1)r!rbZportr*rZclient_sockr.rrr�test_accepts*




zSocketEINTRTest.test_acceptr
r,�mkfifozneeds mkfifo()c
Cs�tj}tj|�tj|�|jtj|�djddd|d|jdddd|f	�}|j|�}t	|��%||�|j
|j�d�WdQRXdS)	Nr>zimport os, timer?z	path = %azsleep_time = %rz# let the parent blockztime.sleep(sleep_time)r)rZTESTFN�unlinkr4rlrBrDr'rrrFr1)r!Zdo_open_close_readerZdo_open_close_writer�filenamer*rrrr�
_test_open8s$	




zSocketEINTRTest._test_opencCst|d�}|j�dS)N�w)�openrC)r!�path�fprrr�python_openTszSocketEINTRTest.python_opencCs|jd|j�dS)Nzfp = open(path, 'r')
fp.close())rort)r!rrr�	test_openXs	zSocketEINTRTest.test_open�darwinz"hangs under OS X; see issue #25234cCs&tj|tj�}tj|�dS)N)r4rq�O_WRONLYrC)r!rrr^rrr�os_open\szSocketEINTRTest.os_opencCs|jd|j�dS)Nz,fd = os.open(path, os.O_RDONLY)
os.close(fd))rorx)r!rrr�test_os_openas	zSocketEINTRTest.test_os_openN)r#r$r%r&rSrTrrYr_r`rcrdrfrgrirkrZrequires_freebsd_versionr4rortru�skipIfr�platformrxryrrrrrU�s'$*.**'rUc@s"eZdZdZdd�ZdS)�
TimeEINTRTestz" EINTR tests for the time module. cCsMtj�}tj|j�|j�tj�|}|j||j�dS)N)�time�	monotonicZsleepr'r�assertGreaterEqual)r!�t0�dtrrr�
test_sleepks

zTimeEINTRTest.test_sleepN)r#r$r%r&r�rrrrr|gsr|�pthread_sigmaskzneed signal.pthread_sigmask()c@speZdZdZdd�Zejeed�d�dd��Z	ejeed�d�d	d
��Z
dS)�SignalEINTRTestz$ EINTR tests for the signal module. c

Cstj}tj�}tj|dd��}|jtj||�djddtj�dt|�d|jdd	f�}tjtj	|g�}|jtjtj
|g�tj�}|j
|�}t|��||�tj�|}	WdQRX|j|j�d
�dS)NcWsdS)Nr)r
rrrrsz/SignalEINTRTest.check_sigwait.<locals>.<lambda>r>zimport os, timezpid = %szsignum = %szsleep_time = %rztime.sleep(sleep_time)zos.kill(pid, signum)r)r�SIGUSR1r4�getpidrBrDrZr'r��	SIG_BLOCK�SIG_UNBLOCKr}r~rrrFr1)
r!r2�signumr8Zold_handlerr*Zold_maskr�rr�rrr�
check_sigwait{s&	




zSignalEINTRTest.check_sigwait�sigwaitinfozneed signal.sigwaitinfo()cCsdd�}|j|�dS)NcSstj|g�dS)N)rr�)r�rrrr2�sz3SignalEINTRTest.test_sigwaitinfo.<locals>.wait_func)r�)r!r2rrr�test_sigwaitinfo�sz SignalEINTRTest.test_sigwaitinfo�sigtimedwaitcCsdd�}|j|�dS)NcSstj|gd�dS)Ng^@)rr�)r�rrrr2�sz4SignalEINTRTest.test_sigtimedwait.<locals>.wait_func)r�)r!r2rrr�test_sigtimedwait�sz!SignalEINTRTest.test_sigtimedwaitN)r#r$r%r&r�rSrTrrr�r�rrrrr�ssr�c@s�eZdZdZdd�Zejejdkd�ej	e
ed�d�dd	���Zej	e
ed
�d�dd
��Z
ej	e
ed�d�dd��Zej	e
ed�d�dd��ZdS)�SelectEINTRTestz$ EINTR tests for the select module. cCsVtj�}tjggg|j�tj�|}|j�|j||j�dS)N)r}r~�selectr'rr)r!r�r�rrr�test_select�s

zSelectEINTRTest.test_selectrvz(poll may fail on macOS; see issue #28087�pollzneed select.pollcCs]tj�}tj�}|j|jd�tj�|}|j�|j||j�dS)Ng@�@)r�r�r}r~r'rr)r!�pollerr�r�rrr�	test_poll�s
zSelectEINTRTest.test_poll�epollzneed select.epollcCsitj�}|j|j�tj�}|j|j�tj�|}|j�|j	||j�dS)N)
r�r�rBrCr}r~r�r'rr)r!r�r�r�rrr�
test_epoll�s
zSelectEINTRTest.test_epoll�kqueuezneed select.kqueuecCsotj�}|j|j�tj�}|jdd|j�tj�|}|j�|j	||j�dS)Nrj)
r�r�rBrCr}r~Zcontrolr'rr)r!r�r�r�rrr�test_kqueue�s
zSelectEINTRTest.test_kqueue�devpollzneed select.devpollcCsmtj�}|j|j�tj�}|j|jd�tj�|}|j�|j	||j�dS)Ng@�@)
r�r�rBrCr}r~r�r'rr)r!r�r�r�rrr�test_devpoll�s
zSelectEINTRTest.test_devpollN)r#r$r%r&r�rSrzrr{rTrr�r�r�r�r�rrrrr��s*
''r�cCstjttttt�dS)N)rZrun_unittestr)rUr|r�r�rrrr�	test_main�sr��__main__)r&�
contextlibrr4r�rrYrrr}rSZtestr�contextmanagerrrTrZTestCaser	r)rUr|r�r�r�r#rrrr�<module>	s:%%%h%�%/%8