Unit tests: always use ResourceDefinition for handle_update()

Change-Id: Ib243d6d1f4ff41c83fddcd0a3741cc28ff954448
This commit is contained in:
Zane Bitter 2014-06-16 11:05:16 -04:00
parent ead7117331
commit a844ceb968
7 changed files with 101 additions and 112 deletions

View File

@ -202,8 +202,11 @@ class InstanceGroupTest(HeatTestCase):
self.m.ReplayAll()
update_snippet = copy.deepcopy(rsrc.parsed_template())
update_snippet['Properties']['Size'] = '5'
props = copy.copy(rsrc.properties.data)
props['Size'] = 5
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name,
rsrc.type(),
props)
tmpl_diff = {'Properties': {'Size': '5'}}
prop_diff = {'Size': '5'}
self.assertIsNone(rsrc.handle_update(update_snippet, tmpl_diff,

View File

@ -26,6 +26,7 @@ from heat.engine.resources import glance_utils
from heat.engine.resources import instance
from heat.engine.resources import loadbalancer as lb
from heat.engine.resources import wait_condition as wc
from heat.engine import rsrc_defn
from heat.engine import scheduler
from heat.engine import stack_user
from heat.tests.common import HeatTestCase
@ -198,7 +199,12 @@ class LoadBalancerTest(HeatTestCase):
s)
id_list.append(inst.FnGetRefId())
rsrc.handle_update(copy.deepcopy(rsrc.t), {}, {'Instances': id_list})
prop_diff = {'Instances': id_list}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
rsrc.handle_update(update_defn, {}, prop_diff)
self.assertEqual('4.5.6.7', rsrc.FnGetAtt('DNSName'))
self.assertEqual('', rsrc.FnGetAtt('SourceSecurityGroup.GroupName'))
@ -206,7 +212,7 @@ class LoadBalancerTest(HeatTestCase):
self.assertRaises(exception.InvalidTemplateAttribute,
rsrc.FnGetAtt, 'Foo')
self.assertIsNone(rsrc.handle_update({}, {}, {}))
self.assertIsNone(rsrc.handle_update(rsrc.t, {}, {}))
self.m.VerifyAll()

View File

@ -25,6 +25,7 @@ from heat.common import urlfetch
from heat.db import api as db_api
from heat.engine import parser
from heat.engine import resource
from heat.engine import rsrc_defn
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
from heat.tests import generic_resource as generic_rsrc
@ -277,11 +278,10 @@ Outputs:
rsrc = stack['the_nested']
original_nested_id = rsrc.resource_id
t = template_format.parse(self.test_template)
new_res = copy.deepcopy(t['Resources']['the_nested'])
new_res['Properties']['TemplateURL'] = (
'https://server.test/new.template')
prop_diff = {'TemplateURL': 'https://server.test/new.template'}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
new_res = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(), props)
updater = rsrc.handle_update(new_res, {}, prop_diff)
updater.run_to_completion()
self.assertIs(True, rsrc.check_update_complete(updater))
@ -332,11 +332,10 @@ Outputs:
rsrc = stack['the_nested']
t = template_format.parse(self.test_template)
new_res = copy.deepcopy(t['Resources']['the_nested'])
new_res['Properties']['TemplateURL'] = (
'https://server.test/new.template')
prop_diff = {'TemplateURL': 'https://server.test/new.template'}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
new_res = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(), props)
updater = rsrc.handle_update(new_res, {}, prop_diff)
updater.run_to_completion()
self.assertIs(True, rsrc.check_update_complete(updater))
@ -373,11 +372,10 @@ Outputs:
rsrc = stack['the_nested']
t = template_format.parse(self.test_template)
new_res = copy.deepcopy(t['Resources']['the_nested'])
new_res['Properties']['TemplateURL'] = (
'https://server.test/new.template')
prop_diff = {'TemplateURL': 'https://server.test/new.template'}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
new_res = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(), props)
ex = self.assertRaises(exception.RequestLimitExceeded,
rsrc.handle_update, new_res, {}, prop_diff)
self.assertIn(exception.StackResourceLimitExceeded.msg_fmt,

View File

@ -18,6 +18,7 @@ from testtools import skipIf
from heat.common import exception
from heat.common import template_format
from heat.engine.cfn import functions as cfn_funcs
from heat.engine import clients
from heat.engine import properties
from heat.engine.resources.neutron import net
@ -702,23 +703,16 @@ class NeutronNetTest(HeatTestCase):
self.assertEqual('ACTIVE', rsrc.FnGetAtt('status'))
self.assertRaises(
exception.InvalidTemplateAttribute, rsrc.FnGetAtt, 'Foo')
update_snippet = {
"Type": "OS::Neutron::Net",
"Properties": {
"name": "mynet",
"shared": True,
"admin_state_up": True,
"dhcp_agent_ids": [
"bb09cfcd-5277-473d-8336-d4ed8628ae68"
]
}
}
prop_diff = {
"name": "mynet",
"dhcp_agent_ids": [
"bb09cfcd-5277-473d-8336-d4ed8628ae68"
]
}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
rsrc.handle_update(update_snippet, {}, prop_diff)
scheduler.TaskRunner(rsrc.delete)()
@ -835,17 +829,16 @@ class NeutronProviderNetTest(HeatTestCase):
scheduler.TaskRunner(rsrc.create)()
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
update_snippet = {
"Type": "OS::Neutron::ProviderNet",
"Properties": {
"name": "prov_net",
"shared": True,
"admin_state_up": True,
"network_type": "vlan",
"physical_network": "physnet_1",
"segmentation_id": "102"
}
props = {
"name": "prov_net",
"shared": True,
"admin_state_up": True,
"network_type": "vlan",
"physical_network": "physnet_1",
"segmentation_id": "102"
}
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
self.assertIsNone(rsrc.handle_update(update_snippet, {}, {}))
self.m.VerifyAll()
@ -894,20 +887,19 @@ class NeutronSubnetTest(HeatTestCase):
self.assertIn(stack['port'], stack.dependencies[stack['subnet']])
self.assertIn(stack['port2'], stack.dependencies[stack['subnet']])
update_snippet = {
"Type": "OS::Neutron::Subnet",
"Properties": {
"name": 'mysubnet',
"network": {"Ref": "network"},
"tenant_id": "c1210485b2424d48804aad5d39c61b8f",
"ip_version": 4,
"cidr": "10.0.3.0/24",
"allocation_pools": [
{"start": "10.0.3.20", "end": "10.0.3.150"}],
"dns_nameservers": ["8.8.8.8", "192.168.1.254"]
}
props = {
"name": 'mysubnet',
"network_id": cfn_funcs.ResourceRef(stack, "Ref", "network"),
"tenant_id": "c1210485b2424d48804aad5d39c61b8f",
"ip_version": 4,
"cidr": "10.0.3.0/24",
"allocation_pools": [
{"start": "10.0.3.20", "end": "10.0.3.150"}],
"dns_nameservers": ["8.8.8.8", "192.168.1.254"],
}
rsrc.handle_update(stack.resolve_static_data(update_snippet), {}, {})
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
rsrc.handle_update(update_snippet, {}, {})
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
rsrc.state_set(rsrc.CREATE, rsrc.COMPLETE, 'to delete again')
@ -1358,19 +1350,15 @@ class NeutronRouterTest(HeatTestCase):
self.assertEqual('3e21026f2dc94372b105808c0e721661',
rsrc.FnGetAtt('tenant_id'))
update_snippet = {
"Type": "OS::Neutron::Router",
"Properties": {
"admin_state_up": False,
"name": "myrouter",
"l3_agent_id": "63b3fd83-2c5f-4dad-b3ae-e0f83a40f216"
}
}
prop_diff = {
"admin_state_up": False,
"name": "myrouter",
"l3_agent_id": "63b3fd83-2c5f-4dad-b3ae-e0f83a40f216"
}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
rsrc.handle_update(update_snippet, {}, prop_diff)
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
@ -1968,19 +1956,17 @@ class NeutronFloatingIPTest(HeatTestCase):
self.assertEqual('fc68ea2c-b60b-4b4f-bd82-94ec81110766',
p.resource_id)
update_snippet = {
"Type": "OS::Neutron::Port",
"Properties": {
"network": "xyz1234",
"fixed_ips": [{
"subnet_id": "sub1234",
"ip_address": "10.0.0.11"
}],
"name": "test_port",
"device_id": "d6b4d3a5-c700-476f-b609-1493dd9dadc2",
'device_owner': 'network:floatingip'
}
props = {
"network": "xyz1234",
"fixed_ips": [{
"subnet_id": "sub1234",
"ip_address": "10.0.0.11"
}],
"name": "test_port",
"device_id": "d6b4d3a5-c700-476f-b609-1493dd9dadc2",
'device_owner': 'network:floatingip'
}
update_snippet = rsrc_defn.ResourceDefinition(p.name, p.type(), props)
p.handle_update(update_snippet, {}, {})

View File

@ -23,6 +23,7 @@ from heat.common import template_format
from heat.engine import clients
from heat.engine.resources.neutron import network_gateway
from heat.engine.resources.neutron import neutron_utils
from heat.engine import rsrc_defn
from heat.engine import scheduler
from heat.openstack.common.importutils import try_import
from heat.tests.common import HeatTestCase
@ -375,9 +376,10 @@ class NeutronNetworkGatewayTest(HeatTestCase):
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
# update name
snippet_for_update = {
'Type': u'OS::Neutron::NetworkGatewayUpdate',
'Properties': {
snippet_for_update = rsrc_defn.ResourceDefinition(
rsrc.name,
rsrc.type(),
{
'name': u'NetworkGatewayUpdate',
'devices': [{
'id': u'e52148ca-7db9-4ec3-abe6-2c7c0ff316eb',
@ -386,16 +388,16 @@ class NeutronNetworkGatewayTest(HeatTestCase):
'network': '6af055d3-26f6-48dd-a597-7611d7e58d35',
'segmentation_type': 'vlan',
'segmentation_id': 10}]
}
}
})
prop_diff = {'name': u'NetworkGatewayUpdate'}
self.assertIsNone(rsrc.handle_update(snippet_for_update, IgnoreArg(),
prop_diff))
# update connections
snippet_for_update = {
'Type': u'OS::Neutron::NetworkGateway',
'Properties': {
snippet_for_update = rsrc_defn.ResourceDefinition(
rsrc.name,
rsrc.type(),
{
'name': u'NetworkGateway',
'devices': [{
'id': u'e52148ca-7db9-4ec3-abe6-2c7c0ff316eb',
@ -404,8 +406,7 @@ class NeutronNetworkGatewayTest(HeatTestCase):
'network': u'6af055d3-26f6-48dd-a597-7611d7e58d35',
'segmentation_type': u'flat',
'segmentation_id': 0}]
}
}
})
prop_diff = {
'connections': [{
'network': u'6af055d3-26f6-48dd-a597-7611d7e58d35',
@ -420,9 +421,10 @@ class NeutronNetworkGatewayTest(HeatTestCase):
prop_diff))
# update devices
snippet_for_update = {
'Type': u'OS::Neutron::NetworkGateway',
'Properties': {
snippet_for_update = rsrc_defn.ResourceDefinition(
rsrc.name,
rsrc.type(),
{
'name': u'NetworkGateway',
'devices': [{
'id': u'e52148ca-7db9-4ec3-abe6-2c7c0ff316eb',
@ -431,8 +433,7 @@ class NeutronNetworkGatewayTest(HeatTestCase):
'network_id': u'6af055d3-26f6-48dd-a597-7611d7e58d35',
'segmentation_type': u'vlan',
'segmentation_id': 10}]
}
}
})
prop_diff = {
'devices': [{
'id': u'e52148ca-7db9-4ec3-abe6-2c7c0ff316eb',

View File

@ -12,11 +12,14 @@
# under the License.
from heatclient.exc import HTTPNotFound
import copy
import mock
from heat.common import exception
from heat.engine import parser
from heat.engine.resources.software_config import software_deployment as sd
from heat.engine import rsrc_defn
from heat.engine import template
from heat.tests.common import HeatTestCase
from heat.tests import utils
@ -371,18 +374,16 @@ class SoftwareDeploymentTest(HeatTestCase):
derived_sc = self.mock_derived_software_config()
sd = self.mock_deployment()
rsrc = self.stack['deployment_mysql']
self.deployments.get.return_value = sd
sd.update.return_value = None
self.deployment.resource_id = sd.id
config_id = '0ff2e903-78d7-4cca-829e-233af3dae705'
prop_diff = {'config': config_id}
snippet = {
'Properties': {
'server': '9f1f0e00-05d2-4ca5-8602-95021f19c9d0',
'config': config_id,
}
}
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(), props)
self.deployment.handle_update(
json_snippet=snippet, tmpl_diff=None, prop_diff=prop_diff)

View File

@ -640,14 +640,12 @@ class WaitConditionUpdateTest(HeatTestCase):
'Status': 'SUCCESS', 'UniqueId': '1'}
self._metadata_update(wait_condition_handle, test_metadata, 5)
update_snippet = {"Type": "AWS::CloudFormation::WaitCondition",
"Properties": {
"Handle": {"Ref": "WaitHandle"},
"Timeout": "5",
"Count": "5"}}
prop_diff = {"Count": 5}
parsed_snippet = self.stack.resolve_static_data(update_snippet)
updater = rsrc.handle_update(parsed_snippet, {}, prop_diff)
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
updater = rsrc.handle_update(update_defn, {}, prop_diff)
updater.run_to_completion()
self.assertEqual(5, rsrc.properties['Count'])
@ -674,14 +672,12 @@ class WaitConditionUpdateTest(HeatTestCase):
rsrc = self.stack['WaitForTheHandle']
self._metadata_update(wait_condition_handle, test_metadata, 3)
update_snippet = {"Type": "AWS::CloudFormation::WaitCondition",
"Properties": {
"Handle": {"Ref": "WaitHandle"},
"Timeout": "5",
"Count": "5"}}
prop_diff = {"Count": 5}
parsed_snippet = self.stack.resolve_static_data(update_snippet)
updater = rsrc.handle_update(parsed_snippet, {}, prop_diff)
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
updater = rsrc.handle_update(update_defn, {}, prop_diff)
updater.run_to_completion()
self.assertEqual(5, rsrc.properties['Count'])
@ -719,14 +715,12 @@ class WaitConditionUpdateTest(HeatTestCase):
self.m.ReplayAll()
update_snippet = {"Type": "AWS::CloudFormation::WaitCondition",
"Properties": {
"Handle": {"Ref": "WaitHandle"},
"Timeout": "5",
"Count": "5"}}
prop_diff = {"Count": 5}
parsed_snippet = self.stack.resolve_static_data(update_snippet)
updater = rsrc.handle_update(parsed_snippet, {}, prop_diff)
props = copy.copy(rsrc.properties.data)
props.update(prop_diff)
update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
updater = rsrc.handle_update(update_defn, {}, prop_diff)
self.assertEqual(5, rsrc.properties['Count'])
ex = self.assertRaises(wc.WaitConditionTimeout,
updater.run_to_completion)