Merge "Renamed Status to State"
This commit is contained in:
@@ -22,7 +22,7 @@ from watcher.applier.action_plan import base
|
|||||||
from watcher.applier import default
|
from watcher.applier import default
|
||||||
from watcher.applier.messaging import event_types
|
from watcher.applier.messaging import event_types
|
||||||
from watcher.common.messaging.events import event
|
from watcher.common.messaging.events import event
|
||||||
from watcher import objects
|
from watcher.objects import action_plan as ap_objects
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ class DefaultActionPlanHandler(base.BaseActionPlanHandler):
|
|||||||
self.applier_manager = applier_manager
|
self.applier_manager = applier_manager
|
||||||
|
|
||||||
def notify(self, uuid, event_type, state):
|
def notify(self, uuid, event_type, state):
|
||||||
action_plan = objects.ActionPlan.get_by_uuid(self.ctx, uuid)
|
action_plan = ap_objects.ActionPlan.get_by_uuid(self.ctx, uuid)
|
||||||
action_plan.state = state
|
action_plan.state = state
|
||||||
action_plan.save()
|
action_plan.save()
|
||||||
ev = event.Event()
|
ev = event.Event()
|
||||||
@@ -51,7 +51,7 @@ class DefaultActionPlanHandler(base.BaseActionPlanHandler):
|
|||||||
# update state
|
# update state
|
||||||
self.notify(self.action_plan_uuid,
|
self.notify(self.action_plan_uuid,
|
||||||
event_types.EventTypes.LAUNCH_ACTION_PLAN,
|
event_types.EventTypes.LAUNCH_ACTION_PLAN,
|
||||||
objects.action_plan.Status.ONGOING)
|
ap_objects.State.ONGOING)
|
||||||
applier = default.DefaultApplier(self.applier_manager, self.ctx)
|
applier = default.DefaultApplier(self.applier_manager, self.ctx)
|
||||||
result = applier.execute(self.action_plan_uuid)
|
result = applier.execute(self.action_plan_uuid)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -59,9 +59,9 @@ class DefaultActionPlanHandler(base.BaseActionPlanHandler):
|
|||||||
result = False
|
result = False
|
||||||
finally:
|
finally:
|
||||||
if result is True:
|
if result is True:
|
||||||
status = objects.action_plan.Status.SUCCEEDED
|
status = ap_objects.State.SUCCEEDED
|
||||||
else:
|
else:
|
||||||
status = objects.action_plan.Status.FAILED
|
status = ap_objects.State.FAILED
|
||||||
# update state
|
# update state
|
||||||
self.notify(self.action_plan_uuid,
|
self.notify(self.action_plan_uuid,
|
||||||
event_types.EventTypes.LAUNCH_ACTION_PLAN,
|
event_types.EventTypes.LAUNCH_ACTION_PLAN,
|
||||||
|
|||||||
@@ -100,13 +100,13 @@ class TaskFlowActionContainer(task.Task):
|
|||||||
def pre_execute(self):
|
def pre_execute(self):
|
||||||
try:
|
try:
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.ONGOING)
|
obj_action.State.ONGOING)
|
||||||
LOG.debug("Precondition action %s", self.name)
|
LOG.debug("Precondition action %s", self.name)
|
||||||
self.action.precondition()
|
self.action.precondition()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.FAILED)
|
obj_action.State.FAILED)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def execute(self, *args, **kwargs):
|
def execute(self, *args, **kwargs):
|
||||||
@@ -117,17 +117,17 @@ class TaskFlowActionContainer(task.Task):
|
|||||||
result = self.action.execute()
|
result = self.action.execute()
|
||||||
if result is not True:
|
if result is not True:
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.FAILED)
|
obj_action.State.FAILED)
|
||||||
else:
|
else:
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.SUCCEEDED)
|
obj_action.State.SUCCEEDED)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
LOG.error(_LE('The WorkFlow Engine has failed '
|
LOG.error(_LE('The WorkFlow Engine has failed '
|
||||||
'to execute the action %s'), self.name)
|
'to execute the action %s'), self.name)
|
||||||
|
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.FAILED)
|
obj_action.State.FAILED)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def post_execute(self):
|
def post_execute(self):
|
||||||
@@ -137,7 +137,7 @@ class TaskFlowActionContainer(task.Task):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
self.engine.notify(self._db_action,
|
self.engine.notify(self._db_action,
|
||||||
obj_action.Status.FAILED)
|
obj_action.State.FAILED)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def revert(self, *args, **kwargs):
|
def revert(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ class Connection(api.BaseConnection):
|
|||||||
values['uuid'] = utils.generate_uuid()
|
values['uuid'] = utils.generate_uuid()
|
||||||
|
|
||||||
if values.get('state') is None:
|
if values.get('state') is None:
|
||||||
values['state'] = audit_objects.AuditStatus.PENDING
|
values['state'] = audit_objects.State.PENDING
|
||||||
|
|
||||||
audit = models.Audit()
|
audit = models.Audit()
|
||||||
audit.update(values)
|
audit.update(values)
|
||||||
|
|||||||
@@ -15,26 +15,23 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
from watcher.common.messaging.events.event import Event
|
from watcher.common.messaging.events import event as watcher_event
|
||||||
from watcher.decision_engine.audit.base import \
|
from watcher.decision_engine.audit import base
|
||||||
BaseAuditHandler
|
from watcher.decision_engine.messaging import events as de_events
|
||||||
from watcher.decision_engine.messaging.events import Events
|
from watcher.decision_engine.planner import manager as planner_manager
|
||||||
from watcher.decision_engine.planner.manager import PlannerManager
|
from watcher.decision_engine.strategy.context import default as default_context
|
||||||
from watcher.decision_engine.strategy.context.default import \
|
from watcher.objects import audit as audit_objects
|
||||||
DefaultStrategyContext
|
|
||||||
from watcher.objects.audit import Audit
|
|
||||||
from watcher.objects.audit import AuditStatus
|
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DefaultAuditHandler(BaseAuditHandler):
|
class DefaultAuditHandler(base.BaseAuditHandler):
|
||||||
def __init__(self, messaging):
|
def __init__(self, messaging):
|
||||||
super(DefaultAuditHandler, self).__init__()
|
super(DefaultAuditHandler, self).__init__()
|
||||||
self._messaging = messaging
|
self._messaging = messaging
|
||||||
self._strategy_context = DefaultStrategyContext()
|
self._strategy_context = default_context.DefaultStrategyContext()
|
||||||
self._planner_manager = PlannerManager()
|
self._planner_manager = planner_manager.PlannerManager()
|
||||||
self._planner = None
|
self._planner = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -52,7 +49,7 @@ class DefaultAuditHandler(BaseAuditHandler):
|
|||||||
return self._strategy_context
|
return self._strategy_context
|
||||||
|
|
||||||
def notify(self, audit_uuid, event_type, status):
|
def notify(self, audit_uuid, event_type, status):
|
||||||
event = Event()
|
event = watcher_event.Event()
|
||||||
event.type = event_type
|
event.type = event_type
|
||||||
event.data = {}
|
event.data = {}
|
||||||
payload = {'audit_uuid': audit_uuid,
|
payload = {'audit_uuid': audit_uuid,
|
||||||
@@ -61,20 +58,19 @@ class DefaultAuditHandler(BaseAuditHandler):
|
|||||||
payload)
|
payload)
|
||||||
|
|
||||||
def update_audit_state(self, request_context, audit_uuid, state):
|
def update_audit_state(self, request_context, audit_uuid, state):
|
||||||
LOG.debug("Update audit state:{0} ".format(state))
|
LOG.debug("Update audit state: %s", state)
|
||||||
audit = Audit.get_by_uuid(request_context, audit_uuid)
|
audit = audit_objects.Audit.get_by_uuid(request_context, audit_uuid)
|
||||||
audit.state = state
|
audit.state = state
|
||||||
audit.save()
|
audit.save()
|
||||||
self.notify(audit_uuid, Events.TRIGGER_AUDIT, state)
|
self.notify(audit_uuid, de_events.Events.TRIGGER_AUDIT, state)
|
||||||
return audit
|
return audit
|
||||||
|
|
||||||
def execute(self, audit_uuid, request_context):
|
def execute(self, audit_uuid, request_context):
|
||||||
try:
|
try:
|
||||||
LOG.debug("Trigger audit %s" % audit_uuid)
|
LOG.debug("Trigger audit %s", audit_uuid)
|
||||||
|
|
||||||
# change state of the audit to ONGOING
|
# change state of the audit to ONGOING
|
||||||
audit = self.update_audit_state(request_context, audit_uuid,
|
audit = self.update_audit_state(request_context, audit_uuid,
|
||||||
AuditStatus.ONGOING)
|
audit_objects.State.ONGOING)
|
||||||
|
|
||||||
# execute the strategy
|
# execute the strategy
|
||||||
solution = self.strategy_context.execute_strategy(audit_uuid,
|
solution = self.strategy_context.execute_strategy(audit_uuid,
|
||||||
@@ -84,8 +80,8 @@ class DefaultAuditHandler(BaseAuditHandler):
|
|||||||
|
|
||||||
# change state of the audit to SUCCEEDED
|
# change state of the audit to SUCCEEDED
|
||||||
self.update_audit_state(request_context, audit_uuid,
|
self.update_audit_state(request_context, audit_uuid,
|
||||||
AuditStatus.SUCCEEDED)
|
audit_objects.State.SUCCEEDED)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
self.update_audit_state(request_context, audit_uuid,
|
self.update_audit_state(request_context, audit_uuid,
|
||||||
AuditStatus.FAILED)
|
audit_objects.State.FAILED)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class DefaultPlanner(base.BasePlanner):
|
|||||||
'action_type': action_type,
|
'action_type': action_type,
|
||||||
'applies_to': applies_to,
|
'applies_to': applies_to,
|
||||||
'input_parameters': input_parameters,
|
'input_parameters': input_parameters,
|
||||||
'state': objects.action.Status.PENDING,
|
'state': objects.action.State.PENDING,
|
||||||
'alarm': None,
|
'alarm': None,
|
||||||
'next': None,
|
'next': None,
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ class DefaultPlanner(base.BasePlanner):
|
|||||||
'uuid': utils.generate_uuid(),
|
'uuid': utils.generate_uuid(),
|
||||||
'audit_id': audit_id,
|
'audit_id': audit_id,
|
||||||
'first_action_id': None,
|
'first_action_id': None,
|
||||||
'state': objects.action_plan.Status.RECOMMENDED
|
'state': objects.action_plan.State.RECOMMENDED
|
||||||
}
|
}
|
||||||
|
|
||||||
new_action_plan = objects.ActionPlan(context, **action_plan_dict)
|
new_action_plan = objects.ActionPlan(context, **action_plan_dict)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from watcher.objects import base
|
|||||||
from watcher.objects import utils as obj_utils
|
from watcher.objects import utils as obj_utils
|
||||||
|
|
||||||
|
|
||||||
class Status(object):
|
class State(object):
|
||||||
PENDING = 'PENDING'
|
PENDING = 'PENDING'
|
||||||
ONGOING = 'ONGOING'
|
ONGOING = 'ONGOING'
|
||||||
FAILED = 'FAILED'
|
FAILED = 'FAILED'
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ from watcher.objects import base
|
|||||||
from watcher.objects import utils as obj_utils
|
from watcher.objects import utils as obj_utils
|
||||||
|
|
||||||
|
|
||||||
class Status(object):
|
class State(object):
|
||||||
RECOMMENDED = 'RECOMMENDED'
|
RECOMMENDED = 'RECOMMENDED'
|
||||||
ONGOING = 'ONGOING'
|
ONGOING = 'ONGOING'
|
||||||
FAILED = 'FAILED'
|
FAILED = 'FAILED'
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ from watcher.objects import base
|
|||||||
from watcher.objects import utils as obj_utils
|
from watcher.objects import utils as obj_utils
|
||||||
|
|
||||||
|
|
||||||
class AuditStatus(object):
|
class State(object):
|
||||||
ONGOING = 'ONGOING'
|
ONGOING = 'ONGOING'
|
||||||
SUCCEEDED = 'SUCCEEDED'
|
SUCCEEDED = 'SUCCEEDED'
|
||||||
SUBMITTED = 'SUBMITTED'
|
SUBMITTED = 'SUBMITTED'
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ class TestPost(api_base.FunctionalTest):
|
|||||||
self.assertEqual(urlparse.urlparse(response.location).path,
|
self.assertEqual(urlparse.urlparse(response.location).path,
|
||||||
expected_location)
|
expected_location)
|
||||||
self.assertEqual(audit_dict['uuid'], response.json['uuid'])
|
self.assertEqual(audit_dict['uuid'], response.json['uuid'])
|
||||||
self.assertEqual(objects.audit.AuditStatus.PENDING,
|
self.assertEqual(objects.audit.State.PENDING,
|
||||||
response.json['state'])
|
response.json['state'])
|
||||||
self.assertNotIn('updated_at', response.json.keys)
|
self.assertNotIn('updated_at', response.json.keys)
|
||||||
self.assertNotIn('deleted_at', response.json.keys)
|
self.assertNotIn('deleted_at', response.json.keys)
|
||||||
@@ -492,7 +492,7 @@ class TestPost(api_base.FunctionalTest):
|
|||||||
response = self.post_json('/audits', audit_dict)
|
response = self.post_json('/audits', audit_dict)
|
||||||
self.assertEqual('application/json', response.content_type)
|
self.assertEqual('application/json', response.content_type)
|
||||||
self.assertEqual(201, response.status_int)
|
self.assertEqual(201, response.status_int)
|
||||||
self.assertEqual(objects.audit.AuditStatus.PENDING,
|
self.assertEqual(objects.audit.State.PENDING,
|
||||||
response.json['state'])
|
response.json['state'])
|
||||||
self.assertTrue(utils.is_uuid_like(response.json['uuid']))
|
self.assertTrue(utils.is_uuid_like(response.json['uuid']))
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from mock import MagicMock
|
|||||||
|
|
||||||
from watcher.applier.action_plan.default import DefaultActionPlanHandler
|
from watcher.applier.action_plan.default import DefaultActionPlanHandler
|
||||||
from watcher.applier.messaging.event_types import EventTypes
|
from watcher.applier.messaging.event_types import EventTypes
|
||||||
from watcher.objects.action_plan import Status
|
from watcher.objects import action_plan as ap_objects
|
||||||
from watcher.objects import ActionPlan
|
from watcher.objects import ActionPlan
|
||||||
from watcher.tests.db.base import DbTestCase
|
from watcher.tests.db.base import DbTestCase
|
||||||
from watcher.tests.objects import utils as obj_utils
|
from watcher.tests.objects import utils as obj_utils
|
||||||
@@ -39,7 +39,7 @@ class TestDefaultActionPlanHandler(DbTestCase):
|
|||||||
command.execute()
|
command.execute()
|
||||||
action_plan = ActionPlan.get_by_uuid(self.context,
|
action_plan = ActionPlan.get_by_uuid(self.context,
|
||||||
self.action_plan.uuid)
|
self.action_plan.uuid)
|
||||||
self.assertEqual(Status.SUCCEEDED, action_plan.state)
|
self.assertEqual(ap_objects.State.SUCCEEDED, action_plan.state)
|
||||||
|
|
||||||
def test_trigger_audit_send_notification(self):
|
def test_trigger_audit_send_notification(self):
|
||||||
messaging = MagicMock()
|
messaging = MagicMock()
|
||||||
@@ -48,10 +48,10 @@ class TestDefaultActionPlanHandler(DbTestCase):
|
|||||||
command.execute()
|
command.execute()
|
||||||
|
|
||||||
call_on_going = call(EventTypes.LAUNCH_ACTION_PLAN.name, {
|
call_on_going = call(EventTypes.LAUNCH_ACTION_PLAN.name, {
|
||||||
'action_plan_status': Status.ONGOING,
|
'action_plan_state': ap_objects.State.ONGOING,
|
||||||
'action_plan__uuid': self.action_plan.uuid})
|
'action_plan__uuid': self.action_plan.uuid})
|
||||||
call_succeeded = call(EventTypes.LAUNCH_ACTION_PLAN.name, {
|
call_succeeded = call(EventTypes.LAUNCH_ACTION_PLAN.name, {
|
||||||
'action_plan_status': Status.SUCCEEDED,
|
'action_plan_state': ap_objects.State.SUCCEEDED,
|
||||||
'action_plan__uuid': self.action_plan.uuid})
|
'action_plan__uuid': self.action_plan.uuid})
|
||||||
|
|
||||||
calls = [call_on_going, call_succeeded]
|
calls = [call_on_going, call_succeeded]
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
'action_type': action_type,
|
'action_type': action_type,
|
||||||
'applies_to': applies_to,
|
'applies_to': applies_to,
|
||||||
'input_parameters': parameters,
|
'input_parameters': parameters,
|
||||||
'state': objects.action.Status.PENDING,
|
'state': objects.action.State.PENDING,
|
||||||
'alarm': None,
|
'alarm': None,
|
||||||
'next': next,
|
'next': next,
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
actions = [self.create_action("nop", "", {'message': 'test'}, None)]
|
actions = [self.create_action("nop", "", {'message': 'test'}, None)]
|
||||||
result = self.engine.execute(actions)
|
result = self.engine.execute(actions)
|
||||||
self.assertEqual(result, True)
|
self.assertEqual(result, True)
|
||||||
self.check_actions_state(actions, objects.action.Status.SUCCEEDED)
|
self.check_actions_state(actions, objects.action.State.SUCCEEDED)
|
||||||
|
|
||||||
def test_execute_with_two_actions(self):
|
def test_execute_with_two_actions(self):
|
||||||
actions = []
|
actions = []
|
||||||
@@ -107,16 +107,16 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
|
|
||||||
result = self.engine.execute(actions)
|
result = self.engine.execute(actions)
|
||||||
self.assertEqual(result, True)
|
self.assertEqual(result, True)
|
||||||
self.check_actions_state(actions, objects.action.Status.SUCCEEDED)
|
self.check_actions_state(actions, objects.action.State.SUCCEEDED)
|
||||||
|
|
||||||
def test_execute_with_three_actions(self):
|
def test_execute_with_three_actions(self):
|
||||||
actions = []
|
actions = []
|
||||||
next2 = self.create_action("nop", "vm1", {'message': 'next'}, None)
|
next2 = self.create_action("nop", "vm1", {'message': 'next'}, None)
|
||||||
next = self.create_action("sleep", "vm1", {'duration': '0'}, next2.id)
|
next = self.create_action("sleep", "vm1", {'duration': '0'}, next2.id)
|
||||||
first = self.create_action("nop", "vm1", {'message': 'hello'}, next.id)
|
first = self.create_action("nop", "vm1", {'message': 'hello'}, next.id)
|
||||||
self.check_action_state(first, objects.action.Status.PENDING)
|
self.check_action_state(first, objects.action.State.PENDING)
|
||||||
self.check_action_state(next, objects.action.Status.PENDING)
|
self.check_action_state(next, objects.action.State.PENDING)
|
||||||
self.check_action_state(next2, objects.action.Status.PENDING)
|
self.check_action_state(next2, objects.action.State.PENDING)
|
||||||
|
|
||||||
actions.append(first)
|
actions.append(first)
|
||||||
actions.append(next)
|
actions.append(next)
|
||||||
@@ -124,7 +124,7 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
|
|
||||||
result = self.engine.execute(actions)
|
result = self.engine.execute(actions)
|
||||||
self.assertEqual(result, True)
|
self.assertEqual(result, True)
|
||||||
self.check_actions_state(actions, objects.action.Status.SUCCEEDED)
|
self.check_actions_state(actions, objects.action.State.SUCCEEDED)
|
||||||
|
|
||||||
def test_execute_with_exception(self):
|
def test_execute_with_exception(self):
|
||||||
actions = []
|
actions = []
|
||||||
@@ -135,18 +135,18 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
first = self.create_action("nop", "vm1",
|
first = self.create_action("nop", "vm1",
|
||||||
{'message': 'hello'}, next.id)
|
{'message': 'hello'}, next.id)
|
||||||
|
|
||||||
self.check_action_state(first, objects.action.Status.PENDING)
|
self.check_action_state(first, objects.action.State.PENDING)
|
||||||
self.check_action_state(next, objects.action.Status.PENDING)
|
self.check_action_state(next, objects.action.State.PENDING)
|
||||||
self.check_action_state(next2, objects.action.Status.PENDING)
|
self.check_action_state(next2, objects.action.State.PENDING)
|
||||||
actions.append(first)
|
actions.append(first)
|
||||||
actions.append(next)
|
actions.append(next)
|
||||||
actions.append(next2)
|
actions.append(next2)
|
||||||
|
|
||||||
result = self.engine.execute(actions)
|
result = self.engine.execute(actions)
|
||||||
self.assertEqual(result, False)
|
self.assertEqual(result, False)
|
||||||
self.check_action_state(first, objects.action.Status.SUCCEEDED)
|
self.check_action_state(first, objects.action.State.SUCCEEDED)
|
||||||
self.check_action_state(next, objects.action.Status.SUCCEEDED)
|
self.check_action_state(next, objects.action.State.SUCCEEDED)
|
||||||
self.check_action_state(next2, objects.action.Status.FAILED)
|
self.check_action_state(next2, objects.action.State.FAILED)
|
||||||
|
|
||||||
@mock.patch("watcher.common.loader.default.DriverManager")
|
@mock.patch("watcher.common.loader.default.DriverManager")
|
||||||
def test_execute_with_action_exception(self, m_driver):
|
def test_execute_with_action_exception(self, m_driver):
|
||||||
@@ -161,4 +161,4 @@ class TestDefaultWorkFlowEngine(base.DbTestCase):
|
|||||||
actions = [self.create_action("dontcare", "vm1", {}, None)]
|
actions = [self.create_action("dontcare", "vm1", {}, None)]
|
||||||
result = self.engine.execute(actions)
|
result = self.engine.execute(actions)
|
||||||
self.assertEqual(result, False)
|
self.assertEqual(result, False)
|
||||||
self.check_action_state(actions[0], objects.action.Status.FAILED)
|
self.check_action_state(actions[0], objects.action.State.FAILED)
|
||||||
|
|||||||
@@ -15,19 +15,17 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
from watcher.decision_engine.audit.default import DefaultAuditHandler
|
from watcher.decision_engine.audit import default as default
|
||||||
from watcher.decision_engine.messaging.events import Events
|
from watcher.decision_engine.messaging import events
|
||||||
from watcher.metrics_engine.cluster_model_collector.manager import \
|
from watcher.metrics_engine.cluster_model_collector import manager
|
||||||
CollectorManager
|
from watcher.objects import audit as audit_objects
|
||||||
from watcher.objects.audit import Audit
|
from watcher.tests.db import base
|
||||||
from watcher.objects.audit import AuditStatus
|
from watcher.tests.decision_engine.strategy.strategies import \
|
||||||
from watcher.tests.db.base import DbTestCase
|
faker_cluster_state as faker
|
||||||
from watcher.tests.decision_engine.strategy.strategies.faker_cluster_state \
|
|
||||||
import FakerModelCollector
|
|
||||||
from watcher.tests.objects import utils as obj_utils
|
from watcher.tests.objects import utils as obj_utils
|
||||||
|
|
||||||
|
|
||||||
class TestDefaultAuditHandler(DbTestCase):
|
class TestDefaultAuditHandler(base.DbTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestDefaultAuditHandler, self).setUp()
|
super(TestDefaultAuditHandler, self).setUp()
|
||||||
self.audit_template = obj_utils.create_test_audit_template(
|
self.audit_template = obj_utils.create_test_audit_template(
|
||||||
@@ -36,32 +34,32 @@ class TestDefaultAuditHandler(DbTestCase):
|
|||||||
self.context,
|
self.context,
|
||||||
audit_template_id=self.audit_template.id)
|
audit_template_id=self.audit_template.id)
|
||||||
|
|
||||||
@mock.patch.object(CollectorManager, "get_cluster_model_collector")
|
@mock.patch.object(manager.CollectorManager, "get_cluster_model_collector")
|
||||||
def test_trigger_audit_without_errors(self, mock_collector):
|
def test_trigger_audit_without_errors(self, mock_collector):
|
||||||
mock_collector.return_value = FakerModelCollector()
|
mock_collector.return_value = faker.FakerModelCollector()
|
||||||
audit_handler = DefaultAuditHandler(mock.MagicMock())
|
audit_handler = default.DefaultAuditHandler(mock.MagicMock())
|
||||||
audit_handler.execute(self.audit.uuid, self.context)
|
audit_handler.execute(self.audit.uuid, self.context)
|
||||||
|
|
||||||
@mock.patch.object(CollectorManager, "get_cluster_model_collector")
|
@mock.patch.object(manager.CollectorManager, "get_cluster_model_collector")
|
||||||
def test_trigger_audit_state_success(self, mock_collector):
|
def test_trigger_audit_state_success(self, mock_collector):
|
||||||
mock_collector.return_value = FakerModelCollector()
|
mock_collector.return_value = faker.FakerModelCollector()
|
||||||
audit_handler = DefaultAuditHandler(mock.MagicMock())
|
audit_handler = default.DefaultAuditHandler(mock.MagicMock())
|
||||||
audit_handler.execute(self.audit.uuid, self.context)
|
audit_handler.execute(self.audit.uuid, self.context)
|
||||||
audit = Audit.get_by_uuid(self.context, self.audit.uuid)
|
audit = audit_objects.Audit.get_by_uuid(self.context, self.audit.uuid)
|
||||||
self.assertEqual(AuditStatus.SUCCEEDED, audit.state)
|
self.assertEqual(audit_objects.State.SUCCEEDED, audit.state)
|
||||||
|
|
||||||
@mock.patch.object(CollectorManager, "get_cluster_model_collector")
|
@mock.patch.object(manager.CollectorManager, "get_cluster_model_collector")
|
||||||
def test_trigger_audit_send_notification(self, mock_collector):
|
def test_trigger_audit_send_notification(self, mock_collector):
|
||||||
messaging = mock.MagicMock()
|
messaging = mock.MagicMock()
|
||||||
mock_collector.return_value = FakerModelCollector()
|
mock_collector.return_value = faker.FakerModelCollector()
|
||||||
audit_handler = DefaultAuditHandler(messaging)
|
audit_handler = default.DefaultAuditHandler(messaging)
|
||||||
audit_handler.execute(self.audit.uuid, self.context)
|
audit_handler.execute(self.audit.uuid, self.context)
|
||||||
|
|
||||||
call_on_going = mock.call(Events.TRIGGER_AUDIT.name, {
|
call_on_going = mock.call(events.Events.TRIGGER_AUDIT.name, {
|
||||||
'audit_status': AuditStatus.ONGOING,
|
'audit_status': audit_objects.State.ONGOING,
|
||||||
'audit_uuid': self.audit.uuid})
|
'audit_uuid': self.audit.uuid})
|
||||||
call_succeeded = mock.call(Events.TRIGGER_AUDIT.name, {
|
call_succeeded = mock.call(events.Events.TRIGGER_AUDIT.name, {
|
||||||
'audit_status': AuditStatus.SUCCEEDED,
|
'audit_status': audit_objects.State.SUCCEEDED,
|
||||||
'audit_uuid': self.audit.uuid})
|
'audit_uuid': self.audit.uuid})
|
||||||
|
|
||||||
calls = [call_on_going, call_succeeded]
|
calls = [call_on_going, call_succeeded]
|
||||||
|
|||||||
Reference in New Issue
Block a user