Feature 10918: Alarm Notification Enhancement
[osm/POL.git] / osm_policy_module / tests / unit / alarming / test_alarming_service.py
index e897cd9..563768f 100644 (file)
@@ -39,30 +39,72 @@ class TestAlarmingService(TestCase):
     def setUp(self):
         self.config = Config()
         self.loop = asyncio.new_event_loop()
+        self.payload = {
+            "notify_details": {
+                "alarm_number": 0
+            }
+        }
+        self.headers = {"content-type": "application/json"}
 
     @mock.patch.object(VnfAlarmRepository, "get")
     @mock.patch("requests.post")
     @mock.patch("osm_policy_module.core.database.db")
-    def test_handle_alarm(self, database, requests_post, get_alarm):
+    def test_handle_alarm_suppression(self, database, requests_post, get_alarm):
         alert_timeout = int(self.config.get('alert', 'timeout'))
-        mock_alarm = self._build_mock_alarm("test_id")
+        mock_alarm = self._build_mock_alarm("test_id", last_action="ok")
         get_alarm.return_value = mock_alarm
-
         service = AlarmingService(self.config)
-        self.loop.run_until_complete(service.handle_alarm("test_id", "alarm", {}))
-        requests_post.assert_called_once_with(json="{}", url="http://alarm-url/", timeout=alert_timeout)
+        if bool(self.config.get('alert', 'enhanced_alarms')):
+            self.loop.run_until_complete(service.handle_alarm("test_id", "alarm", self.payload))
+            requests_post.assert_called_once_with(
+                url='http://alarm-url/', data='{"notify_details": {"alarm_number": 1}}',
+                headers={'content-type': 'application/json'}, verify=False, timeout=alert_timeout
+            )
+        else:
+            self.loop.run_until_complete(service.handle_alarm("test_id", "alarm", {}))
+            requests_post.assert_called_once_with(json="{}", url="http://alarm-url/", timeout=alert_timeout)
 
-        requests_post.reset_mock()
-        self.loop.run_until_complete(service.handle_alarm("test_id", "ok", {}))
-        requests_post.assert_called_once_with(json="{}", url="http://ok-url/", timeout=alert_timeout)
+    @mock.patch.object(VnfAlarmRepository, "get")
+    @mock.patch("requests.post")
+    @mock.patch("osm_policy_module.core.database.db")
+    def test_handle_ok_suppression(self, database, requests_post, get_alarm):
+        alert_timeout = int(self.config.get('alert', 'timeout'))
+        mock_alarm = self._build_mock_alarm("test_id", last_action="alarm")
+        get_alarm.return_value = mock_alarm
+        service = AlarmingService(self.config)
+        if bool(self.config.get('alert', 'enhanced_alarms')):
+            self.loop.run_until_complete(service.handle_alarm("test_id", "ok", self.payload))
+            requests_post.assert_called_once_with( 
+                url='http://ok-url/', data='{"notify_details": {"alarm_number": 0}}',
+                headers={'content-type': 'application/json'}, verify=False, timeout=alert_timeout
+            )
+        else:
+            self.loop.run_until_complete(service.handle_alarm("test_id", "ok", {}))
+            requests_post.assert_called_once_with(json="{}", url="http://ok-url/", timeout=alert_timeout)
 
-        requests_post.reset_mock()
-        self.loop.run_until_complete(
-            service.handle_alarm("test_id", "insufficient-data", {})
-        )
-        requests_post.assert_called_once_with(
-            json="{}", url="http://insufficient-data-url/", timeout=alert_timeout
-        )
+    @mock.patch.object(VnfAlarmRepository, "get")
+    @mock.patch("requests.post")
+    @mock.patch("osm_policy_module.core.database.db")
+    def test_handle_insufficientalarm(self, database, requests_post, get_alarm):
+        alert_timeout = int(self.config.get('alert', 'timeout'))
+        mock_alarm = self._build_mock_alarm("test_id")
+        get_alarm.return_value = mock_alarm
+        service = AlarmingService(self.config)
+        if bool(self.config.get('alert', 'enhanced_alarms')):
+            self.loop.run_until_complete(
+                service.handle_alarm("test_id", "insufficient-data", self.payload)
+            )
+            requests_post.assert_called_once_with(
+                url='http://insufficient-data-url/', data='{"notify_details": {"alarm_number": 0}}', 
+                headers={'content-type': 'application/json'}, verify=False, timeout=alert_timeout
+            )
+        else:
+            self.loop.run_until_complete(
+                service.handle_alarm("test_id", "insufficient-data", {})
+            )
+            requests_post.assert_called_once_with(
+                json="{}", url='http://insufficient-data-url/', timeout=alert_timeout
+            )
 
     @mock.patch.object(VnfAlarmRepository, "get")
     @mock.patch("requests.post")
@@ -70,7 +112,6 @@ class TestAlarmingService(TestCase):
     def test_handle_alarm_unknown_status(self, database, requests_post, get_alarm):
         mock_alarm = self._build_mock_alarm("test_id")
         get_alarm.return_value = mock_alarm
-
         service = AlarmingService(self.config)
         self.loop.run_until_complete(service.handle_alarm("test_id", "unknown", {}))
         requests_post.assert_not_called()
@@ -81,6 +122,8 @@ class TestAlarmingService(TestCase):
         alarm_url="http://alarm-url/",
         insufficient_data_url="http://insufficient-data-url/",
         ok_url="http://ok-url/",
+        id_suffix=0,
+        last_action="insufficient-data"
     ):
         mock_alarm = mock.Mock()
         mock_alarm.alarm_id = alarm_id
@@ -93,5 +136,9 @@ class TestAlarmingService(TestCase):
         ok_action = mock.Mock()
         ok_action.type = "ok"
         ok_action.url = ok_url
+        mock_alarm.ok_ack = False
+        mock_alarm.alarm_ack = False
+        mock_alarm.id_suffix = id_suffix
+        mock_alarm.last_action = last_action
         mock_alarm.actions = [insufficient_data_action, alarm_action, ok_action]
         return mock_alarm