322 lines
14 KiB
Python
322 lines
14 KiB
Python
# Copyright 2016 Red Hat, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
from unittest import mock
|
|
|
|
import yaml
|
|
|
|
from swiftclient import exceptions as swiftexceptions
|
|
|
|
from tripleo_common.actions import parameters
|
|
from tripleo_common import exception
|
|
from tripleo_common.tests import base
|
|
|
|
|
|
class GetProfileOfFlavorActionTest(base.TestCase):
|
|
|
|
@mock.patch('tripleo_common.utils.parameters.get_profile_of_flavor')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_compute_client')
|
|
def test_profile_found(self, mock_get_compute_client,
|
|
mock_get_profile_of_flavor):
|
|
mock_ctx = mock.MagicMock()
|
|
mock_get_profile_of_flavor.return_value = 'compute'
|
|
action = parameters.GetProfileOfFlavorAction('oooq_compute')
|
|
result = action.run(mock_ctx)
|
|
expected_result = "compute"
|
|
self.assertEqual(result, expected_result)
|
|
|
|
@mock.patch('tripleo_common.utils.parameters.get_profile_of_flavor')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_compute_client')
|
|
def test_profile_not_found(self, mock_get_compute_client,
|
|
mock_get_profile_of_flavor):
|
|
mock_ctx = mock.MagicMock()
|
|
profile = (exception.DeriveParamsError, )
|
|
mock_get_profile_of_flavor.side_effect = profile
|
|
action = parameters.GetProfileOfFlavorAction('no_profile')
|
|
result = action.run(mock_ctx)
|
|
self.assertTrue(result.is_error())
|
|
mock_get_profile_of_flavor.assert_called_once()
|
|
|
|
|
|
class GetNetworkConfigActionTest(base.TestCase):
|
|
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_set')
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_get')
|
|
@mock.patch('heatclient.common.template_utils.'
|
|
'process_multiple_environments_and_files')
|
|
@mock.patch('heatclient.common.template_utils.get_template_contents')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_orchestration_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_workflow_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client')
|
|
def test_run_valid_network_config(
|
|
self, mock_get_object_client, mock_get_workflow_client,
|
|
mock_get_orchestration_client, mock_get_template_contents,
|
|
mock_process_multiple_environments_and_files,
|
|
mock_cache_get,
|
|
mock_cache_set):
|
|
|
|
mock_ctx = mock.MagicMock()
|
|
swift = mock.MagicMock(url="http://test.com")
|
|
mock_env = yaml.safe_dump({
|
|
'temp_environment': 'temp_environment',
|
|
'template': 'template',
|
|
'environments': [{u'path': u'environments/test.yaml'}]
|
|
}, default_flow_style=False)
|
|
swift.get_object.side_effect = (
|
|
({}, mock_env),
|
|
swiftexceptions.ClientException('atest2'),
|
|
({}, mock_env)
|
|
)
|
|
mock_get_object_client.return_value = swift
|
|
|
|
mock_get_template_contents.return_value = ({}, {
|
|
'heat_template_version': '2016-04-30'
|
|
})
|
|
mock_process_multiple_environments_and_files.return_value = ({}, {})
|
|
|
|
mock_heat = mock.MagicMock()
|
|
mock_heat.stacks.preview.return_value = mock.Mock(resources=[{
|
|
"resource_identity": {"stack_name": "overcloud-TEMP-Compute-0"},
|
|
"resource_name": "OsNetConfigImpl",
|
|
"properties": {"config": "echo \'{\"network_config\": {}}\'"
|
|
" > /etc/os-net-config/config.json"}
|
|
}])
|
|
|
|
mock_get_orchestration_client.return_value = mock_heat
|
|
|
|
mock_cache_get.return_value = None
|
|
expected = {"network_config": {}}
|
|
# Test
|
|
action = parameters.GetNetworkConfigAction(container='overcloud',
|
|
role_name='Compute')
|
|
result = action.run(mock_ctx)
|
|
self.assertEqual(expected, result)
|
|
mock_heat.stacks.preview.assert_called_once_with(
|
|
environment={},
|
|
files={},
|
|
template={'heat_template_version': '2016-04-30'},
|
|
stack_name='overcloud-TEMP',
|
|
)
|
|
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_set')
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_get')
|
|
@mock.patch('heatclient.common.template_utils.'
|
|
'process_multiple_environments_and_files')
|
|
@mock.patch('heatclient.common.template_utils.get_template_contents')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_orchestration_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_workflow_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client')
|
|
def test_run_valid_network_config_with_no_interface_routes_inputs(
|
|
self, mock_get_object_client, mock_get_workflow_client,
|
|
mock_get_orchestration_client, mock_get_template_contents,
|
|
mock_process_multiple_environments_and_files,
|
|
mock_cache_get,
|
|
mock_cache_set):
|
|
|
|
mock_ctx = mock.MagicMock()
|
|
swift = mock.MagicMock(url="http://test.com")
|
|
mock_env = yaml.safe_dump({
|
|
'temp_environment': 'temp_environment',
|
|
'template': 'template',
|
|
'environments': [{u'path': u'environments/test.yaml'}]
|
|
}, default_flow_style=False)
|
|
swift.get_object.side_effect = (
|
|
({}, mock_env),
|
|
swiftexceptions.ClientException('atest2'),
|
|
({}, mock_env)
|
|
)
|
|
mock_get_object_client.return_value = swift
|
|
|
|
mock_get_template_contents.return_value = ({}, {
|
|
'heat_template_version': '2016-04-30',
|
|
'resources': {'ComputeGroupVars': {'properties': {
|
|
'value': {'role_networks': ['InternalApi', 'Storage']}
|
|
}
|
|
}}
|
|
})
|
|
mock_process_multiple_environments_and_files.return_value = (
|
|
{}, {'parameter_defaults': {}})
|
|
|
|
mock_heat = mock.MagicMock()
|
|
mock_heat.stacks.preview.return_value = mock.Mock(resources=[{
|
|
"resource_identity": {"stack_name": "overcloud-TEMP-Compute-0"},
|
|
"resource_name": "OsNetConfigImpl",
|
|
"properties": {"config": "echo \'{\"network_config\": {}}\'"
|
|
" > /etc/os-net-config/config.json"}
|
|
}])
|
|
|
|
mock_get_orchestration_client.return_value = mock_heat
|
|
|
|
mock_cache_get.return_value = None
|
|
expected = {"network_config": {}}
|
|
# Test
|
|
action = parameters.GetNetworkConfigAction(container='overcloud',
|
|
role_name='Compute')
|
|
result = action.run(mock_ctx)
|
|
self.assertEqual(expected, result)
|
|
mock_heat.stacks.preview.assert_called_once_with(
|
|
environment={'parameter_defaults': {
|
|
'InternalApiInterfaceRoutes': [[]],
|
|
'StorageInterfaceRoutes': [[]]}},
|
|
files={},
|
|
template={'heat_template_version': '2016-04-30',
|
|
'resources': {'ComputeGroupVars': {
|
|
'properties': {'value': {
|
|
'role_networks': ['InternalApi',
|
|
'Storage']}}}}},
|
|
stack_name='overcloud-TEMP',
|
|
)
|
|
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_set')
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_get')
|
|
@mock.patch('heatclient.common.template_utils.'
|
|
'process_multiple_environments_and_files')
|
|
@mock.patch('heatclient.common.template_utils.get_template_contents')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_orchestration_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_workflow_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client')
|
|
def test_run_valid_network_config_with_interface_routes_inputs(
|
|
self, mock_get_object_client, mock_get_workflow_client,
|
|
mock_get_orchestration_client, mock_get_template_contents,
|
|
mock_process_multiple_environments_and_files,
|
|
mock_cache_get,
|
|
mock_cache_set):
|
|
|
|
mock_ctx = mock.MagicMock()
|
|
swift = mock.MagicMock(url="http://test.com")
|
|
mock_env = yaml.safe_dump({
|
|
'temp_environment': 'temp_environment',
|
|
'template': 'template',
|
|
'environments': [{u'path': u'environments/test.yaml'}]
|
|
}, default_flow_style=False)
|
|
swift.get_object.side_effect = (
|
|
({}, mock_env),
|
|
swiftexceptions.ClientException('atest2'),
|
|
({}, mock_env)
|
|
)
|
|
mock_get_object_client.return_value = swift
|
|
|
|
mock_get_template_contents.return_value = ({}, {
|
|
'heat_template_version': '2016-04-30',
|
|
'resources': {'ComputeGroupVars': {'properties': {
|
|
'value': {'role_networks': ['InternalApi', 'Storage']}}}}
|
|
})
|
|
mock_process_multiple_environments_and_files.return_value = (
|
|
{}, {'parameter_defaults': {
|
|
'InternalApiInterfaceRoutes': ['test1'],
|
|
'StorageInterfaceRoutes': ['test2']}})
|
|
|
|
mock_heat = mock.MagicMock()
|
|
mock_heat.stacks.preview.return_value = mock.Mock(resources=[{
|
|
"resource_identity": {"stack_name": "overcloud-TEMP-Compute-0"},
|
|
"resource_name": "OsNetConfigImpl",
|
|
"properties": {"config": "echo \'{\"network_config\": {}}\'"
|
|
" > /etc/os-net-config/config.json"}
|
|
}])
|
|
|
|
mock_get_orchestration_client.return_value = mock_heat
|
|
|
|
mock_cache_get.return_value = None
|
|
expected = {"network_config": {}}
|
|
# Test
|
|
action = parameters.GetNetworkConfigAction(container='overcloud',
|
|
role_name='Compute')
|
|
result = action.run(mock_ctx)
|
|
self.assertEqual(expected, result)
|
|
mock_heat.stacks.preview.assert_called_once_with(
|
|
environment={'parameter_defaults': {
|
|
'InternalApiInterfaceRoutes': ['test1'],
|
|
'StorageInterfaceRoutes': ['test2']}},
|
|
files={},
|
|
template={'heat_template_version': '2016-04-30',
|
|
'resources': {'ComputeGroupVars': {'properties': {
|
|
'value': {'role_networks': ['InternalApi',
|
|
'Storage']}}}}},
|
|
stack_name='overcloud-TEMP',
|
|
)
|
|
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_set')
|
|
@mock.patch('tripleo_common.utils.plan.'
|
|
'cache_get')
|
|
@mock.patch('heatclient.common.template_utils.'
|
|
'process_multiple_environments_and_files')
|
|
@mock.patch('heatclient.common.template_utils.get_template_contents')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_orchestration_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.'
|
|
'get_workflow_client')
|
|
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client')
|
|
def test_run_invalid_network_config(
|
|
self, mock_get_object_client,
|
|
mock_get_workflow_client, mock_get_orchestration_client,
|
|
mock_get_template_contents,
|
|
mock_process_multiple_environments_and_files,
|
|
mock_cache_get, mock_cache_set):
|
|
|
|
mock_ctx = mock.MagicMock()
|
|
swift = mock.MagicMock(url="http://test.com")
|
|
mock_env = yaml.safe_dump({
|
|
'temp_environment': 'temp_environment',
|
|
'template': 'template',
|
|
'environments': [{u'path': u'environments/test.yaml'}]
|
|
}, default_flow_style=False)
|
|
swift.get_object.side_effect = (
|
|
({}, mock_env),
|
|
swiftexceptions.ClientException('atest2'),
|
|
({}, mock_env)
|
|
)
|
|
mock_get_object_client.return_value = swift
|
|
|
|
mock_get_template_contents.return_value = ({}, {
|
|
'heat_template_version': '2016-04-30'
|
|
})
|
|
mock_process_multiple_environments_and_files.return_value = ({}, {})
|
|
|
|
mock_heat = mock.MagicMock()
|
|
mock_heat.stacks.preview.return_value = mock.Mock(resources=[{
|
|
"resource_identity": {"stack_name": "overcloud-TEMP-Compute-0"},
|
|
"resource_name": "OsNetConfigImpl",
|
|
"properties": {"config": ""}
|
|
}])
|
|
|
|
mock_get_orchestration_client.return_value = mock_heat
|
|
|
|
mock_cache_get.return_value = None
|
|
# Test
|
|
action = parameters.GetNetworkConfigAction(container='overcloud',
|
|
role_name='Compute')
|
|
result = action.run(mock_ctx)
|
|
self.assertTrue(result.is_error())
|
|
mock_heat.stacks.preview.assert_called_once_with(
|
|
environment={},
|
|
files={},
|
|
template={'heat_template_version': '2016-04-30'},
|
|
stack_name='overcloud-TEMP',
|
|
)
|