summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Riedemann <mriedem.os@gmail.com>2017-09-18 15:30:18 -0400
committerMatt Riedemann <mriedem.os@gmail.com>2017-10-04 13:26:10 +0000
commit1d2cfc4f5689fa1d88fb9aa13be14a6b7cc17a89 (patch)
treee35c08e128567c99df022b515623c7d3f77fd3fd
parentbcc88d4cad3d2a86e9e1c841a4afdb5a9d87c0f1 (diff)
downloadnova-1d2cfc4f5689fa1d88fb9aa13be14a6b7cc17a89.tar.gz
Account for compute.metrics.update in legacy notification whitelist
The compute.metrics.update legacy unversioned notification was missing from the whitelist because the only test for it was mocking out the rpc notifier call, which is what validates the entries in the whitelist. This adds the entry to the whitelist and fixes the test to actually use the notifier code. Change-Id: Ie278ca58c371b8e3bd4861e6c86ebcf30c6778ea Closes-Bug: #1717943 (cherry picked from commit 963bf956ce93ba02bf9f38f979fe914d090b76d4)
-rw-r--r--nova/rpc.py1
-rw-r--r--nova/tests/unit/compute/test_resource_tracker.py22
2 files changed, 18 insertions, 5 deletions
diff --git a/nova/rpc.py b/nova/rpc.py
index 72be15772b..0f3f701b60 100644
--- a/nova/rpc.py
+++ b/nova/rpc.py
@@ -298,6 +298,7 @@ class LegacyValidatingNotifier(object):
'compute.instance.volume.attach',
'compute.instance.volume.detach',
'compute.libvirt.error',
+ 'compute.metrics.update',
'compute_task.build_instances',
'compute_task.migrate_server',
'compute_task.rebuild_server',
diff --git a/nova/tests/unit/compute/test_resource_tracker.py b/nova/tests/unit/compute/test_resource_tracker.py
index d3297f9238..bce02a5e88 100644
--- a/nova/tests/unit/compute/test_resource_tracker.py
+++ b/nova/tests/unit/compute/test_resource_tracker.py
@@ -33,6 +33,7 @@ from nova.objects import base as obj_base
from nova.objects import pci_device
from nova.pci import manager as pci_manager
from nova import test
+from nova.tests.unit import fake_notifier
from nova.tests.unit.objects import test_pci_device as fake_pci_device
from nova.tests import uuidsentinel as uuids
@@ -2232,8 +2233,10 @@ class ComputeMonitorTestCase(BaseTestCase):
u'Cannot get the metrics from %(mon)s; error: %(exc)s', mock.ANY)
self.assertEqual(0, len(metrics))
- @mock.patch('nova.rpc.get_notifier')
- def test_get_host_metrics(self, rpc_mock):
+ def test_get_host_metrics(self):
+ fake_notifier.stub_notifier(self)
+ self.addCleanup(fake_notifier.reset)
+
class FakeCPUMonitor(monitor_base.MonitorBase):
NOW_TS = timeutils.utcnow()
@@ -2256,7 +2259,6 @@ class ComputeMonitorTestCase(BaseTestCase):
self.rt.monitors = [FakeCPUMonitor(None)]
metrics = self.rt._get_host_metrics(self.context, _NODENAME)
- rpc_mock.assert_called_once_with(service='compute', host=_NODENAME)
expected_metrics = [
{
@@ -2274,8 +2276,18 @@ class ComputeMonitorTestCase(BaseTestCase):
'nodename': _NODENAME,
}
- rpc_mock.return_value.info.assert_called_once_with(
- self.context, 'compute.metrics.update', payload)
+ self.assertEqual(1, len(fake_notifier.NOTIFICATIONS))
+ msg = fake_notifier.NOTIFICATIONS[0]
+ self.assertEqual('compute.metrics.update', msg.event_type)
+ for p_key in payload:
+ if p_key == 'metrics':
+ self.assertIn(p_key, msg.payload)
+ self.assertEqual(1, len(msg.payload['metrics']))
+ # make sure the expected metrics match the actual metrics
+ self.assertDictEqual(expected_metrics[0],
+ msg.payload['metrics'][0])
+ else:
+ self.assertEqual(payload[p_key], msg.payload[p_key])
self.assertEqual(metrics, expected_metrics)