def test_delete_with_reserved_resources(self): """ Test delete() for a Worker with a ReservedResource referencing its queue_name. """ now = datetime.utcnow() worker = resources.Worker('worker_with_a_reserved_resource', now) worker.save() workers_collection = resources.Worker.get_collection() self.assertEqual(workers_collection.find({'_id': worker.name}).count(), 1) # Create 3 resources, 2 referencing the worker to be deleted and 1 with no worker references rr1 = resources.ReservedResource('reserved_resource1', assigned_queue=worker.queue_name, num_reservations=1) rr2 = resources.ReservedResource('reserved_resource2', assigned_queue=worker.queue_name, num_reservations=1) rr = resources.ReservedResource('reserved_resource_no_queue', num_reservations=0) for r in (rr1, rr2, rr): r.save() rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 3) self.assertEqual(rrc.find({'assigned_queue': worker.queue_name}).count(), 2) worker.delete() # Make sure that only the resource with reference to the deleted Worker's queue_name is # deleted self.assertEqual(workers_collection.count(), 0) self.assertEqual(rrc.count(), 1) self.assertFalse(rrc.find_one( {'_id': 'reserved_resource_no_queue', 'num_reservations': 0}) is None)
def test_increment_num_reservations_doesnt_exist(self): """ increment_num_reservations() should raise a DoesNotExist when asked to increment an ReservedResource that does not exist in the database. """ rr = resources.ReservedResource('does-not-exist') self.assertRaises(base.DoesNotExist, rr.increment_num_reservations)
def test_delete(self): task_id = uuid.uuid4() rr = resources.ReservedResource(task_id, 'some_worker', 'some_resource') rr.save() rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.find({'_id': task_id}).count(), 1) rr.delete() self.assertEqual(rrc.count(), 0)
def test_save(self): task_id = uuid.uuid4() rr = resources.ReservedResource(task_id, 'some_worker', 'some_resource') rr.save() # Make sure the DB has the correct data rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 1) self.assertEqual(rrc.find_one({'_id': task_id})['worker_name'], 'some_worker') self.assertEqual(rrc.find_one({'_id': task_id})['resource_id'], 'some_resource')
def test___init__(self, super_init): task_id = uuid.uuid4() rr = resources.ReservedResource(task_id, 'some_worker', 'some_resource') # The superclass __init__ should have been called super_init.assert_called_once_with(rr) # Make sure the attributes are correct self.assertEqual(rr.task_id, task_id) self.assertEqual(rr.worker_name, 'some_worker') self.assertEqual(rr.resource_id, 'some_resource') self.assertEqual('_id' in rr, False) self.assertEqual('id' in rr, False)
def test_delete(self): """ Test delete(). """ rr = resources.ReservedResource('wont_exist_for_long', num_reservations=0) rr.save() rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.find({'_id': 'wont_exist_for_long'}).count(), 1) rr.delete() self.assertEqual(rrc.count(), 0)
def test_save(self): """ Test the save() method. """ rr = resources.ReservedResource('a_resource', 'a_queue', 13) rr.save() # Make sure the DB has the correct data rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 1) self.assertEqual(rrc.find_one({'_id': 'a_resource'})['num_reservations'], 13) self.assertEqual(rrc.find_one({'_id': 'a_resource'})['assigned_queue'], 'a_queue')
def test_delete_still_reserved(self): """ Test delete() with a ReservedResource that is still reserved. Nothing should happen. """ rr = resources.ReservedResource('wont_exist_for_long', num_reservations=1) rr.save() rr.delete() # The record should not have been deleted. rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 1) self.assertEqual(rrc.find({'_id': 'wont_exist_for_long'}).count(), 1)
def test_increment_num_reservations(self): """ Test increment_num_reservations(). """ rr = resources.ReservedResource('some_resource', 'some_queue', 7) rr.save() rr.increment_num_reservations() # The instance and the DB record should both have num_reservations of 8 now self.assertEqual(rr.num_reservations, 8) self.assertEqual(rr.assigned_queue, 'some_queue') rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.find_one({'_id': 'some_resource'})['num_reservations'], 8)
def test___init__(self, super_init): """ Test the __init__() method. """ rr = resources.ReservedResource('some_resource', 'some_queue', 7) # The superclass __init__ should have been called super_init.assert_called_once_with(rr) # Make sure the attributes are correct self.assertEqual(rr.name, 'some_resource') self.assertEqual(rr.assigned_queue, 'some_queue') self.assertEqual(rr.num_reservations, 7) self.assertEqual('_id' in rr, False) self.assertEqual('id' in rr, False)
def test_decrement_num_reservations_from_zero(self): """ Test decrement_num_reservations() when num_reservations is 0. It should remain at 0, and get deleted. """ rr = resources.ReservedResource('a_resource', 'some_queue', 0) rr.save() rr.decrement_num_reservations() # The instance should not have been changed self.assertEqual(rr.num_reservations, 0) self.assertEqual(rr.assigned_queue, 'some_queue') # The database should also not have been changed rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 0)
def test_decrement_num_reservations_from_one(self): """ Test decrement_num_reservations() when num_reservations is 1. It should decrement to 0, and it should get deleted from the database. """ rr = resources.ReservedResource('a_resource', 'some_queue', 1) rr.save() rr.decrement_num_reservations() # The instance should have been updated self.assertEqual(rr.num_reservations, 0) self.assertEqual(rr.assigned_queue, 'some_queue') # The database should have also been deleted rrc = resources.ReservedResource.get_collection() self.assertEqual(rrc.count(), 0)
def test___init___defaults(self, super_init): """ Test __init__() with default values. """ rr = resources.ReservedResource('some_resource') # The superclass __init__ should have been called super_init.assert_called_once_with(rr) # Make sure the attributes are correct self.assertEqual(rr.name, 'some_resource') # assigned_queue defaults to None self.assertEqual(rr.assigned_queue, None) # num_reservations should default to False self.assertEqual(rr.num_reservations, 1) self.assertEqual('_id' in rr, False) self.assertEqual('id' in rr, False)
def get_or_create_reserved_resource(name): """ Get or create a ReservedResource instance with the given name. If the object is created, initialize its num_reservations attribute to 1, and set its assigned_queue to None. :param name: The name of the resource that the ReservedResource tracks :type name: basestring :return: A ReservedResource instance for the given name :rtype: pulp.server.db.model.resources.ReservedResource """ reserved_resource = resources.ReservedResource.get_collection( ).find_and_modify(query={'_id': name}, update={ '$setOnInsert': { 'num_reservations': 1, 'assigned_queue': None } }, upsert=True, new=True) return resources.ReservedResource( name=reserved_resource['_id'], assigned_queue=reserved_resource['assigned_queue'], num_reservations=reserved_resource['num_reservations'])