
    \eA!                     v    d dl Z d dlmZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
  G d dej                        Zy)    N)mock)greenthread)base)eventletutilsc                       e Zd Z fdZ fdZ ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z	 ej                  d      d        Z
 ej                  d      d        Z ej                  dd	      d
        Z ej                  d      d        Zd Z ej                  d      d        Zd Zd Zd Zd Z ej                  d      d        Z xZS )EventletUtilsTestc                 j    t         t        |           t        j                  | _        dt        _        y )NT)superr   setUpr   EVENTLET_AVAILABLE
_old_availself	__class__s    E/usr/lib/python3/dist-packages/oslo_utils/tests/test_eventletutils.pyr   zEventletUtilsTest.setUp   s&    ,.'::+/(    c                 T    t         t        |           | j                  t        _        y N)r
   r   tearDownr   r   r   r   s    r   r   zEventletUtilsTest.tearDown    s    /1+/??(r   z!oslo_utils.eventletutils._patcherc                    d|_         d|j                  _        t        j                  d      5 }t        j
                  d       t        j                  dg       d d d        | j                  dt                     |d   }| j                  t        |j                         | j                  dt        |j                               y # 1 sw Y   oxY w)NTFrecordalwaysos   r   )already_patchedis_monkey_patchedreturn_valuewarningscatch_warningssimplefilterr   warn_eventlet_not_patchedassertEquallenRuntimeWarningcategoryassertInstrmessage)r   mock_patchercapturews       r   test_warning_not_patchedz*EventletUtilsTest.test_warning_not_patched$   s    '+$6;&&3$$D1 	<W!!(+33TF;	< 	CL)AJ4dC		N+	< 	<s   ,C		Cc                    d|_         d|j                  _        t        j                  d      5 }t        j
                  d       t        j                          d d d        | j                  dt                     |d   }| j                  t        |j                         t        j                  D ]'  }| j                  |t        |j                               ) y # 1 sw Y   xY w)NTFr   r   r   r   r   r   r   r   r    r!   r   r"   r#   r$   r%   r&   
_ALL_PATCHr'   r(   r)   r   r*   r+   r,   ms        r   &test_warning_not_patched_none_providedz8EventletUtilsTest.test_warning_not_patched_none_provided0   s    '+$6;&&3$$D1 	6W!!(+335	6 	CL)AJ4)) 	-AMM!S^,	-	6 	6s   *CC%c                    d|_         d|j                  _        t        j                  d      5 }t        j
                  d       t        j                  dg       d d d        | j                  dt                     |d   }| j                  t        |j                         t        j                  D ]'  }| j                  |t        |j                               ) y # 1 sw Y   xY w)NTFr   r   allr   r   r/   r1   s        r   test_warning_not_patched_allz.EventletUtilsTest.test_warning_not_patched_all=   s    '+$6;&&3$$D1 	=W!!(+33UG<	= 	CL)AJ4)) 	-AMM!S^,	-	= 	=s   ,CC'c                    d|_         d|j                  _        t        j                  d      5 }t        j
                  d       t        j                  dg       d d d        | j                  dt                     y # 1 sw Y   %xY w)NTr   r   r   r   )
r   r   r   r   r    r!   r   r"   r#   r$   )r   r*   r+   s      r   test_no_warningz!EventletUtilsTest.test_no_warningJ   sq    '+$6:&&3$$D1 	<W!!(+33TF;	< 	CL)	< 	<s   ,A??Bc                     d|j                   _        | j                  t        j                   d             d|j                   _        | j	                  t        j                   d             y )NTr   F)r   r   
assertTruer   assertFalse)r   r*   s     r   test_eventlet_is_patchedz*EventletUtilsTest.test_eventlet_is_patchedS   sN    6:&&377=>6;&&388>?r   Nc                 L    | j                  t        j                  d             y )Nr   )r;   r   r   r   s    r   test_eventlet_no_patcherz*EventletUtilsTest.test_eventlet_no_patcherZ   s    88>?r   c                    t               d|_        fd|j                  _        t	        j
                  d      5 }t	        j                  d       t        j                  dg       d d d        | j                  dt                     j                  d       t	        j
                  d      5 }t	        j                  d       t        j                  dg       d d d        | j                  dt        |             j                  d       t	        j
                  d      5 }t	        j                  d       t        j                  ddg       d d d        | j                  dt        |             t	        j
                  d      5 }t	        j                  d       t        j                  d	g       d d d        | j                  dt        |             |d   }| j                  t        |j                         d
D ]'  }| j                  |t        |j                                ) y # 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   xY w# 1 sw Y   xY w)NTc                     | v S r    )r2   
is_patcheds    r   <lambda>zBEventletUtilsTest.test_partially_patched_warning.<locals>.<lambda>b   s    qJ r   r   r   r   r   r   threadr5   )r   rE   )setr   r   side_effectr   r    r!   r   r"   r#   r$   addr%   r&   assertNotInr(   r)   )r   r*   r+   r,   r2   rC   s        @r   test_partially_patched_warningz0EventletUtilsTest.test_partially_patched_warning^   s   U
'+$5N&&2$$D1 	<W!!(+33TF;	< 	CL)t$$D1 	<W!!(+33TF;	< 	CL)x $$D1 	FW!!(+33T84DE	F 	CL)$$D1 	=W!!(+33UG<	= 	CL)AJ4! 	0AQAII/	0)	< 	<
	< 	<
	F 	F	= 	=s/   ,H03,H=)-I
