http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fb3ac003/tests/storage/test_models.py ---------------------------------------------------------------------- diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py deleted file mode 100644 index 2088676..0000000 --- a/tests/storage/test_models.py +++ /dev/null @@ -1,919 +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.model import ( - DeploymentUpdateStep, - Blueprint, - Execution, - Task, - Plugin, - Deployment, - Node, - NodeInstance, - Relationship, - RelationshipInstance, - DeploymentUpdate, - DeploymentModification, -) - - -from tests import mock -from tests.storage import get_sqlite_api_kwargs, release_sqlite_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, - api_kwargs=get_sqlite_api_kwargs()) - - -def _blueprint_storage(): - storage = _empty_storage() - blueprint = mock.models.get_blueprint() - storage.blueprint.put(blueprint) - return storage - - -def _deployment_storage(): - storage = _blueprint_storage() - deployment = mock.models.get_deployment(storage.blueprint.list()[0]) - storage.deployment.put(deployment) - return storage - - -def _deployment_update_storage(): - storage = _deployment_storage() - deployment_update = DeploymentUpdate( - deployment=storage.deployment.list()[0], - created_at=now, - deployment_plan={}, - ) - storage.deployment_update.put(deployment_update) - return storage - - -def _node_storage(): - storage = _deployment_storage() - node = mock.models.get_dependency_node(storage.deployment.list()[0]) - storage.node.put(node) - return storage - - -def _nodes_storage(): - storage = _deployment_storage() - dependent_node = mock.models.get_dependent_node(storage.deployment.list()[0]) - dependency_node = mock.models.get_dependency_node(storage.deployment.list()[0]) - storage.node.put(dependent_node) - storage.node.put(dependency_node) - return storage - - -def _node_instances_storage(): - storage = _nodes_storage() - dependent_node = storage.node.get_by_name(mock.models.DEPENDENT_NODE_NAME) - dependency_node = storage.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME) - dependency_node_instance = mock.models.get_dependency_node_instance(dependency_node) - dependent_node_instance = mock.models.get_dependent_node_instance(dependent_node) - storage.node_instance.put(dependency_node_instance) - storage.node_instance.put(dependent_node_instance) - return storage - - -def _execution_storage(): - storage = _deployment_storage() - execution = mock.models.get_execution(storage.deployment.list()[0]) - plugin = mock.models.get_plugin() - storage.execution.put(execution) - storage.plugin.put(plugin) - return storage - - [email protected] -def empty_storage(): - with sql_storage(_empty_storage) as storage: - yield storage - - [email protected] -def blueprint_storage(): - with sql_storage(_blueprint_storage) as storage: - yield storage - - [email protected] -def deployment_storage(): - with sql_storage(_deployment_storage) as storage: - yield storage - - [email protected] -def deployment_update_storage(): - with sql_storage(_deployment_update_storage) as storage: - yield storage - - [email protected] -def node_storage(): - with sql_storage(_node_storage) as storage: - yield storage - - [email protected] -def nodes_storage(): - with sql_storage(_nodes_storage) as storage: - yield storage - - [email protected] -def node_instances_storage(): - with sql_storage(_node_instances_storage) as storage: - yield storage - - [email protected] -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_name, model_cls, model_kwargs): - if is_valid: - model = model_cls(**model_kwargs) - getattr(storage, model_name).put(model) - return model - else: - with pytest.raises(exceptions.StorageError): - getattr(storage, model_name).put(model_cls(**model_kwargs)) - - -class TestBlueprint(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_name='blueprint', - model_cls=Blueprint, - model_kwargs=dict(plan=plan, - description=description, - created_at=created_at, - updated_at=updated_at, - main_file_name=main_file_name)) - - -class TestDeployment(object): - - @pytest.mark.parametrize( - 'is_valid, name, created_at, description, inputs, groups, 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, {}, 'perlnk', {}, {}, {}, {}, now, {}), - (False, 'name', now, 'desc', {}, 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', None, {}, 'perlnk', {}, {}, {}, {}, now, {}), - (True, 'name', now, 'desc', {}, None, '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, now, {}), - (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, None, {}), - (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, None), - ] - ) - def test_deployment_model_creation(self, deployment_storage, is_valid, name, created_at, - description, inputs, groups, permalink, policy_triggers, - policy_types, outputs, scaling_groups, updated_at, - workflows): - deployment = _test_model(is_valid=is_valid, - storage=deployment_storage, - model_name='deployment', - model_cls=Deployment, - model_kwargs=dict( - name=name, - blueprint=deployment_storage.blueprint.list()[0], - created_at=created_at, - description=description, - inputs=inputs, - groups=groups, - 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 deployment.blueprint == deployment_storage.blueprint.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, deployment_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=deployment_storage, - model_name='execution', - model_cls=Execution, - model_kwargs=dict( - deployment=deployment_storage.deployment.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.deployment == deployment_storage.deployment.list()[0] - assert execution.blueprint == deployment_storage.blueprint.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 TestDeploymentUpdate(object): - @pytest.mark.parametrize( - 'is_valid, created_at, deployment_plan, deployment_update_node_instances, ' - 'deployment_update_deployment, deployment_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_deployment_update_model_creation(self, deployment_storage, is_valid, created_at, - deployment_plan, deployment_update_node_instances, - deployment_update_deployment, deployment_update_nodes, - modified_entity_ids, state): - deployment_update = _test_model( - is_valid=is_valid, - storage=deployment_storage, - model_name='deployment_update', - model_cls=DeploymentUpdate, - model_kwargs=dict( - deployment=deployment_storage.deployment.list()[0], - created_at=created_at, - deployment_plan=deployment_plan, - deployment_update_node_instances=deployment_update_node_instances, - deployment_update_deployment=deployment_update_deployment, - deployment_update_nodes=deployment_update_nodes, - modified_entity_ids=modified_entity_ids, - state=state, - )) - if is_valid: - assert deployment_update.deployment == deployment_storage.deployment.list()[0] - - -class TestDeploymentUpdateStep(object): - - @pytest.mark.parametrize( - 'is_valid, action, entity_id, entity_type', - [ - (False, m_cls, 'id', DeploymentUpdateStep.ENTITY_TYPES.NODE), - (False, DeploymentUpdateStep.ACTION_TYPES.ADD, m_cls, - DeploymentUpdateStep.ENTITY_TYPES.NODE), - (False, DeploymentUpdateStep.ACTION_TYPES.ADD, 'id', m_cls), - - (True, DeploymentUpdateStep.ACTION_TYPES.ADD, 'id', - DeploymentUpdateStep.ENTITY_TYPES.NODE) - ] - ) - def test_deployment_update_step_model_creation(self, deployment_update_storage, is_valid, - action, entity_id, entity_type): - deployment_update_step = _test_model( - is_valid=is_valid, - storage=deployment_update_storage, - model_name='deployment_update_step', - model_cls=DeploymentUpdateStep, - model_kwargs=dict( - deployment_update=deployment_update_storage.deployment_update.list()[0], - action=action, - entity_id=entity_id, - entity_type=entity_type - )) - if is_valid: - assert deployment_update_step.deployment_update == \ - deployment_update_storage.deployment_update.list()[0] - - def test_deployment_update_step_order(self): - add_node = DeploymentUpdateStep( - id='add_step', - action='add', - entity_type='node', - entity_id='node_id') - - modify_node = DeploymentUpdateStep( - id='modify_step', - action='modify', - entity_type='node', - entity_id='node_id') - - remove_node = DeploymentUpdateStep( - 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 = DeploymentUpdateStep( - id='add_step', - action='add', - entity_type='relationship', - entity_id='relationship_id') - - remove_rel = DeploymentUpdateStep( - 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_nodes, node_instances, status', - [ - (False, m_cls, now, now, {}, {}, DeploymentModification.STARTED), - (False, {}, m_cls, now, {}, {}, DeploymentModification.STARTED), - (False, {}, now, m_cls, {}, {}, DeploymentModification.STARTED), - (False, {}, now, now, m_cls, {}, DeploymentModification.STARTED), - (False, {}, now, now, {}, m_cls, DeploymentModification.STARTED), - (False, {}, now, now, {}, {}, m_cls), - - (True, {}, now, now, {}, {}, DeploymentModification.STARTED), - (True, {}, now, None, {}, {}, DeploymentModification.STARTED), - (True, {}, now, now, None, {}, DeploymentModification.STARTED), - (True, {}, now, now, {}, None, DeploymentModification.STARTED), - ] - ) - def test_deployment_modification_model_creation(self, deployment_storage, is_valid, context, - created_at, ended_at, modified_nodes, - node_instances, status): - deployment_modification = _test_model( - is_valid=is_valid, - storage=deployment_storage, - model_name='deployment_modification', - model_cls=DeploymentModification, - model_kwargs=dict( - deployment=deployment_storage.deployment.list()[0], - context=context, - created_at=created_at, - ended_at=ended_at, - modified_nodes=modified_nodes, - node_instances=node_instances, - status=status, - )) - if is_valid: - assert deployment_modification.deployment == deployment_storage.deployment.list()[0] - - -class TestNode(object): - @pytest.mark.parametrize( - 'is_valid, name, deploy_number_of_instances, max_number_of_instances, ' - 'min_number_of_instances, number_of_instances, planned_number_of_instances, plugins, ' - 'properties, operations, type, type_hierarchy', - [ - (False, m_cls, 1, 1, 1, 1, 1, [], {}, {}, 'type', []), - (False, 'name', m_cls, 1, 1, 1, 1, [], {}, {}, 'type', []), - (False, 'name', 1, m_cls, 1, 1, 1, [], {}, {}, 'type', []), - (False, 'name', 1, 1, m_cls, 1, 1, [], {}, {}, 'type', []), - (False, 'name', 1, 1, 1, m_cls, 1, [], {}, {}, 'type', []), - (False, 'name', 1, 1, 1, 1, m_cls, [], {}, {}, 'type', []), - (False, 'name', 1, 1, 1, 1, 1, m_cls, {}, {}, 'type', []), - (False, 'name', 1, 1, 1, 1, 1, [], m_cls, {}, 'type', []), - (False, 'name', 1, 1, 1, 1, 1, [], {}, m_cls, 'type', []), - (False, 'name', 1, 1, 1, 1, 1, [], {}, {}, m_cls, []), - (False, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', m_cls), - - (True, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', []), - (True, 'name', 1, 1, 1, 1, 1, None, {}, {}, 'type', []), - (True, 'name', 1, 1, 1, 1, 1, [], None, {}, 'type', []), - (True, 'name', 1, 1, 1, 1, 1, [], {}, None, 'type', []), - (True, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', None), - ] - ) - def test_node_model_creation(self, deployment_storage, is_valid, name, - deploy_number_of_instances, max_number_of_instances, - min_number_of_instances, number_of_instances, - planned_number_of_instances, plugins, - properties, operations, type, type_hierarchy): - node = _test_model( - is_valid=is_valid, - storage=deployment_storage, - model_name='node', - model_cls=Node, - model_kwargs=dict( - name=name, - deploy_number_of_instances=deploy_number_of_instances, - max_number_of_instances=max_number_of_instances, - min_number_of_instances=min_number_of_instances, - number_of_instances=number_of_instances, - planned_number_of_instances=planned_number_of_instances, - plugins=plugins, - properties=properties, - operations=operations, - type=type, - type_hierarchy=type_hierarchy, - deployment=deployment_storage.deployment.list()[0] - )) - if is_valid: - assert node.deployment == deployment_storage.deployment.list()[0] - - -class TestRelationship(object): - @pytest.mark.parametrize( - 'is_valid, source_interfaces, source_operations, target_interfaces, target_operations, ' - 'type, type_hierarchy, properties', - [ - (False, m_cls, {}, {}, {}, 'type', [], {}), - (False, {}, m_cls, {}, {}, 'type', [], {}), - (False, {}, {}, m_cls, {}, 'type', [], {}), - (False, {}, {}, {}, m_cls, 'type', [], {}), - (False, {}, {}, {}, {}, m_cls, [], {}), - (False, {}, {}, {}, {}, 'type', m_cls, {}), - (False, {}, {}, {}, {}, 'type', [], m_cls), - - (True, {}, {}, {}, {}, 'type', [], {}), - (True, None, {}, {}, {}, 'type', [], {}), - (True, {}, {}, None, {}, 'type', [], {}), - (True, {}, {}, {}, {}, 'type', None, {}), - (True, {}, {}, {}, {}, 'type', [], None), - ] - ) - def test_relationship_model_ceration(self, nodes_storage, is_valid, source_interfaces, - source_operations, target_interfaces, target_operations, - type, type_hierarchy, properties): - relationship = _test_model( - is_valid=is_valid, - storage=nodes_storage, - model_name='relationship', - model_cls=Relationship, - model_kwargs=dict( - source_node=nodes_storage.node.list()[1], - target_node=nodes_storage.node.list()[0], - source_interfaces=source_interfaces, - source_operations=source_operations, - target_interfaces=target_interfaces, - target_operations=target_operations, - type=type, - type_hierarchy=type_hierarchy, - properties=properties, - )) - if is_valid: - assert relationship.source_node == nodes_storage.node.list()[1] - assert relationship.target_node == nodes_storage.node.list()[0] - - -class TestNodeInstance(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_storage, is_valid, name, runtime_properties, - scaling_groups, state, version): - node_instance = _test_model( - is_valid=is_valid, - storage=node_storage, - model_name='node_instance', - model_cls=NodeInstance, - model_kwargs=dict( - node=node_storage.node.list()[0], - name=name, - runtime_properties=runtime_properties, - scaling_groups=scaling_groups, - state=state, - version=version, - )) - if is_valid: - assert node_instance.node == node_storage.node.list()[0] - assert node_instance.deployment == node_storage.deployment.list()[0] - - -class TestNodeInstanceIP(object): - - ip = '1.1.1.1' - - def test_ip_on_none_hosted_node_instance(self, deployment_storage): - node = self._node(deployment_storage, ip='not considered') - node_instance = self._node_instance(deployment_storage, node, - is_host=False, - ip='not considered') - assert node_instance.ip is None - - def test_property_ip_on_host_node_instance(self, deployment_storage): - node = self._node(deployment_storage, ip=self.ip) - node_instance = self._node_instance(deployment_storage, node, - is_host=True, - ip=None) - assert node_instance.ip == self.ip - - def test_runtime_property_ip_on_host_node_instance(self, deployment_storage): - node = self._node(deployment_storage, ip='not considered') - node_instance = self._node_instance(deployment_storage, node, - is_host=True, - ip=self.ip) - assert node_instance.ip == self.ip - - def test_no_ip_configured_on_host_node_instance(self, deployment_storage): - node = self._node(deployment_storage, ip=None) - node_instance = self._node_instance(deployment_storage, node, - is_host=True, - ip=None) - assert node_instance.ip is None - - def test_runtime_property_on_hosted_node_instance(self, deployment_storage): - host_node = self._node(deployment_storage, ip=None) - host_node_instance = self._node_instance(deployment_storage, host_node, - is_host=True, - ip=self.ip) - node = self._node(deployment_storage, ip=None) - node_instance = self._node_instance(deployment_storage, node, - is_host=False, - ip=None, - host_fk=host_node_instance.id) - assert node_instance.ip == self.ip - - def _node(self, storage, ip): - kwargs = dict( - name='node', - deploy_number_of_instances=1, - max_number_of_instances=1, - min_number_of_instances=1, - number_of_instances=1, - planned_number_of_instances=1, - properties={}, - type='', - deployment=storage.deployment.list()[0] - ) - if ip: - kwargs['properties']['ip'] = ip - node = Node(**kwargs) - storage.node.put(node) - return node - - def _node_instance(self, storage, node, is_host, ip, host_fk=None): - kwargs = dict( - name='node_instance', - node=node, - runtime_properties={}, - state='' - ) - if ip: - kwargs['runtime_properties']['ip'] = ip - if is_host: - kwargs['host_fk'] = 1 - elif host_fk: - kwargs['host_fk'] = host_fk - node_instance = NodeInstance(**kwargs) - storage.node_instance.put(node_instance) - return node_instance - - -class TestRelationshipInstance(object): - def test_relatiship_instance_model_creation(self, node_instances_storage): - relationship = mock.models.get_relationship( - source=node_instances_storage.node.get_by_name(mock.models.DEPENDENT_NODE_NAME), - target=node_instances_storage.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME) - ) - node_instances_storage.relationship.put(relationship) - node_instances = node_instances_storage.node_instance - source_node_instance = node_instances.get_by_name(mock.models.DEPENDENT_NODE_INSTANCE_NAME) - target_node_instance = node_instances.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME) - - relationship_instance = _test_model( - is_valid=True, - storage=node_instances_storage, - model_name='relationship_instance', - model_cls=RelationshipInstance, - model_kwargs=dict( - relationship=relationship, - source_node_instance=source_node_instance, - target_node_instance=target_node_instance - )) - assert relationship_instance.relationship == relationship - assert relationship_instance.source_node_instance == source_node_instance - assert relationship_instance.target_node_instance == target_node_instance - - -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_name='plugin', - 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_name='task', - 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, - operation_mapping=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', - operation_mapping='', - 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)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fb3ac003/tests/storage/test_structures.py ---------------------------------------------------------------------- diff --git a/tests/storage/test_structures.py b/tests/storage/test_structures.py index 0223a98..cc2c129 100644 --- a/tests/storage/test_structures.py +++ b/tests/storage/test_structures.py @@ -21,15 +21,14 @@ from aria.storage import ( ModelStorage, sql_mapi, model, - type, - exceptions + exceptions, + type ) from ..storage import get_sqlite_api_kwargs, release_sqlite_storage, structure from . import MockModel from ..mock import ( models, - operations, context as mock_context ) @@ -44,7 +43,7 @@ def storage(): @pytest.fixture(scope='module', autouse=True) def module_cleanup(): - model.DeclarativeBase.metadata.remove(MockModel.__table__) #pylint: disable=no-member + model.DB.metadata.remove(MockModel.__table__) #pylint: disable=no-member @pytest.fixture @@ -87,145 +86,96 @@ def test_inner_list_update(storage): def test_model_to_dict(context): - deployment = context.deployment - deployment_dict = deployment.to_dict() + service_instance = context.service_instance + service_instance = service_instance.to_dict() expected_keys = [ - 'created_at', 'description', - 'inputs', - 'groups', + '_metadata', + 'created_at', 'permalink', 'policy_triggers', 'policy_types', - 'outputs', 'scaling_groups', 'updated_at', 'workflows', - 'blueprint_name', ] for expected_key in expected_keys: - assert expected_key in deployment_dict - - assert 'blueprint_fk' not in deployment_dict + assert expected_key in service_instance def test_relationship_model_ordering(context): - deployment = context.model.deployment.get_by_name(models.DEPLOYMENT_NAME) - 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( + service_instance = context.model.service_instance.get_by_name(models.DEPLOYMENT_NAME) + source_node = context.model.node.get_by_name(models.DEPENDENT_NODE_INSTANCE_NAME) + target_node = context.model.node.get_by_name(models.DEPENDENCY_NODE_INSTANCE_NAME) + new_node_template = model.NodeTemplate( name='new_node', - type='test_node_type', - type_hierarchy=[], - number_of_instances=1, - planned_number_of_instances=1, - deploy_number_of_instances=1, - properties={}, - operations=dict((key, {}) for key in operations.NODE_OPERATIONS), - min_number_of_instances=1, - max_number_of_instances=1, - deployment=deployment - ) - source_to_new_relationship = model.Relationship( - source_node=source_node, - target_node=new_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_name='test_node_type', type_hierarchy=[], - properties={}, + default_instances=1, + min_instances=1, + max_instances=1, + service_template=service_instance.service_template ) - new_node_instance = model.NodeInstance( + new_node = model.Node( name='new_node_instance', runtime_properties={}, + service_instance=service_instance, version=None, - node=new_node, + node_template=new_node_template, state='', scaling_groups=[] ) - source_to_new_relationship_instance = model.RelationshipInstance( - relationship=source_to_new_relationship, - source_node_instance=source_node_instance, - target_node_instance=new_node_instance, + + source_to_new_relationship = model.Relationship( + target_node=new_node, + source_node=source_node, ) 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, - ) - + context.model.node_template.put(new_node_template) 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): + def flip_and_assert(node, direction): """ Reversed the order of relationships and assert effects took place. - :param node_instance: the node instance to operatate on + :param node: 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') + relationships = getattr(node, direction + '_relationships') 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 + first_rel_instance, second_rel_instance = relationships + assert getattr(first_rel_instance, relationships.ordering_attr) == 0 + assert getattr(second_rel_instance, relationships.ordering_attr) == 1 - reversed_relationships = list(reversed(relationships)) - reversed_relationship_instances = list(reversed(relationship_instances)) + reversed_relationship_instances = list(reversed(relationships)) - assert relationships != reversed_relationships - assert relationship_instances != reversed_relationship_instances + assert relationships != reversed_relationship_instances - relationships[:] = reversed_relationships - relationship_instances[:] = reversed_relationship_instances - context.model.node_instance.update(node_instance) + relationships[:] = reversed_relationship_instances + context.model.node.update(node) - assert relationships == reversed_relationships - assert relationship_instances == reversed_relationship_instances + assert relationships == 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 + assert getattr(first_rel_instance, relationships.ordering_attr) == 1 + assert getattr(second_rel_instance, relationships.ordering_attr) == 0 - flip_and_assert(source_node_instance, 'outbound') - flip_and_assert(target_node_instance, 'inbound') + flip_and_assert(source_node, 'outbound') + flip_and_assert(target_node, 'inbound') -class StrictClass(model.DeclarativeBase, structure.ModelMixin): +class StrictClass(model.DB, structure.ModelMixin): __tablename__ = 'strict_class' strict_dict = sqlalchemy.Column(type.StrictDict(basestring, basestring))
