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/14 14:58:05 UTC
incubator-ariatosca git commit: fixed builtin tests and testing for
several relationships are now in place
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-120-Builtin-workflows-relationship-operations-execution-order 6ff078adc -> dec48d7fc
fixed builtin tests and testing for several relationships are now in place
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/dec48d7f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/dec48d7f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/dec48d7f
Branch: refs/heads/ARIA-120-Builtin-workflows-relationship-operations-execution-order
Commit: dec48d7fc488b246c5ae7098663063b53fcc833c
Parents: 6ff078a
Author: max-orlov <ma...@gigaspaces.com>
Authored: Tue Mar 14 16:57:45 2017 +0200
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Tue Mar 14 16:57:45 2017 +0200
----------------------------------------------------------------------
aria/orchestrator/workflows/api/task.py | 3 +
aria/orchestrator/workflows/builtin/utils.py | 15 ++-
.../orchestrator/workflows/builtin/workflows.py | 9 +-
tests/mock/context.py | 5 +-
tests/mock/models.py | 97 ++++++++++++++++----
tests/mock/topology.py | 45 +++++++--
.../orchestrator/workflows/builtin/__init__.py | 54 ++++++++---
.../orchestrator/workflows/builtin/test_heal.py | 4 +-
.../workflows/builtin/test_install.py | 15 +--
.../workflows/builtin/test_uninstall.py | 15 +--
tests/storage/test_models.py | 16 ++--
11 files changed, 213 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/aria/orchestrator/workflows/api/task.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/api/task.py b/aria/orchestrator/workflows/api/task.py
index 6a00844..c18ccd9 100644
--- a/aria/orchestrator/workflows/api/task.py
+++ b/aria/orchestrator/workflows/api/task.py
@@ -92,6 +92,9 @@ class OperationTask(BaseTask):
if ignore_failure is None else ignore_failure)
self.runs_on = runs_on
+ def __repr__(self):
+ return self.name
+
@classmethod
def _merge_inputs(cls, operation_inputs, additional_inputs=None):
final_inputs = dict((p.name, p.as_raw['value']) for p in operation_inputs)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/aria/orchestrator/workflows/builtin/utils.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/utils.py b/aria/orchestrator/workflows/builtin/utils.py
index 78f2d37..0c3304e 100644
--- a/aria/orchestrator/workflows/builtin/utils.py
+++ b/aria/orchestrator/workflows/builtin/utils.py
@@ -62,13 +62,17 @@ def relationship_tasks(relationship, source_operation_name=None, target_operatio
:return:
"""
operations = []
- if source_operation_name and _has_operation(relationship.interfaces, source_operation_name):
+ if source_operation_name and _has_operation(relationship.interfaces,
+ source_operation_name,
+ edge=OperationTask.SOURCE_OPERATION):
operations.append(
OperationTask.relationship(instance=relationship,
name=source_operation_name,
edge=OperationTask.SOURCE_OPERATION)
)
- if target_operation_name and _has_operation(relationship.interfaces, target_operation_name):
+ if target_operation_name and _has_operation(relationship.interfaces,
+ target_operation_name,
+ edge=OperationTask.TARGET_OPERATION):
operations.append(
OperationTask.relationship(instance=relationship,
name=target_operation_name,
@@ -103,8 +107,11 @@ def create_node_task_dependencies(graph, tasks_and_nodes, reverse=False):
graph.add_dependency(task, dependencies)
-def _has_operation(interfaces, operation_name):
- for interface in interfaces:
+def _has_operation(interfaces, operation_name, edge=None):
+ interfaces_filters = {}
+ if edge:
+ interfaces_filters['edge'] = edge
+ for interface in interfaces.filter_by(**interfaces_filters):
if interface.operations.filter_by(name=operation_name).count() == 1:
return True
return False
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/aria/orchestrator/workflows/builtin/workflows.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/workflows.py b/aria/orchestrator/workflows/builtin/workflows.py
index cc99a1a..037442c 100644
--- a/aria/orchestrator/workflows/builtin/workflows.py
+++ b/aria/orchestrator/workflows/builtin/workflows.py
@@ -37,6 +37,7 @@ NORMATIVE_POST_CONFIGURE_TARGET = NORMATIVE_CONFIGURE_INTERFACE + '.post_configu
NORMATIVE_ADD_SOURCE = NORMATIVE_CONFIGURE_INTERFACE + '.add_source'
NORMATIVE_ADD_TARGET = NORMATIVE_CONFIGURE_INTERFACE + '.add_target'
+NORMATIVE_REMOVE_SOURCE = NORMATIVE_CONFIGURE_INTERFACE + '.remove_source'
NORMATIVE_REMOVE_TARGET = NORMATIVE_CONFIGURE_INTERFACE + '.remove_target'
NORMATIVE_TARGET_CHANGED = NORMATIVE_CONFIGURE_INTERFACE + '.target_changed'
@@ -55,6 +56,7 @@ __all__ = (
'NORMATIVE_POST_CONFIGURE_TARGET',
'NORMATIVE_ADD_SOURCE',
'NORMATIVE_ADD_TARGET',
+ 'NORMATIVE_REMOVE_SOURCE',
'NORMATIVE_REMOVE_TARGET',
'NORMATIVE_TARGET_CHANGED',
'install_node',
@@ -112,7 +114,8 @@ def _create_start_tasks(node):
def _create_stop_tasks(node):
- sequence = create_relationships_tasks(node, target_operation_name=NORMATIVE_REMOVE_TARGET)
- sequence += create_relationships_tasks(node, target_operation_name=NORMATIVE_TARGET_CHANGED)
- sequence.append(create_node_task(node, NORMATIVE_STOP))
+ sequence = [create_node_task(node, NORMATIVE_STOP)]
+ sequence += create_relationships_tasks(node,
+ source_operation_name=NORMATIVE_REMOVE_SOURCE,
+ target_operation_name=NORMATIVE_REMOVE_TARGET)
return sequence
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/mock/context.py
----------------------------------------------------------------------
diff --git a/tests/mock/context.py b/tests/mock/context.py
index cf1a32d..acc073d 100644
--- a/tests/mock/context.py
+++ b/tests/mock/context.py
@@ -27,9 +27,10 @@ from ..storage import init_inmemory_model_storage
from .topology import create_simple_topology_two_nodes
-def simple(tmpdir, inmemory=False, context_kwargs=None):
+def simple(tmpdir, inmemory=False, context_kwargs=None, topology=None):
initiator = init_inmemory_model_storage if inmemory else None
initiator_kwargs = {} if inmemory else dict(base_dir=tmpdir)
+ topology = topology or create_simple_topology_two_nodes
model_storage = aria.application_model_storage(
sql_mapi.SQLAlchemyModelAPI, initiator=initiator, initiator_kwargs=initiator_kwargs)
@@ -38,7 +39,7 @@ def simple(tmpdir, inmemory=False, context_kwargs=None):
api_kwargs=dict(directory=os.path.join(tmpdir, 'resources'))
)
- service_instance_id = create_simple_topology_two_nodes(model_storage)
+ service_instance_id = topology(model_storage)
final_kwargs = dict(
name='simple_context',
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/mock/models.py
----------------------------------------------------------------------
diff --git a/tests/mock/models.py b/tests/mock/models.py
index 301fc01..908c1d3 100644
--- a/tests/mock/models.py
+++ b/tests/mock/models.py
@@ -16,7 +16,26 @@
from datetime import datetime
from aria.storage.modeling import model
-from . import operations
+from aria.orchestrator import decorators
+from aria.orchestrator.workflows.builtin.workflows import (
+ NORMATIVE_STANDARD_INTERFACE,
+ NORMATIVE_CREATE,
+ NORMATIVE_START,
+ NORMATIVE_STOP,
+ NORMATIVE_DELETE,
+ NORMATIVE_CONFIGURE,
+
+ NORMATIVE_CONFIGURE_INTERFACE,
+ NORMATIVE_PRE_CONFIGURE_SOURCE,
+ NORMATIVE_PRE_CONFIGURE_TARGET,
+ NORMATIVE_POST_CONFIGURE_SOURCE,
+ NORMATIVE_POST_CONFIGURE_TARGET,
+
+ NORMATIVE_ADD_SOURCE,
+ NORMATIVE_ADD_TARGET,
+ NORMATIVE_REMOVE_TARGET,
+ NORMATIVE_REMOVE_SOURCE
+)
DEPLOYMENT_NAME = 'test_deployment_id'
BLUEPRINT_NAME = 'test_blueprint_id'
@@ -33,9 +52,9 @@ RELATIONSHIP_NAME = 'relationship'
RELATIONSHIP_INSTANCE_NAME = 'relationship_instance'
-def get_dependency_node(deployment):
+def get_dependency_node(name, deployment):
return model.NodeTemplate(
- name=DEPENDENCY_NODE_NAME,
+ name=name,
type_name='test_node_type',
type_hierarchy=[],
default_instances=1,
@@ -45,16 +64,19 @@ def get_dependency_node(deployment):
)
-def get_dependency_node_instance(dependency_node, deployment):
- return model.Node(
- name=DEPENDENCY_NODE_INSTANCE_NAME,
+def get_dependency_node_instance(name, dependency_node, deployment):
+ node = model.Node(
+ name=name,
service_instance=deployment,
runtime_properties={'ip': '1.1.1.1'},
node_template=dependency_node,
state='',
- scaling_groups=[]
+ scaling_groups=[],
+ interfaces=get_standard_interfaces(),
)
+ return node
+
def get_relationship(target):
requirement_template = model.RequirementTemplate(target_node_template_name=target.name)
@@ -67,17 +89,14 @@ def get_relationship_instance(source_instance, target_instance):
return model.Relationship(
target_node=target_instance,
source_node=source_instance,
+ interfaces=get_configure_interfaces()
)
-def get_dependent_node(deployment, requirement_template, capability_template):
- operation_templates = [model.OperationTemplate(implementation=op,
- service_template=deployment.service_template)
- for op in operations.NODE_OPERATIONS]
- interface_template = model.InterfaceTemplate(operation_templates=operation_templates)
-
+def get_dependent_node(name, deployment, requirement_template, capability_template):
+ interface_template = get_interface_template('op_name')
return model.NodeTemplate(
- name=DEPENDENT_NODE_NAME,
+ name=name,
type_name='test_node_type',
type_hierarchy=[],
default_instances=1,
@@ -90,14 +109,15 @@ def get_dependent_node(deployment, requirement_template, capability_template):
)
-def get_dependent_node_instance(dependent_node, deployment):
+def get_dependent_node_instance(name, dependent_node, deployment):
return model.Node(
- name=DEPENDENT_NODE_INSTANCE_NAME,
+ name=name,
service_instance=deployment,
runtime_properties={},
node_template=dependent_node,
state='',
scaling_groups=[],
+ interfaces=get_standard_interfaces()
)
@@ -178,3 +198,48 @@ def get_interface(operation_name,
name=interface_name,
edge=edge,
**(interface_kwargs or {}))
+
+
+def get_standard_interfaces():
+ ops = [
+ model.Operation(name=op_name,
+ implementation='{0}.{1}'.format(__file__, mock_operation.__name__))
+ for op_name in [NORMATIVE_CREATE, NORMATIVE_CONFIGURE, NORMATIVE_START,
+ NORMATIVE_STOP, NORMATIVE_DELETE]
+ ]
+ return [model.Interface(name=NORMATIVE_STANDARD_INTERFACE, operations=ops)]
+
+
+def get_configure_interfaces():
+ source_operations = [
+ model.Operation(name=op_name,
+ implementation='{0}.{1}'.format(__file__, mock_operation.__name__))
+ for op_name in [NORMATIVE_PRE_CONFIGURE_SOURCE,
+ NORMATIVE_POST_CONFIGURE_SOURCE,
+ NORMATIVE_ADD_SOURCE,
+ NORMATIVE_REMOVE_SOURCE]
+ ]
+ source_interface = model.Interface(
+ name=NORMATIVE_CONFIGURE_INTERFACE,
+ operations=source_operations,
+ edge='source'
+ )
+ target_operations = [
+ model.Operation(name=op_name,
+ implementation='{0}.{1}'.format(__file__, mock_operation.__name__))
+ for op_name in [NORMATIVE_PRE_CONFIGURE_TARGET,
+ NORMATIVE_POST_CONFIGURE_TARGET,
+ NORMATIVE_ADD_TARGET,
+ NORMATIVE_REMOVE_TARGET]
+ ]
+ target_interface = model.Interface(
+ name=NORMATIVE_CONFIGURE_INTERFACE,
+ operations=target_operations,
+ edge='target'
+ )
+ return source_interface, target_interface
+
+
+@decorators.operation
+def mock_operation(*args, **kwargs):
+ pass
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/mock/topology.py
----------------------------------------------------------------------
diff --git a/tests/mock/topology.py b/tests/mock/topology.py
index d3e8b7b..4ae243b 100644
--- a/tests/mock/topology.py
+++ b/tests/mock/topology.py
@@ -25,7 +25,8 @@ def create_simple_topology_single_node(model_storage, create_operation):
service_instance = models.get_deployment(service_template)
model_storage.service_instance.put(service_instance)
- node_template = models.get_dependency_node(service_instance)
+ node_template = models.get_dependency_node(
+ models.DEPENDENCY_NODE_NAME, service_instance)
node_template.interface_templates = [models.get_interface_template(
'tosca.interfaces.node.lifecycle.Standard.create',
operation_kwargs=dict(
@@ -36,7 +37,8 @@ def create_simple_topology_single_node(model_storage, create_operation):
)]
model_storage.node_template.put(node_template)
- node = models.get_dependency_node_instance(node_template, service_instance)
+ node = models.get_dependency_node_instance(
+ models.DEPENDENCY_NODE_INSTANCE_NAME, node_template, service_instance)
node.interfaces = [models.get_interface(
'tosca.interfaces.node.lifecycle.Standard.create',
operation_kwargs=dict(
@@ -56,12 +58,12 @@ def create_simple_topology_two_nodes(model_storage):
#################################################################################
# Creating a simple deployment with node -> node as a graph
- dependency_node = models.get_dependency_node(deployment)
+ dependency_node = models.get_dependency_node(models.DEPENDENCY_NODE_NAME, deployment)
model_storage.node_template.put(dependency_node)
storage_dependency_node = model_storage.node_template.get(dependency_node.id)
- dependency_node_instance = models.get_dependency_node_instance(storage_dependency_node,
- deployment)
+ dependency_node_instance = models.get_dependency_node_instance(
+ models.DEPENDENCY_NODE_INSTANCE_NAME, storage_dependency_node, deployment)
model_storage.node.put(dependency_node_instance)
storage_dependency_node_instance = model_storage.node.get(dependency_node_instance.id)
@@ -69,11 +71,13 @@ def create_simple_topology_two_nodes(model_storage):
model_storage.requirement_template.put(req_template)
model_storage.capability_template.put(cap_template)
- dependent_node = models.get_dependent_node(deployment, req_template, cap_template)
+ dependent_node = models.get_dependent_node(
+ models.DEPENDENT_NODE_NAME, deployment, req_template, cap_template)
model_storage.node_template.put(dependent_node)
storage_dependent_node = model_storage.node_template.get(dependent_node.id)
- dependent_node_instance = models.get_dependent_node_instance(storage_dependent_node, deployment)
+ dependent_node_instance = models.get_dependent_node_instance(
+ models.DEPENDENT_NODE_INSTANCE_NAME, storage_dependent_node, deployment)
model_storage.node.put(dependent_node_instance)
storage_dependent_node_instance = model_storage.node.get(dependent_node_instance.id)
@@ -84,3 +88,30 @@ def create_simple_topology_two_nodes(model_storage):
model_storage.relationship.put(relationship_instance)
return deployment.id
+
+
+def create_simple_topology_three_nodes(model_storage):
+ #################################################################################
+ # Creating a simple deployment with the following topology:
+ # node1 ---->|
+ # | -> node0
+ # node2 ---->|
+ # meaning node0 has two relationships to node1 and node 2 (one each).
+
+ service_instance_id = create_simple_topology_two_nodes(model_storage)
+ service_instance = model_storage.service_instance.get(service_instance_id)
+ third_node_template = models.get_dependency_node('another_dependency_node_template',
+ service_instance)
+ model_storage.node_template.put(third_node_template)
+ third_node = models.get_dependency_node_instance('another_dependency_node',
+ third_node_template,
+ service_instance)
+ model_storage.node.put(third_node)
+
+ new_relationship = models.get_relationship_instance(
+ source_instance=model_storage.node.get_by_name(models.DEPENDENT_NODE_INSTANCE_NAME),
+ target_instance=third_node,
+ )
+ model_storage.relationship.put(new_relationship)
+
+ return service_instance_id
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/orchestrator/workflows/builtin/__init__.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/builtin/__init__.py b/tests/orchestrator/workflows/builtin/__init__.py
index 9f60e55..b53040c 100644
--- a/tests/orchestrator/workflows/builtin/__init__.py
+++ b/tests/orchestrator/workflows/builtin/__init__.py
@@ -13,18 +13,50 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tests import mock
+from aria.orchestrator.workflows.builtin import workflows
-def assert_node_install_operations(operations, with_relationships=False):
- all_operations = mock.operations.OPERATIONS_INSTALL if with_relationships else \
- mock.operations.NODE_OPERATIONS_INSTALL
- for i, operation in enumerate(operations):
- assert operation.name.startswith(all_operations[i] + '.')
+def _assert_relationships(operations, expected_op_full_name, relationships=0):
+ """
+ :param operations: and iterable of operations
+ :param expected_op_full_name: Note that source/target doesn't really matter since they are
+ dropped
+ :param relationships: the number of relationships
+ :return:
+ """
+ expected_op_name = expected_op_full_name.rsplit('_', 1)[0]
+ for _ in xrange(relationships):
+ # Since the target and source operations start of the same way, we only need to retrieve the
+ # suffix once
+ operation = next(operations)
+ op_name, index1 = operation.name.rsplit('.', 1)
+ op_name, edge1 = op_name.rsplit('_', 1)
+ assert op_name == expected_op_name
-def assert_node_uninstall_operations(operations, with_relationships=False):
- all_operations = mock.operations.OPERATIONS_UNINSTALL if with_relationships else \
- mock.operations.NODE_OPERATIONS_UNINSTALL
- for i, operation in enumerate(operations):
- assert operation.name.startswith(all_operations[i] + '.')
+ operation = next(operations)
+ op_name, index2 = operation.name.rsplit('.', 1)
+ op_name, edge2 = op_name.rsplit('_', 1)
+ assert op_name == expected_op_name
+
+ assert index1 == index2
+ assert edge1 != edge2
+
+
+def assert_node_install_operations(operations, relationships=0):
+ operations = iter(operations)
+
+ assert next(operations).name.startswith(workflows.NORMATIVE_CREATE)
+ _assert_relationships(operations, workflows.NORMATIVE_PRE_CONFIGURE_SOURCE, relationships)
+ assert next(operations).name.startswith(workflows.NORMATIVE_CONFIGURE)
+ _assert_relationships(operations, workflows.NORMATIVE_POST_CONFIGURE_SOURCE, relationships)
+ assert next(operations).name.startswith(workflows.NORMATIVE_START)
+ _assert_relationships(operations, workflows.NORMATIVE_ADD_SOURCE, relationships)
+
+
+def assert_node_uninstall_operations(operations, relationships=0):
+ operations = iter(operations)
+
+ assert next(operations).name.startswith(workflows.NORMATIVE_STOP)
+ _assert_relationships(operations, workflows.NORMATIVE_REMOVE_SOURCE, relationships)
+ assert next(operations).name.startswith(workflows.NORMATIVE_DELETE)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/orchestrator/workflows/builtin/test_heal.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/builtin/test_heal.py b/tests/orchestrator/workflows/builtin/test_heal.py
index b553049..1e31ed7 100644
--- a/tests/orchestrator/workflows/builtin/test_heal.py
+++ b/tests/orchestrator/workflows/builtin/test_heal.py
@@ -57,8 +57,8 @@ def test_heal_dependent_node(ctx):
list(dependent_node_subgraph_install.topological_order(reverse=True))
assert isinstance(dependency_node_subgraph_install, task.StubTask)
- assert_node_uninstall_operations(dependent_node_uninstall_tasks, with_relationships=True)
- assert_node_install_operations(dependent_node_install_tasks, with_relationships=True)
+ assert_node_uninstall_operations(dependent_node_uninstall_tasks, relationships=1)
+ assert_node_install_operations(dependent_node_install_tasks, relationships=1)
@pytest.mark.skip(reason='heal is not implemented for now')
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/orchestrator/workflows/builtin/test_install.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/builtin/test_install.py b/tests/orchestrator/workflows/builtin/test_install.py
index 1791719..1a4e1f9 100644
--- a/tests/orchestrator/workflows/builtin/test_install.py
+++ b/tests/orchestrator/workflows/builtin/test_install.py
@@ -25,7 +25,8 @@ from . import assert_node_install_operations
@pytest.fixture
def ctx(tmpdir):
- context = mock.context.simple(str(tmpdir))
+ context = mock.context.simple(str(tmpdir),
+ topology=mock.topology.create_simple_topology_three_nodes)
yield context
storage.release_sqlite_storage(context.model)
@@ -34,10 +35,12 @@ def test_install(ctx):
install_tasks = list(task.WorkflowTask(install, ctx=ctx).topological_order(True))
- assert len(install_tasks) == 2
- dependency_node_subgraph, dependent_node_subgraph = install_tasks
+ assert len(install_tasks) == 3
+ dependency_node_subgraph1, dependency_node_subgraph2, dependent_node_subgraph = install_tasks
dependent_node_tasks = list(dependent_node_subgraph.topological_order(reverse=True))
- dependency_node_tasks = list(dependency_node_subgraph.topological_order(reverse=True))
+ dependency_node1_tasks = list(dependency_node_subgraph1.topological_order(reverse=True))
+ dependency_node2_tasks = list(dependency_node_subgraph2.topological_order(reverse=True))
- assert_node_install_operations(dependency_node_tasks)
- assert_node_install_operations(dependent_node_tasks, with_relationships=True)
+ assert_node_install_operations(dependency_node1_tasks)
+ assert_node_install_operations(dependency_node2_tasks)
+ assert_node_install_operations(dependent_node_tasks, relationships=2)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/orchestrator/workflows/builtin/test_uninstall.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/builtin/test_uninstall.py b/tests/orchestrator/workflows/builtin/test_uninstall.py
index 791291f..aa04c38 100644
--- a/tests/orchestrator/workflows/builtin/test_uninstall.py
+++ b/tests/orchestrator/workflows/builtin/test_uninstall.py
@@ -26,7 +26,8 @@ from . import assert_node_uninstall_operations
@pytest.fixture
def ctx(tmpdir):
- context = mock.context.simple(str(tmpdir))
+ context = mock.context.simple(str(tmpdir),
+ topology=mock.topology.create_simple_topology_three_nodes)
yield context
storage.release_sqlite_storage(context.model)
@@ -35,10 +36,12 @@ def test_uninstall(ctx):
uninstall_tasks = list(task.WorkflowTask(uninstall, ctx=ctx).topological_order(True))
- assert len(uninstall_tasks) == 2
- dependent_node_subgraph, dependency_node_subgraph = uninstall_tasks
+ assert len(uninstall_tasks) == 3
+ dependent_node_subgraph, dependency_node_subgraph1, dependency_node_subgraph2 = uninstall_tasks
dependent_node_tasks = list(dependent_node_subgraph.topological_order(reverse=True))
- dependency_node_tasks = list(dependency_node_subgraph.topological_order(reverse=True))
+ dependency_node1_tasks = list(dependency_node_subgraph1.topological_order(reverse=True))
+ dependency_node2_tasks = list(dependency_node_subgraph2.topological_order(reverse=True))
- assert_node_uninstall_operations(operations=dependency_node_tasks)
- assert_node_uninstall_operations(operations=dependent_node_tasks, with_relationships=True)
+ assert_node_uninstall_operations(operations=dependency_node1_tasks)
+ assert_node_uninstall_operations(operations=dependency_node2_tasks)
+ assert_node_uninstall_operations(operations=dependent_node_tasks, relationships=2)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dec48d7f/tests/storage/test_models.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py
index 81b4122..b544e7b 100644
--- a/tests/storage/test_models.py
+++ b/tests/storage/test_models.py
@@ -85,7 +85,8 @@ def _service_instance_update_storage():
def _node_template_storage():
storage = _service_instance_storage()
- node_template = mock.models.get_dependency_node(storage.service_instance.list()[0])
+ node_template = mock.models.get_dependency_node(mock.models.DEPENDENCY_NODE_NAME,
+ storage.service_instance.list()[0])
storage.node_template.put(node_template)
return storage
@@ -95,18 +96,17 @@ def _nodes_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)
+ dependency_node = mock.models.get_dependency_node_instance(
+ mock.models.DEPENDENCY_NODE_INSTANCE_NAME, 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)
+ dependent_node_template = mock.models.get_dependent_node(
+ mock.models.DEPENDENT_NODE_NAME, service_instance, req_template, cap_template)
+ dependent_node = mock.models.get_dependent_node_instance(
+ mock.models.DEPENDENT_NODE_INSTANCE_NAME, dependent_node_template, service_instance)
storage.node.put(dependency_node)
storage.node.put(dependent_node)
return storage