Add the unit tests for ml2.rpc module
Increase coverage of unit tests until 100% for ml2.rpc module. Closes-bug: #1269136 Change-Id: I87c40e6462018df6a4dc70c6a1285de55f827877
This commit is contained in:
parent
f2c7ee7942
commit
b4608acae8
@ -17,9 +17,12 @@
|
|||||||
Unit Tests for ml2 rpc
|
Unit Tests for ml2 rpc
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import collections
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
from neutron.agent import rpc as agent_rpc
|
from neutron.agent import rpc as agent_rpc
|
||||||
|
from neutron.common import constants
|
||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron.common import topics
|
from neutron.common import topics
|
||||||
@ -40,6 +43,7 @@ class RpcCallbacksTestCase(base.BaseTestCase):
|
|||||||
self.manager.get_service_plugins.return_value = {
|
self.manager.get_service_plugins.return_value = {
|
||||||
'L3_ROUTER_NAT': self.l3plugin
|
'L3_ROUTER_NAT': self.l3plugin
|
||||||
}
|
}
|
||||||
|
self.plugin = self.manager.get_plugin()
|
||||||
|
|
||||||
def _test_update_device_up(self, extensions, kwargs):
|
def _test_update_device_up(self, extensions, kwargs):
|
||||||
with mock.patch('neutron.plugins.ml2.plugin.Ml2Plugin'
|
with mock.patch('neutron.plugins.ml2.plugin.Ml2Plugin'
|
||||||
@ -75,6 +79,89 @@ class RpcCallbacksTestCase(base.BaseTestCase):
|
|||||||
self._test_update_device_up(['router', 'dvr'], kwargs)
|
self._test_update_device_up(['router', 'dvr'], kwargs)
|
||||||
self.assertTrue(self.l3plugin.dvr_vmarp_table_update.call_count)
|
self.assertTrue(self.l3plugin.dvr_vmarp_table_update.call_count)
|
||||||
|
|
||||||
|
def test_get_device_details_without_port_context(self):
|
||||||
|
self.plugin.get_bound_port_context.return_value = None
|
||||||
|
self.assertEqual(
|
||||||
|
{'device': 'fake_device'},
|
||||||
|
self.callbacks.get_device_details('fake_context',
|
||||||
|
device='fake_device'))
|
||||||
|
|
||||||
|
def test_get_device_details_port_context_without_bounded_segment(self):
|
||||||
|
self.plugin.get_bound_port_context().bound_segment = None
|
||||||
|
self.assertEqual(
|
||||||
|
{'device': 'fake_device'},
|
||||||
|
self.callbacks.get_device_details('fake_context',
|
||||||
|
device='fake_device'))
|
||||||
|
|
||||||
|
def test_get_device_details_port_status_equal_new_status(self):
|
||||||
|
port = collections.defaultdict(lambda: 'fake')
|
||||||
|
self.plugin.get_bound_port_context().current = port
|
||||||
|
for admin_state_up in (True, False):
|
||||||
|
new_status = (constants.PORT_STATUS_BUILD if admin_state_up
|
||||||
|
else constants.PORT_STATUS_DOWN)
|
||||||
|
for status in (constants.PORT_STATUS_ACTIVE,
|
||||||
|
constants.PORT_STATUS_BUILD,
|
||||||
|
constants.PORT_STATUS_DOWN,
|
||||||
|
constants.PORT_STATUS_ERROR):
|
||||||
|
port['admin_state_up'] = admin_state_up
|
||||||
|
port['status'] = status
|
||||||
|
self.plugin.update_port_status.reset_mock()
|
||||||
|
self.callbacks.get_device_details('fake_context',
|
||||||
|
host='fake_host')
|
||||||
|
self.assertEqual(status == new_status,
|
||||||
|
not self.plugin.update_port_status.called)
|
||||||
|
|
||||||
|
def test_get_devices_details_list(self):
|
||||||
|
devices = [1, 2, 3, 4, 5]
|
||||||
|
kwargs = {'host': 'fake_host', 'agent_id': 'fake_agent_id'}
|
||||||
|
with mock.patch.object(self.callbacks, 'get_device_details',
|
||||||
|
side_effect=devices) as f:
|
||||||
|
res = self.callbacks.get_devices_details_list('fake_context',
|
||||||
|
devices=devices,
|
||||||
|
**kwargs)
|
||||||
|
self.assertEqual(devices, res)
|
||||||
|
self.assertEqual(len(devices), f.call_count)
|
||||||
|
calls = [mock.call('fake_context', device=i, **kwargs)
|
||||||
|
for i in devices]
|
||||||
|
f.assert_has_calls(calls)
|
||||||
|
|
||||||
|
def test_get_devices_details_list_with_empty_devices(self):
|
||||||
|
with mock.patch.object(self.callbacks, 'get_device_details') as f:
|
||||||
|
res = self.callbacks.get_devices_details_list('fake_context')
|
||||||
|
self.assertFalse(f.called)
|
||||||
|
self.assertEqual([], res)
|
||||||
|
|
||||||
|
def _test_update_device_not_bound_to_host(self, func):
|
||||||
|
self.plugin.port_bound_to_host.return_value = False
|
||||||
|
self.plugin._device_to_port_id.return_value = 'fake_port_id'
|
||||||
|
res = func('fake_context', device='fake_device', host='fake_host')
|
||||||
|
self.plugin.port_bound_to_host.assert_called_once_with('fake_context',
|
||||||
|
'fake_port_id',
|
||||||
|
'fake_host')
|
||||||
|
return res
|
||||||
|
|
||||||
|
def test_update_device_up_with_device_not_bound_to_host(self):
|
||||||
|
self.assertIsNone(self._test_update_device_not_bound_to_host(
|
||||||
|
self.callbacks.update_device_up))
|
||||||
|
|
||||||
|
def test_update_device_down_with_device_not_bound_to_host(self):
|
||||||
|
self.assertEqual(
|
||||||
|
{'device': 'fake_device', 'exists': True},
|
||||||
|
self._test_update_device_not_bound_to_host(
|
||||||
|
self.callbacks.update_device_down))
|
||||||
|
|
||||||
|
def test_update_device_down_call_update_port_status(self):
|
||||||
|
self.plugin.update_port_status.return_value = False
|
||||||
|
self.plugin._device_to_port_id.return_value = 'fake_port_id'
|
||||||
|
self.assertEqual(
|
||||||
|
{'device': 'fake_device', 'exists': False},
|
||||||
|
self.callbacks.update_device_down('fake_context',
|
||||||
|
device='fake_device',
|
||||||
|
host='fake_host'))
|
||||||
|
self.plugin.update_port_status.assert_called_once_with(
|
||||||
|
'fake_context', 'fake_port_id', constants.PORT_STATUS_DOWN,
|
||||||
|
'fake_host')
|
||||||
|
|
||||||
|
|
||||||
class RpcApiTestCase(base.BaseTestCase):
|
class RpcApiTestCase(base.BaseTestCase):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user