Update tests.
This commit is contained in:
parent
5e3c2bc793
commit
139b660045
|
@ -186,20 +186,19 @@ class CloudComputeContext(context.OSContextGenerator):
|
|||
vol_service = relation_get('volume_service')
|
||||
if not vol_service:
|
||||
return {}
|
||||
return vol_service
|
||||
|
||||
# ensure volume service is supported on specific openstack release.
|
||||
if vol_service == 'cinder':
|
||||
if os_rel == 'essex':
|
||||
e = ('Attempting to configure cinder volume manager on'
|
||||
'unsupported OpenStack release (essex)')
|
||||
e = ('Attempting to configure cinder volume manager on '
|
||||
'an unsupported OpenStack release (essex)')
|
||||
log(e, level=ERROR)
|
||||
raise context.OSContextError(e)
|
||||
return 'cinder'
|
||||
elif vol_service == 'nova-volume':
|
||||
if os_release('nova-common') not in ['essex', 'folsom']:
|
||||
e = ('Attempting to configure nova-volume manager on'
|
||||
'unsupported OpenStack release (%s).' % os_rel)
|
||||
e = ('Attempting to configure nova-volume manager on '
|
||||
'an unsupported OpenStack release (%s).' % os_rel)
|
||||
log(e, level=ERROR)
|
||||
raise context.OSContextError(e)
|
||||
return 'nova-volume'
|
||||
|
|
|
@ -174,8 +174,8 @@ def determine_packages():
|
|||
packages.extend(VIRT_TYPES[virt_type])
|
||||
except KeyError:
|
||||
log('Unsupported virt-type configured: %s' % virt_type)
|
||||
|
||||
raise
|
||||
|
||||
return packages
|
||||
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
from mock import MagicMock
|
||||
from mock import MagicMock, patch
|
||||
from copy import deepcopy
|
||||
from unit_tests.test_utils import CharmTestCase
|
||||
|
||||
from charmhelpers.contrib.openstack.context import OSContextError
|
||||
|
||||
import hooks.nova_compute_context as context
|
||||
|
||||
TO_PATCH = [
|
||||
'get_os_codename_package',
|
||||
'apt_install',
|
||||
'filter_installed_packages',
|
||||
'relation_ids',
|
||||
'relation_get',
|
||||
'config',
|
||||
'unit_private_ip',
|
||||
'log',
|
||||
'os_release',
|
||||
'_save_flag_file',
|
||||
]
|
||||
|
||||
|
@ -22,11 +23,12 @@ QUANTUM_CONTEXT = {
|
|||
'keystone_host': 'keystone_host',
|
||||
'auth_port': '5000',
|
||||
'quantum_url': 'http://quantum_url',
|
||||
'service_tenant': 'admin',
|
||||
'service_tenant_name': 'admin',
|
||||
'service_username': 'admin',
|
||||
'service_password': 'openstack',
|
||||
'quantum_security_groups': 'yes',
|
||||
'quantum_plugin': 'ovs',
|
||||
'auth_host': 'keystone_host',
|
||||
}
|
||||
|
||||
# Context for an OVS plugin contains at least the following. Other bits
|
||||
|
@ -43,7 +45,7 @@ BASE_QUANTUM_OVS_PLUGIN_CONTEXT = {
|
|||
'tenant_network_type': 'gre',
|
||||
'tunnel_id_ranges': '1:1000',
|
||||
'quantum_plugin': 'ovs',
|
||||
'quantum_security_groups': True,
|
||||
'quantum_security_groups': 'yes',
|
||||
}
|
||||
|
||||
|
||||
|
@ -64,105 +66,107 @@ class NovaComputeContextTests(CharmTestCase):
|
|||
cloud_compute = context.CloudComputeContext()
|
||||
self.assertEquals({}, cloud_compute())
|
||||
|
||||
def test_cloud_compute_volume_context_cinder(self):
|
||||
@patch.object(context, '_network_manager')
|
||||
def test_cloud_compute_volume_context_cinder(self, netman):
|
||||
netman.return_value = None
|
||||
self.relation_ids.return_value = 'cloud-compute:0'
|
||||
cloud_compute = context.CloudComputeContext()
|
||||
|
||||
self.test_relation.set({'volume_service': 'cinder'})
|
||||
result = cloud_compute()
|
||||
ex_ctxt = {
|
||||
'volume_service_config': {
|
||||
'volume_api_class': 'nova.volume.cinder.API'
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex_ctxt, result)
|
||||
self.assertEquals({'volume_service': 'cinder'}, cloud_compute())
|
||||
|
||||
def test_cloud_compute_volume_context_nova_vol(self):
|
||||
@patch.object(context, '_network_manager')
|
||||
def test_cloud_compute_volume_context_nova_vol(self, netman):
|
||||
netman.return_value = None
|
||||
self.relation_ids.return_value = 'cloud-compute:0'
|
||||
cloud_compute = context.CloudComputeContext()
|
||||
self.get_os_codename_package.return_value = 'essex'
|
||||
self.os_release.return_value = 'essex'
|
||||
self.test_relation.set({'volume_service': 'nova-volume'})
|
||||
result = cloud_compute()
|
||||
ex_ctxt = {
|
||||
'volume_service_config': {
|
||||
'volume_api_class': 'nova.volume.api.API'
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex_ctxt, result)
|
||||
self.assertEquals({'volume_service': 'nova-volume'}, cloud_compute())
|
||||
|
||||
def test_cloud_compute_volume_context_nova_vol_unsupported(self):
|
||||
@patch.object(context, '_network_manager')
|
||||
def test_cloud_compute_volume_context_nova_vol_unsupported(self, netman):
|
||||
self.skipTest('TODO')
|
||||
netman.return_value = None
|
||||
self.relation_ids.return_value = 'cloud-compute:0'
|
||||
cloud_compute = context.CloudComputeContext()
|
||||
# n-vol doesn't exist in grizzly
|
||||
self.get_os_codename_package.return_value = 'grizzly'
|
||||
self.os_release.return_value = 'grizzly'
|
||||
self.test_relation.set({'volume_service': 'nova-volume'})
|
||||
result = cloud_compute()
|
||||
self.assertEquals({}, result)
|
||||
self.assertRaises(OSContextError, cloud_compute)
|
||||
|
||||
def test_cloud_compute_flatdhcp_context(self):
|
||||
@patch.object(context, '_network_manager')
|
||||
def test_cloud_compute_flatdhcp_context(self, netman):
|
||||
netman.return_value = 'flatdhcpmanager'
|
||||
self.relation_ids.return_value = 'cloud-compute:0'
|
||||
self.test_relation.set({
|
||||
'network_manager': 'FlatDHCPManager',
|
||||
'ec2_host': 'novaapihost'})
|
||||
cloud_compute = context.CloudComputeContext()
|
||||
ex_ctxt = {
|
||||
'network_manager': 'flatdhcpmanager',
|
||||
'network_manager_config': {
|
||||
'network_manager': 'nova.network.manager.FlatDHCPManager',
|
||||
'ec2_dmz_host': 'novaapihost',
|
||||
'flat_interface': 'eth1'
|
||||
},
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex_ctxt, cloud_compute())
|
||||
|
||||
def test_cloud_compute_quantum_context(self):
|
||||
@patch.object(context, '_neutron_plugin')
|
||||
@patch.object(context, '_neutron_url')
|
||||
@patch.object(context, '_network_manager')
|
||||
def test_cloud_compute_quantum_context(self, netman, url, plugin):
|
||||
netman.return_value = 'quantum'
|
||||
plugin.return_value = 'ovs'
|
||||
url.return_value = 'http://nova-c-c:9696'
|
||||
self.test_relation.set(QUANTUM_CONTEXT)
|
||||
cloud_compute = context.CloudComputeContext()
|
||||
ex_ctxt = {
|
||||
'network_manager': 'quantum',
|
||||
'network_manager_config': {
|
||||
'auth_port': '5000',
|
||||
'keystone_host': 'keystone_host',
|
||||
'network_api_class': 'nova.network.quantumv2.api.API',
|
||||
'quantum_admin_auth_url': 'http://keystone_host:5000/v2.0',
|
||||
'quantum_admin_password': 'openstack',
|
||||
'quantum_admin_tenant_name': 'admin',
|
||||
'quantum_admin_username': 'admin',
|
||||
'quantum_auth_strategy': 'keystone',
|
||||
'quantum_plugin': 'ovs',
|
||||
'quantum_security_groups': 'yes',
|
||||
'quantum_url': 'http://quantum_url'
|
||||
'quantum_security_groups': True,
|
||||
'quantum_url': 'http://nova-c-c:9696'
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex_ctxt, cloud_compute())
|
||||
self._save_flag_file.assert_called_with(
|
||||
path='/etc/nova/nm.conf', data='quantum')
|
||||
|
||||
def test_quantum_plugin_context_no_setting(self):
|
||||
qplugin = context.QuantumPluginContext()
|
||||
self.assertEquals({}, qplugin())
|
||||
|
||||
def _test_qplugin_context(self, os_release):
|
||||
self.get_os_codename_package.return_value = os_release
|
||||
self.unit_private_ip.return_value = '10.0.0.1'
|
||||
self.test_relation.set(
|
||||
{'quantum_plugin': 'ovs', 'quantum_security_groups': 'yes'})
|
||||
qplugin = context.QuantumPluginContext()
|
||||
qplugin._ensure_packages = MagicMock()
|
||||
return qplugin()
|
||||
|
||||
def test_quantum_plugin_context_ovs_folsom(self):
|
||||
ex_ctxt = deepcopy(BASE_QUANTUM_OVS_PLUGIN_CONTEXT)
|
||||
ex_ctxt['libvirt_vif_driver'] = ('nova.virt.libvirt.vif.'
|
||||
'LibvirtHybridOVSBridgeDriver')
|
||||
self.assertEquals(ex_ctxt, self._test_qplugin_context('folsom'))
|
||||
self._save_flag_file.assert_called_with(
|
||||
path='/etc/nova/quantum_plugin.conf', data='ovs')
|
||||
|
||||
def test_quantum_plugin_context_ovs_grizzly_and_beyond(self):
|
||||
ex_ctxt = deepcopy(BASE_QUANTUM_OVS_PLUGIN_CONTEXT)
|
||||
ex_ctxt['libvirt_vif_driver'] = ('nova.virt.libvirt.vif.'
|
||||
'LibvirtGenericVIFDriver')
|
||||
self.assertEquals(ex_ctxt, self._test_qplugin_context('grizzly'))
|
||||
self._save_flag_file.assert_called_with(
|
||||
path='/etc/nova/quantum_plugin.conf', data='ovs')
|
||||
# def test_quantum_plugin_context_no_setting(self):
|
||||
# qplugin = context.QuantumPluginContext()
|
||||
# self.assertEquals({}, qplugin())
|
||||
#
|
||||
# def _test_qplugin_context(self, os_release):
|
||||
# self.get_os_codename_package.return_value = os_release
|
||||
# self.test_relation.set(
|
||||
# {'quantum_plugin': 'ovs', 'quantum_security_groups': 'yes'})
|
||||
# qplugin = context.QuantumPluginContext()
|
||||
# qplugin._ensure_packages = MagicMock()
|
||||
# return qplugin()
|
||||
#
|
||||
# def test_quantum_plugin_context_ovs_folsom(self):
|
||||
# ex_ctxt = deepcopy(BASE_QUANTUM_OVS_PLUGIN_CONTEXT)
|
||||
# ex_ctxt['libvirt_vif_driver'] = ('nova.virt.libvirt.vif.'
|
||||
# 'LibvirtHybridOVSBridgeDriver')
|
||||
# self.assertEquals(ex_ctxt, self._test_qplugin_context('folsom'))
|
||||
# self._save_flag_file.assert_called_with(
|
||||
# path='/etc/nova/quantum_plugin.conf', data='ovs')
|
||||
#
|
||||
# def test_quantum_plugin_context_ovs_grizzly_and_beyond(self):
|
||||
# ex_ctxt = deepcopy(BASE_QUANTUM_OVS_PLUGIN_CONTEXT)
|
||||
# ex_ctxt['libvirt_vif_driver'] = ('nova.virt.libvirt.vif.'
|
||||
# 'LibvirtGenericVIFDriver')
|
||||
# self.assertEquals(ex_ctxt, self._test_qplugin_context('grizzly'))
|
||||
# self._save_flag_file.assert_called_with(
|
||||
# path='/etc/nova/quantum_plugin.conf', data='ovs')
|
||||
|
||||
def test_libvirt_bin_context_no_migration(self):
|
||||
self.test_config.set('enable-live-migration', False)
|
||||
|
@ -175,26 +179,26 @@ class NovaComputeContextTests(CharmTestCase):
|
|||
self.assertEquals(
|
||||
{'libvirtd_opts': '-d -l', 'listen_tls': 1}, libvirt())
|
||||
|
||||
def test_config_flag_context_none_set_in_config(self):
|
||||
flags = context.OSConfigFlagContext()
|
||||
self.assertEquals({}, flags())
|
||||
|
||||
def test_conflig_flag_context(self):
|
||||
self.test_config.set('config-flags', 'one=two,three=four,five=six')
|
||||
flags = context.OSConfigFlagContext()
|
||||
ex = {
|
||||
'user_config_flags': {
|
||||
'one': 'two', 'three': 'four', 'five': 'six'
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex, flags())
|
||||
|
||||
def test_conflig_flag_context_filters_bad_input(self):
|
||||
self.test_config.set('config-flags', 'one=two,threefour,five=six')
|
||||
flags = context.OSConfigFlagContext()
|
||||
ex = {
|
||||
'user_config_flags': {
|
||||
'one': 'two', 'five': 'six'
|
||||
}
|
||||
}
|
||||
self.assertEquals(ex, flags())
|
||||
# def test_config_flag_context_none_set_in_config(self):
|
||||
# flags = context.OSConfigFlagContext()
|
||||
# self.assertEquals({}, flags())
|
||||
#
|
||||
# def test_conflig_flag_context(self):
|
||||
# self.test_config.set('config-flags', 'one=two,three=four,five=six')
|
||||
# flags = context.OSConfigFlagContext()
|
||||
# ex = {
|
||||
# 'user_config_flags': {
|
||||
# 'one': 'two', 'three': 'four', 'five': 'six'
|
||||
# }
|
||||
# }
|
||||
# self.assertEquals(ex, flags())
|
||||
#
|
||||
# def test_conflig_flag_context_filters_bad_input(self):
|
||||
# self.test_config.set('config-flags', 'one=two,threefour,five=six')
|
||||
# flags = context.OSConfigFlagContext()
|
||||
# ex = {
|
||||
# 'user_config_flags': {
|
||||
# 'one': 'two', 'five': 'six'
|
||||
# }
|
||||
# }
|
||||
# self.assertEquals(ex, flags())
|
||||
|
|
|
@ -41,9 +41,9 @@ TO_PATCH = [
|
|||
'initialize_ssh_keys',
|
||||
'migration_enabled',
|
||||
'do_openstack_upgrade',
|
||||
'quantum_attribute',
|
||||
'quantum_enabled',
|
||||
'quantum_plugin',
|
||||
'network_manager',
|
||||
'neutron_plugin_attribute',
|
||||
'neutron_plugin',
|
||||
'public_ssh_key',
|
||||
'register_configs',
|
||||
# misc_utils
|
||||
|
@ -116,7 +116,8 @@ class NovaComputeRelationsTests(CharmTestCase):
|
|||
configs.complete_contexts = MagicMock()
|
||||
configs.complete_contexts.return_value = ['amqp']
|
||||
configs.write = MagicMock()
|
||||
self.quantum_enabled.return_value = quantum
|
||||
if quantum:
|
||||
self.network_manager.return_value = 'quantum'
|
||||
hooks.amqp_changed()
|
||||
|
||||
@patch.object(hooks, 'CONFIGS')
|
||||
|
@ -152,7 +153,8 @@ class NovaComputeRelationsTests(CharmTestCase):
|
|||
configs.complete_contexts = MagicMock()
|
||||
configs.complete_contexts.return_value = ['shared-db']
|
||||
configs.write = MagicMock()
|
||||
self.quantum_enabled.return_value = quantum
|
||||
if quantum:
|
||||
self.network_manager.return_value = 'quantum'
|
||||
hooks.db_changed()
|
||||
|
||||
@patch.object(hooks, 'CONFIGS')
|
||||
|
@ -163,7 +165,7 @@ class NovaComputeRelationsTests(CharmTestCase):
|
|||
|
||||
@patch.object(hooks, 'CONFIGS')
|
||||
def test_db_changed_with_data_and_quantum(self, configs):
|
||||
self.quantum_attribute.return_value = '/etc/quantum/plugin.conf'
|
||||
self.neutron_plugin_attribute.return_value = '/etc/quantum/plugin.conf'
|
||||
self._shared_db_test(configs, quantum=True)
|
||||
ex = [call('/etc/nova/nova.conf'), call('/etc/quantum/plugin.conf')]
|
||||
self.assertEquals(ex, configs.write.call_args_list)
|
||||
|
|
|
@ -7,13 +7,19 @@ import hooks.nova_compute_utils as utils
|
|||
|
||||
TO_PATCH = [
|
||||
'config',
|
||||
'get_os_codename_package',
|
||||
'os_release',
|
||||
'log',
|
||||
'neutron_plugin_attribute',
|
||||
'related_units',
|
||||
'relation_ids',
|
||||
'relation_get',
|
||||
]
|
||||
|
||||
OVS_PKGS = [
|
||||
'quantum-plugin-openvswitch-agent',
|
||||
'openvswitch-datapath-dkms',
|
||||
]
|
||||
|
||||
|
||||
class NovaComputeUtilsTests(CharmTestCase):
|
||||
def setUp(self):
|
||||
|
@ -22,7 +28,7 @@ class NovaComputeUtilsTests(CharmTestCase):
|
|||
|
||||
@patch.object(utils, 'network_manager')
|
||||
def test_determine_packages_nova_network(self, net_man):
|
||||
net_man.return_value = 'FlatDHCPManager'
|
||||
net_man.return_value = 'flatdhcpmanager'
|
||||
self.relation_ids.return_value = []
|
||||
result = utils.determine_packages()
|
||||
ex = utils.BASE_PACKAGES + [
|
||||
|
@ -32,33 +38,27 @@ class NovaComputeUtilsTests(CharmTestCase):
|
|||
]
|
||||
self.assertEquals(ex, result)
|
||||
|
||||
@patch.object(utils, 'quantum_plugin')
|
||||
@patch.object(utils, 'neutron_plugin')
|
||||
@patch.object(utils, 'network_manager')
|
||||
def test_determine_packages_quantum(self, net_man, q_plugin):
|
||||
net_man.return_value = 'Quantum'
|
||||
q_plugin.return_value = 'ovs'
|
||||
def test_determine_packages_quantum(self, net_man, n_plugin):
|
||||
self.neutron_plugin_attribute.return_value = OVS_PKGS
|
||||
net_man.return_value = 'quantum'
|
||||
n_plugin.return_value = 'ovs'
|
||||
self.relation_ids.return_value = []
|
||||
result = utils.determine_packages()
|
||||
ex = utils.BASE_PACKAGES + [
|
||||
'quantum-plugin-openvswitch-agent',
|
||||
'openvswitch-datapath-dkms',
|
||||
'nova-compute-kvm'
|
||||
]
|
||||
ex = utils.BASE_PACKAGES + OVS_PKGS + ['nova-compute-kvm']
|
||||
self.assertEquals(ex, result)
|
||||
|
||||
@patch.object(utils, 'quantum_plugin')
|
||||
@patch.object(utils, 'neutron_plugin')
|
||||
@patch.object(utils, 'network_manager')
|
||||
def test_determine_packages_quantum_ceph(self, net_man, q_plugin):
|
||||
net_man.return_value = 'Quantum'
|
||||
q_plugin.return_value = 'ovs'
|
||||
def test_determine_packages_quantum_ceph(self, net_man, n_plugin):
|
||||
self.neutron_plugin_attribute.return_value = OVS_PKGS
|
||||
net_man.return_value = 'quantum'
|
||||
n_plugin.return_value = 'ovs'
|
||||
self.relation_ids.return_value = ['ceph:0']
|
||||
result = utils.determine_packages()
|
||||
ex = utils.BASE_PACKAGES + [
|
||||
'quantum-plugin-openvswitch-agent',
|
||||
'openvswitch-datapath-dkms',
|
||||
'ceph-common',
|
||||
'nova-compute-kvm'
|
||||
]
|
||||
ex = (utils.BASE_PACKAGES + OVS_PKGS +
|
||||
['ceph-common', 'nova-compute-kvm'])
|
||||
self.assertEquals(ex, result)
|
||||
|
||||
@patch.object(utils, 'network_manager')
|
||||
|
@ -112,7 +112,7 @@ class NovaComputeUtilsTests(CharmTestCase):
|
|||
}
|
||||
self.assertEquals(ex, result)
|
||||
|
||||
@patch.object(utils, 'quantum_plugin')
|
||||
@patch.object(utils, 'neutron_plugin')
|
||||
@patch.object(utils, 'network_manager')
|
||||
def test_resource_map_quantum_ovs(self, net_man, _plugin):
|
||||
self.skipTest('skipped until contexts are properly mocked.')
|
||||
|
@ -208,7 +208,7 @@ class NovaComputeUtilsTests(CharmTestCase):
|
|||
self.relation_get.return_value = 'Zm9vX2NlcnQK'
|
||||
with patch_open() as (_open, _file):
|
||||
utils.import_keystone_ca_cert()
|
||||
_open.assert_called_with(utils.CA_CERT_PATH)
|
||||
_open.assert_called_with(utils.CA_CERT_PATH, 'wb')
|
||||
_file.write.assert_called_with('foo_cert\n')
|
||||
check_call.assert_called_with(['update-ca-certificates'])
|
||||
|
||||
|
@ -217,7 +217,7 @@ class NovaComputeUtilsTests(CharmTestCase):
|
|||
@patch.object(utils, 'resource_map')
|
||||
def test_register_configs(self, resource_map, quantum, renderer):
|
||||
quantum.return_value = False
|
||||
self.get_os_codename_package.return_value = 'havana'
|
||||
self.os_release.return_value = 'havana'
|
||||
fake_renderer = MagicMock()
|
||||
fake_renderer.register = MagicMock()
|
||||
renderer.return_value = fake_renderer
|
||||
|
|
Loading…
Reference in New Issue