charm-openvswitch-odl/unit_tests/test_ovs_odl.py

150 lines
4.6 KiB
Python

import testtools
from mock import call
from mock import patch
from mock import MagicMock
import reactive.main as ovs_odl_main
TO_PATCH = [
'get_address_in_network',
'config',
'log',
'status_set',
'unit_private_ip',
'when',
'when_not',
'kv',
'subprocess',
'ovs',
'gethostname',
]
CONN_STRING = 'tcp:odl-controller:6640'
LOCALHOST = '10.1.1.1'
class CharmUnitTestCase(testtools.TestCase):
def setUp(self, obj, patches):
super(CharmUnitTestCase, self).setUp()
self.patches = patches
self.obj = obj
self.patch_all()
def patch(self, method):
_m = patch.object(self.obj, method)
mock = _m.start()
self.addCleanup(_m.stop)
return mock
def patch_all(self):
for method in self.patches:
setattr(self, method, self.patch(method))
class MockUnitData():
data = {}
def set(self, k, v):
self.data[k] = v
def unset(self, k):
if k in self.data:
del self.data[k]
def get(self, k):
return self.data.get(k)
def reset(self):
self.data = {}
class TestOVSODL(CharmUnitTestCase):
def setUp(self):
super(TestOVSODL, self).setUp(ovs_odl_main, TO_PATCH)
self.unitdata = MockUnitData()
self.unit_private_ip.return_value = LOCALHOST
self.kv.return_value = self.unitdata
def tearDown(self):
super(TestOVSODL, self).tearDown()
self.unitdata.reset()
def test_configure_openvswitch_not_installed(self):
self.unitdata.unset('installed')
odl_ovsdb = MagicMock()
ovs_odl_main.configure_openvswitch(odl_ovsdb)
self.assertFalse(self.subprocess.check_call.called)
def test_configure_openvswitch_installed(self):
self.unitdata.set('installed', True)
odl_ovsdb = MagicMock()
odl_ovsdb.connection_string.return_value = None
ovs_odl_main.configure_openvswitch(odl_ovsdb)
self.assertFalse(self.subprocess.check_call.called)
def test_configure_openvswitch_installed_related(self):
self.unitdata.set('installed', True)
self.gethostname.return_value = 'ovs-host'
self.subprocess.check_output.return_value = 'local_uuid'
self.config.return_value = None
self.get_address_in_network.return_value = LOCALHOST
odl_ovsdb = MagicMock()
odl_ovsdb.connection_string.return_value = CONN_STRING
odl_ovsdb.private_address.return_value = 'odl-controller'
ovs_odl_main.configure_openvswitch(odl_ovsdb)
self.ovs.set_manager.assert_called_with(CONN_STRING)
self.ovs.set_config.assert_has_calls([
call('local_ip', '10.1.1.1'),
call('controller-ips', 'odl-controller',
table='external_ids'),
call('host-id', 'ovs-host',
table='external_ids'),
])
self.get_address_in_network.assert_called_with(None, '10.1.1.1')
self.status_set.assert_called_with('active',
'Open vSwitch configured and ready')
def test_unconfigure_openvswitch_not_installed(self):
self.unitdata.unset('installed')
odl_ovsdb = MagicMock()
ovs_odl_main.unconfigure_openvswitch(odl_ovsdb)
self.assertFalse(self.subprocess.check_call.called)
def test_unconfigure_openvswitch_installed(self):
self.unitdata.set('installed', True)
self.subprocess.check_output.return_value = 'br-int br-ex'
odl_ovsdb = MagicMock()
ovs_odl_main.unconfigure_openvswitch(odl_ovsdb)
self.subprocess.check_call.assert_has_calls([
call(['ovs-vsctl', 'del-manager']),
call(['ovs-vsctl', 'del-controller', 'br-int']),
call(['ovs-vsctl', 'del-controller', 'br-ex']),
])
def test_configure_neutron_plugin(self):
neutron_plugin = MagicMock()
ovs_odl_main.configure_neutron_plugin(neutron_plugin)
neutron_plugin.configure_plugin.assert_called_with(
plugin='ovs-odl',
config={
"nova-compute": {
"/etc/nova/nova.conf": {
"sections": {
'DEFAULT': [
('firewall_driver',
'nova.virt.firewall.NoopFirewallDriver'),
('libvirt_vif_driver',
'nova.virt.libvirt.vif.'
'LibvirtGenericVIFDriver'),
('security_group_api', 'neutron'),
],
}
}
}
}
)