o
    tPf                     @   sR   d dl mZ d dlZd dlZd dlmZ G dd dejZedkr'e	  dS dS )    )contextmanagerN)ignores_leakcheckc                   @   sD   e Zd Zdd Zedd Zedd Zedd Z	ed	d
 Z
dS )TestJoinc                 C   s`   t   }| | | t  j t   }| | t d t   }| | d S )Ng{Gz?)geventget_hubjoin
assertTrueassertFalsedeadsleep)selfres r   \/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__hub_join.pytest_join_many_times
   s   


zTestJoin.test_join_many_timesc                  C   s,   dd l } tdD ]}|  r	 |  sqd S )Nr      )gcrangecollect)r   _r   r   r   __clean   s   zTestJoin.__cleanc                 c   sT    ddl m} | j}|  t| }d V  t| }||kr"|d8 }| || d S )Nr   )get_reachable_greenlets   )gevent._greenlet_primitivesr   _TestJoin__cleanlenassertEqual)r   r   cleancount_beforecount_afterr   r   r   assert_no_greenlet_growth    s   

z"TestJoin.assert_no_greenlet_growthc                    sl   dd l | j dd } fdd}|   tdD ]}|| q~~W d    d S 1 s/w   Y  d S )Nr   c                  S   sB   t jdd d} |   |   t  }|  |jdd ~d S )Nc                   S      dS Nr   r   r   r   r   r   <lambda>9       zcTestJoin.test_join_in_new_thread_doesnt_leak_hub_or_greenlet.<locals>.thread_main.<locals>.<lambda>runTdestroy_loop)r   Greenletstartr   r   destroy)ghubr   r   r   thread_main8   s   zQTestJoin.test_join_in_new_thread_doesnt_leak_hub_or_greenlet.<locals>.thread_mainc                    s&   j | d}|  |     d S )N)target)Threadr*   r   )maintr   	threadingr   r   testerA   s   
zLTestJoin.test_join_in_new_thread_doesnt_leak_hub_or_greenlet.<locals>.tester
   )r4   r   r    r   )r   r.   r5   r   r   r3   r   3test_join_in_new_thread_doesnt_leak_hub_or_greenlet2   s   	

"z<TestJoin.test_join_in_new_thread_doesnt_leak_hub_or_greenletc                 C   sH   dd l }| j}G dd d|j}dd }tdD ]}||| q~~d S )Nr   c                   @   s   e Zd ZdZdd ZdS )zDTestJoin.test_destroy_in_main_thread_from_new_thread.<locals>.ThreadNc                 S   s<   t jdd d}|  |  ~t  }|  || _d S )Nc                   S   r!   r"   r   r   r   r   r   r#   X   r$   zZTestJoin.test_destroy_in_main_thread_from_new_thread.<locals>.Thread.run.<locals>.<lambda>r%   )r   r)   r*   r   r   r-   )r   r,   r-   r   r   r   r&   W   s   
zHTestJoin.test_destroy_in_main_thread_from_new_thread.<locals>.Thread.run)__name__
__module____qualname__r-   r&   r   r   r   r   r0   U   s    r0   c                 S   s6   |  }|   |  |jjdd d |_~|  d S )NTr'   )r*   r   r-   r+   )r0   r   r2   r   r   r   r5   `   s   
zDTestJoin.test_destroy_in_main_thread_from_new_thread.<locals>.testerr6   )r4   r   r0   r   )r   r4   r   r0   r5   r   r   r   r   +test_destroy_in_main_thread_from_new_threadO   s   z4TestJoin.test_destroy_in_main_thread_from_new_threadN)r8   r9   r:   r   staticmethodr   r   r    r   r7   r;   r   r   r   r   r      s    


r   __main__)

contextlibr   unittestr   gevent.testingr   TestCaser   r8   r1   r   r   r   r   <module>   s    l