25
25
from heat.common import urlfetch
26
26
from heat.engine import attributes
27
27
from heat.engine import environment
28
from heat.engine import parser
29
28
from heat.engine import properties
30
29
from heat.engine import resource
31
30
from heat.engine import resources
32
31
from heat.engine.resources import template_resource
33
32
from heat.engine import rsrc_defn
33
from heat.engine import stack as parser
34
34
from heat.engine import support
35
from heat.engine import template
35
36
from heat.tests import common
36
37
from heat.tests import generic_resource as generic_rsrc
37
38
from heat.tests import utils
47
48
class ProviderTemplateTest(common.HeatTestCase):
49
50
super(ProviderTemplateTest, self).setUp()
50
resource._register_class('OS::ResourceType',
51
generic_rsrc.GenericResource)
52
51
resource._register_class('myCloud::ResourceType',
58
57
env_str = {'resource_registry': {}}
59
58
env = environment.Environment(env_str)
60
cls = env.get_class('OS::ResourceType', 'fred')
59
cls = env.get_class('GenericResourceType', 'fred')
61
60
self.assertEqual(generic_rsrc.GenericResource, cls)
63
62
def test_get_mine_global_map(self):
88
87
env_str = {'resource_registry': {'resources': {'jerry': {
89
88
"OS::ResourceType": "myCloud::ResourceType"}}}}
90
89
env = environment.Environment(env_str)
91
cls = env.get_class('OS::ResourceType', 'fred')
90
cls = env.get_class('GenericResourceType', 'fred')
92
91
self.assertEqual(generic_rsrc.GenericResource, cls)
94
93
def test_to_parameters(self):
128
127
env.load({'resource_registry':
129
128
{'DummyResource': 'test_resource.template'}})
130
129
stack = parser.Stack(utils.dummy_context(), 'test_stack',
131
parser.Template(empty_template, files=files,
130
template.Template(empty_template, files=files,
133
132
stack_id=str(uuid.uuid4()))
209
208
env.load({'resource_registry':
210
209
{'DummyResource': 'test_resource.template'}})
211
210
stack = parser.Stack(utils.dummy_context(), 'test_stack',
212
parser.Template(empty_template, files=files,
211
template.Template(empty_template, files=files,
214
213
stack_id=str(uuid.uuid4()))
238
237
env.load({'resource_registry':
239
238
{'DummyResource': 'test_resource.template'}})
240
239
stack = parser.Stack(utils.dummy_context(), 'test_stack',
241
parser.Template(empty_template, files=files,
240
template.Template(empty_template, files=files,
243
242
stack_id=str(uuid.uuid4()))
271
270
env.load({'resource_registry':
272
271
{'DummyResource': 'test_resource.template'}})
273
272
stack = parser.Stack(utils.dummy_context(), 'test_stack',
274
parser.Template(empty_template, files=files,
273
template.Template(empty_template, files=files,
276
275
stack_id=str(uuid.uuid4()))
303
302
env.load({'resource_registry':
304
303
{'DummyResource': 'test_resource.template'}})
305
304
stack = parser.Stack(utils.dummy_context(), 'test_stack',
306
parser.Template(empty_template, files=files,
305
template.Template(empty_template, files=files,
308
307
stack_id=str(uuid.uuid4()))
333
332
env.load({'resource_registry':
334
333
{'DummyResource': 'test_resource.template'}})
335
334
stack = parser.Stack(utils.dummy_context(), 'test_stack',
336
parser.Template(empty_template, files=files,
335
template.Template(empty_template, files=files,
338
337
stack_id=str(uuid.uuid4()))
365
364
env.load({'resource_registry':
366
365
{'DummyResource': 'test_resource.template'}})
367
366
stack = parser.Stack(utils.dummy_context(), 'test_stack',
369
368
{'HeatTemplateFormatVersion': '2012-12-12'},
370
369
files=files, env=env),
371
370
stack_id=str(uuid.uuid4()))
401
400
env.load({'resource_registry':
402
401
{'DummyResource': 'test_resource.template'}})
403
402
stack = parser.Stack(utils.dummy_context(), 'test_stack',
405
404
{'HeatTemplateFormatVersion': '2012-12-12'},
406
405
files=files, env=env),
407
406
stack_id=str(uuid.uuid4()))
433
432
env.load({'resource_registry':
434
433
{'DummyResource': 'test_resource.template'}})
435
434
stack = parser.Stack(utils.dummy_context(), 'test_stack',
437
436
{'HeatTemplateFormatVersion': '2012-12-12'},
438
437
files=files, env=env),
439
438
stack_id=str(uuid.uuid4()))
467
466
{'DummyResource': 'test_resource.template',
468
467
'resources': {'foo': 'foo.template'}}})
469
468
stack = parser.Stack(utils.dummy_context(), 'test_stack',
471
470
{'HeatTemplateFormatVersion': '2012-12-12'},
472
471
files=files, env=env),
473
472
stack_id=str(uuid.uuid4()))
502
501
{'DummyResource': 'test_resource.template',
503
502
'resources': {'foo': {'DummyResource': 'foo.template'}}}})
504
503
stack = parser.Stack(utils.dummy_context(), 'test_stack',
506
505
{'HeatTemplateFormatVersion': '2012-12-12'},
507
506
files=files, env=env),
508
507
stack_id=str(uuid.uuid4()))
521
520
env_str = {'resource_registry': {'resources': {'fred': {
522
521
"OS::ResourceType": "some_magic.yaml"}}}}
523
522
env = environment.Environment(env_str)
524
ex = self.assertRaises(exception.NotFound, env.get_class,
523
ex = self.assertRaises(exception.TemplateNotFound, env.get_class,
525
524
'OS::ResourceType', 'fred')
526
525
self.assertIn('Could not fetch remote template "some_magic.yaml"',
527
526
six.text_type(ex))
546
545
env.load({'resource_registry':
547
546
{'DummyResource': 'test_resource.template'}})
548
547
stack = parser.Stack(utils.dummy_context(), 'test_stack',
550
549
{'HeatTemplateFormatVersion': '2012-12-12'},
551
550
files=files, env=env),
552
551
stack_id=str(uuid.uuid4()))
608
607
self.m.ReplayAll()
610
609
stack = parser.Stack(utils.dummy_context(), 'test_stack',
611
parser.Template(empty_template),
610
template.Template(empty_template),
612
611
stack_id=str(uuid.uuid4()))
659
658
g_env.load({'resource_registry':
660
659
{'Test::Frodo': test_templ_name}})
661
660
stack = parser.Stack(utils.dummy_context(), 'test_stack',
662
parser.Template(empty_template),
661
template.Template(empty_template),
663
662
stack_id=str(uuid.uuid4()))
665
664
minimal_temp = json.dumps({'HeatTemplateFormatVersion': '2012-12-12',
687
686
env.load({'resource_registry':
688
687
{'Test::Flippy': test_templ_name}})
689
688
stack = parser.Stack(utils.dummy_context(), 'test_stack',
690
parser.Template(empty_template, env=env),
689
template.Template(empty_template, env=env),
691
690
stack_id=str(uuid.uuid4()))
693
692
definition = rsrc_defn.ResourceDefinition('test_t_res',
709
708
g_env.load({'resource_registry':
710
709
{'Test::Frodo': test_templ_name}})
711
710
stack = parser.Stack(utils.dummy_context(), 'test_stack',
712
parser.Template(empty_template),
711
template.Template(empty_template),
713
712
stack_id=str(uuid.uuid4()))
715
714
self.m.StubOutWithMock(urlfetch, "get")
739
738
env.load({'resource_registry':
740
739
{'Test::Flippy': test_templ_name}})
741
740
stack = parser.Stack(utils.dummy_context(), 'test_stack',
742
parser.Template(empty_template, env=env),
741
template.Template(empty_template, env=env),
743
742
stack_id=str(uuid.uuid4()))
745
744
self.m.StubOutWithMock(urlfetch, "get")
768
767
env.load({'resource_registry':
769
768
{'Test::Flippy': test_templ_name}})
770
769
stack = parser.Stack(utils.dummy_context(), 'test_stack',
771
parser.Template(empty_template, env=env),
770
template.Template(empty_template, env=env),
772
771
stack_id=str(uuid.uuid4()))
774
773
self.m.ReplayAll()
791
790
env.load({'resource_registry':
792
791
{'Test::Tmpl': test_templ_name}})
793
792
stack = parser.Stack(utils.dummy_context(), 'test_stack',
794
parser.Template(empty_template, env=env),
793
template.Template(empty_template, env=env),
795
794
stack_id=str(uuid.uuid4()))
797
796
self.m.StubOutWithMock(urlfetch, "get")
812
811
self.m.VerifyAll()
814
class TemplateDataTest(common.HeatTestCase):
817
super(TemplateDataTest, self).setUp()
819
self.ctx = utils.dummy_context()
821
class DummyResource(object):
822
support_status = support.SupportStatus()
823
properties_schema = {"Foo":
824
properties.Schema(properties.Schema.STRING,
826
attributes_schema = {}
828
env = environment.Environment()
829
resource._register_class('DummyResource', DummyResource)
830
env.load({'resource_registry':
831
{'DummyResource': 'test_resource.template'}})
833
self.stack = parser.Stack(self.ctx, 'test_stack',
834
template.Template(empty_template,
837
stack_id=str(uuid.uuid4()))
839
self.defn = rsrc_defn.ResourceDefinition('test_t_res',
842
self.res = template_resource.TemplateResource('test_t_res',
843
self.defn, self.stack)
845
def test_template_data_in_update_without_template_file(self):
846
self.res.action = self.res.UPDATE
847
self.res.nested = mock.MagicMock()
848
self.res.get_template_file = mock.Mock(
849
side_effect=exception.TemplateNotFound(
850
message='test_resource.template'))
851
self.assertRaises(exception.TemplateNotFound, self.res.template_data)
853
def test_template_data_in_create_without_template_file(self):
854
self.res.action = self.res.CREATE
855
self.res.nested = mock.MagicMock()
856
self.res.get_template_file = mock.Mock(
857
side_effect=exception.TemplateNotFound(
858
message='test_resource.template'))
859
self.assertEqual(self.res.template_data(), '{}')
815
862
class TemplateResourceCrudTest(common.HeatTestCase):
817
864
'HeatTemplateFormatVersion': '2012-12-12',
837
884
resource._register_class('DummyResource', DummyResource)
838
885
env.load({'resource_registry':
839
886
{'DummyResource': 'test_resource.template'}})
840
stack = parser.Stack(self.ctx, 'test_stack',
841
parser.Template(empty_template, files=files,
843
stack_id=str(uuid.uuid4()))
887
self.stack = parser.Stack(self.ctx, 'test_stack',
888
template.Template(empty_template,
891
stack_id=str(uuid.uuid4()))
845
893
self.defn = rsrc_defn.ResourceDefinition('test_t_res',
848
896
self.res = template_resource.TemplateResource('test_t_res',
897
self.defn, self.stack)
850
898
self.assertIsNone(self.res.validate())
852
900
def test_handle_create(self):