add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
3

�
�^�pc@sdZddlZddlZddlmZmZddlZddlZddlZddl	m
Z
dd�ZGdd�de�Z
Gd	d
�d
ej�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZdS)z/
Various tests for synchronization primitives.
�N)�start_new_thread�TIMEOUT_MAX)�supportcCstjd�dS)N�{�G�z�?)�time�sleep�rr�'/usr/lib64/python3.6/test/lock_tests.py�_waitsr	c@s2eZdZdZddd�Zdd�Zdd�Zd	d
�ZdS)
�Bunchz
    A bunch of threads.
    Fc
s|��_|�_g�_g�_|�_tj��_�jj���fdd�}y xt	|�D]}t
|f�qNWWnd�_�YnXdS)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        csDtj�}�jj|�z
��Wd�jj|�x�js<t�q.WXdS�N)�	threadingZ	get_ident�started�append�finished�	_can_exitr	)Ztid��f�selfrr�task%s
zBunch.__init__.<locals>.taskTN)r�nr
rrr�wait_threads_exit�wait_threadZ	__enter__�ranger)rrrZwait_before_exitr�irrr�__init__s


zBunch.__init__cCs xt|j�|jkrt�qWdSr)�lenr
rr	�rrrr�wait_for_started6�zBunch.wait_for_startedcCs0xt|j�|jkrt�qW|jjddd�dSr)rrrr	rZ__exit__rrrr�wait_for_finished:s
zBunch.wait_for_finishedcCs
d|_dS�NT)rrrrr�	do_finish@�zBunch.do_finishN)F)�__name__�
__module__�__qualname__�__doc__rrrr!rrrrr
s

r
c@s$eZdZdd�Zdd�Zdd�ZdS)�BaseTestCasecCstj�|_dSr)rZthreading_setup�_threadsrrrr�setUpEr"zBaseTestCase.setUpcCstj|j�tj�dSr)rZthreading_cleanupr(Z
reap_childrenrrrr�tearDownHszBaseTestCase.tearDowncCs$|j||d�|j||d�dS)Ng333333�?g$@)ZassertGreaterEqual�
assertLess)rZactualZexpectedrrr�
assertTimeoutLszBaseTestCase.assertTimeoutN)r#r$r%r)r*r,rrrrr'Dsr'c@sxeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    cCs|j�}~dSr)�locktype�r�lockrrr�test_constructorZ�zBaseLockTests.test_constructorcCs|j�}|jt|�d�~dS)Nz<unlocked .* object (.*)?at .*>)r.�assertRegex�reprr/rrr�	test_repr^�zBaseLockTests.test_reprcCs&|j�}|j�|jt|�d�~dS)Nz<locked .* object (.*)?at .*>)r.�acquirer3r4r/rrr�test_locked_reprcszBaseLockTests.test_locked_reprcC�|j�}|j�~dSr)r.r7r/rrr�test_acquire_destroyi�z"BaseLockTests.test_acquire_destroycCs|j�}|j�|j�~dSr�r.r7�releaser/rrr�test_acquire_releasensz"BaseLockTests.test_acquire_releasecCs$|j�}|j|jd��|j�dS�NF)r.�
assertTruer7r=r/rrr�test_try_acquiretr6zBaseLockTests.test_try_acquirecsJ|j���j�g���fdd�}t|d�j�|j�d��j�dS)Ncs�j�jd��dSr?�rr7r�r0�resultrrr}r"z3BaseLockTests.test_try_acquire_contended.<locals>.f�r)r.r7r
r�assertFalser=�rrrrCr�test_try_acquire_contendedysz(BaseLockTests.test_try_acquire_contendedcsp|j���j�d}�fdd�}t||�}|j�t�|jt|j�d��j�|j	�|jt|j�|�dS)N�c��j��j�dSr�r7r=r�r0rrr�r2z/BaseLockTests.test_acquire_contended.<locals>.fr)
r.r7r
rr	�assertEqualrrr=r�r�Nr�brrLr�test_acquire_contended�s
z$BaseLockTests.test_acquire_contendedcsV|j���fdd�}d�fdd�	}|�t|d�j�|jt|t�t|d�j�dS)NcrJrrKrrLrrr�r2z"BaseLockTests.test_with.<locals>.fc	s ��|dk	r|�WdQRXdSrr�ZerrrLrr�_with�sz&BaseLockTests.test_with.<locals>._withrEr)r.r
r�assertRaises�	TypeError)rrrSrrLr�	test_with�szBaseLockTests.test_withcs`|j���fdd�}ttj��}t|d�j�ttj��|kr\tjd�|j|ttj���dS)NcrJrrKrrLrrr�r2z)BaseLockTests.test_thread_leak.<locals>.fig�������?)	r.rrZ	enumerater
rrrrM)rrrrrLr�test_thread_leak�s
zBaseLockTests.test_thread_leakcs�|j��|jt�jdd�|jt�jd
d�|jt�jdd�|jt�jtdd��jtd��j�tj�}|j�jdd��tj�}|j	||d�g���fdd�}t
|d�j�|j�d�|j
�dd	�dS)NrrEid��timeoutg}Ô%�I�TrIcs4tj�}�j�jdd��tj�}�j||�dS)N��?rX)rrr7)�t1�t2�r0�resultsrrr�sz%BaseLockTests.test_timeout.<locals>.frZi����)r.rT�
ValueErrorr7Z
OverflowErrorrr=rr@r+r
rrFr,)rr[r\rrr]r�test_timeout�s zBaseLockTests.test_timeoutcCs"|j�}tj|�}|j|��dSr)r.�weakref�refZassertIsNotNone�rr0rbrrr�test_weakref_exists�s
z!BaseLockTests.test_weakref_existscCs$|j�}tj|�}~|j|��dSr)r.rarbZassertIsNonercrrr�test_weakref_deleted�s
z"BaseLockTests.test_weakref_deletedN)r#r$r%r&r1r5r8r:r>rArHrQrVrWr`rdrerrrrr-Us
r-c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c
s�|j��g���fdd�}tj��nt|f�xt��dkrDt�q0Wt�|jt��d��j�xt��dkrzt�qfW|jt��d�WdQRXdS)Ncs(�j��jd��j��jd�dSr)r7rr�r0Zphaserrr�s
z#LockTests.test_reacquire.<locals>.frrE�)r.rrrrr	rMr=rGrrgr�test_reacquire�s



