1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Licensed under the Apache License, Version 2.0 (the "License"); you may
4
# not use this file except in compliance with the License. You may obtain
5
# a copy of the License at
7
# http://www.apache.org/licenses/LICENSE-2.0
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
# License for the specific language governing permissions and limitations
15
from heat.engine.components import Component
16
from heat.engine.components import Components
17
from heat.tests.common import HeatTestCase
20
class ComponentTest(HeatTestCase):
24
self.assertEqual(comp.type, 'OS::Heat::SoftwareConfig')
25
self.assertEqual(comp.properties, {})
26
self.assertEqual(comp.scripts, {})
27
self.assertEqual(comp.relations, [])
28
self.assertEqual(comp.hosted_on(), None)
29
self.assertEqual(comp.depends(), [])
31
def test_hosted_on(self):
34
{'hosted_on': 'wordpress'}
37
comp = Component(schema)
38
self.assertEqual(comp.hosted_on(), 'wordpress')
40
def test_depends(self):
43
{'depends_on': 'config_mysql'}
46
comp = Component(schema)
47
self.assertEqual(comp.depends(), ['config_mysql'])
49
comp['relationships'].append({'depends_on': 'config_wordpress'})
50
self.assertEqual(comp.depends(),
51
['config_mysql', 'config_wordpress'])
54
class ComponentsTest(HeatTestCase):
58
comps = Components(schema)
59
self.assertEqual(0, len(comps))
61
schema['config_mysql'] = {}
62
comps = Components(schema)
63
self.assertEquals(1, len(comps))
64
comp = comps['config_mysql']
65
self.assertIsInstance(comp, Component)
67
def test_depends(self):
73
{'depends_on': 'install_mysql'}
78
{'depends_on': 'config_mysql'}
82
comps = Components(schema)
83
self.assertEqual(3, len(comps))
84
deps = comps.depends()
85
self.assertEqual(2, len(deps))
86
self.assertIn('install_mysql', deps)
87
self.assertIn('config_mysql', deps)
89
def test_multi_depends(self):
95
{'depends_on': 'install_mysql'}
100
{'depends_on': 'config_mysql'}
103
'install_wordpress': {},
104
'config_wordpress': {
106
{'depends_on': 'install_wordpress'}
111
{'depends_on': 'config_wordpress'},
112
{'depends_on': 'start_mysql'}
116
comps = Components(schema)
117
deps = comps.depends()
118
self.assertEqual(5, len(deps))
119
self.assertNotIn('start_wordpress', deps)
120
self.assertIn('install_wordpress', deps)
121
self.assertIn('config_wordpress', deps)
122
self.assertIn('start_mysql', deps)
123
self.assertIn('config_mysql', deps)
124
self.assertIn('install_mysql', deps)
126
def test_filter(self):
130
{'hosted_on': 'mysql'}
135
{'hosted_on': 'mysql'},
136
{'depends_on': 'install_mysql'}
141
{'hosted_on': 'mysql'},
142
{'depends_on': 'config_mysql'}
145
'install_wordpress': {
147
{'hosted_on': 'wordpress'}
150
'config_wordpress': {
152
{'hosted_on': 'wordpress'},
153
{'depends_on': 'install_wordpress'}
158
{'hosted_on': 'wordpress'},
159
{'depends_on': 'config_wordpress'},
160
{'depends_on': 'start_mysql'}
165
comps = Components(schema)
166
names = comps.filter('mysql')
167
self.assertEqual(3, len(names))
168
self.assertIn('config_mysql', names)
169
self.assertIn('install_mysql', names)
170
self.assertIn('start_mysql', names)
172
names = comps.filter('wordpress')
173
self.assertEqual(3, len(names))
174
self.assertIn('config_wordpress', names)
175
self.assertIn('install_wordpress', names)
176
self.assertIn('start_wordpress', names)
178
def test_validate(self):
179
schema = {'install_mysql': {}}
180
comps = Components(schema)
181
self.assertTrue(comps.validate())
186
{'depends_on': 'config_mysql'}
190
comps = Components(schema)
191
err = self.assertRaises(ValueError, comps.validate)
192
self.assertIn('component config_mysql depends on itself.', str(err))
197
{'depends_on': 'install_mysql'}
201
comps = Components(schema)
202
err = self.assertRaises(ValueError, comps.validate)
203
self.assertIn('component install_mysql is not defined.', str(err))
210
{'depends_on': 'install_mysql'},
211
{'depends_on': 'install_mysql'}
215
comps = Components(schema)
216
err = self.assertRaises(ValueError, comps.validate)
217
self.assertIn('duplicated install_mysql in config_mysql depends on.',