06e0d35640
The purpose is to reorganize the api code into directories for each of the main parts of the API: configdocs, action, and previously af_inquiry Imports have been changed, and some have been reorganized to reflect ordering. Change-Id: I96619450432b1d2c7272d5d04aa505efe59a6fed
169 lines
5.8 KiB
Python
169 lines
5.8 KiB
Python
# Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
from shipyard_airflow.control.action.actions_control_api import \
|
|
ActionsControlResource
|
|
from shipyard_airflow.control.base import ShipyardRequestContext
|
|
from shipyard_airflow.db.errors import AirflowStateError
|
|
from shipyard_airflow.db.db import AIRFLOW_DB
|
|
from shipyard_airflow.errors import ApiError
|
|
|
|
|
|
def actions_db(action_id):
|
|
"""
|
|
replaces the actual db call
|
|
"""
|
|
if action_id == 'not found':
|
|
return None
|
|
elif action_id == 'state error':
|
|
return {
|
|
'id': 'state error',
|
|
'name': 'dag_it',
|
|
'parameters': None,
|
|
'dag_id': 'state error',
|
|
'dag_execution_date': '2017-09-06 14:10:08.528402',
|
|
'user': 'robot1',
|
|
'timestamp': '2017-09-06 14:10:08.528402',
|
|
'context_marker': '8-4-4-4-12a'
|
|
}
|
|
else:
|
|
return {
|
|
'id': '59bb330a-9e64-49be-a586-d253bb67d443',
|
|
'name': 'dag_it',
|
|
'parameters': None,
|
|
'dag_id': 'did2',
|
|
'dag_execution_date': '2017-09-06 14:10:08.528402',
|
|
'user': 'robot1',
|
|
'timestamp': '2017-09-06 14:10:08.528402',
|
|
'context_marker': '8-4-4-4-12a'
|
|
}
|
|
|
|
|
|
def control_dag_run(dag_id,
|
|
execution_date,
|
|
expected_state,
|
|
desired_state):
|
|
if dag_id == 'state error':
|
|
raise AirflowStateError(message='test error')
|
|
else:
|
|
pass
|
|
|
|
|
|
def audit_control_command_db(action_audit):
|
|
pass
|
|
|
|
|
|
def test_get_action():
|
|
"""
|
|
Tests the main response from get all actions
|
|
"""
|
|
saved_control_dag_run = AIRFLOW_DB._control_dag_run
|
|
try:
|
|
action_resource = ActionsControlResource()
|
|
# stubs for db
|
|
action_resource.get_action_db = actions_db
|
|
action_resource.audit_control_command_db = audit_control_command_db
|
|
|
|
AIRFLOW_DB._control_dag_run = control_dag_run
|
|
|
|
# bad action
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='not found',
|
|
control_verb='meep',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
assert False, "shouldn't find the action"
|
|
except ApiError as api_error:
|
|
assert api_error.title == 'Action not found'
|
|
assert api_error.status == '404 Not Found'
|
|
|
|
# bad control
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='59bb330a-9e64-49be-a586-d253bb67d443',
|
|
control_verb='meep',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
assert False, 'meep is not a valid action'
|
|
except ApiError as api_error:
|
|
assert api_error.title == 'Control not supported'
|
|
assert api_error.status == '404 Not Found'
|
|
|
|
# success on each action - pause, unpause, stop
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='59bb330a-9e64-49be-a586-d253bb67d443',
|
|
control_verb='pause',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
except ApiError as api_error:
|
|
assert False, 'Should not raise an ApiError'
|
|
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='59bb330a-9e64-49be-a586-d253bb67d443',
|
|
control_verb='unpause',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
except ApiError as api_error:
|
|
assert False, 'Should not raise an ApiError'
|
|
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='59bb330a-9e64-49be-a586-d253bb67d443',
|
|
control_verb='stop',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
except ApiError as api_error:
|
|
assert False, 'Should not raise an ApiError'
|
|
|
|
# pause state conflict
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='state error',
|
|
control_verb='pause',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
assert False, 'should raise a conflicting state'
|
|
except ApiError as api_error:
|
|
assert api_error.title == 'Unable to pause action'
|
|
assert api_error.status == '409 Conflict'
|
|
|
|
# Unpause state conflict
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='state error',
|
|
control_verb='unpause',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
assert False, 'should raise a conflicting state'
|
|
except ApiError as api_error:
|
|
assert api_error.title == 'Unable to unpause action'
|
|
assert api_error.status == '409 Conflict'
|
|
|
|
# Stop state conflict
|
|
try:
|
|
action_resource.handle_control(
|
|
action_id='state error',
|
|
control_verb='stop',
|
|
context=ShipyardRequestContext()
|
|
)
|
|
assert False, 'should raise a conflicting state'
|
|
except ApiError as api_error:
|
|
assert api_error.title == 'Unable to stop action'
|
|
assert api_error.status == '409 Conflict'
|
|
finally:
|
|
# modified class variable... replace it
|
|
AIRFLOW_DB._control_dag_run = saved_control_dag_run
|