zLockTests.test_reacquirecsB|j���j��fdd�}t|d�}|j��j��j�dS)Nc��j�dSr)r=rrLrrr�r"z*LockTests.test_different_thread.<locals>.frE)r.r7r
rr=�rrrPrrLr�test_different_thread�s
zLockTests.test_different_threadcCsN|j�}|j�|j|jdd��|j�|j|j��|j|jdd��dS)NrrXF)Zblocking)r.r7rFr=Zlockedr@r/rrr�test_state_after_timeoutsz"LockTests.test_state_after_timeoutN)r#r$r%r&rirlrmrrrrrf�srfc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
RLockTestsz$
    Tests for recursive locks.
    cCs<|j�}|j�|j�|j�|j�|j�|j�dSrr<r/rrrriszRLockTests.test_reacquirecCsX|j�}|jt|j�|j�|j�|j�|j�|j�|j�|jt|j�dSr)r.rT�RuntimeErrorr=r7r/rrr�test_release_unacquired�z"RLockTests.test_release_unacquiredcCsX|j�}|jt|j�|j�|j�|j�|j�|j�|j�|jt|j�dSr)r.rTroZ
_release_saver7r=r/rrr�test_release_save_unacquired&rqz'RLockTests.test_release_save_unacquiredc
sJ|j���fdd�}t|dd�}z|jt�j�Wd|j�X|j�dS)Ncrjr)r7rrLrrr5r"z+RLockTests.test_different_thread.<locals>.frET)r.r
rTror=r!rrkrrLrrl2s
z RLockTests.test_different_threadcs�|j��|j�j���j�|j�j���j�|j�j��g���fdd�}t|d�j�|j�d��j�|j�j���j�|j�j��dS)Ncs�j�j��dSr)r�	_is_ownedrrCrrrFr"z$RLockTests.test__is_owned.<locals>.frEr)r.rFrsr7r@r
rr=rGrrCr�test__is_owned>szRLockTests.test__is_ownedN)	r#r$r%r&rirprrrlrtrrrrrn
s	rnc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�
EventTestsz"
    Tests for Event objects.
    cCsr|j�}|j|j��|j�|j|j��|j�|j|j��|j�|j|j��|j�|j|j��dSr)�	eventtyperFZis_set�setr@�clear�r�evtrrr�test_is_setUszEventTests.test_is_setcs|d}g�g����fdd�}t||�}|j�t�|jt��d��j�|j�|j�dg|�|j�dg|�dS)NrIcs �j�j���j�j��dSr�r�waitr�rz�results1�results2rrrfsz#EventTests._check_notify.<locals>.frT)r
