σ
P'^c           @@  s  d  d l  m Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l	 m
 Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z m Z d	 Z e e j    Z d
 Z d Z  d Z! d Z" d Z# d Z$ d e f d     YZ% d S(   i    (   t   absolute_importN(   t   loadst   dumps(   t   states(   t   mongodb(   t   MongoBackendt   pymongo(   t   ImproperlyConfigured(	   t   AppCaset	   MagicMockt   Mockt   SkipTestt   ANYt   depends_on_current_appt   disable_stdoutst   patcht   sentinelt   taskmeta_celeryt	   localhostii  t   mongot   1234t   testingt   collection1t   test_MongoBackendc           B@  s¬  e  Z d  Z d Z d Z d Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z e d
    Z d   Z d   Z d   Z e d  d    Z e d  d    Z d   Z e d  d    Z e d  d    Z e d  d    Z e d  d    Z e d  d    Z e d  d    Z e d  d    Z e d  d    Z d   Z e d  d    Z d   Z d   Z  d    Z! d!   Z" e# d"    Z$ RS(#   s)   mongodb://uuuu:pwpw@hostname.dom/databasesD   mongodb://uuuu:pwpw@hostname.dom,hostname.dom/database?replicaSet=rss'   mongodb://uuuu:**@hostname.dom/databasesC   mongodb://uuuu:**@hostname.dom/,hostname.dom/database?replicaSet=rsc         C@  s²   t  d  k r t d   n  i  } |  _ t j t   | d <t _ t j t   | d <t _ t j	 t   | d <t _	 t
 j
 t   | d <t
 _
 t d |  j d |  j  |  _ d  S(   Ns   pymongo is not installed.t   encodet   decodet   Binaryt   datetimet   appt   url(   R   t   NoneR   t   _resetR   R   R
   R   t   moduleR   R   R   t   default_urlt   backend(   t   selft   R(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   setup(   s    c         C@  sD   |  j  d t _ |  j  d t _ |  j  d t _ |  j  d t _ d  S(   NR   R   R   R   (   R   R   R   R   R    R   R   (   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   teardown4   s    c         C@  sN   t  j d  } t  _ z* |  j t   t d |  j  Wd  QXWd  | t  _ Xd  S(   NR   (   R    R   R   t   assertRaisesR   R   R   (   R#   t   prev(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_init_no_mongodb:   s
    c         C@  s9   g  |  j  j _ |  j t   t d |  j   Wd  QXd  S(   NR   (   R   t   conft   CELERY_MONGODB_BACKEND_SETTINGSR'   R   R   (   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_init_no_settingsB   s    c         C@  s#   d  |  j j _ t d |  j  d  S(   NR   (   R   R   R*   R+   R   (   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_init_settings_is_NoneG   s    c         C@  sT   t  d |  j  } t   | _ t   } | j _ d  | _ |  j | j d   d  S(   NR   t   1f3fab(	   R   R   R
   t
   collectiont   find_oneR   t   return_valuet   assertIsNonet   _restore_group(   R#   t   xt   fo(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_restore_group_no_entryK   s
    	c         C@  s/   t  d |  j  } |  j t t |    d  S(   NR   (   R   R   t
   assertTrueR   R   (   R#   R4   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_reduceR   s    c         C@  sZ   t  d  H } t j |  j _ |  j j   } |  j t j |  |  j | j  Wd  QXd  S(   Ns   pymongo.MongoClient(   R   R   t   _connectionR"   t   _get_connectiont   assertEqualt   assertFalset   called(   R#   t   mock_Connectiont
   connection(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt%   test_get_connection_connection_existsW   s
    c         C@  s   t  d  u } d  |  j _ t |  j _ t |  j _ t j	 | _
 |  j j   } | j d d |  j j    |  j t j	 |  Wd  QXd  S(   Ns   pymongo.MongoClientt   hosts   mongodb://localhost:27017(   R   R   R"   R9   t   MONGODB_HOSTRA   t   MONGODB_PORTt   portR   R?   R1   R:   t   assert_called_once_witht   _prepare_client_optionsR;   (   R#   R>   R?   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt&   test_get_connection_no_connection_hosta   s    	c         C@  s   t  d  y } d t t f } d  |  j _ | |  j _ t j | _	 |  j j
   } | j d | |  j j    |  j t j |  Wd  QXd  S(   Ns   pymongo.MongoClients   mongodb://%s:%dRA   (   R   RB   RC   R   R"   R9   RA   R   R?   R1   R:   RE   RF   R;   (   R#   R>   t   mongodb_uriR?   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt-   test_get_connection_no_connection_mongodb_urip   s    	s4   celery.backends.mongodb.MongoBackend._get_connectionc         C@  s   t  |  j _ t |  j _ t   } t d d g  } | | j _ | | _ |  j j	 } |  j
 | | k  |  j
 |  j j d | k  | j j t  t  d  S(   Nt   spect   __getitem__t   database(   t   MONGODB_USERR"   t   usert   MONGODB_PASSWORDt   passwordR
   R	   RK   R1   RL   R7   t   __dict__t   authenticateRE   (   R#   t   mock_get_connectiont   mock_databaset   mock_connectionRL   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_get_database_no_existing   s    			c         C@  s   d  |  j _ d  |  j _ t   } t d d g  } | | j _ | | _ |  j j } |  j	 | | k  |  j
 | j j  |  j	 |  j j d | k  d  S(   NRJ   RK   RL   (   R   R"   RN   RP   R
   R	   RK   R1   RL   R7   R<   RR   R=   RQ   (   R#   RS   RT   RU   RL   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt%   test_get_database_no_existing_no_auth   s    		c         C@  sb   d  |  j _ |  j j   |  j |  j j d   d |  j _ |  j j   |  j |  j j d   d  S(   Ns   not none(   R   R"   R9   t   process_cleanupR;   (   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_process_cleanup’   s    s2   celery.backends.mongodb.MongoBackend._get_databasec         C@  s‘   t  |  j _ t d d d g  } t   } | | _ | | j _ |  j j t j	 t j
 t j  } | j   | j j t   | j j t  |  j t j
 |  d  S(   NRJ   RK   t   __setitem__(   t   MONGODB_COLLECTIONR"   t   taskmeta_collectionR	   R
   R1   RK   t   _store_resultR   t   task_idt   resultt   statusRE   t   saveR   R;   (   R#   t   mock_get_databaseRT   t   mock_collectiont   ret_val(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_store_result«   s    			
c      	   C@  sΡ   |  j  d t _ t |  j _ t d d d g  } t   } t   | j _ | | _ | | j	 _ |  j j
 t j  } | j   | j	 j t  |  j t t d d d d d	 d
 g   t t | j      d  S(   NR   RJ   RK   RZ   R`   R^   t	   date_donet	   tracebackR_   t   children(   R   R   R[   R"   R\   R	   R
   R0   R1   RK   t   _get_task_meta_forR   R^   RE   R;   t   listt   sortedt   keys(   R#   Rb   RT   Rc   Rd   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_get_task_meta_for½   s    		
c         C@  s   t  |  j _ t d d d g  } t   } d  | j _ | | _ | | j _ |  j j	 t
 j  } | j   | j j t   |  j i t j d 6d  d 6|  d  S(   NRJ   RK   RZ   R`   R_   (   R[   R"   R\   R	   R
   R   R0   R1   RK   Ri   R   R^   RE   R;   R   t   PENDING(   R#   Rb   RT   Rc   Rd   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt    test_get_task_meta_for_no_resultΣ   s    		
c         C@  s   t  |  j _ t d d d g  } t   } | | _ | | j _ |  j j t j	 t j
  } | j   | j j t   | j j t  |  j t j
 |  d  S(   NRJ   RK   RZ   (   R[   R"   R\   R	   R
   R1   RK   t   _save_groupR   t
   taskset_idR_   RE   Ra   R   R;   (   R#   Rb   RT   Rc   Rd   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_save_groupδ   s    			
c         C@  sΐ   t  |  j _ t d d d g  } t   } t   | j _ | | _ | | j _ |  j j t	 j
  } | j   | j j t   | j j i t	 j
 d 6 |  j d d d g t | j     d  S(   NRJ   RK   RZ   t   _idRf   R_   R^   (   R[   R"   R\   R	   R
   R0   R1   RK   R3   R   Rq   RE   t   assertItemsEqualRj   Rl   (   R#   Rb   RT   Rc   Rd   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_restore_groupφ   s    		
	c         C@  s   t  |  j _ t d d d g  } t   } | | _ | | j _ |  j j t j	  | j
   | j j
 t   | j j
 i t j	 d 6 d  S(   NRJ   RK   RZ   Rs   (   R[   R"   R\   R	   R
   R1   RK   t   _delete_groupR   Rq   RE   t   remove(   R#   Rb   RT   Rc   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_delete_group  s    		
	c         C@  s   t  |  j _ t d d d g  } t   } | | _ | | j _ |  j j t j	  | j
   | j j
 t   | j j
 i t j	 d 6 d  S(   NRJ   RK   RZ   Rs   (   R[   R"   R\   R	   R
   R1   RK   t   _forgetR   R^   RE   Rw   (   R#   Rb   RT   Rc   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_forget  s    		
		c         C@  s¬   |  j  d t _ t |  j _ t d d d g  } t   |  j _ } | | _ | | j	 _ t j j
 |  j j _ |  j j   | j   | j	 j t  |  j | j j  d  S(   NR   RJ   RK   RZ   (   R   R   R[   R"   R\   R	   R
   t   collectionsR1   RK   t   utcnowR   t   nowt   cleanupRE   R7   Rw   R=   (   R#   Rb   RT   Rc   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_cleanup/  s    	
	c         C@  s   t  d |  j  } t   | _ i  } | j _ t   } | | j <t | j _ d | _ d | _	 |  j
 t   | j   Wd  QX| j j d d  d  S(   NR   t   jerryt   cere4l(   R   R   R
   R:   R1   t   database_namet   FalseRR   RN   RP   R'   R   t   _get_databaset   assert_called_with(   R#   R4   t   connt   db(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_get_database_authfailureB  s    		s*   celery.backends.mongodb.detect_environmentc      	   C@  sY   d | _  t d d d	 8 |  j j   } |  j | i |  j j d 6t d 6 Wd  QXd  S(
   Nt   defaults   pymongo.version_tuplet   newi   i   i   t   max_pool_sizet   auto_start_request(   i   i   i   (   R1   R   R"   RF   t   assertDictEqualR   R   (   R#   t   m_detect_envt   options(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt%   test_prepare_client_options_for_ver_2N  s    	c         C@  s#   |  j  |  j j t  |  j  d  S(   N(   R;   R"   t   as_urit   TrueR!   (   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_as_uri_include_passwordX  s    c         C@  s    |  j  |  j j   |  j  d  S(   N(   R;   R"   R   t   sanitized_default_url(   R#   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   test_as_uri_exclude_password[  s    c         C@  s;   t  d |  j d |  j  } |  j | j t  |  j  d  S(   NR   R   (   R   R   t   replica_set_urlR;   R   R   (   R#   R"   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt(   test_as_uri_include_password_replica_set^  s    c         C@  s8   t  d |  j d |  j  } |  j | j   |  j  d  S(   NR   R   (   R   R   R   R;   R   t   sanitized_replica_set_url(   R#   R"   (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt(   test_as_uri_exclude_password_replica_setb  s    c         C@  s?   d |  j  j _ |  j  j   } | j   |  j | j    d  S(   NsV   mongodb://user:password@host0.com:43437,host1.com:43437/work4us?replicaSet=rs&ssl=true(   R   R*   t   result_backendt   Workert   on_startR7   t   startup_info(   R#   t   worker(    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt#   test_regression_worker_startup_infof  s    
(%   t   __name__t
   __module__R!   R   R   R   R%   R&   R)   R,   R-   R6   R   R8   R@   RG   RI   R   RV   RW   RY   Re   Rm   Ro   Rr   Ru   Rx   Rz   R   R   R   R   R   R   R   R   R   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyR      s@   							
					
				(&   t
   __future__R    R   t   uuidt   pickleR   R   t   celeryR   t   celery.backendsR   R    t   celery.backends.mongodbR   R   t   celery.exceptionsR   t   celery.tests.caseR   R	   R
   R   R   R   R   R   R   t
   COLLECTIONt   strt   uuid1t   TASK_IDRB   RC   RM   RO   t   MONGODB_DATABASER[   R   (    (    (    sD   /tmp/pip-unpacked-wheel-gV1wwp/celery/tests/backends/test_mongodb.pyt   <module>   s"   @