Merge "Unit tests: refactor nested stack attributes tests"
This commit is contained in:
commit
775d2e23f4
|
@ -1015,24 +1015,31 @@ class ResourceGroupAttrTest(common.HeatTestCase):
|
|||
expect_attrs=None):
|
||||
stack = utils.parse_stack(template_data)
|
||||
resg = stack['group1']
|
||||
fake_res = {}
|
||||
attrs = {}
|
||||
refids = {}
|
||||
if expect_attrs is None:
|
||||
expect_attrs = {}
|
||||
for resc in range(expect_count):
|
||||
res = str(resc)
|
||||
fake_res[res] = mock.Mock()
|
||||
fake_res[res].stack = stack
|
||||
fake_res[res].FnGetRefId.return_value = 'ID-%s' % res
|
||||
if res in expect_attrs:
|
||||
fake_res[res].FnGetAtt.return_value = expect_attrs[res]
|
||||
else:
|
||||
fake_res[res].FnGetAtt.return_value = res
|
||||
resg.nested = mock.Mock(return_value=fake_res)
|
||||
for index in range(expect_count):
|
||||
res = str(index)
|
||||
attrs[index] = expect_attrs.get(res, res)
|
||||
refids[index] = 'ID-%s' % res
|
||||
|
||||
names = [str(name) for name in range(expect_count)]
|
||||
resg._resource_names = mock.Mock(return_value=names)
|
||||
self._stub_get_attr(resg, refids, attrs)
|
||||
return resg
|
||||
|
||||
def _stub_get_attr(self, resg, refids, attrs):
|
||||
def make_fake_res(idx):
|
||||
fr = mock.Mock()
|
||||
fr.stack = resg.stack
|
||||
fr.FnGetRefId.return_value = refids[idx]
|
||||
fr.FnGetAtt.return_value = attrs[idx]
|
||||
return fr
|
||||
|
||||
fake_res = {str(i): make_fake_res(i) for i in refids}
|
||||
resg.nested = mock.Mock(return_value=fake_res)
|
||||
|
||||
|
||||
class ReplaceTest(common.HeatTestCase):
|
||||
# 1. no min_in_service
|
||||
|
|
|
@ -1536,127 +1536,6 @@ class SoftwareDeploymentGroupTest(common.HeatTestCase):
|
|||
self.assertEqual(templ, resg._assemble_nested(['server1',
|
||||
'server2']).t)
|
||||
|
||||
def test_attributes(self):
|
||||
stack = utils.parse_stack(self.template)
|
||||
snip = stack.t.resource_definitions(stack)['deploy_mysql']
|
||||
resg = sd.SoftwareDeploymentGroup('test', snip, stack)
|
||||
nested = self.patchobject(resg, 'nested')
|
||||
server1 = mock.MagicMock()
|
||||
server2 = mock.MagicMock()
|
||||
nested.return_value = {
|
||||
'server1': server1,
|
||||
'server2': server2
|
||||
}
|
||||
|
||||
server1.FnGetAtt.return_value = 'Thing happened on server1'
|
||||
server2.FnGetAtt.return_value = 'ouch'
|
||||
self.assertEqual({
|
||||
'server1': 'Thing happened on server1',
|
||||
'server2': 'ouch'
|
||||
}, resg.FnGetAtt('deploy_stdouts'))
|
||||
|
||||
server1.FnGetAtt.return_value = ''
|
||||
server2.FnGetAtt.return_value = 'Its gone Pete Tong'
|
||||
self.assertEqual({
|
||||
'server1': '',
|
||||
'server2': 'Its gone Pete Tong'
|
||||
}, resg.FnGetAtt('deploy_stderrs'))
|
||||
|
||||
server1.FnGetAtt.return_value = 0
|
||||
server2.FnGetAtt.return_value = 1
|
||||
self.assertEqual({
|
||||
'server1': 0,
|
||||
'server2': 1
|
||||
}, resg.FnGetAtt('deploy_status_codes'))
|
||||
|
||||
server1.FnGetAtt.assert_has_calls([
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_status_code'),
|
||||
])
|
||||
|
||||
server2.FnGetAtt.assert_has_calls([
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_status_code'),
|
||||
])
|
||||
|
||||
def test_attributes_path(self):
|
||||
stack = utils.parse_stack(self.template)
|
||||
snip = stack.t.resource_definitions(stack)['deploy_mysql']
|
||||
resg = sd.SoftwareDeploymentGroup('test', snip, stack)
|
||||
nested = self.patchobject(resg, 'nested')
|
||||
server1 = mock.MagicMock()
|
||||
server2 = mock.MagicMock()
|
||||
nested.return_value = {
|
||||
'server1': server1,
|
||||
'server2': server2
|
||||
}
|
||||
|
||||
server1.FnGetAtt.return_value = 'Thing happened on server1'
|
||||
server2.FnGetAtt.return_value = 'ouch'
|
||||
self.assertEqual('Thing happened on server1',
|
||||
resg.FnGetAtt('deploy_stdouts', 'server1'))
|
||||
self.assertEqual('ouch',
|
||||
resg.FnGetAtt('deploy_stdouts', 'server2'))
|
||||
|
||||
server1.FnGetAtt.return_value = ''
|
||||
server2.FnGetAtt.return_value = 'Its gone Pete Tong'
|
||||
self.assertEqual('', resg.FnGetAtt('deploy_stderrs', 'server1'))
|
||||
self.assertEqual('Its gone Pete Tong',
|
||||
resg.FnGetAtt('deploy_stderrs', 'server2'))
|
||||
|
||||
server1.FnGetAtt.return_value = 0
|
||||
server2.FnGetAtt.return_value = 1
|
||||
self.assertEqual(0, resg.FnGetAtt('deploy_status_codes', 'server1'))
|
||||
self.assertEqual(1, resg.FnGetAtt('deploy_status_codes', 'server2'))
|
||||
|
||||
server1.FnGetAtt.assert_has_calls([
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_status_code'),
|
||||
mock.call('deploy_status_code'),
|
||||
])
|
||||
|
||||
server2.FnGetAtt.assert_has_calls([
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stdout'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_stderr'),
|
||||
mock.call('deploy_status_code'),
|
||||
mock.call('deploy_status_code'),
|
||||
])
|
||||
|
||||
def test_attributes_passthrough_key(self):
|
||||
'''Prove attributes not in the schema pass-through.'''
|
||||
stack = utils.parse_stack(self.template)
|
||||
snip = stack.t.resource_definitions(stack)['deploy_mysql']
|
||||
resg = sd.SoftwareDeploymentGroup('test', snip, stack)
|
||||
nested = self.patchobject(resg, 'nested')
|
||||
server1 = mock.MagicMock()
|
||||
server2 = mock.MagicMock()
|
||||
nested.return_value = {
|
||||
'server1': server1,
|
||||
'server2': server2
|
||||
}
|
||||
|
||||
server1.FnGetAtt.return_value = 'attr1'
|
||||
server2.FnGetAtt.return_value = 'attr2'
|
||||
self.assertEqual({
|
||||
'server1': 'attr1',
|
||||
'server2': 'attr2'
|
||||
}, resg.FnGetAtt('some_attr'))
|
||||
|
||||
server1.FnGetAtt.assert_has_calls([
|
||||
mock.call('some_attr'),
|
||||
])
|
||||
|
||||
server2.FnGetAtt.assert_has_calls([
|
||||
mock.call('some_attr'),
|
||||
])
|
||||
|
||||
def test_validate(self):
|
||||
stack = utils.parse_stack(self.template)
|
||||
snip = stack.t.resource_definitions(stack)['deploy_mysql']
|
||||
|
@ -1664,6 +1543,74 @@ class SoftwareDeploymentGroupTest(common.HeatTestCase):
|
|||
self.assertIsNone(resg.validate())
|
||||
|
||||
|
||||
class SoftwareDeploymentGroupAttrTest(common.HeatTestCase):
|
||||
scenarios = [
|
||||
('stdouts', dict(group_attr='deploy_stdouts',
|
||||
nested_attr='deploy_stdout',
|
||||
values=['Thing happened on server1', 'ouch'])),
|
||||
('stderrs', dict(group_attr='deploy_stderrs',
|
||||
nested_attr='deploy_stderr',
|
||||
values=['', "It's gone Pete Tong"])),
|
||||
('status_codes', dict(group_attr='deploy_status_codes',
|
||||
nested_attr='deploy_status_code',
|
||||
values=[0, 1])),
|
||||
('passthrough', dict(group_attr='some_attr',
|
||||
nested_attr='some_attr',
|
||||
values=['attr1', 'attr2'])),
|
||||
]
|
||||
|
||||
template = {
|
||||
'heat_template_version': '2013-05-23',
|
||||
'resources': {
|
||||
'deploy_mysql': {
|
||||
'type': 'OS::Heat::SoftwareDeploymentGroup',
|
||||
'properties': {
|
||||
'config': 'config_uuid',
|
||||
'servers': {'server1': 'uuid1', 'server2': 'uuid2'},
|
||||
'input_values': {'foo': 'bar'},
|
||||
'name': '10_config'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(SoftwareDeploymentGroupAttrTest, self).setUp()
|
||||
self.server_names = ['server1', 'server2']
|
||||
self.servers = [mock.MagicMock() for s in self.server_names]
|
||||
self.stack = utils.parse_stack(self.template)
|
||||
|
||||
def test_attributes(self):
|
||||
resg = self.create_dummy_stack()
|
||||
self.assertEqual(dict(zip(self.server_names, self.values)),
|
||||
resg.FnGetAtt(self.group_attr))
|
||||
self.check_calls()
|
||||
|
||||
def test_attributes_path(self):
|
||||
resg = self.create_dummy_stack()
|
||||
for i, r in enumerate(self.server_names):
|
||||
self.assertEqual(self.values[i],
|
||||
resg.FnGetAtt(self.group_attr, r))
|
||||
self.check_calls(len(self.server_names))
|
||||
|
||||
def create_dummy_stack(self):
|
||||
snip = self.stack.t.resource_definitions(self.stack)['deploy_mysql']
|
||||
resg = sd.SoftwareDeploymentGroup('test', snip, self.stack)
|
||||
nested = self.patchobject(resg, 'nested')
|
||||
nested.return_value = dict(zip(self.server_names, self.servers))
|
||||
self._stub_get_attr(resg)
|
||||
return resg
|
||||
|
||||
def _stub_get_attr(self, resg):
|
||||
for server, value in zip(self.servers, self.values):
|
||||
server.FnGetAtt.return_value = value
|
||||
|
||||
def check_calls(self, count=1):
|
||||
calls = [mock.call(c) for c in [self.nested_attr] * count]
|
||||
for server in self.servers:
|
||||
server.FnGetAtt.assert_has_calls(calls)
|
||||
|
||||
|
||||
class SDGReplaceTest(common.HeatTestCase):
|
||||
template = {
|
||||
'heat_template_version': '2013-05-23',
|
||||
|
|
Loading…
Reference in New Issue