diff options
author | Julien Danjou <julien@danjou.info> | 2016-06-17 10:29:57 +0200 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2016-06-20 16:18:17 +0200 |
commit | 7cdc7aa36ccb358562d6e23e67c80c8bc133341e (patch) | |
tree | 0c2b67325de5c176d1748199adda0c44f7315fdc | |
parent | 3a1fcaf712a7cdcffafe2ae33bc4c2508bab8a49 (diff) | |
download | ceilometer-7cdc7aa36ccb358562d6e23e67c80c8bc133341e.tar.gz |
Remove oslo_utils.timeutils.total_seconds() usage + catch DriverLoadFailure for get_transport optional + fix CI failure due to oslo.messaging 5.0.0 + correct concurrency of gabbi
This function was deprecated and has been removed.
+
new oslo.messaging 5.2.0 release will raise
oslo_messaging.transport.DriverLoadFailure if no existent transport
driver, hence breaks our code and unit test as well.
This patch fixes it by adding DriverLoadFailure to catch list.
Closes-Bug: #1588151
(cherry picked from commit d7f8ce94e433da8af3660ecf52715a04c221fde5)
+
Recently, oslo.messaging does a refactor [1] which causes
get_batch_notification_listener returns a new type
BatchNotificationServer instead of previous MessageHandlingServer,
they have different attributes, so our test code which relies on
MessageHandlingServer fails in CI gate.
This patch makes test code not rely on oslo.messaging details.
[1] https://github.com/openstack/oslo.messaging/commit/990d894eaf0d18941b56d89bff2bca51de375640
(cherry picked from commit 23d5c9f648d8352aa205fbe46ba9796a5424874f)
+
Correct concurrency of gabbi tests for gabbi 1.22.0
When running gabbi under testr, concurrency grouping is controlled
by a regex in .testr.conf. A module name change in gabbi 1.22.0
inadvertently broke the grouping. This change should work for
old and new versions.
(cherry picked from commit 8fcbc8de4ea878bdec1ef8754eaf965e176854b3)
Change-Id: I02b5d1b3f4a9169cbf428a5eff9c6705494741af
-rw-r--r-- | .testr.conf | 2 | ||||
-rw-r--r-- | ceilometer/alarm/evaluator/__init__.py | 2 | ||||
-rw-r--r-- | ceilometer/messaging.py | 5 | ||||
-rw-r--r-- | ceilometer/tests/functional/test_notification.py | 37 |
4 files changed, 27 insertions, 19 deletions
diff --git a/.testr.conf b/.testr.conf index 0a8a677b..f8f2847a 100644 --- a/.testr.conf +++ b/.testr.conf @@ -6,4 +6,4 @@ test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ test_id_option=--load-list $IDFILE test_list_option=--list # NOTE(chdent): Only used/matches on gabbi-related tests. -group_regex=(gabbi\.driver\.test_gabbi_(?:prefix_|)[^_]+)_ +group_regex=(gabbi\.(suitemaker|driver)\.test_gabbi_(?:prefix_|)[^_]+)_ diff --git a/ceilometer/alarm/evaluator/__init__.py b/ceilometer/alarm/evaluator/__init__.py index 01320265..6f36322f 100644 --- a/ceilometer/alarm/evaluator/__init__.py +++ b/ceilometer/alarm/evaluator/__init__.py @@ -122,7 +122,7 @@ class Evaluator(object): at the original point in time. """ cron.get_prev() - diff = timeutils.total_seconds(ts - cron.get_next(datetime.datetime)) + diff = (ts - cron.get_next(datetime.datetime)).total_seconds() return abs(diff) < 60 # minute precision @abc.abstractmethod diff --git a/ceilometer/messaging.py b/ceilometer/messaging.py index 6f5dce5d..bc57fc0f 100644 --- a/ceilometer/messaging.py +++ b/ceilometer/messaging.py @@ -33,8 +33,9 @@ def get_transport(url=None, optional=False, cache=True): if not transport or not cache: try: transport = oslo_messaging.get_transport(cfg.CONF, url) - except oslo_messaging.InvalidTransportURL as e: - if not optional or e.url: + except (oslo_messaging.InvalidTransportURL, + oslo_messaging.DriverLoadFailure): + if not optional or url: # NOTE(sileht): oslo_messaging is configured but unloadable # so reraise the exception raise diff --git a/ceilometer/tests/functional/test_notification.py b/ceilometer/tests/functional/test_notification.py index 488d0189..3da9934e 100644 --- a/ceilometer/tests/functional/test_notification.py +++ b/ceilometer/tests/functional/test_notification.py @@ -21,7 +21,6 @@ import mock from oslo_config import fixture as fixture_config from oslo_context import context import oslo_messaging -import oslo_messaging.conffixture import oslo_service.service from oslo_utils import fileutils from oslo_utils import timeutils @@ -154,10 +153,8 @@ class TestNotification(tests_base.BaseTestCase): self.srv.listeners[0].dispatcher.endpoints[0]) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) - @mock.patch.object(oslo_messaging.MessageHandlingServer, 'start', - mock.MagicMock()) - @mock.patch('ceilometer.event.endpoint.EventsNotificationEndpoint') - def test_unique_consumers(self, fake_event_endpoint_class): + @mock.patch('oslo_messaging.get_notification_listener') + def test_unique_consumers(self, mock_listener): def fake_get_notifications_manager_dup_targets(pm): plugin = instance.Instance(pm) @@ -169,7 +166,10 @@ class TestNotification(tests_base.BaseTestCase): '_get_notifications_manager') as get_nm: get_nm.side_effect = fake_get_notifications_manager_dup_targets self.srv.start() - self.assertEqual(1, len(self.srv.listeners[0].dispatcher.targets)) + self.assertEqual(1, len(mock_listener.call_args_list)) + args, kwargs = mock_listener.call_args + self.assertEqual(1, len(args[1])) + self.assertIsInstance(args[1][0], oslo_messaging.Target) class BaseRealNotification(tests_base.BaseTestCase): @@ -465,21 +465,28 @@ class TestRealNotificationHA(BaseRealNotification): self.assertNotIn(listeners, set(self.srv.pipeline_listeners)) self.srv.stop() - def test_retain_common_listeners_on_refresh(self): + @mock.patch('oslo_messaging.get_notification_listener') + def test_retain_common_targets_on_refresh(self, mock_listener): + def generate_random_object(*args, **kwargs): + return mock.MagicMock() + + mock_listener.side_effect = generate_random_object + with mock.patch('ceilometer.coordination.PartitionCoordinator' '.extract_my_subset', return_value=[1, 2]): self.srv.start() - self.assertEqual(4, len(self.srv.pipeline_listeners)) - listeners = [listener for listener in self.srv.pipeline_listeners] + listened_before = [target.topic for target in + mock_listener.call_args[0][1]] + self.assertEqual(1, len(listened_before)) with mock.patch('ceilometer.coordination.PartitionCoordinator' '.extract_my_subset', return_value=[1, 3]): self.srv._refresh_agent(None) - self.assertEqual(4, len(self.srv.pipeline_listeners)) - for listener in listeners: - if listener.dispatcher.targets[0].topic.endswith('1'): - self.assertIn(listener, set(self.srv.pipeline_listeners)) - else: - self.assertNotIn(listener, set(self.srv.pipeline_listeners)) + listened_after = [target.topic for target in + mock_listener.call_args[0][1]] + self.assertEqual(1, len(listened_after)) + common = set(listened_before) & set(listened_after) + for topic in common: + self.assertTrue(topic.endswith('1')) self.srv.stop() @mock.patch('oslo_messaging.Notifier.sample') |