magnum/magnum/tests/unit/conductor/tasks/test_heat_tasks.py

144 lines
4.8 KiB
Python

# Copyright 2015 NEC Corporation. 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.
import mock
from taskflow import engines
from taskflow.patterns import linear_flow
from magnum.conductor.tasks import heat_tasks
from magnum.tests import base
class HeatTasksTests(base.TestCase):
def setUp(self):
super(HeatTasksTests, self).setUp()
self.heat_client = mock.MagicMock(name='heat_client')
def _get_create_stack_flow(self, heat_client):
flow = linear_flow.Flow("create stack flow")
flow.add(
heat_tasks.CreateStack(
os_client=heat_client,
requires=('stack_name', 'parameters', 'template', 'files'),
provides='new_stack',
),
)
return flow
def _get_update_stack_flow(self, heat_client):
flow = linear_flow.Flow("update stack flow")
flow.add(
heat_tasks.UpdateStack(
os_client=heat_client,
requires=('stack_id', 'parameters', 'template', 'files'),
),
)
return flow
def _get_delete_stack_flow(self, heat_client):
flow = linear_flow.Flow("delete stack flow")
flow.add(
heat_tasks.DeleteStack(
os_client=heat_client,
requires=('stack_id'),
),
)
return flow
def test_create_stack(self):
heat_client = mock.MagicMock(name='heat_client')
stack_id = 'stack_id'
stack_name = 'stack_name'
stack = {
'stack': {
'id': stack_id
}
}
heat_client.stacks.create.return_value = stack
flow_store = {
'stack_name': stack_name,
'parameters': 'parameters',
'template': 'template',
'files': 'files'
}
flow = self._get_create_stack_flow(heat_client)
result = engines.run(flow, store=flow_store)
heat_client.stacks.create.assert_called_once_with(**flow_store)
self.assertEqual(stack_id, result['new_stack']['stack']['id'])
def test_create_stack_with_error(self):
heat_client = mock.MagicMock(name='heat_client')
heat_client.stacks.create.side_effect = ValueError
stack_name = 'stack_name'
flow_store = {
'stack_name': stack_name,
'parameters': 'parameters',
'template': 'template',
'files': 'files'
}
flow = self._get_create_stack_flow(heat_client)
self.assertRaises(ValueError, engines.run, flow, store=flow_store)
def test_update_stack(self):
heat_client = mock.MagicMock(name='heat_client')
stack_id = 'stack_id'
flow_store = {
'stack_id': stack_id,
'parameters': 'parameters',
'template': 'template',
'files': 'files'
}
flow = self._get_update_stack_flow(heat_client)
expected_params = dict(flow_store)
del expected_params['stack_id']
engines.run(flow, store=flow_store)
heat_client.stacks.update.assert_called_once_with(stack_id,
**expected_params)
def test_update_stack_with_error(self):
heat_client = mock.MagicMock(name='heat_client')
heat_client.stacks.update.side_effect = ValueError
stack_id = 'stack_id'
flow_store = {
'stack_id': stack_id,
'parameters': 'parameters',
'template': 'template',
'files': 'files'
}
flow = self._get_update_stack_flow(heat_client)
self.assertRaises(ValueError, engines.run, flow, store=flow_store)
def test_delete_stack(self):
heat_client = mock.MagicMock(name='heat_client')
stack_id = 'stack_id'
flow_store = {'stack_id': stack_id}
flow = self._get_delete_stack_flow(heat_client)
engines.run(flow, store=flow_store)
heat_client.stacks.delete.assert_called_once_with(stack_id)
def test_delete_stack_with_error(self):
heat_client = mock.MagicMock(name='heat_client')
heat_client.stacks.delete.side_effect = ValueError
stack_id = 'stack_id'
flow_store = {'stack_id': stack_id}
flow = self._get_delete_stack_flow(heat_client)
self.assertRaises(ValueError, engines.run, flow, store=flow_store)