18
18
from oslo.config import cfg
20
from heat.common import exception as heat_exception
20
21
from heat.common import identifier
21
22
from heat.common import policy
22
23
from heat.openstack.common import rpc
23
import heat.openstack.common.rpc.common as rpc_common
24
24
from heat.common.wsgi import Request
25
25
from heat.rpc import api as rpc_api
26
26
from heat.api.aws import exception
27
27
import heat.api.cfn.v1.stacks as stacks
28
28
from heat.tests.common import HeatTestCase
29
from heat.tests.utils import dummy_context
29
from heat.tests import utils
31
31
policy_path = os.path.dirname(os.path.realpath(__file__)) + "/policy/"
42
42
qs = "&".join(["=".join([k, str(params[k])]) for k in params])
43
43
environ = {'REQUEST_METHOD': 'GET', 'QUERY_STRING': qs}
44
44
req = Request(environ)
45
req.context = dummy_context()
45
req.context = utils.dummy_context()
372
372
'method': 'show_stack',
373
373
'args': {'stack_identity': identity},
374
374
'version': self.api_version},
375
None).AndRaise(rpc_common.RemoteError("InvalidTenant"))
375
None).AndRaise(heat_exception.InvalidTenant())
377
377
self.m.ReplayAll()
400
400
'method': 'show_stack',
401
401
'args': {'stack_identity': identity},
402
402
'version': self.api_version}, None
403
).AndRaise(rpc_common.RemoteError("AttributeError"))
403
).AndRaise(AttributeError())
405
405
self.m.ReplayAll()
422
422
'method': 'identify_stack',
423
423
'args': {'stack_name': stack_name},
424
424
'version': self.api_version}, None
425
).AndRaise(rpc_common.RemoteError("StackNotFound"))
425
).AndRaise(heat_exception.StackNotFound())
427
427
self.m.ReplayAll()
744
744
'args': engine_args},
745
745
'version': self.api_version}, None
746
).AndRaise(rpc_common.RemoteError("AttributeError"))
747
rpc.call(dummy_req.context, self.topic,
749
'method': 'create_stack',
750
'args': {'stack_name': stack_name,
751
'template': template,
752
'params': engine_parms,
754
'args': engine_args},
755
'version': self.api_version}, None
756
).AndRaise(rpc_common.RemoteError("UnknownUserParameter"))
757
rpc.call(dummy_req.context, self.topic,
759
'method': 'create_stack',
760
'args': {'stack_name': stack_name,
761
'template': template,
762
'params': engine_parms,
764
'args': engine_args},
765
'version': self.api_version}, None
766
).AndRaise(rpc_common.RemoteError("UserParameterMissing"))
746
).AndRaise(AttributeError())
747
rpc.call(dummy_req.context, self.topic,
749
'method': 'create_stack',
750
'args': {'stack_name': stack_name,
751
'template': template,
752
'params': engine_parms,
754
'args': engine_args},
755
'version': self.api_version}, None
756
).AndRaise(heat_exception.UnknownUserParameter())
757
rpc.call(dummy_req.context, self.topic,
759
'method': 'create_stack',
760
'args': {'stack_name': stack_name,
761
'template': template,
762
'params': engine_parms,
764
'args': engine_args},
765
'version': self.api_version}, None
766
).AndRaise(heat_exception.UserParameterMissing())
768
768
self.m.ReplayAll()
821
821
exception.AlreadyExistsError)
822
822
self.m.VerifyAll()
824
def test_invalid_state_err(self):
826
Test that an ActionInProgress exception results in a
827
HeatInvalidStateError.
830
# Format a dummy request
831
stack_name = "wordpress"
832
template = {u'Foo': u'bar'}
833
json_template = json.dumps(template)
834
params = {'Action': 'CreateStack', 'StackName': stack_name,
835
'TemplateBody': '%s' % json_template,
836
'TimeoutInMinutes': 30,
837
'Parameters.member.1.ParameterKey': 'InstanceType',
838
'Parameters.member.1.ParameterValue': 'm1.xlarge'}
839
engine_parms = {u'InstanceType': u'm1.xlarge'}
840
engine_args = {'timeout_mins': u'30'}
841
dummy_req = self._dummy_GET_request(params)
843
# Insert an engine RPC error and ensure we map correctly to the
844
# heat exception type
845
self.m.StubOutWithMock(rpc, 'call')
847
rpc.call(dummy_req.context, self.topic,
849
'method': 'create_stack',
850
'args': {'stack_name': stack_name,
851
'template': template,
852
'params': engine_parms,
854
'args': engine_args},
855
'version': self.api_version}, None
856
).AndRaise(rpc_common.RemoteError("ActionInProgress"))
860
result = self.controller.create(dummy_req)
862
self.assertEqual(type(result),
863
exception.HeatInvalidStateError)
866
824
def test_create_err_engine(self):
867
825
# Format a dummy request
868
826
stack_name = "wordpress"
968
925
'method': 'identify_stack',
969
926
'args': {'stack_name': stack_name},
970
927
'version': self.api_version}, None
971
).AndRaise(rpc_common.RemoteError("StackNotFound"))
928
).AndRaise(heat_exception.StackNotFound())
973
930
self.m.ReplayAll()
1035
992
'method': 'get_template',
1036
993
'args': {'stack_identity': identity},
1037
994
'version': self.api_version}, None
1038
).AndRaise(rpc_common.RemoteError("AttributeError"))
995
).AndRaise(AttributeError())
1040
997
self.m.ReplayAll()
1058
1015
'method': 'identify_stack',
1059
1016
'args': {'stack_name': stack_name},
1060
1017
'version': self.api_version}, None
1061
).AndRaise(rpc_common.RemoteError("StackNotFound"))
1018
).AndRaise(heat_exception.StackNotFound())
1063
1020
self.m.ReplayAll()
1203
1160
'method': 'delete_stack',
1204
1161
'args': {'stack_identity': identity},
1205
1162
'version': self.api_version}, None
1206
).AndRaise(rpc_common.RemoteError("AttributeError"))
1163
).AndRaise(AttributeError())
1208
1165
self.m.ReplayAll()
1226
1183
'method': 'identify_stack',
1227
1184
'args': {'stack_name': stack_name},
1228
1185
'version': self.api_version}, None
1229
).AndRaise(rpc_common.RemoteError("StackNotFound"))
1186
).AndRaise(heat_exception.StackNotFound())
1231
1188
self.m.ReplayAll()
1249
1206
u'stack_name': u'wordpress',
1250
1207
u'stack_id': u'6',
1252
u'logical_resource_id': u'WikiDatabase',
1209
u'resource_name': u'WikiDatabase',
1253
1210
u'resource_status_reason': u'state changed',
1254
1211
u'event_identity':
1255
1212
{u'tenant': u't',
1337
1294
'method': 'identify_stack',
1338
1295
'args': {'stack_name': stack_name},
1339
1296
'version': self.api_version}, None
1340
).AndRaise(rpc_common.RemoteError("StackNotFound"))
1297
).AndRaise(heat_exception.StackNotFound())
1342
1299
self.m.ReplayAll()
1364
1321
u'path': u'resources/WikiDatabase'
1366
1323
u'stack_name': u'wordpress',
1367
u'logical_resource_id': u'WikiDatabase',
1324
u'resource_name': u'WikiDatabase',
1368
1325
u'resource_status_reason': None,
1369
1326
u'updated_time': u'2012-07-23T13:06:00Z',
1370
1327
u'stack_identity': {u'tenant': u't',
1432
1389
'method': 'identify_stack',
1433
1390
'args': {'stack_name': stack_name},
1434
1391
'version': self.api_version},
1435
None).AndRaise(rpc_common.RemoteError("StackNotFound"))
1392
None).AndRaise(heat_exception.StackNotFound())
1437
1394
self.m.ReplayAll()
1466
1423
'method': 'describe_stack_resource',
1468
1425
'version': self.api_version},
1469
None).AndRaise(rpc_common.RemoteError("ResourceNotFound"))
1426
None).AndRaise(heat_exception.ResourceNotFound())
1471
1428
self.m.ReplayAll()
1493
1450
u'path': u'resources/WikiDatabase'
1495
1452
u'stack_name': u'wordpress',
1496
u'logical_resource_id': u'WikiDatabase',
1453
u'resource_name': u'WikiDatabase',
1497
1454
u'resource_status_reason': None,
1498
1455
u'updated_time': u'2012-07-23T13:06:00Z',
1499
1456
u'stack_identity': {u'tenant': u't',
1559
1516
'method': 'identify_stack',
1560
1517
'args': {'stack_name': stack_name},
1561
1518
'version': self.api_version}, None
1562
).AndRaise(rpc_common.RemoteError("StackNotFound"))
1519
).AndRaise(heat_exception.StackNotFound())
1564
1521
self.m.ReplayAll()
1586
1543
u'path': u'resources/WikiDatabase'
1588
1545
u'stack_name': u'wordpress',
1589
u'logical_resource_id': u'WikiDatabase',
1546
u'resource_name': u'WikiDatabase',
1590
1547
u'resource_status_reason': None,
1591
1548
u'updated_time': u'2012-07-23T13:06:00Z',
1592
1549
u'stack_identity': {u'tenant': u't',
1656
1613
'aaaaaaaa-9f88-404d-cccc-ffffffffffff'},
1657
1614
'version': self.api_version},
1658
1615
None).AndRaise(
1659
rpc_common.RemoteError("PhysicalResourceNotFound"))
1616
heat_exception.PhysicalResourceNotFound())
1661
1618
self.m.ReplayAll()
1695
1652
u'stack_id': u'6',
1696
1653
u'path': u'/resources/WikiDatabase'},
1697
1654
u'stack_name': u'wordpress',
1698
u'logical_resource_id': u'WikiDatabase',
1655
u'resource_name': u'WikiDatabase',
1699
1656
u'resource_status_reason': None,
1700
1657
u'updated_time': u'2012-07-23T13:06:00Z',
1701
1658
u'stack_identity': {u'tenant': u't',
1751
1708
'method': 'identify_stack',
1752
1709
'args': {'stack_name': stack_name},
1753
1710
'version': self.api_version}, None
1754
).AndRaise(rpc_common.RemoteError("StackNotFound"))
1711
).AndRaise(heat_exception.StackNotFound())
1756
1713
self.m.ReplayAll()