09ecdc55a0
Fix the HeatTestCase import issue as required by H302, a following patch of https://review.openstack.org/#/c/129846/ Change-Id: Iab9a508682e9fe2932b7d00b191c8a4cdea4738b
181 lines
7.1 KiB
Python
181 lines
7.1 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 heat.api.openstack.v1.views import stacks_view
|
|
from heat.common import identifier
|
|
from heat.tests import common
|
|
|
|
|
|
class TestFormatStack(common.HeatTestCase):
|
|
def setUp(self):
|
|
super(TestFormatStack, self).setUp()
|
|
self.request = mock.Mock()
|
|
|
|
def test_doesnt_include_stack_action(self):
|
|
stack = {'stack_action': 'CREATE'}
|
|
|
|
result = stacks_view.format_stack(self.request, stack)
|
|
self.assertEqual({}, result)
|
|
|
|
def test_merges_stack_action_and_status(self):
|
|
stack = {'stack_action': 'CREATE',
|
|
'stack_status': 'COMPLETE'}
|
|
|
|
result = stacks_view.format_stack(self.request, stack)
|
|
self.assertIn('stack_status', result)
|
|
self.assertEqual('CREATE_COMPLETE', result['stack_status'])
|
|
|
|
def test_include_stack_status_with_no_action(self):
|
|
stack = {'stack_status': 'COMPLETE'}
|
|
|
|
result = stacks_view.format_stack(self.request, stack)
|
|
self.assertIn('stack_status', result)
|
|
self.assertEqual('COMPLETE', result['stack_status'])
|
|
|
|
@mock.patch.object(stacks_view, 'util')
|
|
def test_replace_stack_identity_with_id_and_links(self, mock_util):
|
|
mock_util.make_link.return_value = 'blah'
|
|
stack = {'stack_identity': {'stack_id': 'foo'}}
|
|
|
|
result = stacks_view.format_stack(self.request, stack)
|
|
self.assertIn('id', result)
|
|
self.assertNotIn('stack_identity', result)
|
|
self.assertEqual('foo', result['id'])
|
|
|
|
self.assertIn('links', result)
|
|
self.assertEqual(['blah'], result['links'])
|
|
|
|
@mock.patch.object(stacks_view, 'util', new=mock.Mock())
|
|
def test_doesnt_add_project_by_default(self):
|
|
stack = {'stack_identity': {'stack_id': 'foo', 'tenant': 'bar'}}
|
|
|
|
result = stacks_view.format_stack(self.request, stack, None)
|
|
self.assertNotIn('project', result)
|
|
|
|
@mock.patch.object(stacks_view, 'util', new=mock.Mock())
|
|
def test_doesnt_add_project_if_tenant_safe(self):
|
|
stack = {'stack_identity': {'stack_id': 'foo', 'tenant': 'bar'}}
|
|
|
|
result = stacks_view.format_stack(self.request, stack,
|
|
None, tenant_safe=True)
|
|
self.assertNotIn('project', result)
|
|
|
|
@mock.patch.object(stacks_view, 'util', new=mock.Mock())
|
|
def test_adds_project_if_not_tenant_safe(self):
|
|
stack = {'stack_identity': {'stack_id': 'foo', 'tenant': 'bar'}}
|
|
|
|
result = stacks_view.format_stack(self.request, stack,
|
|
None, tenant_safe=False)
|
|
self.assertIn('project', result)
|
|
self.assertEqual('bar', result['project'])
|
|
|
|
def test_includes_all_other_keys(self):
|
|
stack = {'foo': 'bar'}
|
|
|
|
result = stacks_view.format_stack(self.request, stack)
|
|
self.assertIn('foo', result)
|
|
self.assertEqual('bar', result['foo'])
|
|
|
|
def test_filter_out_all_but_given_keys(self):
|
|
stack = {
|
|
'foo1': 'bar1',
|
|
'foo2': 'bar2',
|
|
'foo3': 'bar3',
|
|
}
|
|
|
|
result = stacks_view.format_stack(self.request, stack, ['foo2'])
|
|
self.assertIn('foo2', result)
|
|
self.assertNotIn('foo1', result)
|
|
self.assertNotIn('foo3', result)
|
|
|
|
|
|
class TestStacksViewBuilder(common.HeatTestCase):
|
|
def setUp(self):
|
|
super(TestStacksViewBuilder, self).setUp()
|
|
self.request = mock.Mock()
|
|
self.request.params = {}
|
|
identity = identifier.HeatIdentifier('123456', 'wordpress', '1')
|
|
self.stack1 = {
|
|
u'stack_identity': dict(identity),
|
|
u'updated_time': u'2012-07-09T09:13:11Z',
|
|
u'template_description': u'blah',
|
|
u'description': u'blah',
|
|
u'stack_status_reason': u'Stack successfully created',
|
|
u'creation_time': u'2012-07-09T09:12:45Z',
|
|
u'stack_name': identity.stack_name,
|
|
u'stack_action': u'CREATE',
|
|
u'stack_status': u'COMPLETE',
|
|
u'parameters': {'foo': 'bar'},
|
|
u'outputs': ['key', 'value'],
|
|
u'notification_topics': [],
|
|
u'capabilities': [],
|
|
u'disable_rollback': True,
|
|
u'timeout_mins': 60,
|
|
}
|
|
|
|
def test_stack_index(self):
|
|
stacks = [self.stack1]
|
|
stack_view = stacks_view.collection(self.request, stacks)
|
|
self.assertIn('stacks', stack_view)
|
|
self.assertEqual(1, len(stack_view['stacks']))
|
|
|
|
@mock.patch.object(stacks_view, 'format_stack')
|
|
def test_stack_basic_details(self, mock_format_stack):
|
|
stacks = [self.stack1]
|
|
expected_keys = stacks_view.basic_keys
|
|
|
|
stacks_view.collection(self.request, stacks)
|
|
mock_format_stack.assert_called_once_with(self.request,
|
|
self.stack1,
|
|
expected_keys,
|
|
mock.ANY)
|
|
|
|
@mock.patch.object(stacks_view.views_common, 'get_collection_links')
|
|
def test_append_collection_links(self, mock_get_collection_links):
|
|
# If the page is full, assume a next page exists
|
|
stacks = [self.stack1]
|
|
mock_get_collection_links.return_value = 'fake links'
|
|
stack_view = stacks_view.collection(self.request, stacks)
|
|
self.assertIn('links', stack_view)
|
|
|
|
@mock.patch.object(stacks_view.views_common, 'get_collection_links')
|
|
def test_doesnt_append_collection_links(self, mock_get_collection_links):
|
|
stacks = [self.stack1]
|
|
mock_get_collection_links.return_value = None
|
|
stack_view = stacks_view.collection(self.request, stacks)
|
|
self.assertNotIn('links', stack_view)
|
|
|
|
@mock.patch.object(stacks_view.views_common, 'get_collection_links')
|
|
def test_append_collection_count(self, mock_get_collection_links):
|
|
stacks = [self.stack1]
|
|
count = 1
|
|
stack_view = stacks_view.collection(self.request, stacks, count)
|
|
self.assertIn('count', stack_view)
|
|
self.assertEqual(1, stack_view['count'])
|
|
|
|
@mock.patch.object(stacks_view.views_common, 'get_collection_links')
|
|
def test_doesnt_append_collection_count(self, mock_get_collection_links):
|
|
stacks = [self.stack1]
|
|
stack_view = stacks_view.collection(self.request, stacks)
|
|
self.assertNotIn('count', stack_view)
|
|
|
|
@mock.patch.object(stacks_view.views_common, 'get_collection_links')
|
|
def test_appends_collection_count_of_zero(self, mock_get_collection_links):
|
|
stacks = [self.stack1]
|
|
count = 0
|
|
stack_view = stacks_view.collection(self.request, stacks, count)
|
|
self.assertIn('count', stack_view)
|
|
self.assertEqual(0, stack_view['count'])
|