heat-translator/translator/hot/tosca/tests/test_tosca_compute.py
Alvaro Lopez Garcia 9ed0a3d134 use keystoneauth and OpenStack clients
The parser should not rely on the OS_* environment variables for
authentication, as it will fail with more complex setups, when using the
"clouds.yaml" configuration file or when being called through osc with
arguments instead of environment variables.

Moreover, the client should not use "requests" directly to do GETs to
access the nova flavors and glance images, but it should use the
existing clients.

When used through the python-openstackclient it is possible to force the
client to request authentication. The authentication will be handled by
the client, so that the parser does not need to worry about it (so that
authentication plugins can be used). Then, the existing authentication
session can be reused for all the client interaction with OpenStack to
fetch the flavor and images information.

Change-Id: I9f65e7d46686c37bb44ef18756ebd295ee4961de
2016-07-21 17:07:47 +02:00

256 lines
8.5 KiB
Python

# 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 mock
from toscaparser.nodetemplate import NodeTemplate
from toscaparser.tests.base import TestCase
import toscaparser.utils.yamlparser
from translator.hot.tosca.tosca_compute import ToscaCompute
class ToscaComputeTest(TestCase):
def _tosca_compute_test(self, tpl_snippet, expectedprops):
nodetemplates = (toscaparser.utils.yamlparser.
simple_parse(tpl_snippet)['node_templates'])
name = list(nodetemplates.keys())[0]
nodetemplate = NodeTemplate(name, nodetemplates)
nodetemplate.validate()
toscacompute = ToscaCompute(nodetemplate)
toscacompute.handle_properties()
self.assertDictEqual(expectedprops, toscacompute.properties)
def test_node_compute_with_host_and_os_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: 4
mem_size: 4 GB
os:
properties:
architecture: x86_64
type: Linux
distribution: Fedora
version: 18.0
'''
expectedprops = {'flavor': 'm1.large',
'image': 'fedora-amd64-heat-config',
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_without_os_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: 4
mem_size: 4 GB
#left intentionally
'''
expectedprops = {'flavor': 'm1.large',
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_without_host_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
os:
properties:
architecture: x86_64
type: Linux
distribution: Fedora
version: 18.0
'''
expectedprops = {'flavor': None,
'image': 'fedora-amd64-heat-config',
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_without_properties_and_os_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
properties:
#left intentionally
capabilities:
#left intentionally
'''
expectedprops = {'flavor': None,
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_with_only_type(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
'''
expectedprops = {'flavor': None,
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_host_capabilities_without_properties(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
#left intentionally
'''
expectedprops = {'flavor': None,
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_host_capabilities_without_disk_size(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 4
mem_size: 4 GB
'''
expectedprops = {'flavor': 'm1.large',
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_host_capabilities_without_mem_size(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 4
disk_size: 10 GB
'''
expectedprops = {'flavor': 'm1.large',
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
def test_node_compute_host_capabilities_without_mem_size_disk_size(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 4
'''
expectedprops = {'flavor': 'm1.large',
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(
tpl_snippet,
expectedprops)
@mock.patch('translator.common.flavors.get_flavors')
def test_node_compute_with_nova_flavor(self, mock_flavor):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 1
disk_size: 1 GB
mem_size: 1 GB
'''
mock_flavor.return_value = {
'm1.mock_flavor': {
'mem_size': 1024,
'disk_size': 1,
'num_cpus': 1}
}
expectedprops = {'flavor': 'm1.mock_flavor',
'image': None,
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(tpl_snippet, expectedprops)
@mock.patch('translator.common.images.get_images')
def test_node_compute_with_glance_image(self, mock_images):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 1
disk_size: 1 GB
mem_size: 1 GB
os:
properties:
architecture: x86_64
type: Linux
distribution: Fake Distribution
version: 19.0
'''
mock_images.return_value = {
'fake-image-foobar': {'architecture': 'x86_64',
'type': 'Linux',
'distribution': 'Fake Distribution',
'version': '19.0'},
'fake-image-foobar-old': {'architecture': 'x86_64',
'type': 'Linux',
'distribution': 'Fake Distribution',
'version': '18.0'}
}
expectedprops = {'flavor': 'm1.small',
'image': 'fake-image-foobar',
'user_data_format': 'SOFTWARE_CONFIG'}
self._tosca_compute_test(tpl_snippet, expectedprops)