,I0H:=I
IIc                 P    | j                  t        t        j                  dg       y )Nz	blah.blah)assertRaises
ValueErrorr   r"   r>   s    r   test_invalid_patch_checkz*EventletUtilsTest.test_invalid_patch_checkz   s     *'AA&-	)r   z"oslo_utils.eventletutils._eventletc           	         t        j                  dd      5  t        j                         }d d d        | j	                  t        j
                         t        j                         }t        j                  }| j	                  ||       t        |      D cg c]+  }|j                  d      rt        t        ||            r|- }}|D ]  }| j                  t        ||              |j                          | j                  |j                                |j                          | j                  |j                                y # 1 sw Y    xY wc c}w )Nz*oslo_utils.eventletutils.is_monkey_patchedT)r   _)r   patchr   EventassertIsInstanceEventletEvent	threadingdir
startswithcallablegetattrr:   hasattrrF   isSet)r   mock_eventlete_eventt_eventt_event_clsr2   public_methodsmethods           r   test_event_api_compatz'EventletUtilsTest.test_event_api_compat   s   ZZD%)+ 	,#))+G	, 	g}'B'BC%%'oog{3%(\ 9c9J"77A#67  9 9 % 	6FOOGGV45	6
 	(()	, 	,9s   EE/EEc                     t        j                          fd}t        j                  |      }t        j
                  j                  dd      5  |j                           j                  d       d d d        y # 1 sw Y   y xY w)Nc                  D    j                   j                                y r   r:   waiteventr   s   r   thread_az9EventletUtilsTest.test_event_no_timeout.<locals>.thread_a   s    OOEJJL)r         ?Fzwait() timed out)	r   rT   r   spawneventlettimeoutTimeoutrf   fail)r   ri   arh   s   `  @r   test_event_no_timeoutz'EventletUtilsTest.test_event_no_timeout   si    ++-	* h'%%c51 	*FFHII()	* 	* 	*s   "A==Bc                 &    t        j                          fd}t        j                  |      fd}t        j                  |      }t        j
                  j                  d      5  |j                          d d d        y # 1 sw Y   y xY w)Nc                  F    j                   j                  d             y )N   re   rg   s   r   ri   z3EventletUtilsTest.test_event_race.<locals>.thread_a   s    OOEJJqM*r   c                      t        j                  d       j                          j                           j	                          y Ng?)rl   sleepclearrF   rf   rp   rh   s   r   thread_bz3EventletUtilsTest.test_event_race.<locals>.thread_b   s*    NN3KKMIIKFFHr   rj   r   rT   r   rk   rl   rm   rn   rf   r   ri   rz   brp   rh   s   `   @@r   test_event_racez!EventletUtilsTest.test_event_race   sq    ++-	+ h'	 h'%%c* 	FFH	 	 	   -BBc                 &    t        j                          fd}t        j                  |      fd}t        j                  |      }t        j
                  j                  d      5  |j                          d d d        y # 1 sw Y   y xY w)Nc                  F    j                   j                  d             y )Nrj   )r;   rf   rg   s   r   ri   z<EventletUtilsTest.test_event_clear_timeout.<locals>.thread_a   s    UZZ_-r   c                      t        j                  d       j                          t        j                  d       j                           j                          y rv   )rl   rw   rx   rf   ry   s   r   rz   z<EventletUtilsTest.test_event_clear_timeout.<locals>.thread_b   s6    NN3KKMNN3KKMFFHr   gffffff?r{   r|   s   `   @@r   test_event_clear_timeoutz*EventletUtilsTest.test_event_clear_timeout   sq    ++-	. h'	 h'%%c* 	FFH	 	 	r   c                     t        j                         g  fd}t        j                  |      }t        j                  |      }t	        j
                  d       j                          t        j                  j                  d      5  |j                          |j                          d d d         j                  j                                 j                  ddg       y # 1 sw Y   =xY w)Nc                      j                  d      } j                  |        t              dk(  r"j                  |        j	                          y j                  |        y )Ng?r   )rf   appendr$   r:   rx   r;   )resultrh   r   wakess    r   thread_funczCEventletUtilsTest.test_event_set_clear_timeout.<locals>.thread_func   sJ    ZZ_FLL 5zQ'  (r   r   g333333?TF)r   rT   r   rk   rl   rw   rF   rm   rn   rf   r;   is_setr#   )r   r   rp   r}   rh   r   s   `   @@r   test_event_set_clear_timeoutz.EventletUtilsTest.test_event_set_clear_timeout   s    ++-	) k*k*q		%%c* 	FFHFFH	 	($.		 	s   !C,,C5z.oslo_utils.eventletutils._eventlet.event.Eventc                    t        j                         }t        j                         }||g|_        t        j                         }|j                          |j                          | j                  d|j                  j                         y )Nr   )
r   MockrG   r   rT   rF   rx   r#   send
call_count)r   
mock_event	old_event	new_eventrh   s        r   test_event_clear_already_sentz/EventletUtilsTest.test_event_clear_already_sent   s_    IIK	IIK	"+Y!7
++-		INN556r   )__name__
__module____qualname__r   r   r   rQ   r-   r3   r6   r8   r<   r?   rJ   rN   rb   rq   r~   r   r   r   __classcell__)r   s   @r   r   r      sM   0
; TZZ34	, 5	, TZZ34
- 5
- TZZ34
- 5
- TZZ34* 5* TZZ34@ 5@ TZZ3T:@ ;@ TZZ340 506)
 TZZ45) 6).
*$&/0 TZZ@A7 B7r   r   )rU   unittestr   r   rl   r   oslotestr   	test_base
oslo_utilsr   BaseTestCaser   rB   r   r   <module>r      s0          & $N7	.. N7r   