def test_resource_not_in_resource_map(self): """ Test _release_resource() with a resource that is not in the database. This should be gracefully handled, and result in no changes to the database. """ # Set up two workers worker_1 = Worker(WORKER_1, datetime.utcnow()) worker_1.save() worker_2 = Worker(WORKER_2, datetime.utcnow()) worker_2.save() # Set up two resource reservations, using our workers from above reserved_resource_1 = ReservedResource(str(uuid.uuid4()), worker_1.name, 'resource_1') reserved_resource_1.save() reserved_resource_2 = ReservedResource(str(uuid.uuid4()), worker_2.name, 'resource_2') reserved_resource_2.save() # This should not raise any Exception, but should also not alter either the Worker # collection or the ReservedResource collection tasks._release_resource('made_up_resource_id') # Make sure that the workers collection has not been altered self.assertEqual(Worker.objects().count(), 2) worker_1 = Worker.objects().get(name=worker_1.name) self.assertTrue(worker_1) worker_2 = Worker.objects().get(name=worker_2.name) self.assertTrue(worker_2) # Make sure that the reserved resources collection has not been altered self.assertEqual(ReservedResource.objects.count(), 2) rr_1 = ReservedResource.objects.get(task_id=reserved_resource_1.task_id) self.assertEqual(rr_1['worker_name'], reserved_resource_1.worker_name) self.assertEqual(rr_1['resource_id'], 'resource_1') rr_2 = ReservedResource.objects.get(task_id=reserved_resource_2.task_id) self.assertEqual(rr_2['worker_name'], reserved_resource_2.worker_name) self.assertEqual(rr_2['resource_id'], 'resource_2')
def test_resource_in_resource_map(self): """ Test _release_resource() with a valid resource. This should remove the resource from the database. """ # Set up two workers now = datetime.utcnow() worker_1 = Worker(name=WORKER_1, last_heartbeat=now) worker_1.save() worker_2 = Worker(name=WORKER_2, last_heartbeat=now) worker_2.save() # Set up two reserved resources reserved_resource_1 = ReservedResource(task_id=str(uuid.uuid4()), worker_name=worker_1.name, resource_id='resource_1') reserved_resource_1.save() reserved_resource_2 = ReservedResource(task_id=str(uuid.uuid4()), worker_name=worker_2.name, resource_id='resource_2') reserved_resource_2.save() # This should remove resource_2 from the _resource_map. tasks._release_resource(reserved_resource_2.task_id) # resource_2 should have been removed from the database self.assertEqual(ReservedResource.objects.count(), 1) rr_1 = ReservedResource.objects.get(task_id=reserved_resource_1.task_id) self.assertEqual(rr_1['worker_name'], reserved_resource_1.worker_name) self.assertEqual(rr_1['resource_id'], 'resource_1')
def test_resource_not_in_resource_map(self): """ Test _release_resource() with a resource that is not in the database. This should be gracefully handled, and result in no changes to the database. """ # Set up two workers worker_1 = Worker(name=WORKER_1, last_heartbeat=datetime.utcnow()) worker_1.save() worker_2 = Worker(name=WORKER_2, last_heartbeat=datetime.utcnow()) worker_2.save() # Set up two resource reservations, using our workers from above reserved_resource_1 = ReservedResource(task_id=str(uuid.uuid4()), worker_name=worker_1.name, resource_id='resource_1') reserved_resource_1.save() reserved_resource_2 = ReservedResource(task_id=str(uuid.uuid4()), worker_name=worker_2.name, resource_id='resource_2') reserved_resource_2.save() # This should not raise any Exception, but should also not alter either the Worker # collection or the ReservedResource collection tasks._release_resource('made_up_resource_id') # Make sure that the workers collection has not been altered self.assertEqual(Worker.objects().count(), 2) worker_1 = Worker.objects().get(name=worker_1.name) self.assertTrue(worker_1) worker_2 = Worker.objects().get(name=worker_2.name) self.assertTrue(worker_2) # Make sure that the reserved resources collection has not been altered self.assertEqual(ReservedResource.objects.count(), 2) rr_1 = ReservedResource.objects.get( task_id=reserved_resource_1.task_id) self.assertEqual(rr_1['worker_name'], reserved_resource_1.worker_name) self.assertEqual(rr_1['resource_id'], 'resource_1') rr_2 = ReservedResource.objects.get( task_id=reserved_resource_2.task_id) self.assertEqual(rr_2['worker_name'], reserved_resource_2.worker_name) self.assertEqual(rr_2['resource_id'], 'resource_2')