rr	rMrrwr)rrzrOrrPrr~r�
_check_notifyas
zEventTests._check_notifycCs0|j�}|j|�|j�|j�|j|�dSr)rvr�rwrxryrrr�test_notifyrs

zEventTests.test_notifycs�|j��g�g�d}���fdd�}t||�j�|j�dg|�x&�D]\}}|j|�|j|d�qJWg�g��j�t||�j�|j�dg|�x�D]\}}|j|�q�WdS)NrIcs@�j�jd��tj�}�jd�}tj�}�j|||f�dS)NgrZ)rr}r)r[�rr\r~rrrs

z"EventTests.test_timeout.<locals>.fFrZT)rvr
rrMrFr,rwr@)rrOrr��dtrr~rr`zs"
zEventTests.test_timeoutcsn|j��g�d�d}���fdd�}t||�}|j�tj���j��j�|j�|j�dg|�dS)Ng�?rIcs�j�j�d��dS�N�r|r�rzr^rYrrr�r"z(EventTests.test_set_and_clear.<locals>.fT)	rvr
rrrrwrxrrMrNrr�r�test_set_and_clear�s

zEventTests.test_set_and_clearcCs\|j�}|j�|j|jjd��WdQRX|j�|j�|j|jjd��WdQRXdSr?)rvZ_condrFr7Z_reset_internal_locksryrrr�test_reset_internal_locks�sz$EventTests.test_reset_internal_locksN)
r#r$r%r&r{r�r�r`r�r�rrrrruPsruc@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�ConditionTestsz(
    Tests for condition variables.
    c
Cs�|j�}|j�|j�|j�|j�tj�}|j|�}|j�|j|jd��|j�|j|jd��|j|jd��|j�|�|j|jd��WdQRXdSr?)�condtyper7r=rZLockrFr@)r�condr0rrr�test_acquire�s
zConditionTests.test_acquirecC�|j�}|jt|j�dSr)r�rTror}�rr�rrr�test_unacquired_wait�r2z#ConditionTests.test_unacquired_waitcCr�r)r�rTro�notifyr�rrr�test_unacquired_notify�r2z%ConditionTests.test_unacquired_notifycs�d}g�g�g�d������fdd�}t||�}|j�xt��dkrPt�q<W�j�|j�g��j��jd�t�d��j�xt��dkr�t�q�W|j�d
gd�|j�g�xt��dkr�t�q�W�j��jd�t�d��j�x"t��t��d	k�rt��q�W|j�dgddgd�|j�d
gd�xt��dk�rht��qPW�j��j	�t�d��j�xt��dk�r�t��q�W|j�dgddgd�|j�dgddgd�|j
�dS)NrIrcsd�j��j���j�}�j��j|�f��j��j���j�}�j��j|�f�dSr)r7rr}r=�rD�r��	phase_numZreadyrr�rrr�s

z'ConditionTests._check_notify.<locals>.f�rETrhi�TrEr��Trhr�r�r�r�)Tr�)r
rrr	rxrMr7r�r=Z
notify_allr)rr�rOrrPrr�rr��sX





zConditionTests._check_notifycCs |j�}|j|�|j|�dSr)r�r�r�rrrr�s
zConditionTests.test_notifycsh|j��g�d}��fdd�}t||�j�|jt��|�x&�D]\}}|j|d�|j|�qBWdS)NrIcs@�j�tj�}�jd�}tj�}�j��j|||f�dS)NrZ)r7rr}r=r)r[rDr\�r�r^rrr"s
z&ConditionTests.test_timeout.<locals>.frZ)r�r
rrMrr,rF)rrOrr�rDrr�rr`szConditionTests.test_timeoutc
sv�j��d����fdd�}t|d�}|j�x:td�D].}tjd����d7��j�WdQRXq8W|j�dS)Nrcs<��.�j�fdd��}�j|��j�d�WdQRXdS)Nc��dkSr�rr��staterr�<lambda>9�z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>r�)�wait_forr@rMr��r�rr�rrr7s
z&ConditionTests.test_waitfor.<locals>.frEr�r)r�r
rrrrr�r�rrrPrrr�r�test_waitfor4s

zConditionTests.test_waitforc
s��j��d�g�����fdd�}t|d�}|j�x:td�D].}tjd����d7��j�WdQRXq>W|j��jt	��d�dS)Nrcs^��Ptj�}�j�fdd�dd�}tj�|}�j|��j|d��jd�WdQRXdS)Ncr�r�rrr�rrr�Lr�z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>g�������?rX)rr�rFr,r)r�rD�r�rr�ZsuccessrrrIs
z.ConditionTests.test_waitfor_timeout.<locals>.frEr�r)
r�r
rrrrr�rrMrr�rr�r�test_waitfor_timeoutEs

z#ConditionTests.test_waitfor_timeoutN)r#r$r%r&r�r�r�r�r�r`r�r�rrrrr��sJr�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    cCs,|jt|jdd�|jt|jtjd�dS)NrE)Zvaluei����)rTr_�semtype�sysZmaxsizerrrrr1brz#BaseSemaphoreTests.test_constructorcCsH|jd�}|j�|j�|jd�}|j�|j�|j�|j�dS)NrErh)r�r7r=�r�semrrrr�fs

