def test_girder_before_task_publish_called_with_headers_create_job_inputs(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID', 'girder_job_title': 'GIRDER_JOB_TITLE', 'girder_job_type': 'GIRDER_JOB_TYPE', 'girder_job_handler': 'GIRDER_JOB_HANDLER', 'girder_job_public': 'GIRDER_JOB_PUBLIC', 'girder_job_other_fields': {'SOME_OTHER': 'FIELD'}}) create_job = mi.model.return_value.createJob with mock.patch('cherrypy.request.app', return_value=True): with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) # gcu.assert_called_once() create_job.assert_called_once_with( **{'title': 'GIRDER_JOB_TITLE', 'type': 'GIRDER_JOB_TYPE', 'handler': 'GIRDER_JOB_HANDLER', 'public': 'GIRDER_JOB_PUBLIC', 'user': gcu.return_value, 'args': (), 'kwargs': {}, 'otherFields': {'celeryTaskId': 'CELERY-ASYNCRESULT-ID', 'SOME_OTHER': 'FIELD'}})
def test_girder_before_task_publish_called_with_headers_create_job_inputs(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID', 'girder_job_title': 'GIRDER_JOB_TITLE', 'girder_job_type': 'GIRDER_JOB_TYPE', 'girder_job_handler': 'GIRDER_JOB_HANDLER', 'girder_job_public': 'GIRDER_JOB_PUBLIC', 'girder_job_other_fields': {'SOME_OTHER': 'FIELD'}}) create_job = mi.model.return_value.createJob with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) gcu.assert_called_once() create_job.assert_called_once_with( **{'title': 'GIRDER_JOB_TITLE', 'type': 'GIRDER_JOB_TYPE', 'handler': 'GIRDER_JOB_HANDLER', 'public': 'GIRDER_JOB_PUBLIC', 'user': gcu.return_value, 'args': (), 'kwargs': {}, 'otherFields': {'celeryTaskId': 'CELERY-ASYNCRESULT-ID', 'SOME_OTHER': 'FIELD'}})
def test_girder_before_task_publish_called_with_no_headers_create_job_inputs( self, gcu, mi): inputs = dict( sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID'}) create_job = mi.model.return_value.createJob with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) gcu.assert_called_once() create_job.assert_called_once_with( **{ 'title': '<unnamed job>', 'type': 'celery', 'handler': 'celery_handler', 'public': False, 'user': gcu.return_value, 'args': (), 'kwargs': {}, 'otherFields': { 'celeryTaskId': 'CELERY-ASYNCRESULT-ID' } })
def test_girder_before_task_publish_celery_context_no_current_task(warn): with girder_not_importable(): inputs = dict(sender='example.task', headers={ 'girder_api_url': 'url', 'girder_client_token': 'token', 'id': 'id' }) girder_before_task_publish(**inputs) warn.assert_called_with('Girder job not created: Parent task is None')
def test_girder_before_task_publish_jobinfospec_called(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID'}) with mock_worker_plugin_utils() as utils: girder_before_task_publish(**inputs) utils.jobInfoSpec.asset_called_once() utils.getWorkerApiUrl.assert_called_once()
def test_girder_before_task_publish_jobinfospec_called(self, gcu, mi): inputs = dict( sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID'}) with mock_worker_plugin_utils() as utils: girder_before_task_publish(**inputs) utils.jobInfoSpec.asset_called_once() utils.getWorkerApiUrl.assert_called_once()
def test_girder_before_task_publish_celery_context_id_in_haeders(warn): with girder_not_importable(): # mocked_app object needs to be in the context for testing with mock.patch('girder_worker.context.nongirder_context.current_app'): inputs = dict(sender='example.task', headers={ 'girder_api_url': 'url', 'girder_client_token': 'token' }) girder_before_task_publish(**inputs) warn.assert_called_with( 'Girder job not created: id is not in headers')
def test_girder_before_task_publish_celery_context_no_parent_task_no_token( warn): with girder_not_importable(): inputs = dict(body=[(), {}, {}], sender='example.task', headers={ 'jobInfoSpec': 'jobInfoSpec', 'girder_api_url': 'url', 'id': 'id' }) girder_before_task_publish(**inputs) m = 'Could not get token from parent task: Parent task is None' warn.assert_called_with(m)
def test_girder_before_task_publish_with_jobinfospec_no_job_created(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers=self.headers) create_job = mi.model.return_value.createJob with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) self.assertTrue(not gcu.called) self.assertTrue(not create_job.called)
def test_girder_before_task_publish_with_jobinfospec_no_job_created(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers=self.headers) create_job = mi.model.return_value.createJob with mock.patch('cherrypy.request.app', return_value=True): with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) gcu.assert_called_once() self.assertTrue(not create_job.called)
def test_girder_before_task_publish_celery_context_id_in_request(warn): with girder_not_importable(): with mock.patch('girder_worker.context.nongirder_context.current_app' ) as mocked_app: delattr(mocked_app.current_task.request, 'id') inputs = dict(sender='example.task', headers={ 'girder_api_url': 'url', 'girder_client_token': 'token', 'id': 'id' }) girder_before_task_publish(**inputs) m = "Girder job not created: Parent task's request does not contain id" warn.assert_called_with(m)
def test_girder_before_task_publish_celery_context_no_current_task_request(warn): with girder_not_importable(): with mock.patch('girder_worker.context.nongirder_context.current_app') as mocked_app: mocked_app.current_task.request = None inputs = dict( sender='example.task', headers={ 'girder_api_url': 'url', 'girder_client_token': 'token', 'id': 'id' } ) girder_before_task_publish(**inputs) warn.assert_called_with("Girder job not created: Parent task's request is None")
def test_girder_before_task_publish_celery_context_gc_fails(warn): with girder_not_importable(): with mock.patch('girder_worker.context.nongirder_context.current_app') as mocked_app: mocked_app.current_task.request.id = 'id' inputs = dict( body=[(), {}, {}], sender='example.task', headers={ 'girder_api_url': 'url', 'girder_client_token': 'token', 'id': 'id' } ) girder_before_task_publish(**inputs) assert warn.call_args[0][0].startswith('Failed to post job: Invalid URL')
def test_girder_before_task_publish_celery_context_no_parent_task_request_no_token(warn): with girder_not_importable(): with mock.patch('girder_worker.context.nongirder_context.current_app') as mocked_app: mocked_app.current_task.request = None inputs = dict( body=[(), {}, {}], sender='example.task', headers={ 'jobInfoSpec': 'jobInfoSpec', 'girder_api_url': 'token', 'id': 'id' } ) girder_before_task_publish(**inputs) m = str("Could not get token from parent task: Parent task's request is None") warn.assert_called_with(m)
def test_girder_before_task_publish_celery_context_no_token_in_headers(warn): with girder_not_importable(): with mock.patch('girder_worker.context.nongirder_context.current_app' ) as mocked_app: mocked_app.current_task.request.id = 'id' delattr(mocked_app.current_task.request, 'girder_client_token') inputs = dict(body=[(), {}, {}], sender='example.task', headers={ 'jobInfoSpec': 'jobInfoSpec', 'girder_api_url': 'url', 'id': 'id' }) girder_before_task_publish(**inputs) m = 'Could not get token from parent task' assert warn.call_args[0][0].startswith(m)
def test_girder_before_task_publish_called_with_no_headers_create_job_inputs(self, gcu, mi): inputs = dict(sender='test.task', # args, kwargs, options body=[(), {}, {}], headers={'id': 'CELERY-ASYNCRESULT-ID'}) create_job = mi.model.return_value.createJob with mock_worker_plugin_utils(): girder_before_task_publish(**inputs) gcu.assert_called_once() create_job.assert_called_once_with( **{'title': None, 'type': None, 'handler': 'celery_handler', 'public': False, 'user': gcu.return_value, 'args': (), 'kwargs': {}, 'otherFields': {'celeryTaskId': 'CELERY-ASYNCRESULT-ID'}})
def test_girder_before_task_publish_hook_with_builtin_tasks_should_noop(name): with mock.patch('girder_worker.app.get_context') as gc: girder_before_task_publish(sender=name) gc.assert_not_called()