Feature 10923: Autohealing
[osm/POL.git] / osm_policy_module / tests / integration / test_policy_agent.py
index 6b1dc64..0329b7c 100644 (file)
@@ -45,6 +45,7 @@ from osm_policy_module.core.database import (
     ScalingCriteria,
     VnfAlarm,
     AlarmAction,
+    HealingAction,
 )
 
 log = logging.getLogger()
@@ -183,6 +184,7 @@ vnfr_record_mocks = [
                         "ip-address": "192.168.160.2",
                     }
                 ],
+                "count-index": 0,
                 "status": "ACTIVE",
                 "vim-id": "63a65636-9fc8-4022-b070-980823e6266a",
                 "name": "cirros_ns-1-cirros_vnfd-VM-1",
@@ -218,6 +220,7 @@ vnfr_record_mocks = [
                         "ip-address": "192.168.160.10",
                     }
                 ],
+                "count-index": 0,
                 "status": "ACTIVE",
                 "vim-id": "a154b8d3-2b10-421a-a51d-4b391d9bd366",
                 "name": "cirros_ns-2-cirros_vnfd-VM-1",
@@ -362,6 +365,21 @@ vnfd_record_mock = {
                     "vdu-configuration-id": "cirros_vnfd-VM-vdu-configuration",
                 }
             ],
+            "healing-aspect": [
+                {
+                    "id": "cirros_vnfd-VM-autoheal",
+                    "healing-policy": [
+                        {
+                            "vdu-id": "cirros_vnfd-VM",
+                            "event-name": "heal-alarm",
+                            "recovery-type": "automatic",
+                            "action-on-recovery": "REDEPLOY_ONLY",
+                            "cooldown-time": 180,
+                            "day1": False
+                        }
+                    ],
+                }
+            ],
             "instantiation-level": [
                 {
                     "id": "default-instantiation-level",
@@ -444,6 +462,7 @@ MODELS = [
     ScalingAlarm,
     VnfAlarm,
     AlarmAction,
+    HealingAction,
 ]
 
 
@@ -585,6 +604,53 @@ class PolicyModuleAgentTest(unittest.TestCase):
             action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}"
         )
 
+    @patch.object(DbMongo, "db_connect", Mock())
+    @patch.object(KafkaProducer, "__init__")
+    @patch.object(MonClient, "create_alarm")
+    @patch.object(CommonDbClient, "get_vnfd")
+    @patch.object(CommonDbClient, "get_nsr")
+    @patch.object(CommonDbClient, "get_vnfr")
+    def test_configure_healing_alarms(
+        self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init
+    ):
+        def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
+            if "1" in args[1]:
+                return vnfr_record_mocks[0]
+            if "2" in args[1]:
+                return vnfr_record_mocks[1]
+
+        async def _test_configure_healing_alarms_create_alarm(*args, **kwargs):
+            return uuid.uuid4()
+
+        kafka_producer_init.return_value = None
+        get_vnfr.side_effect = _test_configure_scaling_groups_get_vnfr
+        get_nsr.return_value = nsr_record_mock
+        get_vnfd.return_value = vnfd_record_mock
+        create_alarm.side_effect = _test_configure_healing_alarms_create_alarm
+        config = Config()
+        agent = PolicyModuleAgent(config, self.loop)
+        self.loop.run_until_complete(
+            agent.healing_service.configure_healing_alarms("test_nsr_id")
+        )
+        create_alarm.assert_any_call(
+            metric_name="vm_status",
+            ns_id="test_nsr_id",
+            vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
+            vnf_member_index="1",
+            threshold=1,
+            operation="LT",
+            statistic="AVERAGE",
+        )
+        create_alarm.assert_any_call(
+            metric_name="vm_status",
+            ns_id="test_nsr_id",
+            vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
+            vnf_member_index="2",
+            threshold=1,
+            operation="LT",
+            statistic="AVERAGE",
+        )
+
 
 if __name__ == "__main__":
     unittest.main()