zBaseSemaphoreTests.test_acquirecCr9r)r�r7r�rrrr:pr;z'BaseSemaphoreTests.test_acquire_destroycs�|jd���j�d}g�g�g�d������fdd�}t|d�}|j�xt��t��dkrjt�qNW|j��dgd�d�xtd�D]}�j�q�Wxt��t��dkr�t�q�W|jt	���dgddgd�d	�xtd�D]}�j�q�Wx"t��t��d
k�r$t��qW|jt	���dgddgdd	gd�|j
�jd���j�|j�|j�dgd�dS)N��
rcs4�j�j���j���j�j���j��dSrrBr�r�rr�r�Zsem_resultsrrr}s
z4BaseSemaphoreTests.test_acquire_contended.<locals>.firE�
rh�FTr�r�i)r�r7r
rrr	rMrr=�sortedrFr)rrOrrPrrr�rrQus:



$.z)BaseSemaphoreTests.test_acquire_contendedcCsV|jd�}|j|jd��|j|jd��|j|jd��|j�|j|jd��dS)NrhF)r�r@r7rFr=r�rrrrA�s
z#BaseSemaphoreTests.test_try_acquirecsV|jd���j�g���fdd�}t|d�j�|jt��dgddgd�dS)	Nr�cs$�j�jd���j�jd��dSr?rBr�r^r�rrr�sz8BaseSemaphoreTests.test_try_acquire_contended.<locals>.frIFr�Tr�)r�r7r
rrMr�rGrr�rrH�s
z-BaseSemaphoreTests.test_try_acquire_contendedcCs�|jd�}|jt|jddd�|j|jdd��|j|jdd��|j|jdd��|j�|j|jdd��tj�}|j|jdd��tj�|}|j|d�dS)NrhF��?rXg{�G�zt?rZ)	r�rTr_r7r@rFr=rr,)rr�Ztr�rrr�test_acquire_timeout�s
z'BaseSemaphoreTests.test_acquire_timeoutcsT|j���j��fdd�}t|d�}|j�t�|j|j��j�|j�dS)NcrJrrKr�r�rrr�r2z0BaseSemaphoreTests.test_default_value.<locals>.frE)	r�r7r
rr	rFrr=rrkrr�r�test_default_value�s
z%BaseSemaphoreTests.test_default_valuecsb�jd��d��fdd�	}|��j�jd���j��jt|t��j�jd���j�dS)NrhcsT��F�j�jd���j����j�jd��|r<|�WdQRXWdQRXdSr?)r@r7r=rFrRr�rrrS�sz+BaseSemaphoreTests.test_with.<locals>._withFr)r�r@r7r=rTrU)rrSrr�rrV�s
zBaseSemaphoreTests.test_withN)
r#r$r%r&r1r�r:rQrArHr�r�rVrrrrr�]s
%

r�c@�eZdZdZdd�ZdS)�SemaphoreTestsz)
    Tests for unbounded semaphores.
    cCs.|jd�}|j�|j�|j�|j�dS�NrE)r�r=r7r�rrrrp�s

z&SemaphoreTests.test_release_unacquiredN�r#r$r%r&rprrrrr���r�c@r�)�BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    cCs8|j�}|jt|j�|j�|j�|jt|j�dSr)r�rTr_r=r7r�rrrrp�s
z-BoundedSemaphoreTests.test_release_unacquiredNr�rrrrr��r�r�c@s�eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	d"d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!S)#�BarrierTestsz$
    Tests for Barrier objects.
    rIg@cCs|j|j|jd�|_dS)NrX)�barriertyperO�defaultTimeout�barrierrrrrr)�r"zBarrierTests.setUpcCs|jj�dSr)r��abortrrrrr*r"zBarrierTests.tearDowncCs"t||jd�}|�|j�dSr�)r
