ea2bde776f
This change relocates the nova_flavor resource from the contrib area into the main resource tree. Change-Id: Ib1035750f7e364a81b1190db4d414f50707c875b
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import mock
|
|
|
|
from heat.engine.resources.openstack.nova import nova_flavor
|
|
from heat.engine import stack
|
|
from heat.engine import template
|
|
from heat.tests import common
|
|
from heat.tests.nova import fakes
|
|
from heat.tests import utils
|
|
|
|
flavor_template = {
|
|
'heat_template_version': '2013-05-23',
|
|
'resources': {
|
|
'my_flavor': {
|
|
'type': 'OS::Nova::Flavor',
|
|
'properties': {
|
|
'ram': 1024,
|
|
'vcpus': 2,
|
|
'disk': 20,
|
|
'swap': 2,
|
|
'rxtx_factor': 1.0,
|
|
'ephemeral': 0,
|
|
'extra_specs': {"foo": "bar"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class NovaFlavorTest(common.HeatTestCase):
|
|
def setUp(self):
|
|
super(NovaFlavorTest, self).setUp()
|
|
|
|
self.ctx = utils.dummy_context()
|
|
|
|
self.stack = stack.Stack(
|
|
self.ctx, 'nova_flavor_test_stack',
|
|
template.Template(flavor_template)
|
|
)
|
|
|
|
self.my_flavor = self.stack['my_flavor']
|
|
nova = mock.MagicMock()
|
|
self.novaclient = mock.MagicMock()
|
|
self.my_flavor.nova = nova
|
|
nova.return_value = self.novaclient
|
|
self.flavors = self.novaclient.flavors
|
|
|
|
def test_resource_mapping(self):
|
|
mapping = nova_flavor.resource_mapping()
|
|
self.assertEqual(1, len(mapping))
|
|
self.assertEqual(nova_flavor.NovaFlavor, mapping['OS::Nova::Flavor'])
|
|
self.assertIsInstance(self.my_flavor, nova_flavor.NovaFlavor)
|
|
|
|
def test_flavor_handle_create(self):
|
|
value = mock.MagicMock()
|
|
flavor_id = '927202df-1afb-497f-8368-9c2d2f26e5db'
|
|
value.id = flavor_id
|
|
self.flavors.create.return_value = value
|
|
self.my_flavor.handle_create()
|
|
value.set_keys.assert_called_once_with({"foo": "bar"})
|
|
self.assertEqual(flavor_id, self.my_flavor.resource_id)
|
|
|
|
def test_flavor_handle_update_keys(self):
|
|
value = mock.MagicMock()
|
|
self.flavors.get.return_value = value
|
|
value.get_keys.return_value = {}
|
|
|
|
new_keys = {"new_foo": "new_bar"}
|
|
prop_diff = {'extra_specs': new_keys}
|
|
self.my_flavor.handle_update(json_snippet=None,
|
|
tmpl_diff=None, prop_diff=prop_diff)
|
|
value.unset_keys.assert_called_once_with({})
|
|
value.set_keys.assert_called_once_with(new_keys)
|
|
|
|
def test_flavor_handle_delete(self):
|
|
self.resource_id = None
|
|
self.assertIsNone(self.my_flavor.handle_delete())
|
|
flavor_id = '927202df-1afb-497f-8368-9c2d2f26e5db'
|
|
self.my_flavor.resource_id = flavor_id
|
|
self.flavors.delete.return_value = None
|
|
self.assertIsNone(self.my_flavor.handle_delete())
|
|
self.flavors.delete.side_effect = fakes.fake_exception()
|
|
self.assertIsNone(self.my_flavor.handle_delete())
|