4c6810ce1a
Change-Id: Ie71072940b7b5e599d9012be0bc1874b2a623003 Partial-Bug: #1446254
94 lines
3.1 KiB
Python
94 lines
3.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
|
|
import six
|
|
|
|
from heat.common import grouputils
|
|
from heat.common import template_format
|
|
from heat.engine import resource
|
|
from heat.tests import common
|
|
from heat.tests import generic_resource
|
|
from heat.tests import utils
|
|
|
|
nested_stack = '''
|
|
heat_template_version: 2013-05-23
|
|
resources:
|
|
r0:
|
|
type: dummy.resource
|
|
r1:
|
|
type: dummy.resource
|
|
'''
|
|
|
|
|
|
class SimpleResource(generic_resource.ResourceWithProps):
|
|
|
|
def FnGetRefId(self):
|
|
return 'ID-%s' % self.name
|
|
|
|
|
|
class GroupUtilsTest(common.HeatTestCase):
|
|
|
|
def setUp(self):
|
|
super(GroupUtilsTest, self).setUp()
|
|
resource._register_class('dummy.resource', SimpleResource)
|
|
|
|
def test_non_nested_resource(self):
|
|
group = mock.Mock()
|
|
self.patchobject(group, 'nested', return_value=None)
|
|
|
|
self.assertEqual(0, grouputils.get_size(group))
|
|
self.assertEqual([], grouputils.get_members(group))
|
|
self.assertEqual([], grouputils.get_member_refids(group))
|
|
self.assertEqual([], grouputils.get_member_names(group))
|
|
|
|
def test_normal_group(self):
|
|
group = mock.Mock()
|
|
t = template_format.parse(nested_stack)
|
|
stack = utils.parse_stack(t)
|
|
|
|
# group size
|
|
self.patchobject(group, 'nested', return_value=stack)
|
|
self.assertEqual(2, grouputils.get_size(group))
|
|
|
|
# member list (sorted)
|
|
members = [r for r in six.itervalues(stack)]
|
|
expected = sorted(members, key=lambda r: (r.created_time, r.name))
|
|
actual = grouputils.get_members(group)
|
|
self.assertEqual(expected, actual)
|
|
|
|
# refids
|
|
actual_ids = grouputils.get_member_refids(group)
|
|
self.assertEqual(['ID-r0', 'ID-r1'], actual_ids)
|
|
partial_ids = grouputils.get_member_refids(group, exclude=['ID-r1'])
|
|
self.assertEqual(['ID-r0'], partial_ids)
|
|
|
|
# names
|
|
self.assertEqual(['r0', 'r1'], grouputils.get_member_names(group))
|
|
|
|
def test_group_with_failed_members(self):
|
|
group = mock.Mock()
|
|
t = template_format.parse(nested_stack)
|
|
stack = utils.parse_stack(t)
|
|
self.patchobject(group, 'nested', return_value=stack)
|
|
|
|
# Just failed for whatever reason
|
|
rsrc_err = stack.resources['r0']
|
|
rsrc_err.status = rsrc_err.FAILED
|
|
rsrc_ok = stack.resources['r1']
|
|
|
|
self.assertEqual(1, grouputils.get_size(group))
|
|
self.assertEqual([rsrc_ok], grouputils.get_members(group))
|
|
self.assertEqual(['ID-r1'], grouputils.get_member_refids(group))
|
|
self.assertEqual(['r1'], grouputils.get_member_names(group))
|