HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/greenlet/tests/__pycache__/__init__.cpython-310.pyc
o

���g$�@s8dZddlZddlZddlZddlmZddlmZddlmZ	ddl
mZddl
m
Z
ddlZddl
m
Zdd	l
mZdd
lmZddlmZdd
lmZejdd�dkZejdd�dkZej�d�Zej�d�Zej�d�pseZej�d�Zep}eZ ej�d�Z!Gdd�de"�Z#Gdd�de#dej$fi��Z$dS)z
Tests for greenlet.

�N)�collect)�get_objects)�active_count)�sleep)�time)�greenlet)�
getcurrent)�get_pending_cleanup_count)�get_total_main_greenlets�)�	leakcheck�)��)r�
�win�GITHUB_ACTIONS�TRAVIS�APPVEYOR�GREENLET_MANYLINUXc@seZdZdd�ZdS)�TestCaseMetaClasscCs\d}t|���D]\}}|�d�r%t|�r%|�|�|r!t�|�}|||<qt�||||�S)NT�test)	�list�items�
startswith�callable�popr�
wrap_refcount�type�__new__)�cls�	classname�bases�	classDict�check_totalrefcount�key�value�r'�B/usr/local/lib/python3.10/dist-packages/greenlet/tests/__init__.pyr's

�zTestCaseMetaClass.__new__N)�__name__�
__module__�__qualname__rr'r'r'r(r$srcs�eZdZdZdZ		ddd�Zedfdd�Zd	Zd	Z	d	Z
d
Zdd�Z�fd
d�Z
�fdd�Zdd�Zdd�Zddd�Zddd�Z�ZS)�TestCaseg����MbP?rNcCs�|p|j}|p	|j}|j}t|�t�|j}t�s't�|ks'|jsUt	�|krUt|�t�|krEt
d�t
d|dt��t
d|dt	��nt�s't�|ks'|jsUt	�|ks't�dS)NzTime limit exceeded.zThreads: Waiting for onlyz-->zMGlets : Waiting for only)�threads_before_test�main_greenlets_before_test�cleanup_attempt_sleep_durationrr�cleanup_max_sleep_secondsr	�active_thread_count�expect_greenlet_leakr
�printr)�self�initial_active_threads�initial_main_greenlets�
sleep_time�
quit_afterr'r'r(�wait_for_pending_cleanupsBs8


�
�

����
�

	z"TestCase.wait_for_pending_cleanupsTcsHtd�D]}t�q|rt�fdd�t�D��St�fdd�t�D��S)Nrc3s �|]}t|��urdVqdS�rN)r��.0�x��kindr'r(�	<genexpr>js���z)TestCase.count_objects.<locals>.<genexpr>c3s�|]
}t|��rdVqdSr:)�
isinstancer;r>r'r(r@ps��
�)�ranger�sumr)r4r?�
exact_kind�_r'r>r(�
count_objectsds��zTestCase.count_objectsrFcCs|�td�S)zJ
        Find all the greenlets and subclasses tracked by the GC.
        F)rF�RawGreenlet�r4r'r'r(�count_greenlets{szTestCase.count_greenletscs>t���t�t�|_t�|_|�|j|j�|��|_	dS�N)
�super�setUprr1r-r
r.r9rI�greenlets_before_testrH��	__class__r'r(rL�s
zTestCase.setUpcs.t|dd�rdS|�|j|j�t���dS)N�skipTearDownF)�getattrr9r-r.rK�tearDownrHrNr'r(rR�szTestCase.tearDowncCs(ddl}ts|j|jf}|Sd}|S)Nr)rl	l)�signal�WIN�SIGABRT�SIGSEGV)r4rS�
expected_exitr'r'r(�,get_expected_returncodes_for_aborted_process�s%����z5TestCase.get_expected_returncodes_for_aborted_processc
Cs6zt����jWSty}zt�d�|�d}~ww)a�
        Return the current process's USS in bytes.

        uss is available on Linux, macOS, Windows. Also known as
        "Unique Set Size", this is the memory which is unique to a
        process and which would be freed if the process was terminated
        right now.

        If this is not supported by ``psutil``, this raises the
        :exc:`unittest.SkipTest` exception.
        zuss not supportedN)�psutil�Process�memory_full_info�uss�AttributeError�unittest�SkipTest)r4�er'r'r(�get_process_uss�s��zTestCase.get_process_ussc
Cs�ddl}tj�tj�t�|�}z
|jtj|gd|j	d�WS|j
yB}z|r=td�td|�td�t|j�td��d}~ww)Nrzutf-8)�encoding�stderrz-----zFailed to run scriptz~~~~~z------)
�
subprocess�os�path�join�dirname�__file__�check_output�sys�
executable�STDOUT�CalledProcessErrorr3�output)r4�script_name�show_outputrd�script�exr'r'r(�
run_script�s(
��

��zTestCase.run_scriptcCslddl}|�|j��}|j|dd�}|}Wd�n1swY|dur+|��}|�|jj|�|jS)NrF)rq)rd�assertRaisesrnrtrX�assertIn�	exception�
returncode)r4rp�	exitcodesrd�excro�__traceback_info__r'r'r(�assertScriptRaises�s�zTestCase.assertScriptRaises)NN)TrJ)r)r*r+r/r0r9rrFrMr-r.r2rIrLrRrXrartr|�
__classcell__r'r'rNr(r,:s$
�"
-
r,�NewBase)%�__doc__rerkr^�gcrr�	threadingrr1rrrYrrGr�greenlet._greenletr	r
�r�version_info�PY312�PY313�platformrrT�environ�get�RUNNING_ON_GITHUB_ACTIONS�RUNNING_ON_TRAVIS�RUNNING_ON_APPVEYOR�
RUNNING_ON_CI�RUNNING_ON_MANYLINUXrrr,r'r'r'r(�<module>s:
