def test_get_dag_run_by_id_empty(mock_get_dag_run_db):
    '''test that an empty dag_run_list will return None'''
    action_resource = ActionsIdResource()
    context.policy_engine = ShipyardPolicy()
    dag_id = 'test_dag_id'
    execution_date = 'test_execution_date'
    result = action_resource.get_dag_run_by_id(dag_id, execution_date)
    mock_get_dag_run_db.assert_called_once_with(dag_id, execution_date)
    assert result is None
def test_get_action_errors(mock_get_action):
    '''verify when get_action_db returns None, ApiError is raised'''
    action_resource = ActionsIdResource()
    action_id = '12345678901234567890123456'

    with pytest.raises(ApiError) as expected_exc:
        action_resource.get_action(action_id)
    assert action_id in str(expected_exc)
    assert 'Action not found' in str(expected_exc)
def test_on_get(mock_authorize, mock_get_action):
    action_resource = ActionsIdResource()
    context.policy_engine = ShipyardPolicy()
    kwargs = {'action_id': None}
    req = create_req(context, None)
    resp = create_resp()
    action_resource.on_get(req, resp, **kwargs)
    mock_authorize.assert_called_once_with('workflow_orchestrator:get_action',
                                           context)
    mock_get_action.assert_called_once_with(kwargs['action_id'])
    assert resp.body == '"action_returned"'
    assert resp.status == '200 OK'
def test_get_validations_db(mock_get_validation_by_action_id):
    expected = {
        'id': '43',
        'action_id': '12345678901234567890123456',
        'validation_name': 'It has shiny goodness',
        'details': 'This was not very shiny.'
    }
    mock_get_validation_by_action_id.return_value = expected
    action_resource = ActionsIdResource()
    action_id = 'test_action_id'

    result = action_resource.get_validations_db(action_id)
    mock_get_validation_by_action_id.assert_called_once_with(
        action_id=action_id)
    assert result == expected
def test_get_tasks_db(mock_get_tasks_by_id):
    expected = {
        'id': '43',
        'action_id': '12345678901234567890123456',
        'validation_name': 'It has shiny goodness',
        'details': 'This was not very shiny.'
    }
    mock_get_tasks_by_id.return_value = expected
    action_resource = ActionsIdResource()
    dag_id = 'test_dag_id'
    execution_date = 'test_execution_date'

    result = action_resource.get_tasks_db(dag_id, execution_date)
    mock_get_tasks_by_id.assert_called_once_with(dag_id=dag_id,
                                                 execution_date=execution_date)
    assert result == expected
def test_get_dag_run_by_id_notempty():
    '''test that a nonempty dag_run_list will return the 1st dag in the list'''
    action_resource = ActionsIdResource()
    action_resource.get_dag_run_db = dag_runs_db
    dag_id = 'test_dag_id'
    execution_date = 'test_execution_date'
    result = action_resource.get_dag_run_by_id(dag_id, execution_date)
    assert result == {
        'dag_id': 'did2',
        'execution_date': DATE_ONE,
        'state': 'FAILED',
        'run_id': '99',
        'external_trigger': 'something',
        'start_date': DATE_ONE,
        'end_date': DATE_ONE
    }
def test_get_action_command_audit_db(mock_get_command_audit_by_action_id):
    expected = {
        'id': '12345678901234567890123456',
        'name': 'dag_it',
        'parameters': None,
        'dag_id': 'did2',
        'dag_execution_date': DATE_ONE_STR,
        'user': '******',
        'timestamp': DATE_ONE,
        'context_marker': '8-4-4-4-12a'
    }
    mock_get_command_audit_by_action_id.return_value = expected
    action_resource = ActionsIdResource()
    action_id = 'test_action_id'

    result = action_resource.get_action_command_audit_db(action_id)
    mock_get_command_audit_by_action_id.assert_called_once_with(action_id)
    assert result == expected
def test_get_dag_run_db(mock_get_dag_runs_by_id):
    expected = {
        'dag_id': 'did2',
        'execution_date': DATE_ONE,
        'state': 'FAILED',
        'run_id': '99',
        'external_trigger': 'something',
        'start_date': DATE_ONE,
        'end_date': DATE_ONE
    }
    mock_get_dag_runs_by_id.return_value = expected
    action_resource = ActionsIdResource()
    dag_id = 'test_dag_id'
    execution_date = 'test_execution_date'

    result = action_resource.get_dag_run_db(dag_id, execution_date)
    mock_get_dag_runs_by_id.assert_called_once_with(
        dag_id=dag_id, execution_date=execution_date)
    assert result == expected
Exemple #9
0
def start_api():
    middlewares = [
        AuthMiddleware(),
        ContextMiddleware(),
        LoggingMiddleware(),
        CommonParametersMiddleware()
    ]
    control_api = falcon.API(
        request_type=ShipyardRequest, middleware=middlewares)

    control_api.add_route('/versions', VersionsResource())

    # v1.0 of Shipyard API
    v1_0_routes = [
        # API for managing region data
        ('/health', HealthResource()),
        ('/actions', ActionsResource()),
        ('/actions/{action_id}', ActionsIdResource()),
        ('/actions/{action_id}/control/{control_verb}',
         ActionsControlResource()),
        ('/actions/{action_id}/steps/{step_id}',
         ActionsStepsResource()),
        ('/actions/{action_id}/steps/{step_id}/logs',
         ActionsStepsLogsResource()),
        ('/actions/{action_id}/validations/{validation_id}',
         ActionsValidationsResource()),
        ('/configdocs', ConfigDocsStatusResource()),
        ('/configdocs/{collection_id}', ConfigDocsResource()),
        ('/commitconfigdocs', CommitConfigDocsResource()),
        ('/notedetails/{note_id}', NoteDetailsResource()),
        ('/renderedconfigdocs', RenderedConfigDocsResource()),
        ('/workflows', WorkflowResource()),
        ('/workflows/{workflow_id}', WorkflowIdResource()),
        ('/site_statuses', StatusResource()),
    ]

    # Set up the 1.0 routes
    route_v1_0_prefix = '/api/v1.0'
    for path, res in v1_0_routes:
        route = '{}{}'.format(route_v1_0_prefix, path)
        LOG.info(
            'Adding route: %s Handled by %s',
            route,
            res.__class__.__name__
        )
        control_api.add_route(route, res)

    # Error handlers (FILO handling)
    control_api.add_error_handler(Exception, default_exception_handler)
    control_api.add_error_handler(AppError, AppError.handle)

    # built-in error serializer
    control_api.set_error_serializer(default_error_serializer)

    return control_api
def test_get_action_success():
    """
    Tests the main response from get all actions
    """
    action_resource = ActionsIdResource()
    # stubs for db
    action_resource.get_action_db = actions_db
    action_resource.get_dag_run_db = dag_runs_db
    action_resource.get_tasks_db = tasks_db
    action_resource.get_validations_db = get_validations
    action_resource.get_action_command_audit_db = get_ac_audit

    action = action_resource.get_action('12345678901234567890123456')
    if action['name'] == 'dag_it':
        assert len(action['steps']) == 3
        assert action['dag_status'] == 'FAILED'
        assert len(action['command_audit']) == 2