diff --git a/vitrage_tempest_tests/tests/api/event/test_events.py b/vitrage_tempest_tests/tests/api/event/test_events.py index a6aaf9316..4da7c7971 100644 --- a/vitrage_tempest_tests/tests/api/event/test_events.py +++ b/vitrage_tempest_tests/tests/api/event/test_events.py @@ -13,7 +13,6 @@ # under the License. import six -import time from datetime import datetime from oslo_log import log as logging @@ -24,8 +23,10 @@ from vitrage.common.constants import EventProperties as EventProps from vitrage.common.constants import VertexProperties as VProps from vitrage import keystone_client from vitrage import service +from vitrage_tempest_tests.tests.utils import wait_for_answer from vitrageclient import client as v_client + LOG = logging.getLogger(__name__) @@ -52,16 +53,27 @@ class TestEvents(base.BaseTestCase): } self._test_send_doctor_event(details) + def test_send_doctor_event_without_resource_id_v2(self): + """Sending an event in Doctor format should result in an alarm""" + details = { + 'hostname': 'host457', + 'source': 'sample_monitor', + 'cause': 'another alarm', + 'severity': 'critical', + 'status': 'down', + 'monitor_id': 'sample monitor', + 'monitor_event_id': '103', + } + self._test_send_doctor_event(details) + def _test_send_doctor_event(self, details): try: # post an event to the message bus event_time = datetime.now() event_time_iso = event_time.isoformat() event_type = 'compute.host.down' - self.vitrage_client.event.post(event_time_iso, event_type, details) - - api_alarms = self._wait_for_status(2, self._check_alarms) + api_alarms = wait_for_answer(2, 0.5, self._check_alarms) # expect to get a 'host down alarm', generated by Doctor datasource self.assertIsNotNone(api_alarms, 'Expected host down alarm') @@ -70,14 +82,15 @@ class TestEvents(base.BaseTestCase): alarm = api_alarms[0] event_time_tz = six.u(event_time.strftime('%Y-%m-%dT%H:%M:%SZ')) self._check_alarm(alarm, event_time_tz, event_type, details) + event_time = datetime.now() event_time_iso = event_time.isoformat() details['status'] = 'up' self.vitrage_client.event.post(event_time_iso, event_type, details) - self._wait_for_status(2, self._check_alarms) - # TODO(iaffek) - # self.assertIsNotNone(api_alarms, 'Expected host down alarm') - # self.assertEqual(0, len(api_alarms), 'Expected host down alarm') + + api_alarms = wait_for_answer(2, 0.5, self._check_alarms) + self.assertIsNotNone(api_alarms, 'Expected host down alarm') + self.assertEqual(0, len(api_alarms), 'Expected host down alarm') except Exception as e: LOG.exception(e) @@ -90,7 +103,6 @@ class TestEvents(base.BaseTestCase): all_tenants=True) if api_alarms: return True, api_alarms - return False, api_alarms def _check_alarm(self, alarm, event_time, event_type, details): @@ -100,16 +112,3 @@ class TestEvents(base.BaseTestCase): self.assertEqual(details['status'], alarm['status']) self.assertFalse(alarm[VProps.VITRAGE_IS_DELETED]) self.assertFalse(alarm[VProps.VITRAGE_IS_PLACEHOLDER]) - - @staticmethod - def _wait_for_status(max_waiting, func, **kwargs): - count = 0 - status, res = False, None - while count < max_waiting: - status, res = func(**kwargs) - if status: - return res - count += 1 - time.sleep(2) - LOG.info("wait_for_status - False") - return res diff --git a/vitrage_tempest_tests/tests/utils.py b/vitrage_tempest_tests/tests/utils.py index 27e740741..766c9c091 100644 --- a/vitrage_tempest_tests/tests/utils.py +++ b/vitrage_tempest_tests/tests/utils.py @@ -15,6 +15,7 @@ from functools import wraps import socket +import time from oslo_config import cfg from oslo_config.cfg import NoSuchOptError @@ -125,3 +126,16 @@ def tempest_logger(func): return result return func_name_print_func + + +def wait_for_answer(max_waiting, time_between_attempts, func, **kwargs): + """time_between_attempts should be in range of 0 to 1""" + status, res = False, None + start_time = time.time() + while time.time() - start_time < max_waiting: + time.sleep(time_between_attempts) + status, res = func(**kwargs) + if status: + return res + LOG.info("wait for answer- False") + return res