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'}})
Exemple #3
0
    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'
                }
            })
Exemple #4
0
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()
Exemple #6
0
    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()
Exemple #7
0
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')
Exemple #8
0
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)
Exemple #11
0
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)
Exemple #15
0
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()