Repository: incubator-ariatosca Updated Branches: refs/heads/ARIA-52-Support-order-management-in-relationships 58455922f -> 96b5e1662
code review fixups Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/96b5e166 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/96b5e166 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/96b5e166 Branch: refs/heads/ARIA-52-Support-order-management-in-relationships Commit: 96b5e16626f7fc021af5f6a9fa4a0b6d0cebc1a5 Parents: 5845592 Author: mxmrlv <mxm...@gmail.com> Authored: Sun Jan 8 15:29:34 2017 +0200 Committer: mxmrlv <mxm...@gmail.com> Committed: Sun Jan 8 15:29:34 2017 +0200 ---------------------------------------------------------------------- aria/storage/base_model.py | 25 ++++---- tests/storage/test_model_storage.py | 102 +++++++++++++++++++++---------- 2 files changed, 85 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/96b5e166/aria/storage/base_model.py ---------------------------------------------------------------------- diff --git a/aria/storage/base_model.py b/aria/storage/base_model.py index a534db4..73be771 100644 --- a/aria/storage/base_model.py +++ b/aria/storage/base_model.py @@ -418,7 +418,8 @@ class RelationshipBase(ModelMixin): _private_fields = ['source_node_fk', 'target_node_fk', 'position'] - position = Column(Integer) + source_position = Column(Integer) + target_position = Column(Integer) @declared_attr def deployment_id(self): @@ -434,8 +435,8 @@ class RelationshipBase(ModelMixin): 'source_node_fk', backreference='outbound_relationships', backref_kwargs=dict( - order_by=cls.position, - collection_class=ordering_list('position', count_from=0) + order_by=cls.source_position, + collection_class=ordering_list('source_position', count_from=0) ) ) @@ -453,8 +454,8 @@ class RelationshipBase(ModelMixin): 'target_node_fk', backreference='inbound_relationships', backref_kwargs=dict( - order_by=cls.position, - collection_class=ordering_list('position', count_from=0) + order_by=cls.target_position, + collection_class=ordering_list('target_position', count_from=0) ) ) @@ -536,9 +537,11 @@ class RelationshipInstanceBase(ModelMixin): _private_fields = ['relationship_storage_fk', 'source_node_instance_fk', 'target_node_instance_fk', - 'position'] + 'source_position', + 'target_position'] - position = Column(Integer) + source_position = Column(Integer) + target_position = Column(Integer) @declared_attr def source_node_instance_fk(cls): @@ -550,8 +553,8 @@ class RelationshipInstanceBase(ModelMixin): 'source_node_instance_fk', backreference='outbound_relationship_instances', backref_kwargs=dict( - order_by=cls.position, - collection_class=ordering_list('position', count_from=0) + order_by=cls.source_position, + collection_class=ordering_list('source_position', count_from=0) ) ) @@ -573,8 +576,8 @@ class RelationshipInstanceBase(ModelMixin): 'target_node_instance_fk', backreference='inbound_relationship_instances', backref_kwargs=dict( - order_by=cls.position, - collection_class=ordering_list('position', count_from=0) + order_by=cls.target_position, + collection_class=ordering_list('target_position', count_from=0) ) ) http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/96b5e166/tests/storage/test_model_storage.py ---------------------------------------------------------------------- diff --git a/tests/storage/test_model_storage.py b/tests/storage/test_model_storage.py index 7ed2c34..0e8d1a0 100644 --- a/tests/storage/test_model_storage.py +++ b/tests/storage/test_model_storage.py @@ -159,6 +159,9 @@ def test_relationship_model_ordering(context): source_node = context.model.node.get_by_name(models.DEPENDENT_NODE_NAME) source_node_instance = context.model.node_instance.get_by_name( models.DEPENDENT_NODE_INSTANCE_NAME) + target_node = context.model.node.get_by_name(models.DEPENDENCY_NODE_NAME) + target_node_instance = context.model.node_instance.get_by_name( + models.DEPENDENCY_NODE_INSTANCE_NAME) new_node = model.Node( name='new_node', type='test_node_type', @@ -172,7 +175,7 @@ def test_relationship_model_ordering(context): max_number_of_instances=1, deployment=deployment ) - new_relationship = model.Relationship( + source_to_new_relationship = model.Relationship( source_node=source_node, target_node=new_node, source_interfaces={}, @@ -191,38 +194,75 @@ def test_relationship_model_ordering(context): state='', scaling_groups=[] ) - new_relationship_instance = model.RelationshipInstance( - relationship=new_relationship, - target_node_instance=new_node_instance, + source_to_new_relationship_instance = model.RelationshipInstance( + relationship=source_to_new_relationship, source_node_instance=source_node_instance, + target_node_instance=new_node_instance, ) - context.model.node.put(new_node) - context.model.node_instance.put(new_node_instance) - context.model.relationship.put(new_relationship) - context.model.relationship_instance.put(new_relationship_instance) - - assert len(source_node.outbound_relationships) == 2 - assert len(source_node_instance.outbound_relationship_instances) == 2 - first_rel, second_rel = source_node.outbound_relationships - first_rel_instance, second_rel_instance = source_node_instance.outbound_relationship_instances - - assert first_rel.position == first_rel_instance.position == 0 - assert second_rel.position == second_rel_instance.position == 0 - - reversed_relationships = list(reversed(source_node.outbound_relationships)) - reversed_relationship_instances = list( - reversed(source_node_instance.outbound_relationship_instances)) - - assert source_node.outbound_relationships != reversed_relationships - assert source_node_instance.outbound_relationship_instances != reversed_relationship_instances + new_to_target_relationship = model.Relationship( + source_node=new_node, + target_node=target_node, + source_interfaces={}, + source_operations=dict((key, {}) for key in operations.RELATIONSHIP_OPERATIONS), + target_interfaces={}, + target_operations=dict((key, {}) for key in operations.RELATIONSHIP_OPERATIONS), + type='rel_type', + type_hierarchy=[], + properties={}, + ) + new_to_target_relationship_instance = model.RelationshipInstance( + relationship=new_to_target_relationship, + source_node_instance=new_node_instance, + target_node_instance=target_node_instance, + ) - source_node.outbound_relationships[:] = reversed_relationships - source_node_instance.outbound_relationship_instances[:] = reversed_relationship_instances - context.model.node.update(source_node) - context.model.node_instance.update(source_node_instance) - assert first_rel.position == first_rel_instance.position == 1 - assert second_rel.position == second_rel_instance.position == 0 - assert source_node.outbound_relationships == reversed_relationships - assert source_node_instance.outbound_relationship_instances == reversed_relationship_instances + context.model.node.put(new_node) + context.model.node_instance.put(new_node_instance) + context.model.relationship.put(source_to_new_relationship) + context.model.relationship.put(new_to_target_relationship) + context.model.relationship_instance.put(source_to_new_relationship_instance) + context.model.relationship_instance.put(new_to_target_relationship_instance) + + def flip_and_assert(node_instance, direction): + """ + Reversed the order of relationships and assert effects took place. + :param node_instance: the node instance to operatate on + :param direction: the type of relationships to flip (inbound/outbount) + :return: + """ + assert direction in ('inbound', 'outbound') + + relationships = getattr(node_instance.node, direction + '_relationships') + relationship_instances = getattr(node_instance, direction + '_relationship_instances') + assert len(relationships) == 2 + assert len(relationship_instances) == 2 + + first_rel, second_rel = relationships + first_rel_instance, second_rel_instance = relationship_instances + assert getattr(first_rel, relationships.ordering_attr) == 0 + assert getattr(second_rel, relationships.ordering_attr) == 1 + assert getattr(first_rel_instance, relationship_instances.ordering_attr) == 0 + assert getattr(second_rel_instance, relationship_instances.ordering_attr) == 1 + + reversed_relationships = list(reversed(relationships)) + reversed_relationship_instances = list(reversed(relationship_instances)) + + assert relationships != reversed_relationships + assert relationship_instances != reversed_relationship_instances + + relationships[:] = reversed_relationships + relationship_instances[:] = reversed_relationship_instances + context.model.node_instance.update(node_instance) + + assert relationships == reversed_relationships + assert relationship_instances == reversed_relationship_instances + + assert getattr(first_rel, relationships.ordering_attr) == 1 + assert getattr(second_rel, relationships.ordering_attr) == 0 + assert getattr(first_rel_instance, relationship_instances.ordering_attr) == 1 + assert getattr(second_rel_instance, relationship_instances.ordering_attr) == 0 + + flip_and_assert(source_node_instance, 'outbound') + flip_and_assert(target_node_instance, 'inbound')