ef3357f9c5
Co-Authored-By: Sahdev Zala <spzala@us.ibm.com> Partially Implements: blueprint tosca-requirement-changes Change-Id: I3e257f45f2dc4f0ea13bfd685f27a792c29f2104
187 lines
9.1 KiB
Python
Executable File
187 lines
9.1 KiB
Python
Executable File
# Licensed 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 os
|
|
from translator.hot.tosca_translator import TOSCATranslator
|
|
from translator.tests.base import TestCase
|
|
from translator.toscalib.tosca_template import ToscaTemplate
|
|
import translator.toscalib.utils.yamlparser
|
|
|
|
|
|
class ToscaMongoNodejsTest(TestCase):
|
|
parsed_params = {'storage_snapshot_id': 'test_id',
|
|
'storage_location': '/test', 'cpus': '1',
|
|
'storage_size': '1'}
|
|
|
|
'''TOSCA template with nodejs, app and mongodb on 2 servers.'''
|
|
tosca_tpl = os.path.join(
|
|
os.path.dirname(os.path.abspath(__file__)),
|
|
"../toscalib/tests/data/tosca_nodejs_mongodb_two_instances.yaml")
|
|
tosca = ToscaTemplate(tosca_tpl)
|
|
|
|
def test_relationship_def(self):
|
|
expected_relationship = ['tosca.relationships.HostedOn']
|
|
expected_capabilities_names = ['node']
|
|
for tpl in self.tosca.nodetemplates:
|
|
if tpl.name == 'nodejs':
|
|
def_keys = tpl.type_definition.relationship.keys()
|
|
self.assertEqual(
|
|
expected_relationship,
|
|
sorted([x.type for x in def_keys]))
|
|
self.assertEqual(
|
|
expected_capabilities_names,
|
|
sorted([x.capability_name for x in def_keys]))
|
|
|
|
def test_relationships(self):
|
|
expected_relationship = ['tosca.relationships.HostedOn']
|
|
expected_relatednodes = ['app_server']
|
|
for tpl in self.tosca.nodetemplates:
|
|
rels = tpl.relationships
|
|
if rels:
|
|
if tpl.name == 'nodejs':
|
|
self.assertEqual(
|
|
expected_relationship,
|
|
sorted([x.type for x in tpl.relationships.keys()]))
|
|
self.assertEqual(
|
|
expected_relatednodes,
|
|
sorted([y.name for y in tpl.relationships.values()]))
|
|
|
|
def test_related_nodes(self):
|
|
expected_nodejs = ['app_server']
|
|
actual_nodejs = []
|
|
for tpl in self.tosca.nodetemplates:
|
|
if tpl.name == 'nodejs':
|
|
for node in tpl.related_nodes:
|
|
actual_nodejs.append(node.name)
|
|
self.assertEqual(sorted(actual_nodejs), expected_nodejs)
|
|
|
|
def test_translate_nodejs_mongodb(self):
|
|
translate = TOSCATranslator(self.tosca, self.parsed_params)
|
|
output = translate.translate()
|
|
|
|
expected_resource = {'mongo_dbms_create_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'mongodb/create.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'mongo_dbms_configure_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'mongodb/config.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'mongo_dbms_start_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'mongodb/start.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'nodejs_create_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'nodejs/create.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'nodejs_configure_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'nodejs/config.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'nodejs_start_config':
|
|
{'properties':
|
|
{'config':
|
|
{'get_file': 'nodejs/start.sh'},
|
|
'group': 'script'},
|
|
'type': 'OS::Heat::SoftwareConfig'},
|
|
'mongo_dbms_create_deploy':
|
|
{'properties':
|
|
{'config':
|
|
{'get_resource': 'mongo_dbms_create_config'},
|
|
'server':
|
|
{'get_resource': 'mongo_server'}},
|
|
'type': 'OS::Heat::SoftwareDeployment'},
|
|
'mongo_dbms_configure_deploy':
|
|
{'type': 'OS::Heat::SoftwareDeployment',
|
|
'depends_on':
|
|
['mongo_dbms_create_deploy'],
|
|
'properties':
|
|
{'config':
|
|
{'get_resource': 'mongo_dbms_configure_config'},
|
|
'input_values':
|
|
{'mongodb_ip':
|
|
{'get_attr':
|
|
['mongo_server', 'networks', 'private', 0]}},
|
|
'server':
|
|
{'get_resource': 'mongo_server'}}},
|
|
'mongo_dbms_start_deploy':
|
|
{'type': 'OS::Heat::SoftwareDeployment',
|
|
'depends_on': ['mongo_dbms_configure_deploy'],
|
|
'properties':
|
|
{'config':
|
|
{'get_resource': 'mongo_dbms_start_config'},
|
|
'server':
|
|
{'get_resource': 'mongo_server'}}},
|
|
'nodejs_create_deploy':
|
|
{'properties':
|
|
{'config':
|
|
{'get_resource': 'nodejs_create_config'},
|
|
'server':
|
|
{'get_resource': 'app_server'}},
|
|
'type': 'OS::Heat::SoftwareDeployment'},
|
|
'nodejs_configure_deploy':
|
|
{'depends_on':
|
|
['nodejs_create_deploy'],
|
|
'properties':
|
|
{'config':
|
|
{'get_resource': 'nodejs_configure_config'},
|
|
'input_values':
|
|
{'github_url':
|
|
'https://github.com/sample.git',
|
|
'mongodb_ip':
|
|
{'get_attr':
|
|
['mongo_server', 'networks', 'private', 0]}},
|
|
'server':
|
|
{'get_resource': 'app_server'}},
|
|
'type': 'OS::Heat::SoftwareDeployment'},
|
|
'nodejs_start_deploy':
|
|
{'depends_on': ['nodejs_configure_deploy'],
|
|
'properties':
|
|
{'config':
|
|
{'get_resource': 'nodejs_start_config'},
|
|
'server':
|
|
{'get_resource': 'app_server'}},
|
|
'type': 'OS::Heat::SoftwareDeployment'},
|
|
'app_server':
|
|
{'properties':
|
|
{'flavor': 'm1.medium',
|
|
'image': 'ubuntu-software-config-os-init',
|
|
'key_name': 'userkey',
|
|
'user_data_format': 'SOFTWARE_CONFIG'},
|
|
'type': 'OS::Nova::Server'},
|
|
'mongo_server':
|
|
{'properties':
|
|
{'flavor': 'm1.medium',
|
|
'image': 'ubuntu-software-config-os-init',
|
|
'key_name': 'userkey',
|
|
'user_data_format': 'SOFTWARE_CONFIG'},
|
|
'type': 'OS::Nova::Server'}}
|
|
|
|
output_dict = translator.toscalib.utils.yamlparser.simple_parse(output)
|
|
|
|
resources = output_dict.get('resources')
|
|
for resource_name in resources:
|
|
translated_value = resources.get(resource_name)
|
|
expected_value = expected_resource.get(resource_name)
|
|
self.assertEqual(translated_value, expected_value)
|