Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
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')
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
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')
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
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)
Esempio n. 13
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)
Esempio n. 14
0
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'])