You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by mx...@apache.org on 2017/03/23 18:14:43 UTC

[02/16] incubator-ariatosca git commit: ARIA-105 Integrate parser and orchestrator models

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/core/test_engine.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_engine.py b/tests/orchestrator/workflows/core/test_engine.py
index b2b67fc..6f97952 100644
--- a/tests/orchestrator/workflows/core/test_engine.py
+++ b/tests/orchestrator/workflows/core/test_engine.py
@@ -23,7 +23,7 @@ from aria.orchestrator import (
     workflow,
     operation,
 )
-from aria.storage.modeling import model
+from aria.modeling import models
 from aria.orchestrator.workflows import (
     api,
     exceptions,
@@ -60,15 +60,19 @@ class BaseTest(object):
             max_attempts=None,
             retry_interval=None,
             ignore_failure=None):
-        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-        node.interfaces = [mock.models.get_interface(
-            'aria.interfaces.lifecycle.create',
+        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+        interface = mock.models.create_interface(
+            node.service,
+            'aria.interfaces.lifecycle',
+            'create',
             operation_kwargs=dict(implementation='{name}.{func.__name__}'.format(name=__name__,
                                                                                  func=func))
-        )]
-        return api.task.OperationTask.node(
-            instance=node,
-            name='aria.interfaces.lifecycle.create',
+        )
+        node.interfaces[interface.name] = interface
+        return api.task.OperationTask.for_node(
+            node=node,
+            interface_name='aria.interfaces.lifecycle',
+            operation_name='create',
             inputs=inputs,
             max_attempts=max_attempts,
             retry_interval=retry_interval,
@@ -147,7 +151,7 @@ class TestEngine(BaseTest):
         execution = workflow_context.execution
         assert execution.started_at <= execution.ended_at <= datetime.utcnow()
         assert execution.error is None
-        assert execution.status == model.Execution.TERMINATED
+        assert execution.status == models.Execution.TERMINATED
 
     def test_single_task_successful_execution(self, workflow_context, executor):
         @workflow
@@ -176,7 +180,7 @@ class TestEngine(BaseTest):
         execution = workflow_context.execution
         assert execution.started_at <= execution.ended_at <= datetime.utcnow()
         assert execution.error is not None
-        assert execution.status == model.Execution.FAILED
+        assert execution.status == models.Execution.FAILED
 
     def test_two_tasks_execution_order(self, workflow_context, executor):
         @workflow
@@ -241,7 +245,7 @@ class TestCancel(BaseTest):
         execution = workflow_context.execution
         assert execution.started_at <= execution.ended_at <= datetime.utcnow()
         assert execution.error is None
-        assert execution.status == model.Execution.CANCELLED
+        assert execution.status == models.Execution.CANCELLED
 
     def test_cancel_pending_execution(self, workflow_context, executor):
         @workflow
@@ -252,7 +256,7 @@ class TestCancel(BaseTest):
                            executor=executor)
         eng.cancel_execution()
         execution = workflow_context.execution
-        assert execution.status == model.Execution.CANCELLED
+        assert execution.status == models.Execution.CANCELLED
 
 
 class TestRetries(BaseTest):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/core/test_task.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_task.py b/tests/orchestrator/workflows/core/test_task.py
index 26564c5..f3ce92f 100644
--- a/tests/orchestrator/workflows/core/test_task.py
+++ b/tests/orchestrator/workflows/core/test_task.py
@@ -19,6 +19,7 @@ from datetime import (
 
 import pytest
 
+from aria.modeling import models
 from aria.orchestrator.context import workflow as workflow_context
 from aria.orchestrator.workflows import (
     api,
@@ -28,8 +29,10 @@ from aria.orchestrator.workflows import (
 
 from tests import mock, storage
 
-OP_NAME = 'tosca.interfaces.node.lifecycle.Standard.create'
-RELATIONSHIP_OP_NAME = 'tosca.interfaces.relationship.Configure.pre_configure'
+NODE_INTERFACE_NAME = 'Standard'
+NODE_OPERATION_NAME = 'create'
+RELATIONSHIP_INTERFACE_NAME = 'Configure'
+RELATIONSHIP_OPERATION_NAME = 'pre_configure'
 
 
 @pytest.fixture
@@ -37,15 +40,22 @@ def ctx(tmpdir):
     context = mock.context.simple(str(tmpdir))
 
     relationship = context.model.relationship.list()[0]
-    relationship.interfaces = [
-        mock.models.get_interface(RELATIONSHIP_OP_NAME, edge='source'),
-        mock.models.get_interface(RELATIONSHIP_OP_NAME, edge='target')
-    ]
+    interface = mock.models.create_interface(
+        relationship.source_node.service,
+        RELATIONSHIP_INTERFACE_NAME,
+        RELATIONSHIP_OPERATION_NAME
+    )
+    relationship.interfaces[interface.name] = interface
     context.model.relationship.update(relationship)
 
-    dependent_node = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-    dependent_node.interfaces = [mock.models.get_interface(OP_NAME)]
-    context.model.node.update(dependent_node)
+    node = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+    interface = mock.models.create_interface(
+        node.service,
+        NODE_INTERFACE_NAME,
+        NODE_OPERATION_NAME
+    )
+    node.interfaces[interface.name] = interface
+    context.model.node.update(node)
 
     yield context
     storage.release_sqlite_storage(context.model)
@@ -55,39 +65,49 @@ class TestOperationTask(object):
 
     def _create_node_operation_task(self, ctx, node):
         with workflow_context.current.push(ctx):
-            api_task = api.task.OperationTask.node(
-                instance=node,
-                name='tosca.interfaces.node.lifecycle.Standard.create')
+            api_task = api.task.OperationTask.for_node(
+                node=node,
+                interface_name=NODE_INTERFACE_NAME,
+                operation_name=NODE_OPERATION_NAME)
             core_task = core.task.OperationTask(api_task=api_task)
         return api_task, core_task
 
-    def _create_relationship_operation_task(self, ctx, relationship, operation_name, edge):
+    def _create_relationship_operation_task(self, ctx, relationship, runs_on):
         with workflow_context.current.push(ctx):
-            api_task = api.task.OperationTask.relationship(
-                instance=relationship, name=operation_name, edge=edge)
+            api_task = api.task.OperationTask.for_relationship(
+                relationship=relationship,
+                interface_name=RELATIONSHIP_INTERFACE_NAME,
+                operation_name=RELATIONSHIP_OPERATION_NAME,
+                runs_on=runs_on)
             core_task = core.task.OperationTask(api_task=api_task)
         return api_task, core_task
 
     def test_node_operation_task_creation(self, ctx):
-        storage_plugin = mock.models.get_plugin(package_name='p1', package_version='0.1')
-        storage_plugin_other = mock.models.get_plugin(package_name='p0', package_version='0.0')
-        ctx.model.plugin.put(storage_plugin_other)
+        storage_plugin = mock.models.create_plugin(
+            package_name='p1', package_version='0.1')
+        storage_plugin_specification = mock.models.create_plugin_specification(
+            package_name='p1', package_version='0.1')
+        storage_plugin_specification_other = mock.models.create_plugin(
+            package_name='p0', package_version='0.0')
         ctx.model.plugin.put(storage_plugin)
-        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        ctx.model.plugin_specification.put(storage_plugin_specification_other)
+        ctx.model.plugin_specification.put(storage_plugin_specification)
+        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
         node_template = node.node_template
-        plugin_name = 'plugin1'
-        node_template.plugins = [{'name': 'plugin1',
-                                  'package_name': 'p1',
-                                  'package_version': '0.1'}]
-        node.interfaces = [mock.models.get_interface(
-            'tosca.interfaces.node.lifecycle.Standard.create',
-            operation_kwargs=dict(plugin='plugin1')
-        )]
+        node_template.plugin_specifications[storage_plugin_specification.name] = \
+            storage_plugin_specification
+        interface = mock.models.create_interface(
+            node.service,
+            NODE_INTERFACE_NAME,
+            NODE_OPERATION_NAME,
+            operation_kwargs=dict(plugin_specification=storage_plugin_specification)
+        )
+        node.interfaces[interface.name] = interface
         ctx.model.node_template.update(node_template)
         ctx.model.node.update(node)
         api_task, core_task = self._create_node_operation_task(ctx, node)
         storage_task = ctx.model.task.get_by_name(core_task.name)
-        assert storage_task.plugin_name == plugin_name
+        assert storage_task.plugin is storage_plugin
         assert storage_task.execution_name == ctx.execution.name
         assert storage_task.runs_on == core_task.context.node
         assert core_task.model_task == storage_task
@@ -101,17 +121,17 @@ class TestOperationTask(object):
         relationship = ctx.model.relationship.list()[0]
         ctx.model.relationship.update(relationship)
         _, core_task = self._create_relationship_operation_task(
-            ctx, relationship, RELATIONSHIP_OP_NAME, 'source')
+            ctx, relationship, models.Task.RUNS_ON_SOURCE)
         assert core_task.model_task.runs_on == relationship.source_node
 
     def test_target_relationship_operation_task_creation(self, ctx):
         relationship = ctx.model.relationship.list()[0]
         _, core_task = self._create_relationship_operation_task(
-            ctx, relationship, RELATIONSHIP_OP_NAME, 'target')
+            ctx, relationship, models.Task.RUNS_ON_TARGET)
         assert core_task.model_task.runs_on == relationship.target_node
 
     def test_operation_task_edit_locked_attribute(self, ctx):
-        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
 
         _, core_task = self._create_node_operation_task(ctx, node)
         now = datetime.utcnow()
@@ -127,7 +147,7 @@ class TestOperationTask(object):
             core_task.due_at = now
 
     def test_operation_task_edit_attributes(self, ctx):
-        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
 
         _, core_task = self._create_node_operation_task(ctx, node)
         future_time = datetime.utcnow() + timedelta(seconds=3)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py b/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
index 167004e..0a95d43 100644
--- a/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
+++ b/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
@@ -23,10 +23,16 @@ from tests import storage
 
 
 def test_task_graph_into_execution_graph(tmpdir):
-    operation_name = 'tosca.interfaces.node.lifecycle.Standard.create'
+    interface_name = 'Standard'
+    operation_name = 'create'
     task_context = mock.context.simple(str(tmpdir))
-    node = task_context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-    node.interfaces = [mock.models.get_interface(operation_name)]
+    node = task_context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+    interface = mock.models.create_interface(
+        node.service,
+        interface_name,
+        operation_name
+    )
+    node.interfaces[interface.name] = interface
     task_context.model.node.update(node)
 
     def sub_workflow(name, **_):
@@ -34,14 +40,17 @@ def test_task_graph_into_execution_graph(tmpdir):
 
     with context.workflow.current.push(task_context):
         test_task_graph = api.task.WorkflowTask(sub_workflow, name='test_task_graph')
-        simple_before_task = api.task.OperationTask.node(instance=node,
-                                                         name=operation_name)
-        simple_after_task = api.task.OperationTask.node(instance=node,
-                                                        name=operation_name)
+        simple_before_task = api.task.OperationTask.for_node(node=node,
+                                                             interface_name=interface_name,
+                                                             operation_name=operation_name)
+        simple_after_task = api.task.OperationTask.for_node(node=node,
+                                                            interface_name=interface_name,
+                                                            operation_name=operation_name)
 
         inner_task_graph = api.task.WorkflowTask(sub_workflow, name='test_inner_task_graph')
-        inner_task = api.task.OperationTask.node(instance=node,
-                                                 name=operation_name)
+        inner_task = api.task.OperationTask.for_node(node=node,
+                                                     interface_name=interface_name,
+                                                     operation_name=operation_name)
         inner_task_graph.add_tasks(inner_task)
 
     test_task_graph.add_tasks(simple_before_task)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/executor/test_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_executor.py b/tests/orchestrator/workflows/executor/test_executor.py
index 8da801e..0a2280d 100644
--- a/tests/orchestrator/workflows/executor/test_executor.py
+++ b/tests/orchestrator/workflows/executor/test_executor.py
@@ -28,7 +28,7 @@ except ImportError:
     _celery = None
     app = None
 
-from aria.storage.modeling import model
+from aria.modeling import models
 from aria.orchestrator import events
 from aria.orchestrator.workflows.executor import (
     thread,
@@ -43,7 +43,8 @@ def test_execute(executor):
     expected_value = 'value'
     successful_task = MockTask(mock_successful_task)
     failing_task = MockTask(mock_failing_task)
-    task_with_inputs = MockTask(mock_task_with_input, inputs=dict(input='value'))
+    task_with_inputs = MockTask(mock_task_with_input, inputs={'input': models.Parameter.wrap(
+        'input', 'value')})
 
     for task in [successful_task, failing_task, task_with_inputs]:
         executor.execute(task)
@@ -98,14 +99,15 @@ class MockContext(object):
 
 class MockTask(object):
 
-    INFINITE_RETRIES = model.Task.INFINITE_RETRIES
+    INFINITE_RETRIES = models.Task.INFINITE_RETRIES
 
     def __init__(self, func, inputs=None):
         self.states = []
         self.exception = None
         self.id = str(uuid.uuid4())
         name = func.__name__
-        implementation = 'tests.orchestrator.workflows.executor.test_executor.{name}'.format(
+        implementation = '{module}.{name}'.format(
+            module=__name__,
             name=name)
         self.implementation = implementation
         self.logger = logging.getLogger()
@@ -117,7 +119,7 @@ class MockTask(object):
         self.plugin_fk = None
         self.ignore_failure = False
 
-        for state in model.Task.STATES:
+        for state in models.Task.STATES:
             setattr(self, state.upper(), state)
 
     @contextmanager
@@ -151,6 +153,7 @@ def register_signals():
     def failure_handler(task, exception, *args, **kwargs):
         task.states.append('failure')
         task.exception = exception
+
     events.start_task_signal.connect(start_handler)
     events.on_success_task_signal.connect(success_handler)
     events.on_failure_task_signal.connect(failure_handler)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/executor/test_process_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor.py b/tests/orchestrator/workflows/executor/test_process_executor.py
index 2d43261..3cd1c47 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor.py
@@ -22,8 +22,8 @@ from contextlib import contextmanager
 import pytest
 
 from aria import application_model_storage
+from aria.modeling import models as aria_models
 from aria.storage import sql_mapi
-from aria.storage.modeling import model as aria_model
 from aria.orchestrator import (
     events,
     plugin
@@ -126,7 +126,7 @@ class MockContext(object):
 
 class MockTask(object):
 
-    INFINITE_RETRIES = aria_model.Task.INFINITE_RETRIES
+    INFINITE_RETRIES = aria_models.Task.INFINITE_RETRIES
 
     def __init__(self, plugin, implementation):
         self.id = str(uuid.uuid4())
@@ -141,7 +141,7 @@ class MockTask(object):
         self.plugin = plugin
         self.ignore_failure = False
 
-        for state in aria_model.Task.STATES:
+        for state in aria_models.Task.STATES:
             setattr(self, state.upper(), state)
 
     @contextmanager

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/executor/test_process_executor_concurrent_modifications.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor_concurrent_modifications.py b/tests/orchestrator/workflows/executor/test_process_executor_concurrent_modifications.py
index ad3cb76..6d0eb5b 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_concurrent_modifications.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_concurrent_modifications.py
@@ -71,9 +71,9 @@ def _test_update_and_refresh(ctx, lock_files, key, first_value, second_value):
 
 def _test(context, executor, lock_files, func, expected_failure):
     def _node(ctx):
-        return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
 
-    op_name = mock.operations.NODE_OPERATIONS_INSTALL[0]
+    interface_name, operation_name = mock.operations.NODE_OPERATIONS_INSTALL[0]
 
     key = 'key'
     first_value = 'value1'
@@ -86,17 +86,26 @@ def _test(context, executor, lock_files, func, expected_failure):
     }
 
     node = _node(context)
-    node.interfaces = [mock.models.get_interface(
-        op_name,
+    interface = mock.models.create_interface(
+        node.service,
+        interface_name,
+        operation_name,
         operation_kwargs=dict(implementation='{0}.{1}'.format(__name__, func.__name__))
-    )]
+    )
+    node.interfaces[interface.name] = interface
     context.model.node.update(node)
 
     @workflow
     def mock_workflow(graph, **_):
         graph.add_tasks(
-            api.task.OperationTask.node(instance=node, name=op_name, inputs=inputs),
-            api.task.OperationTask.node(instance=node, name=op_name, inputs=inputs)
+            api.task.OperationTask.for_node(node=node,
+                                            interface_name=interface_name,
+                                            operation_name=operation_name,
+                                            inputs=inputs),
+            api.task.OperationTask.for_node(node=node,
+                                            interface_name=interface_name,
+                                            operation_name=operation_name,
+                                            inputs=inputs)
         )
 
     signal = events.on_failure_task_signal

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/executor/test_process_executor_extension.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor_extension.py b/tests/orchestrator/workflows/executor/test_process_executor_extension.py
index ac95554..1c4cda6 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_extension.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_extension.py
@@ -29,27 +29,34 @@ from tests import storage
 def test_decorate_extension(context, executor):
     inputs = {'input1': 1, 'input2': 2}
 
-    def get_node_instance(ctx):
-        return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+    def get_node(ctx):
+        return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
 
     @workflow
     def mock_workflow(ctx, graph):
-        node_instance = get_node_instance(ctx)
-        op = 'test.op'
-        node_instance.interfaces = [mock.models.get_interface(
-            op,
+        node = get_node(ctx)
+        interface_name = 'test_interface'
+        operation_name = 'operation'
+        interface = mock.models.create_interface(
+            ctx.service,
+            interface_name,
+            operation_name,
             operation_kwargs=dict(implementation='{0}.{1}'.format(__name__,
                                                                   _mock_operation.__name__))
-        )]
-        task = api.task.OperationTask.node(instance=node_instance, name=op, inputs=inputs)
+        )
+        node.interfaces[interface.name] = interface
+        task = api.task.OperationTask.for_node(node=node,
+                                               interface_name=interface_name,
+                                               operation_name=operation_name,
+                                               inputs=inputs)
         graph.add_tasks(task)
         return graph
     graph = mock_workflow(ctx=context)  # pylint: disable=no-value-for-parameter
     eng = engine.Engine(executor=executor, workflow_context=context, tasks_graph=graph)
     eng.execute()
-    out = get_node_instance(context).runtime_properties['out']
-    assert out['wrapper_inputs'] == inputs
-    assert out['function_inputs'] == inputs
+    out = get_node(context).runtime_properties['out']
+    assert out['wrapper_inputs'] == dict((k, v.value) for k, v in inputs.iteritems())
+    assert out['function_inputs'] == dict((k, v.value) for k, v in inputs.iteritems())
 
 
 @extension.process_executor

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py b/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
index d3b3300..a3957c3 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
@@ -45,7 +45,7 @@ def test_track_changes_of_failed_operation(context, executor):
 
 
 def _assert_tracked_changes_are_applied(context):
-    instance = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+    instance = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
     assert instance.runtime_properties == _TEST_RUNTIME_PROPERTIES
 
 
@@ -67,15 +67,15 @@ def test_apply_tracked_changes_during_an_operation(context, executor):
     }
 
     expected_initial = context.model.node.get_by_name(
-        mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties
+        mock.models.DEPENDENCY_NODE_NAME).runtime_properties
 
     out = _run_workflow(context=context, executor=executor, op_func=_mock_updating_operation,
                         inputs=inputs)
 
     expected_after_update = expected_initial.copy()
-    expected_after_update.update(inputs['committed'])
+    expected_after_update.update(inputs['committed'].value) # pylint: disable=no-member
     expected_after_change = expected_after_update.copy()
-    expected_after_change.update(inputs['changed_but_refreshed'])
+    expected_after_change.update(inputs['changed_but_refreshed'].value) # pylint: disable=no-member
     expected_after_refresh = expected_after_update
 
     assert out['initial'] == expected_initial
@@ -87,19 +87,27 @@ def test_apply_tracked_changes_during_an_operation(context, executor):
 def _run_workflow(context, executor, op_func, inputs=None):
     @workflow
     def mock_workflow(ctx, graph):
-        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-        node.interfaces = [mock.models.get_interface(
-            'test.op', operation_kwargs=dict(implementation=_operation_mapping(op_func)))]
-        task = api.task.OperationTask.node(instance=node,
-                                           name='test.op',
-                                           inputs=inputs or {})
+        node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+        interface_name = 'test_interface'
+        operation_name = 'operation'
+        interface = mock.models.create_interface(
+            ctx.service,
+            interface_name,
+            operation_name,
+            operation_kwargs=dict(implementation=_operation_mapping(op_func))
+        )
+        node.interfaces[interface.name] = interface
+        task = api.task.OperationTask.for_node(node=node,
+                                               interface_name=interface_name,
+                                               operation_name=operation_name,
+                                               inputs=inputs or {})
         graph.add_tasks(task)
         return graph
     graph = mock_workflow(ctx=context)  # pylint: disable=no-value-for-parameter
     eng = engine.Engine(executor=executor, workflow_context=context, tasks_graph=graph)
     eng.execute()
     return context.model.node.get_by_name(
-        mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties.get('out')
+        mock.models.DEPENDENCY_NODE_NAME).runtime_properties.get('out')
 
 
 @operation

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/parser/utils.py
----------------------------------------------------------------------
diff --git a/tests/parser/utils.py b/tests/parser/utils.py
index 994aac6..8460de8 100644
--- a/tests/parser/utils.py
+++ b/tests/parser/utils.py
@@ -21,10 +21,10 @@ from aria.parser.consumption import (
     ConsumerChain,
     Read,
     Validate,
-    Model,
+    ServiceTemplate,
     Types,
     Inputs,
-    Instance
+    ServiceInstance
 )
 from aria.utils.imports import import_fullname
 
@@ -66,14 +66,14 @@ def create_consumer(context, consumer_class_name):
         dumper = None
     elif consumer_class_name == 'presentation':
         dumper = consumer.consumers[0]
-    elif consumer_class_name == 'model':
-        consumer.append(Model)
+    elif consumer_class_name == 'template':
+        consumer.append(ServiceTemplate)
     elif consumer_class_name == 'types':
-        consumer.append(Model, Types)
+        consumer.append(ServiceTemplate, Types)
     elif consumer_class_name == 'instance':
-        consumer.append(Model, Inputs, Instance)
+        consumer.append(ServiceTemplate, Inputs, ServiceInstance)
     else:
-        consumer.append(Model, Inputs, Instance)
+        consumer.append(ServiceTemplate, Inputs, ServiceInstance)
         consumer.append(import_fullname(consumer_class_name))
 
     if dumper is None:

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/resources/service-templates/tosca-simple-1.0/node-cellar/workflows.py
----------------------------------------------------------------------
diff --git a/tests/resources/service-templates/tosca-simple-1.0/node-cellar/workflows.py b/tests/resources/service-templates/tosca-simple-1.0/node-cellar/workflows.py
index fff78bf..94ee824 100644
--- a/tests/resources/service-templates/tosca-simple-1.0/node-cellar/workflows.py
+++ b/tests/resources/service-templates/tosca-simple-1.0/node-cellar/workflows.py
@@ -1,6 +1,12 @@
 
 from aria import workflow
 from aria.orchestrator.workflows.api.task import OperationTask
+from aria.orchestrator.workflows.exceptions import TaskException
+
+
+INTERFACE_NAME = 'Maintenance'
+ENABLE_OPERATION_NAME = 'enable'
+DISABLE_OPERATION_NAME = 'disable'
 
 
 @workflow
@@ -9,8 +15,11 @@ def maintenance(ctx, graph, enabled):
     Custom workflow to call the operations on the Maintenance interface.
     """
 
-    operation = 'Maintenance.enable' if enabled else 'Maintenance.disable'
-
     for node in ctx.model.node.iter():
-        for interface in node.interfaces.filter_by(name='Maintenance', type_name='Maintenance'):
-            graph.add_tasks(OperationTask.node(instance=node, name=operation))
+        try:
+            graph.add_tasks(OperationTask.for_node(node=node,
+                                                   interface_name=INTERFACE_NAME,
+                                                   operation_name=ENABLE_OPERATION_NAME if enabled
+                                                   else DISABLE_OPERATION_NAME))
+        except TaskException:
+            pass

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/storage/__init__.py
----------------------------------------------------------------------
diff --git a/tests/storage/__init__.py b/tests/storage/__init__.py
index f95bdb2..c5d7678 100644
--- a/tests/storage/__init__.py
+++ b/tests/storage/__init__.py
@@ -19,27 +19,11 @@ from tempfile import mkdtemp
 from sqlalchemy import (
     create_engine,
     orm,
-    Column,
-    Text,
-    Integer,
     pool,
     MetaData
 )
 
-
-from aria.storage.modeling import (
-    model,
-    structure,
-    type as aria_type
-)
-
-
-class MockModel(structure.ModelMixin, model.aria_declarative_base): #pylint: disable=abstract-method
-    __tablename__ = 'mock_model'
-    model_dict = Column(aria_type.Dict)
-    model_list = Column(aria_type.List)
-    value = Column(Integer)
-    name = Column(Text)
+from aria.modeling import models
 
 
 class TestFileSystem(object):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/storage/test_instrumentation.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_instrumentation.py b/tests/storage/test_instrumentation.py
index 7f0eb02..673103e 100644
--- a/tests/storage/test_instrumentation.py
+++ b/tests/storage/test_instrumentation.py
@@ -16,18 +16,19 @@
 import pytest
 from sqlalchemy import Column, Text, Integer, event
 
+from aria.modeling import (
+    mixins,
+    types as modeling_types,
+    models
+)
+from aria.modeling.exceptions import ValueFormatException
 from aria.storage import (
     ModelStorage,
     sql_mapi,
-    instrumentation,
-    exceptions,
-)
-from aria.storage.modeling import (
-    model,
-    type as aria_type,
-    structure,
+    instrumentation
 )
-from ..storage import release_sqlite_storage, init_inmemory_model_storage
+
+from . import release_sqlite_storage, init_inmemory_model_storage
 
 STUB = instrumentation._STUB
 Value = instrumentation._Value
@@ -280,8 +281,8 @@ class TestInstrumentation(object):
     def test_track_changes_to_strict_dict(self, storage):
         model_kwargs = dict(strict_dict={'key': 'value'},
                             strict_list=['item'])
-        mode_instance = StrictMockModel(**model_kwargs)
-        storage.strict_mock_model.put(mode_instance)
+        model_instance = StrictMockModel(**model_kwargs)
+        storage.strict_mock_model.put(model_instance)
 
         instrument = self._track_changes({
             StrictMockModel.strict_dict: dict,
@@ -290,28 +291,28 @@ class TestInstrumentation(object):
 
         assert not instrument.tracked_changes
 
-        storage_model_instance = storage.strict_mock_model.get(mode_instance.id)
+        storage_model_instance = storage.strict_mock_model.get(model_instance.id)
 
-        with pytest.raises(exceptions.StorageError):
+        with pytest.raises(ValueFormatException):
             storage_model_instance.strict_dict = {1: 1}
 
-        with pytest.raises(exceptions.StorageError):
+        with pytest.raises(ValueFormatException):
             storage_model_instance.strict_dict = {'hello': 1}
 
-        with pytest.raises(exceptions.StorageError):
+        with pytest.raises(ValueFormatException):
             storage_model_instance.strict_dict = {1: 'hello'}
 
         storage_model_instance.strict_dict = {'hello': 'world'}
         assert storage_model_instance.strict_dict == {'hello': 'world'}
 
-        with pytest.raises(exceptions.StorageError):
+        with pytest.raises(ValueFormatException):
             storage_model_instance.strict_list = [1]
         storage_model_instance.strict_list = ['hello']
         assert storage_model_instance.strict_list == ['hello']
 
         assert instrument.tracked_changes == {
             'strict_mock_model': {
-                mode_instance.id: {
+                model_instance.id: {
                     'strict_dict': Value(STUB, {'hello': 'world'}),
                     'strict_list': Value(STUB, ['hello']),
                 }
@@ -336,27 +337,27 @@ def storage():
     release_sqlite_storage(result)
 
 
-class _MockModel(structure.ModelMixin):
+class _MockModel(mixins.ModelMixin):
     name = Column(Text)
-    dict1 = Column(aria_type.Dict)
-    dict2 = Column(aria_type.Dict)
-    list1 = Column(aria_type.List)
-    list2 = Column(aria_type.List)
+    dict1 = Column(modeling_types.Dict)
+    dict2 = Column(modeling_types.Dict)
+    list1 = Column(modeling_types.List)
+    list2 = Column(modeling_types.List)
     int1 = Column(Integer)
     int2 = Column(Integer)
     string2 = Column(Text)
 
 
-class MockModel1(_MockModel, model.aria_declarative_base):
+class MockModel1(_MockModel, models.aria_declarative_base):
     __tablename__ = 'mock_model_1'
 
 
-class MockModel2(_MockModel, model.aria_declarative_base):
+class MockModel2(_MockModel, models.aria_declarative_base):
     __tablename__ = 'mock_model_2'
 
 
-class StrictMockModel(structure.ModelMixin, model.aria_declarative_base):
+class StrictMockModel(mixins.ModelMixin, models.aria_declarative_base):
     __tablename__ = 'strict_mock_model'
 
-    strict_dict = Column(aria_type.StrictDict(basestring, basestring))
-    strict_list = Column(aria_type.StrictList(basestring))
+    strict_dict = Column(modeling_types.StrictDict(basestring, basestring))
+    strict_list = Column(modeling_types.StrictList(basestring))

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/storage/test_model_storage.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_model_storage.py b/tests/storage/test_model_storage.py
deleted file mode 100644
index f88080a..0000000
--- a/tests/storage/test_model_storage.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-
-import pytest
-
-from aria.storage import (
-    ModelStorage,
-    exceptions,
-    sql_mapi,
-    modeling,
-)
-from aria import application_model_storage
-from ..storage import release_sqlite_storage, init_inmemory_model_storage
-
-from . import MockModel
-
-
-@pytest.fixture
-def storage():
-    base_storage = ModelStorage(sql_mapi.SQLAlchemyModelAPI,
-                                initiator=init_inmemory_model_storage)
-    base_storage.register(MockModel)
-    yield base_storage
-    release_sqlite_storage(base_storage)
-
-
-@pytest.fixture(scope='module', autouse=True)
-def module_cleanup():
-    modeling.model.aria_declarative_base.metadata.remove(MockModel.__table__)  #pylint: disable=no-member
-
-
-def test_storage_base(storage):
-    with pytest.raises(AttributeError):
-        storage.non_existent_attribute()
-
-
-def test_model_storage(storage):
-    mock_model = MockModel(value=0, name='model_name')
-    storage.mock_model.put(mock_model)
-
-    assert storage.mock_model.get_by_name('model_name') == mock_model
-
-    assert [mm_from_storage for mm_from_storage in storage.mock_model.iter()] == [mock_model]
-    assert [mm_from_storage for mm_from_storage in storage.mock_model] == [mock_model]
-
-    storage.mock_model.delete(mock_model)
-    with pytest.raises(exceptions.StorageError):
-        storage.mock_model.get(mock_model.id)
-
-
-def test_application_storage_factory():
-    storage = application_model_storage(sql_mapi.SQLAlchemyModelAPI,
-                                        initiator=init_inmemory_model_storage)
-
-    assert storage.parameter
-    assert storage.mapping_template
-    assert storage.substitution_template
-    assert storage.service_template
-    assert storage.node_template
-    assert storage.group_template
-    assert storage.interface_template
-    assert storage.operation_template
-    assert storage.artifact_template
-    assert storage.policy_template
-    assert storage.group_policy_template
-    assert storage.group_policy_trigger_template
-    assert storage.requirement_template
-    assert storage.capability_template
-
-    assert storage.mapping
-    assert storage.substitution
-    assert storage.service_instance
-    assert storage.node
-    assert storage.group
-    assert storage.interface
-    assert storage.operation
-    assert storage.capability
-    assert storage.artifact
-    assert storage.policy
-    assert storage.group_policy
-    assert storage.group_policy_trigger
-    assert storage.relationship
-
-    assert storage.execution
-    assert storage.service_instance_update
-    assert storage.service_instance_update_step
-    assert storage.service_instance_modification
-    assert storage.plugin
-    assert storage.task
-
-    release_sqlite_storage(storage)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9841ca4a/tests/storage/test_models.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py
deleted file mode 100644
index 81b4122..0000000
--- a/tests/storage/test_models.py
+++ /dev/null
@@ -1,875 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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 datetime import datetime
-from contextlib import contextmanager
-
-import pytest
-
-from aria import application_model_storage
-from aria.storage import (
-    exceptions,
-    sql_mapi,
-)
-from aria.storage.modeling.model import (
-    ServiceTemplate,
-    ServiceInstance,
-    ServiceInstanceUpdate,
-    ServiceInstanceUpdateStep,
-    ServiceInstanceModification,
-    Execution,
-    Task,
-    Plugin,
-    Relationship,
-    NodeTemplate,
-    Node,
-    Parameter
-)
-
-from tests import mock
-from ..storage import release_sqlite_storage, init_inmemory_model_storage
-
-
-@contextmanager
-def sql_storage(storage_func):
-    storage = None
-    try:
-        storage = storage_func()
-        yield storage
-    finally:
-        if storage:
-            release_sqlite_storage(storage)
-
-
-def _empty_storage():
-    return application_model_storage(sql_mapi.SQLAlchemyModelAPI,
-                                     initiator=init_inmemory_model_storage)
-
-
-def _service_template_storage():
-    storage = _empty_storage()
-    service_template = mock.models.get_blueprint()
-    storage.service_template.put(service_template)
-    return storage
-
-
-def _service_instance_storage():
-    storage = _service_template_storage()
-    service_instance = mock.models.get_deployment(
-        storage.service_template.get_by_name(mock.models.BLUEPRINT_NAME))
-    storage.service_instance.put(service_instance)
-    return storage
-
-
-def _service_instance_update_storage():
-    storage = _service_instance_storage()
-    service_instance_update = ServiceInstanceUpdate(
-        service_instance=storage.service_instance.list()[0],
-        created_at=now,
-        service_instance_plan={},
-    )
-    storage.service_instance_update.put(service_instance_update)
-    return storage
-
-
-def _node_template_storage():
-    storage = _service_instance_storage()
-    node_template = mock.models.get_dependency_node(storage.service_instance.list()[0])
-    storage.node_template.put(node_template)
-    return storage
-
-
-def _nodes_storage():
-    storage = _node_template_storage()
-    service_instance = storage.service_instance.get_by_name(mock.models.DEPLOYMENT_NAME)
-
-    dependency_node_template = storage.node_template.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
-    dependency_node = mock.models.get_dependency_node_instance(dependency_node_template,
-                                                               service_instance)
-
-    req_template, cap_template = mock.models.get_relationship(dependency_node)
-    storage.requirement_template.put(req_template)
-    storage.capability_template.put(cap_template)
-
-    dependent_node_template = mock.models.get_dependent_node(service_instance,
-                                                             req_template,
-                                                             cap_template)
-    dependent_node = mock.models.get_dependent_node_instance(dependent_node_template,
-                                                             service_instance)
-    storage.node.put(dependency_node)
-    storage.node.put(dependent_node)
-    return storage
-
-
-def _execution_storage():
-    storage = _service_instance_storage()
-    execution = mock.models.get_execution(storage.service_instance.list()[0])
-    plugin = mock.models.get_plugin()
-    storage.execution.put(execution)
-    storage.plugin.put(plugin)
-    return storage
-
-
-@pytest.fixture
-def empty_storage():
-    with sql_storage(_empty_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def service_template_storage():
-    with sql_storage(_service_template_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def service_instance_storage():
-    with sql_storage(_service_instance_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def service_instance_update_storage():
-    with sql_storage(_service_instance_update_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def node_template_storage():
-    with sql_storage(_node_template_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def nodes_storage():
-    with sql_storage(_nodes_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
-def execution_storage():
-    with sql_storage(_execution_storage) as storage:
-        yield storage
-
-
-m_cls = type('MockClass')
-now = datetime.utcnow()
-
-
-def _test_model(is_valid, storage, model_cls, model_kwargs):
-    if is_valid:
-        model = model_cls(**model_kwargs)
-        getattr(storage, model_cls.__modelname__).put(model)
-        return model
-    else:
-        with pytest.raises((exceptions.StorageError, TypeError),):
-            getattr(storage, model_cls.__modelname__).put(model_cls(**model_kwargs))
-
-
-class TestServiceTemplate(object):
-
-    @pytest.mark.parametrize(
-        'is_valid, plan, description, created_at, updated_at, main_file_name',
-        [
-            (False, None, 'description', now, now, '/path'),
-            (False, {}, {}, now, now, '/path'),
-            (False, {}, 'description', 'error', now, '/path'),
-            (False, {}, 'description', now, 'error', '/path'),
-            (False, {}, 'description', now, now, {}),
-            (True, {}, 'description', now, now, '/path'),
-        ]
-    )
-    def test_blueprint_model_creation(self, empty_storage, is_valid, plan, description, created_at,
-                                      updated_at, main_file_name):
-        _test_model(is_valid=is_valid,
-                    storage=empty_storage,
-                    model_cls=ServiceTemplate,
-                    model_kwargs=dict(
-                        plan=plan,
-                        description=description,
-                        created_at=created_at,
-                        updated_at=updated_at,
-                        main_file_name=main_file_name)
-                   )
-
-
-class TestServiceInstance(object):
-
-    @pytest.mark.parametrize(
-        'is_valid, name, created_at, description, inputs, permalink, policy_triggers, '
-        'policy_types, outputs, scaling_groups, updated_at, workflows',
-        [
-            (False, m_cls, now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (False, 'name', m_cls, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (False, 'name', now, m_cls, [], 'perlnk', {}, {}, [], {}, now, {}),
-            (False, 'name', now, 'desc', [], m_cls, {}, {}, [], {}, now, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', m_cls, {}, [], {}, now, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', {}, m_cls, [], {}, now, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, m_cls, {}, now, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], m_cls, now, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, m_cls, {}),
-            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, m_cls),
-
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (True, None, now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (True, 'name', now, None, [], 'perlnk', {}, {}, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], None, {}, {}, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', None, {}, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, None, [], {}, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], None, now, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, None, {}),
-            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, None),
-        ]
-    )
-    def test_deployment_model_creation(self, service_instance_storage, is_valid, name, created_at,
-                                       description, inputs, permalink, policy_triggers,
-                                       policy_types, outputs, scaling_groups, updated_at,
-                                       workflows):
-        service_instance = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_storage,
-            model_cls=ServiceInstance,
-            model_kwargs=dict(
-                name=name,
-                service_template=service_instance_storage.service_template.list()[0],
-                created_at=created_at,
-                description=description,
-                inputs=inputs,
-                permalink=permalink,
-                policy_triggers=policy_triggers,
-                policy_types=policy_types,
-                outputs=outputs,
-                scaling_groups=scaling_groups,
-                updated_at=updated_at,
-                workflows=workflows
-            ))
-        if is_valid:
-            assert service_instance.service_template == \
-                   service_instance_storage.service_template.list()[0]
-
-
-class TestExecution(object):
-
-    @pytest.mark.parametrize(
-        'is_valid, created_at, started_at, ended_at, error, is_system_workflow, parameters, '
-        'status, workflow_name',
-        [
-            (False, m_cls, now, now, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (False, now, m_cls, now, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (False, now, now, m_cls, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (False, now, now, now, m_cls, False, {}, Execution.STARTED, 'wf_name'),
-            (False, now, now, now, 'error', False, m_cls, Execution.STARTED, 'wf_name'),
-            (False, now, now, now, 'error', False, {}, m_cls, 'wf_name'),
-            (False, now, now, now, 'error', False, {}, Execution.STARTED, m_cls),
-
-            (True, now, now, now, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (True, now, None, now, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (True, now, now, None, 'error', False, {}, Execution.STARTED, 'wf_name'),
-            (True, now, now, now, None, False, {}, Execution.STARTED, 'wf_name'),
-            (True, now, now, now, 'error', False, None, Execution.STARTED, 'wf_name'),
-        ]
-    )
-    def test_execution_model_creation(self, service_instance_storage, is_valid, created_at,
-                                      started_at, ended_at, error, is_system_workflow, parameters,
-                                      status, workflow_name):
-        execution = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_storage,
-            model_cls=Execution,
-            model_kwargs=dict(
-                service_instance=service_instance_storage.service_instance.list()[0],
-                created_at=created_at,
-                started_at=started_at,
-                ended_at=ended_at,
-                error=error,
-                is_system_workflow=is_system_workflow,
-                parameters=parameters,
-                status=status,
-                workflow_name=workflow_name,
-            ))
-        if is_valid:
-            assert execution.service_instance == service_instance_storage.service_instance.list()[0]
-            assert execution.service_template == service_instance_storage.service_template.list()[0]
-
-    def test_execution_status_transition(self):
-        def create_execution(status):
-            execution = Execution(
-                id='e_id',
-                workflow_name='w_name',
-                status=status,
-                parameters={},
-                created_at=now,
-            )
-            return execution
-
-        valid_transitions = {
-            Execution.PENDING: [Execution.STARTED,
-                                Execution.CANCELLED,
-                                Execution.PENDING],
-            Execution.STARTED: [Execution.FAILED,
-                                Execution.TERMINATED,
-                                Execution.CANCELLED,
-                                Execution.CANCELLING,
-                                Execution.STARTED],
-            Execution.CANCELLING: [Execution.FAILED,
-                                   Execution.TERMINATED,
-                                   Execution.CANCELLED,
-                                   Execution.CANCELLING],
-            Execution.FAILED: [Execution.FAILED],
-            Execution.TERMINATED: [Execution.TERMINATED],
-            Execution.CANCELLED: [Execution.CANCELLED]
-        }
-
-        invalid_transitions = {
-            Execution.PENDING: [Execution.FAILED,
-                                Execution.TERMINATED,
-                                Execution.CANCELLING],
-            Execution.STARTED: [Execution.PENDING],
-            Execution.CANCELLING: [Execution.PENDING,
-                                   Execution.STARTED],
-            Execution.FAILED: [Execution.PENDING,
-                               Execution.STARTED,
-                               Execution.TERMINATED,
-                               Execution.CANCELLED,
-                               Execution.CANCELLING],
-            Execution.TERMINATED: [Execution.PENDING,
-                                   Execution.STARTED,
-                                   Execution.FAILED,
-                                   Execution.CANCELLED,
-                                   Execution.CANCELLING],
-            Execution.CANCELLED: [Execution.PENDING,
-                                  Execution.STARTED,
-                                  Execution.FAILED,
-                                  Execution.TERMINATED,
-                                  Execution.CANCELLING],
-        }
-
-        for current_status, valid_transitioned_statues in valid_transitions.items():
-            for transitioned_status in valid_transitioned_statues:
-                execution = create_execution(current_status)
-                execution.status = transitioned_status
-
-        for current_status, invalid_transitioned_statues in invalid_transitions.items():
-            for transitioned_status in invalid_transitioned_statues:
-                execution = create_execution(current_status)
-                with pytest.raises(ValueError):
-                    execution.status = transitioned_status
-
-
-class TestServiceInstanceUpdate(object):
-    @pytest.mark.parametrize(
-        'is_valid, created_at, deployment_plan, service_instance_update_node_instances, '
-        'service_instance_update_service_instance, service_instance_update_nodes, '
-        'modified_entity_ids, state',
-        [
-            (False, m_cls, {}, {}, {}, [], {}, 'state'),
-            (False, now, m_cls, {}, {}, [], {}, 'state'),
-            (False, now, {}, m_cls, {}, [], {}, 'state'),
-            (False, now, {}, {}, m_cls, [], {}, 'state'),
-            (False, now, {}, {}, {}, m_cls, {}, 'state'),
-            (False, now, {}, {}, {}, [], m_cls, 'state'),
-            (False, now, {}, {}, {}, [], {}, m_cls),
-
-            (True, now, {}, {}, {}, [], {}, 'state'),
-            (True, now, {}, None, {}, [], {}, 'state'),
-            (True, now, {}, {}, None, [], {}, 'state'),
-            (True, now, {}, {}, {}, None, {}, 'state'),
-            (True, now, {}, {}, {}, [], None, 'state'),
-            (True, now, {}, {}, {}, [], {}, None),
-        ]
-    )
-    def test_service_instance_update_model_creation(
-            self, service_instance_storage, is_valid, created_at, deployment_plan,
-            service_instance_update_node_instances, service_instance_update_service_instance,
-            service_instance_update_nodes, modified_entity_ids, state):
-        service_instance_update = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_storage,
-            model_cls=ServiceInstanceUpdate,
-            model_kwargs=dict(
-                service_instance=service_instance_storage.service_instance.list()[0],
-                created_at=created_at,
-                service_instance_plan=deployment_plan,
-                service_instance_update_node_instances=service_instance_update_node_instances,
-                service_instance_update_service_instance=service_instance_update_service_instance,
-                service_instance_update_nodes=service_instance_update_nodes,
-                modified_entity_ids=modified_entity_ids,
-                state=state,
-            ))
-        if is_valid:
-            assert service_instance_update.service_instance == \
-                   service_instance_storage.service_instance.list()[0]
-
-
-class TestServiceInstanceUpdateStep(object):
-
-    @pytest.mark.parametrize(
-        'is_valid, action, entity_id, entity_type',
-        [
-            (False, m_cls, 'id', ServiceInstanceUpdateStep.ENTITY_TYPES.NODE),
-            (False, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, m_cls,
-             ServiceInstanceUpdateStep.ENTITY_TYPES.NODE),
-            (False, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, 'id', m_cls),
-
-            (True, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, 'id',
-             ServiceInstanceUpdateStep.ENTITY_TYPES.NODE)
-        ]
-    )
-    def test_deployment_update_step_model_creation(self, service_instance_update_storage, is_valid,
-                                                   action, entity_id, entity_type):
-        service_instance_update_step = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_update_storage,
-            model_cls=ServiceInstanceUpdateStep,
-            model_kwargs=dict(
-                service_instance_update=
-                service_instance_update_storage.service_instance_update.list()[0],
-                action=action,
-                entity_id=entity_id,
-                entity_type=entity_type
-            ))
-        if is_valid:
-            assert service_instance_update_step.service_instance_update == \
-                   service_instance_update_storage.service_instance_update.list()[0]
-
-    def test_deployment_update_step_order(self):
-        add_node = ServiceInstanceUpdateStep(
-            id='add_step',
-            action='add',
-            entity_type='node',
-            entity_id='node_id')
-
-        modify_node = ServiceInstanceUpdateStep(
-            id='modify_step',
-            action='modify',
-            entity_type='node',
-            entity_id='node_id')
-
-        remove_node = ServiceInstanceUpdateStep(
-            id='remove_step',
-            action='remove',
-            entity_type='node',
-            entity_id='node_id')
-
-        for step in (add_node, modify_node, remove_node):
-            assert hash((step.id, step.entity_id)) == hash(step)
-
-        assert remove_node < modify_node < add_node
-        assert not remove_node > modify_node > add_node
-
-        add_rel = ServiceInstanceUpdateStep(
-            id='add_step',
-            action='add',
-            entity_type='relationship',
-            entity_id='relationship_id')
-
-        remove_rel = ServiceInstanceUpdateStep(
-            id='remove_step',
-            action='remove',
-            entity_type='relationship',
-            entity_id='relationship_id')
-
-        assert remove_rel < remove_node < add_node < add_rel
-        assert not add_node < None
-
-
-class TestDeploymentModification(object):
-    @pytest.mark.parametrize(
-        'is_valid, context, created_at, ended_at, modified_node_templates, nodes, status',
-        [
-            (False, m_cls, now, now, {}, {}, ServiceInstanceModification.STARTED),
-            (False, {}, m_cls, now, {}, {}, ServiceInstanceModification.STARTED),
-            (False, {}, now, m_cls, {}, {}, ServiceInstanceModification.STARTED),
-            (False, {}, now, now, m_cls, {}, ServiceInstanceModification.STARTED),
-            (False, {}, now, now, {}, m_cls, ServiceInstanceModification.STARTED),
-            (False, {}, now, now, {}, {}, m_cls),
-
-            (True, {}, now, now, {}, {}, ServiceInstanceModification.STARTED),
-            (True, {}, now, None, {}, {}, ServiceInstanceModification.STARTED),
-            (True, {}, now, now, None, {}, ServiceInstanceModification.STARTED),
-            (True, {}, now, now, {}, None, ServiceInstanceModification.STARTED),
-        ]
-    )
-    def test_deployment_modification_model_creation(
-            self, service_instance_storage, is_valid, context, created_at, ended_at,
-            modified_node_templates, nodes, status):
-        deployment_modification = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_storage,
-            model_cls=ServiceInstanceModification,
-            model_kwargs=dict(
-                service_instance=service_instance_storage.service_instance.list()[0],
-                context=context,
-                created_at=created_at,
-                ended_at=ended_at,
-                modified_nodes=modified_node_templates,
-                node_instances=nodes,
-                status=status,
-            ))
-        if is_valid:
-            assert deployment_modification.service_instance == \
-                   service_instance_storage.service_instance.list()[0]
-
-
-class TestNodeTemplate(object):
-    @pytest.mark.parametrize(
-        'is_valid, name, default_instances, max_instances, min_instances, plugins, properties, '
-        'type_name, type_hierarchy',
-        [
-            (False, m_cls, 1, 1, 1, [], [], 'type', []),
-            (False, 'name', m_cls, 1, 1, [], [], 'type', []),
-            (False, 'name', 1, m_cls, 1, [], [], 'type', []),
-            (False, 'name', 1, 1, m_cls, [], [], 'type', []),
-            (False, 'name', 1, 1, 1, m_cls, [], 'type', []),
-            (False, 'name', 1, 1, 1, [], [], m_cls, []),
-            (False, 'name', 1, 1, 1, [], [], 'type', m_cls),
-            #
-            (True, 'name', 1, 1, 1, [], [], 'type', []),
-            (True, 'name', 1, 1, 1, None, [], 'type', []),
-            (True, 'name', 1, 1, 1, [], [], 'type', None),
-        ]
-    )
-    def test_node_model_creation(self, service_instance_storage, is_valid, name,
-                                 default_instances, max_instances, min_instances, plugins,
-                                 properties, type_name, type_hierarchy):
-        node_template = _test_model(
-            is_valid=is_valid,
-            storage=service_instance_storage,
-            model_cls=NodeTemplate,
-            model_kwargs=dict(
-                name=name,
-                default_instances=default_instances,
-                max_instances=max_instances,
-                min_instances=min_instances,
-                plugins=plugins,
-                properties=properties,
-                type_name=type_name,
-                type_hierarchy=type_hierarchy,
-                service_template=service_instance_storage.service_template.list()[0]
-            ))
-        if is_valid:
-            assert node_template.service_template == \
-                   service_instance_storage.service_template.list()[0]
-
-
-class TestNode(object):
-    @pytest.mark.parametrize(
-        'is_valid, name, runtime_properties, scaling_groups, state, version',
-        [
-            (False, m_cls, {}, [], 'state', 1),
-            (False, 'name', m_cls, [], 'state', 1),
-            (False, 'name', {}, m_cls, 'state', 1),
-            (False, 'name', {}, [], m_cls, 1),
-            (False, m_cls, {}, [], 'state', m_cls),
-
-            (True, 'name', {}, [], 'state', 1),
-            (True, None, {}, [], 'state', 1),
-            (True, 'name', None, [], 'state', 1),
-            (True, 'name', {}, None, 'state', 1),
-            (True, 'name', {}, [], 'state', None),
-        ]
-    )
-    def test_node_instance_model_creation(self, node_template_storage, is_valid, name,
-                                          runtime_properties, scaling_groups, state, version):
-        node_instance = _test_model(
-            is_valid=is_valid,
-            storage=node_template_storage,
-            model_cls=Node,
-            model_kwargs=dict(
-                node_template=node_template_storage.node_template.list()[0],
-                name=name,
-                runtime_properties=runtime_properties,
-                scaling_groups=scaling_groups,
-                state=state,
-                version=version,
-                service_instance=node_template_storage.service_instance.list()[0]
-            ))
-        if is_valid:
-            assert node_instance.node_template == node_template_storage.node_template.list()[0]
-            assert node_instance.service_instance == \
-                   node_template_storage.service_instance.list()[0]
-
-
-class TestNodeInstanceIP(object):
-
-    ip = '1.1.1.1'
-
-    def test_ip_on_none_hosted_node_instance(self, service_instance_storage):
-        node_template = self._node_template(service_instance_storage, ip='not considered')
-        node = self._node(service_instance_storage,
-                          node_template,
-                          is_host=False,
-                          ip='not considered')
-        assert node.ip is None
-
-    def test_property_ip_on_host_node_instance(self, service_instance_storage):
-        node_template = self._node_template(service_instance_storage, ip=self.ip)
-        node = self._node(service_instance_storage, node_template, is_host=True, ip=None)
-        assert node.ip == self.ip
-
-    def test_runtime_property_ip_on_host_node_instance(self, service_instance_storage):
-        node_template = self._node_template(service_instance_storage, ip='not considered')
-        node = self._node(service_instance_storage, node_template, is_host=True, ip=self.ip)
-        assert node.ip == self.ip
-
-    def test_no_ip_configured_on_host_node_instance(self, service_instance_storage):
-        node_template = self._node_template(service_instance_storage, ip=None)
-        node = self._node(service_instance_storage, node_template, is_host=True, ip=None)
-        assert node.ip is None
-
-    def test_runtime_property_on_hosted_node_instance(self, service_instance_storage):
-        host_node_template = self._node_template(service_instance_storage, ip=None)
-        host_node = self._node(service_instance_storage,
-                               host_node_template,
-                               is_host=True,
-                               ip=self.ip)
-        node_template = self._node_template(service_instance_storage, ip=None)
-        node = self._node(service_instance_storage,
-                          node_template,
-                          is_host=False,
-                          ip=None,
-                          host_fk=host_node.id)
-        assert node.ip == self.ip
-
-    def _node_template(self, storage, ip):
-        kwargs = dict(
-            name='node_template',
-            default_instances=1,
-            max_instances=1,
-            min_instances=1,
-            type_name='',
-            service_template=storage.service_template.list()[0]
-        )
-        if ip:
-            kwargs['properties'] = [Parameter(name='ip', type='str', str_value=str(ip))]
-        node = NodeTemplate(**kwargs)
-        storage.node_template.put(node)
-        return node
-
-    def _node(self, storage, node, is_host, ip, host_fk=None):
-        kwargs = dict(
-            name='node',
-            node_template=node,
-            runtime_properties={},
-            state='',
-            service_instance=storage.service_instance.list()[0]
-        )
-        if ip:
-            kwargs['runtime_properties']['ip'] = ip
-        if is_host:
-            kwargs['host_fk'] = 1
-        elif host_fk:
-            kwargs['host_fk'] = host_fk
-        node_instance = Node(**kwargs)
-        storage.node.put(node_instance)
-        return node_instance
-
-
-class TestRelationshipInstance(object):
-    @pytest.mark.parametrize(
-        'is_valid, source_requirement_index, target_node_id, target_capability_name, type_name, '
-        'template_name, type_hierarchy, source_position, target_position',
-        [
-            (False, m_cls, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], 0,
-             0),
-            (False, 0, m_cls, 'target_cap_name', 'type_name', 'template_name', [], 0, 0),
-            (False, 0, 'target_node_id', m_cls, 'type_name', 'template_name', [], 0, 0),
-            (False, 0, 'target_node_id', 'target_cap_name', m_cls, 'template_name', [], 0, 0),
-            (False, 0, 'target_node_id', 'target_cap_name', 'type_name', m_cls, [], 0, 0),
-            (False, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', m_cls, 0,
-             0),
-            (False, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], m_cls,
-             0),
-            (False, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], 0,
-             m_cls),
-
-            (True, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], 0, 0),
-            (True, None, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], 0,
-             0),
-            (True, 0, None, 'target_cap_name', 'type_name', 'template_name', [], 0, 0),
-            (True, 0, 'target_node_id', None, 'type_name', 'template_name', [], 0, 0),
-            (True, 0, 'target_node_id', 'target_cap_name', None, 'template_name', [], 0, 0),
-            (True, 0, 'target_node_id', 'target_cap_name', 'type_name', None, [], 0, 0),
-            (True, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], None,
-             0),
-            (True, 0, 'target_node_id', 'target_cap_name', 'type_name', 'template_name', [], 0,
-             None),
-
-        ]
-    )
-    def test_relationship(self, nodes_storage, is_valid, source_requirement_index, target_node_id,
-                          target_capability_name, type_name, template_name, type_hierarchy,
-                          source_position, target_position):
-        _test_model(is_valid=is_valid,
-                    storage=nodes_storage,
-                    model_cls=Relationship,
-                    model_kwargs=dict(
-                        source_requirement_index=source_requirement_index,
-                        target_node_id=target_node_id,
-                        target_capability_name=target_capability_name,
-                        type_name=type_name,
-                        template_name=template_name,
-                        type_hierarchy=type_hierarchy,
-                        source_position=source_position,
-                        target_position=target_position
-                    ))
-
-
-class TestPlugin(object):
-    @pytest.mark.parametrize(
-        'is_valid, archive_name, distribution, distribution_release, '
-        'distribution_version, package_name, package_source, '
-        'package_version, supported_platform, supported_py_versions, uploaded_at, wheels',
-        [
-            (False, m_cls, 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', m_cls, 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', m_cls, 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', m_cls, 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', m_cls, 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', m_cls, 'pak_ver',
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', m_cls,
-             'sup_plat', [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', m_cls, [], now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', m_cls, now, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', [], m_cls, []),
-            (False, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', [], now, m_cls),
-
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (True, 'arc_name', None, 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', None, 'dis_ver', 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', None, 'pak_name', 'pak_src', 'pak_ver',
-             'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', None, 'pak_ver',
-             'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src', None,
-             'sup_plat', [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', None, [], now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', None, now, []),
-            (True, 'arc_name', 'dis_name', 'dis_rel', 'dis_ver', 'pak_name', 'pak_src',
-             'pak_ver', 'sup_plat', [], now, []),
-        ]
-    )
-    def test_plugin_model_creation(self, empty_storage, is_valid, archive_name, distribution,
-                                   distribution_release, distribution_version,
-                                   package_name, package_source, package_version,
-                                   supported_platform, supported_py_versions, uploaded_at, wheels):
-        _test_model(is_valid=is_valid,
-                    storage=empty_storage,
-                    model_cls=Plugin,
-                    model_kwargs=dict(
-                        archive_name=archive_name,
-                        distribution=distribution,
-                        distribution_release=distribution_release,
-                        distribution_version=distribution_version,
-                        package_name=package_name,
-                        package_source=package_source,
-                        package_version=package_version,
-                        supported_platform=supported_platform,
-                        supported_py_versions=supported_py_versions,
-                        uploaded_at=uploaded_at,
-                        wheels=wheels,
-                    ))
-
-
-class TestTask(object):
-
-    @pytest.mark.parametrize(
-        'is_valid, status, due_at, started_at, ended_at, max_attempts, retry_count, '
-        'retry_interval, ignore_failure, name, operation_mapping, inputs, plugin_id',
-        [
-            (False, m_cls, now, now, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, m_cls, now, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, m_cls, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, now, m_cls, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, now, now, m_cls, 1, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, now, now, 1, m_cls, 1, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, now, now, 1, 1, m_cls, True, 'name', 'map', {}, '1'),
-            (False, Task.STARTED, now, now, now, 1, 1, 1, True, m_cls, 'map', {}, '1'),
-            (False, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', m_cls, {}, '1'),
-            (False, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', 'map', m_cls, '1'),
-            (False, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', 'map', {}, m_cls),
-
-            (True, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, None, now, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, None, now, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, now, None, 1, 1, 1, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, None, 1, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, None, True, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, 1, None, 'name', 'map', {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, 1, True, None, 'map', {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', None, {}, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', 'map', None, '1'),
-            (True, Task.STARTED, now, now, now, 1, 1, 1, True, 'name', 'map', {}, None),
-        ]
-    )
-    def test_task_model_creation(self, execution_storage, is_valid, status, due_at, started_at,
-                                 ended_at, max_attempts, retry_count, retry_interval,
-                                 ignore_failure, name, operation_mapping, inputs, plugin_id):
-        task = _test_model(
-            is_valid=is_valid,
-            storage=execution_storage,
-            model_cls=Task,
-            model_kwargs=dict(
-                status=status,
-                execution=execution_storage.execution.list()[0],
-                due_at=due_at,
-                started_at=started_at,
-                ended_at=ended_at,
-                max_attempts=max_attempts,
-                retry_count=retry_count,
-                retry_interval=retry_interval,
-                ignore_failure=ignore_failure,
-                name=name,
-                implementation=operation_mapping,
-                inputs=inputs,
-                plugin_fk=plugin_id,
-            ))
-        if is_valid:
-            assert task.execution == execution_storage.execution.list()[0]
-            if task.plugin:
-                assert task.plugin == execution_storage.plugin.list()[0]
-
-    def test_task_max_attempts_validation(self):
-        def create_task(max_attempts):
-            Task(execution_fk='eid',
-                 name='name',
-                 implementation='',
-                 inputs={},
-                 max_attempts=max_attempts)
-        create_task(max_attempts=1)
-        create_task(max_attempts=2)
-        create_task(max_attempts=Task.INFINITE_RETRIES)
-        with pytest.raises(ValueError):
-            create_task(max_attempts=0)
-        with pytest.raises(ValueError):
-            create_task(max_attempts=-2)