rOrrkrrr�run_threadsszBarrierTests.run_threadscCs�|jj}|j||j�xtt|�D]h}|djd�|jt|d�||�|jj�|djd�|jt|d�|d|�|jj�q W|j|jjd�|j	|jj
�dS)NrTrE)r�ZpartiesrMrOrrrr}�	n_waitingrF�broken)rr^rZmrrrr�	multipasss
zBarrierTests.multipassrEcs&ggg����fdd�}�j|�dS)z;
        Test that a barrier is passed in lockstep
        cs�j���dSr)r�r��passesr^rrrrr"z$BarrierTests.test_barrier.<locals>.fN�r�)rr�rrr�r�test_barrierszBarrierTests.test_barriercCs
|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        r�)r�rrrr�test_barrier_10szBarrierTests.test_barrier_10cs:g���fdd�}�j|��jt��tt�j���dS)z9
        test the return value from barrier.wait
        cs�jj�}�j|�dSr)r�r}r)r��r^rrrr)s
z(BarrierTests.test_wait_return.<locals>.fN)r�rMZsumrrOrGrr�r�test_wait_return$s
zBarrierTests.test_wait_returncs<g��fdd�}�j�j|�����fdd�}�j|�dS)z,
        Test the 'action' callback
        cs�jd�dSr )rr)r^rr�action5r"z(BarrierTests.test_action.<locals>.actioncs�j��jt��d�dSr�)r}rMrr�r�r^rrrr8r2z#BarrierTests.test_action.<locals>.fN�r�rOr�)rr�rrr�r�test_action0s
zBarrierTests.test_actioncsZg�g����fdd�}�j|��jt��d��jt���jd��j�jj�dS)zK
        Test that an abort will put the barrier in a broken state
        csvy4�jj�}|�jdkrt��jj��jd�Wn<tjk
rT�jd�Yntk
rp�jj�YnXdS�NrhT)r�r}rOrorr�BrokenBarrierErrorr��r�rr�rrrrDs


z"BarrierTests.test_abort.<locals>.frrEN)r�rMrrOr@r�r�rGrr�r�
test_abort>s
zBarrierTests.test_abortcsdg�g�g�����fdd�}�j|��jt��d��jt���jd��jt���j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        cs��jj�}|�jdkrFx �jj�jdkr8tjd�qW�jj�n:y�jj��jd�Wn tj	k
r~�jd�YnX�jj��jd�dS)NrhrEg����MbP?T)
r�r}rOr�rr�resetrrr�r��rr��results3rrrr]s


z"BarrierTests.test_reset.<locals>.frrEN)r�rMrrOrGrr�r�
test_resetVs
zBarrierTests.test_resetcsrg�g�g��j�j�������fdd�}�j|��jt��d��jt���jd��jt���j�dS)zF
        Test that a barrier can be reset after being broken.
        cs�y4�jj�}|�jdkrt��jj��jd�Wn<tjk
rT�jd�Yntk
rp�jj�YnX�j��jdkr��jj��j��jj��jd�dSr�)	r�r}rOrorrr�r�r�r��Zbarrier2rr�r�rrrr|s 




z,BarrierTests.test_abort_and_reset.<locals>.frrEN)r�rOr�rMrrGrr�r�test_abort_and_resetts
z!BarrierTests.test_abort_and_resetcs�fdd�}�j|�dS)z$
        Test wait(timeout)
        cs:�jj�}|�jdkr"tjd��jtj�jjd�dS)Nrhr�rZ)r�r}rOrrrTrr�r�rrrr�s


z$BarrierTests.test_timeout.<locals>.fNr�rGrrrr`�szBarrierTests.test_timeoutcs,�j�jdd����fdd�}�j|�dS)z4
        Test the barrier's default timeout
        g333333�?rXcs4�j�}|�jdkr tjd��jtj�j�dS)Nrhr�)r}rOrrrTrr�r��r�rrrr�s
z,BarrierTests.test_default_timeout.<locals>.fNr�rGrr�r�test_default_timeout�sz!BarrierTests.test_default_timeoutcCs|jd�}|j�|j�dSr�)r�r})rrPrrr�test_single_thread�s
zBarrierTests.test_single_threadN)rE)r#r$r%r&rOr�r)r*r�r�r�r�r�r�r�r�r�r`r�r�rrrrr��s"
	"r�)r&r�rZ_threadrrrZunittestraZtestrr	Zobjectr
ZTestCaser'r-rfrnrur�r�r�r�r�rrrrZ<module>s*11C^0~