Action plan state transition - payload validation
This patchset fixes the lack of field validation that are provided by an API user. Via a PATCH on /action_plans, the only field that can be modified is now the 'state'. This field can only perform to the following state transitions: - RECOMMENDED --> TRIGGERED - RECOMMENDED --> CANCELLED - ONGOING --> CANCELLED - TRIGGERED --> CANCELLED The DELETED state can only be set using a DELETE request. Closes-Bug: #1531106 Change-Id: I6669cbe63407f0bbb792fb2e2ce6b1e8a7365238
This commit is contained in:
committed by
David TARDIVEL
parent
2db5ae31c7
commit
83fdbf7366
@@ -16,26 +16,20 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from mock import patch
|
||||
from stevedore.extension import Extension
|
||||
from stevedore.extension import ExtensionManager
|
||||
|
||||
from watcher.decision_engine.strategy.loading.default import \
|
||||
DefaultStrategyLoader
|
||||
from watcher.decision_engine.strategy.strategies.base import BaseStrategy
|
||||
from watcher.decision_engine.strategy.strategies.dummy_strategy import \
|
||||
DummyStrategy
|
||||
from watcher.tests.base import TestCase
|
||||
from stevedore import extension
|
||||
from watcher.common import exception
|
||||
from watcher.decision_engine.strategy.loading import default as default_loading
|
||||
from watcher.decision_engine.strategy.strategies import dummy_strategy
|
||||
from watcher.tests import base
|
||||
|
||||
|
||||
class TestDefaultStrategyLoader(TestCase):
|
||||
class TestDefaultStrategyLoader(base.TestCase):
|
||||
|
||||
strategy_loader = DefaultStrategyLoader()
|
||||
strategy_loader = default_loading.DefaultStrategyLoader()
|
||||
|
||||
def test_load_strategy_with_empty_model(self):
|
||||
selected_strategy = self.strategy_loader.load(None)
|
||||
self.assertIsNotNone(selected_strategy,
|
||||
'The default strategy not be must none')
|
||||
self.assertIsInstance(selected_strategy, BaseStrategy)
|
||||
self.assertRaises(
|
||||
exception.LoadingError, self.strategy_loader.load, None)
|
||||
|
||||
def test_load_strategy_is_basic(self):
|
||||
exptected_strategy = 'basic'
|
||||
@@ -45,31 +39,32 @@ class TestDefaultStrategyLoader(TestCase):
|
||||
exptected_strategy,
|
||||
'The default strategy should be basic')
|
||||
|
||||
@patch(
|
||||
"watcher.decision_engine.strategy.loading.default.ExtensionManager")
|
||||
@patch("watcher.common.loader.default.ExtensionManager")
|
||||
def test_strategy_loader(self, m_extension_manager):
|
||||
dummy_strategy_name = "dummy"
|
||||
# Set up the fake Stevedore extensions
|
||||
m_extension_manager.return_value = ExtensionManager.make_test_instance(
|
||||
extensions=[Extension(
|
||||
name=dummy_strategy_name,
|
||||
entry_point="%s:%s" % (DummyStrategy.__module__,
|
||||
DummyStrategy.__name__),
|
||||
plugin=DummyStrategy,
|
||||
obj=None,
|
||||
)],
|
||||
namespace="watcher_strategies",
|
||||
)
|
||||
strategy_loader = DefaultStrategyLoader()
|
||||
m_extension_manager.return_value = extension.\
|
||||
ExtensionManager.make_test_instance(
|
||||
extensions=[extension.Extension(
|
||||
name=dummy_strategy_name,
|
||||
entry_point="%s:%s" % (
|
||||
dummy_strategy.DummyStrategy.__module__,
|
||||
dummy_strategy.DummyStrategy.__name__),
|
||||
plugin=dummy_strategy.DummyStrategy,
|
||||
obj=None,
|
||||
)],
|
||||
namespace="watcher_strategies",
|
||||
)
|
||||
strategy_loader = default_loading.DefaultStrategyLoader()
|
||||
loaded_strategy = strategy_loader.load("dummy")
|
||||
|
||||
self.assertEqual("dummy", loaded_strategy.name)
|
||||
self.assertEqual("Dummy Strategy", loaded_strategy.description)
|
||||
|
||||
def test_load_dummy_strategy(self):
|
||||
strategy_loader = DefaultStrategyLoader()
|
||||
strategy_loader = default_loading.DefaultStrategyLoader()
|
||||
loaded_strategy = strategy_loader.load("dummy")
|
||||
self.assertIsInstance(loaded_strategy, DummyStrategy)
|
||||
self.assertIsInstance(loaded_strategy, dummy_strategy.DummyStrategy)
|
||||
|
||||
def test_endpoints(self):
|
||||
for endpoint in self.strategy_loader.list_available():
|
||||
|
||||
Reference in New Issue
Block a user