o
    ,wi                     @   s\   d dl mZ e  d dlZd dlZd dlmZ G dd deejZe	dkr,e
  dS dS )    )monkeyN)SubscriberCleanupMixinc                       st   e Zd ZdZ fddZ fddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Z  ZS )
TestMonkeyNc                    sP   t t|   g | _| | jj i  | _}tj	 D ]
\}}|
 ||< qd S N)superr   setUp
all_eventsaddSubscriberappend
orig_savedr   saveditemscopy)selfr   kv	__class__ V/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/gevent/tests/test__monkey.pyr      s   
zTestMonkey.setUpc                    s"   | j t_| ` | `tt|   d S r   )r   r   r   r   r   r   tearDown)r   r   r   r   r      s   zTestMonkey.tearDownc                 C   (   dd l }ddlm } | |j|j d S )Nr   )time)r   geventassertIssleep)r   r   gtimer   r   r   	test_time      zTestMonkey.test_timec                 C   s   dd l }dd l}ddlm} | |j|j tjd d dk r(| |j|j n| |j	|j
 | tdd tjd dkrfddlm} ddlm} | |j|j | tdd	 | |j| d S d S )
Nr   )thread   )      	threadingEvent)r#   )r$   _Event)_threadr#   r   r   r   start_new_threadsysversion_info_start_new_thread_start_joinable_threadstart_joinable_thread
assertTruer   is_object_patchedgevent.eventr$   _sleepr%   )r   r   r#   gthread
gthreadingGEventr   r   r   test_thread!   s   zTestMonkey.test_threadc                 C   r   )Nr   )socket)r5   r   r   create_connection)r   r5   gevent_socketr   r   r   test_socket6   r   zTestMonkey.test_socketc                 C   s|   dd l }dd l}ddlm } dD ]+}t||r;t||}| dt| | ||j | 	||j
 | |t|| qd S )Nr   os)forkforkptyzbuilt-in)r:   typesr   hasattrgetattrassertNotInreprassertNotIsInstanceBuiltinFunctionTypeassertIsInstanceFunctionTyper   )r   r:   r=   gosnameattrr   r   r   test_os;   s   

zTestMonkey.test_osc                 C   sP   |  tj tj D ]\}}|  t| |D ]}|  t|| qqd S r   )r-   r   r   r   is_module_patchedr.   )r   modnameobjectsobjnamer   r   r   
test_savedG   s   zTestMonkey.test_savedc                 C   sP   t dd}| dt| | |t dd t   | |t dd d S )N
subprocessPopenr   )r   get_originalr@   rA   r   patch_subprocess)r   rP   r   r   r   test_patch_subprocess_twiceO   s
   z&TestMonkey.test_patch_subprocess_twicec                 C   s8  dd l }| j}|jddT}tjddd | t|d | dt|d j	 | |g  |d d = tjdd	 | t|d | dt|d j	 | |g  tj
d
 | jd
< W d    n1 sdw   Y  dtj
v r{d| jvr{tj
d | jd< | | jtj
 tj
d  D ]\}}| dt|||f qd S )Nr   T)recordF*   )r:   extra_kwarg   zmore than oncer9   '_gevent_saved_patch_all_module_settingsloggingr#   r   )warningsr   catch_warningsr   	patch_allassertEquallenassertInstrmessager   r   r   r@   )r   rZ   r   issued_warningsr   r   r   r   r    test_patch_twice_warnings_eventsV   s,   
z+TestMonkey.test_patch_twice_warnings_eventsc                    s>  ddl m  ddlm} | j} fdd}| | i t_tjdddd | 	|d  j
 | d	di|d j | j|d  | 	|d
  j | j|d
  | 	|d  j | j|d
  | 	|d  j | j|d  | 	|d  j | j|d  |D ]}| t| jo|jdk qd S )Nr   events)verifyc                    s$   t |  jr| jdkr jd S d S )Nssl)
isinstanceGeventWillPatchModuleEventmodule_name
DoNotPatch)eventrd   r   r   veto~   s   z*TestMonkey.test_patch_events.<locals>.vetoFrU   )r   selectrV   rV   rW   r    rg   )r   re   gevent.testingrf   r   r	   r   r   r\   rD   GeventWillPatchAllEventr]   patch_all_kwargsverifyObjectIGeventWillPatchAllEventri   IGeventWillPatchModuleEventGeventDidPatchModuleEvent!GeventDidPatchBuiltinModulesEvent"IGeventDidPatchBuiltinModulesEventGeventDidPatchAllEventIGeventDidPatchAllEventassertFalserh   rj   )r   rf   r   rm   er   rd   r   test_patch_eventsy   s.   
zTestMonkey.test_patch_eventsc                 C   sX   dd l }dd lm } | |j|j | |j|j | |j|j | |j|j d S )Nr   )queuegevent.queuer   SimpleQueue	LifoQueueQueuePriorityQueue)r   r   gqr   r   r   test_patch_queue   s   zTestMonkey.test_patch_queue)__name__
__module____qualname__maxDiffr   r   r   r4   r8   rI   rN   rS   rc   r~   r   __classcell__r   r   r   r   r      s    
#!r   __main__)r   r   r\   r(   unittestgevent.testing.testcaser   TestCaser   r   mainr   r   r   r   <module>   s     