a
    3ji                     @   s   d dl mZ edZddlZddlZddlZddlZddl	m
Z
 ddl	mZ G dd dZd	d
 e D Zejeejed\ZZG dd dZdd
 e D Zejeeed\ZZG dd dZejeed\ZZdd Zedkre  dS )   )util	importlib    N)support)
lock_testsc                   @   s8   e Zd Zedd ZdZdZdZdZdZ	dZ
dZdZdS )ModuleLockAsRLockTestsc                 C   s
   |  dS )NZ	some_lockLockType)cls r   Z/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_importlib/test_locks.py<lambda>       zModuleLockAsRLockTests.<lambda>N)__name__
__module____qualname__classmethodZlocktypeZtest__is_ownedZtest_try_acquireZtest_try_acquire_contendedZ	test_withZtest_timeoutZtest_release_save_unacquiredZ	test_reprZtest_locked_reprr   r   r   r   r      s   r   c                 C   s   i | ]\}}||j jqS r   )
_bootstrap_ModuleLock.0kindZ	splitinitr   r   r   
<dictcomp>    s   r   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DeadlockAvoidanceTestsc                 C   s6   zt  | _td W n ty0   d | _Y n0 d S )Ngư>)sysgetswitchintervalold_switchintervalr   setswitchintervalAttributeErrorselfr   r   r   setUp+   s
    
zDeadlockAvoidanceTests.setUpc                 C   s   | j d urt| j  d S N)r   r   r   r   r   r   r   tearDown2   s    
zDeadlockAvoidanceTests.tearDownc                    s   d fddt  D  fddt  D |r< }n d }t|g fddfdd	}t||  t| S )
N
   c                    s   g | ]}  t|qS r   )r	   strr   ir   r   r   
<listcomp>8   r   zFDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.<listcomp>c                    s$   g | ]}| |d     fqS )r   r   r&   )NLOCKSlocksr   r   r(   9   r   r   c                    s,   z|    W n  jy"   Y dS 0 dS dS )zOTry to acquire the lock. Return True on success,
            False on deadlock.FTN)acquireDeadlockError)lockr   r   r   _acquireA   s
    zDDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>._acquirec                     sN     \} } | }   |}||f |r>|  |rJ|   d S r"   )popwaitappendrelease)abZrarb)r.   barrierpairsresultsr   r   fK   s    z=DeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.f)range	threadingBarrierr   ZBunchZwait_for_finishedassertEquallen)r    Zcreate_deadlockZNTHREADSr9   r   )r)   r.   r6   r*   r7   r8   r    r   run_deadlock_avoidance_test6   s    


z2DeadlockAvoidanceTests.run_deadlock_avoidance_testc                 C   s>   |  d}|d}| |d | |dt||  d S )NTTFr   TT)r?   countZassertGreaterEqualr=   r>   )r    r8   Znb_deadlocksr   r   r   test_deadlockY   s    

z$DeadlockAvoidanceTests.test_deadlockc                 C   s6   |  d}| |dd | |dt| d S )NFr@   r   rA   )r?   r=   rB   r>   )r    r8   r   r   r   test_no_deadlockb   s    
z'DeadlockAvoidanceTests.test_no_deadlockN)r   r   r   r!   r#   r?   rC   rD   r   r   r   r   r   )   s
   #	r   c                 C   s   i | ]\}}||j jqS r   )r   _DeadlockErrorr   r   r   r   r   h   s   )r	   r,   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )LifetimeTestsc                 C   s   | j jS r"   )initr   r   r   r   r   	bootstrapt   s    zLifetimeTests.bootstrapc                 C   sd   d}|  || jj | j|}| || jj t|}~t  |  || jj | 	|  d S )NZxyzzy)
ZassertNotInrH   _module_locks_get_module_lockZassertInweakrefrefr   
gc_collectZassertIsNone)r    namer-   wrr   r   r   test_lock_lifetimex   s    
z LifetimeTests.test_lock_lifetimec                 C   s&   t   | dt| jj| jj d S )Nr   )r   rM   r=   r>   rH   rI   r   r   r   r   test_all_locks   s    zLifetimeTests.test_all_locksN)r   r   r   propertyrH   rP   rQ   r   r   r   r   rF   r   s   
rF   )rG   c                  C   s    t  } tjt jg| R   d S r"   )r   Zthreading_setupunittestZaddModuleCleanupZthreading_cleanup)thread_infor   r   r   setUpModule   s    rU   __main__) r   Z	test_utilZimport_importlibrG   r   r;   rS   rK   testr   r   r   itemsZ
LOCK_TYPESZ	test_bothZ
RLockTestsZFrozen_ModuleLockAsRLockTestsZSource_ModuleLockAsRLockTestsr   ZDEADLOCK_ERRORSZFrozen_DeadlockAvoidanceTestsZSource_DeadlockAvoidanceTestsrF   ZFrozen_LifetimeTestsZSource_LifetimeTestsrU   r   Zunittetsmainr   r   r   r   <module>   sB   

?