σ
P'^c           @@  sΪ   d  d l  m Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z m Z m Z m Z d e f d	     YZ d
 e f d     YZ d e f d     YZ d e f d     YZ d S(   i    (   t   absolute_importN(   t   BasePool(   t	   monotonic(   t   state(   t	   autoscale(   t   AppCaset   Mockt   patcht   sleepdeprivedt   Objectc           B@  s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR	      s   t   MockPoolc           B@  sD   e  Z e Z e Z d    Z d d  Z d d  Z e d    Z	 RS(   c         O@  s8   t  t |   j | |   t   |  _ |  j |  j _ d  S(   N(   t   superR   t   __init__R	   t   _poolt   limitt
   _processes(   t   selft   argst   kwargs(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR      s    i   c         C@  s   |  j  j | 7_ d  S(   N(   R   R   (   R   t   n(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   grow   s    c         C@  sF   |  j  r t d   n  |  j r0 t d   n  |  j j | 8_ d  S(   Nt   foo(   t   shrink_raises_exceptiont   KeyErrort   shrink_raises_ValueErrort
   ValueErrorR   R   (   R   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   shrink   s
    		c         C@  s
   |  j  j S(   N(   R   R   (   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   num_processes#   s    (
   R
   R   t   FalseR   R   R   R   R   t   propertyR   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR      s   	t   test_WorkerComponentc           B@  s   e  Z d    Z RS(   c         C@  s  t  d d  } t | _ t   | j _ t j |  } |  j | j  |  j	 | j
  t  d d  } | j |  | j | |  |  j | j j | j j  | j j | j j | j j  | | _ g  | _ t    | _ | j | t  d d   |  j	 | j j  d  S(   Nt   namet   parentt   hubt   loop(   R   t   TrueR   t   sett   consumert   on_task_messaget   WorkerComponentt   assertIsNonet
   autoscalert
   assertTruet   enabledt   createt   register_with_event_loopt   assertInt   maybe_scalet   call_repeatedlyt   assert_called_witht	   keepaliveR#   t   on_initt   instantiate(   R   R"   t   wR#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_register_with_event_loop*   s&    					(   R
   R   R8   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR    (   s   t   test_Autoscalerc           B@  s}   e  Z d    Z d   Z e e  d    Z d   Z d   Z e	 d  d    Z
 d   Z d   Z e	 d	  d
    Z RS(   c         C@  s   t  d  |  _ d  S(   Ni   (   R   t   pool(   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   setupF   s    c         C@  s   d t  j f d     Y} t d d  } | |  j d d d | } | j j   | j   |  j | j  t	 | _ t	 | _
 | j   |  j | j  d  S(   Nt   Scalerc           B@  s)   e  Z e Z e Z d    Z d d  Z RS(   c         S@  s   |  j  S(   N(   t   alive(   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   is_aliveO   s    c         S@  s   t  |  _ d  S(   N(   R%   t   joined(   R   t   timeout(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   joinR   s    N(	   R
   R   R%   R=   R   R?   R>   t   NoneRA   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR<   K   s   	R!   t   workeri
   i   (   R   t
   AutoscalerR   R:   t   _is_stoppedR&   t   stopR,   R?   R   R=   t   assertFalse(   R   R<   RC   t   x(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt	   test_stopI   s    

		
c         C@  s+  t  d d  } t j |  j d d d | } | j   |  j | j j d  x$ t d  D] } t j	 j
 |  qZ W| j   | j   |  j | j j d  |  j | j j j  t j	 j   | j   |  j | j j d  t   d | _ | j   |  j | j j d  |  j | j j j  d  S(   NR!   RC   i
   i   i   i'  (   R   R   RD   R:   t   bodyt   assertEqualR   t   rangeR   t   reserved_requestst   addR,   R'   t   _update_prefetch_countt   calledt   clearR   t   _last_action(   R   RC   RH   t   i(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt	   test_body_   s"    




c         C@  s   d t  j f d     Y} t d d  } | |  j d d d | } | j   |  j | j j    |  j | j j    |  j | j	  d  S(   NR<   c           B@  s   e  Z e Z d    Z RS(   c         S@  s   t  |  _ |  j j   d  S(   N(   R%   t   scale_calledt   _is_shutdownR&   (   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyRJ   x   s    	(   R
   R   R   RU   RJ   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR<   u   s   R!   RC   i
   i   (
   R   RD   R   R:   t   runR,   RV   t   isSetRE   RU   (   R   R<   RC   RH   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_runs   s    
c         C@  sg   t  d d  } t j |  j d d d | } | j d  t   d | _ t | j _ | j	 d  d  S(   NR!   RC   i
   i   i'  i   (
   R   R   RD   R:   t   scale_upR   RR   R%   R   t
   scale_down(   R   RC   RH   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_shrink_raises_exception   s    s   celery.worker.autoscale.debugc         C@  sw   t  d d  } t j |  j d d d | } | j d  t   d | _ t | j _ | j	 d  |  j
 | j  d  S(   NR!   RC   i
   i   i'  i   (   R   R   RD   R:   RZ   R   RR   R%   R   R[   R,   t
   call_count(   R   t   debugRC   RH   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_shrink_raises_ValueError   s    c         C@  sb  t  d d  } t j |  j d d d | } |  j | j d  | j d  |  j | j d  | j d d   |  j | j d  | j	 d  |  j | j d  | j d d   |  j | j d  | j	 d  |  j | j
 d	  |  j | j d	  | j d  d
 | _
 | j	 d
  | j d d d d  | j d d d d  | j d d  d d   d  S(   NR!   RC   i
   i   i   i   i   iθ  i    i   t   maxi,  t   min(   R   R   RD   R:   RK   t	   processest   force_scale_upt   updateRB   t   force_scale_downt   min_concurrency(   R   RC   RH   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_update_and_force   s(    	c         C@  sy   t  d d  } t j |  j d d d | } | j   } |  j | d d  |  j | d d  |  j | d d  d  S(   NR!   RC   i
   i   R`   Ra   t   current(   R   R   RD   R:   t   infoRK   (   R   RC   RH   Ri   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt	   test_info¬   s    s   os._exitc         C@  s   d t  j f d     Y} t d d  } | |  j d d d | } t   } t j | } t _ z | j   Wd  | t _ X| j d  |  j | j	 j
  d  S(   Nt   _Autoscalerc           B@  s   e  Z d    Z RS(   c         S@  s   |  j  j   t d   d  S(   NR   (   RV   R&   t   OSError(   R   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyRJ   Ή   s    (   R
   R   RJ   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyRk   ·   s   R!   RC   i
   i   i   (   R   RD   R   R:   t   syst   stderrRW   R3   R,   t   writeR]   (   R   t   _exitRk   RC   RH   Rn   t   p(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   test_thread_crash΄   s    	
(   R
   R   R;   RI   R   R   RT   RY   R\   R   R_   Rg   Rj   Rr   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyR9   D   s   				
		(   t
   __future__R    Rm   t   celery.concurrency.baseR   t   celery.fiveR   t   celery.workerR   R   t   celery.tests.caseR   R   R   R   t   objectR	   R   R    R9   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/worker/test_autoscale.pyt   <module>   s   "