def publish_updates(self, updates, driver_name, job_controller): if updates: try: if job_controller is True: job = Job(driver_name, len(updates)) for update in updates: update.update({ 'driver_name': driver_name, 'jobid': job.uuid }) self.rabbitmq.post_message( GLOBOMAP_RMQ_EXCHANGE, GLOBOMAP_RMQ_KEY, json.dumps(update, ensure_ascii=False), False) job.save() self.rabbitmq.confirm_publish() return job.uuid else: for update in updates: update.update({'driver_name': driver_name}) self.rabbitmq.post_message( GLOBOMAP_RMQ_EXCHANGE, GLOBOMAP_RMQ_KEY, json.dumps(update, ensure_ascii=False), False) self.rabbitmq.confirm_publish() return None except: logger.exception('Error publishing to rabbitmq') self.rabbitmq.discard_publish() raise Exception('Failed to sendo updates to queue')
def test_update_job_success(self): job = Job('driver', 1).save() worker = DriverWorker(None, None, None) worker.update_job_success(job.uuid) job = Job.find_by_uuid(job.uuid) self.assertTrue(job.completed)
def test_update_job_error(self): job = Job('driver', 1).save() worker = DriverWorker(None, None, None) response_mock = Mock() response_mock.message = '{"message": "error"}' response_mock.status_code = 400 worker.update_job_error(job.uuid, {}, response_mock) job = Job.find_by_uuid(job.uuid) self.assertTrue(job.completed) self.assertEquals(1, job.error_count)
def update_job_success(self, job_id): if job_id: job = Job.find_by_uuid(job_id, for_update=True) if job: job.increment_success_count() job.save() else: logger.error('Job with id %s not found', job_id)
def update_job_error(self, job_id, update, err): if job_id: job = Job.find_by_uuid(job_id, for_update=True) if job: err = JobError(json.dumps(update), err.message, err.status_code) job.add_error(err) job.save() else: logger.error('Job with id %s not found', job_id)
def test_send_updates(self): rabbit_mock = self._mock_rabbitmq_client(True) updates = [open_json('tests/json/driver/driver_output_create.json')] response = self.app.post('/v1/updates', data=json.dumps(updates), headers={'Content-Type': 'application/json'}) response_json = json.loads(response.data) self.assertEqual(202, response.status_code) self.assertEqual('Location', response.headers[2][0]) self.assertEqual( 'http://localhost/v1/updates/job/%s' % response_json['jobid'], response.headers[2][1]) self.assertEqual('Updates published successfully', response_json['message']) self.assertEqual(1, rabbit_mock.post_message.call_count) self.assertEqual(1, rabbit_mock.confirm_publish.call_count) self.assertIsNotNone(Job.find_by_uuid(response_json['jobid']))
def test_get_job(self): job = Job('driver_name', 1) job.add_error(JobError('{"a": "1"}', '{"a": "1"}', 400)) job.save() response = self.app.get('/v1/updates/job/%s' % job.uuid, headers={'Content-Type': 'application/json'}) job_json = json.loads(response.data) self.assertEqual(200, response.status_code) self.assertEqual(job.uuid, job_json['uuid']) self.assertEqual('driver_name', job_json['driver']) self.assertEqual(0, job_json['successful_update_count']) self.assertEqual(1, job_json['error_update_count']) self.assertEqual(True, job_json['completed']) self.assertEqual(1, len(job_json['errors']))
def test_save_completed(self): job = Job('driver', 1) job.increment_success_count() job.save() self.assertTrue(job.completed) self.assertIsNotNone(Job.find_by_uuid(job.uuid))
def test_save(self): job = Job('driver', 1) job.save() self.assertFalse(job.completed) self.assertIsNotNone(Job.find_by_uuid(job.uuid))
def test_add_error(self): job = Job('driver', 1) job.add_error(JobError('', '', 200)) self.assertEqual(1, job.error_count)
def test_not_completed(self): job = Job('driver', 1) self.assertFalse(job._is_completed())
def test_is_completed(self): job = Job('driver', 1) job.increment_success_count() self.assertTrue(job._is_completed())
def test_increment_success_count(self): job = Job('driver', 1) job.increment_success_count() self.assertEqual(1, job.success_count)