Refactors alarm creation to comply with changes regarding the use of tags instead...
[osm/POL.git] / osm_policy_module / tests / integration / test_policy_agent.py
index 11bc969..65a657d 100644 (file)
@@ -23,6 +23,7 @@
 ##
 import asyncio
 import logging
+import os
 import sys
 import unittest
 import uuid
@@ -30,13 +31,15 @@ from unittest.mock import patch, Mock
 
 from kafka import KafkaProducer
 from osm_common.dbmongo import DbMongo
-from peewee import SqliteDatabase
+from playhouse.db_url import connect
 
 from osm_policy_module.common.common_db_client import CommonDbClient
 from osm_policy_module.common.mon_client import MonClient
 from osm_policy_module.core import database
 from osm_policy_module.core.agent import PolicyModuleAgent
-from osm_policy_module.core.database import ScalingGroup, ScalingAlarm, ScalingPolicy, ScalingCriteria
+from osm_policy_module.core.config import Config
+from osm_policy_module.core.database import ScalingGroup, ScalingAlarm, ScalingPolicy, ScalingCriteria, VnfAlarm, \
+    AlarmAction
 
 log = logging.getLogger()
 log.level = logging.INFO
@@ -318,7 +321,32 @@ vnfd_record_mock = {
                     }
                 }
             ],
-            "image": "cirros034"
+            "image": "cirros034",
+            "alarm": [
+                {
+                    "value": 20.0000,
+                    "actions": {
+                        "insufficient-data": [
+                            {
+                                "url": "localhost:9090"
+                            }
+                        ],
+                        "ok": [
+                            {
+                                "url": "localhost:9090"
+                            }
+                        ],
+                        "alarm": [
+                            {
+                                "url": "localhost:9090"
+                            }
+                        ]
+                    },
+                    "alarm-id": "alarm-1",
+                    "operation": "LT",
+                    "vnf-monitoring-param-ref": "cirros_vnf_memory_util"
+                }
+            ]
         }
     ],
     "monitoring-param": [
@@ -326,10 +354,28 @@ vnfd_record_mock = {
             "id": "cirros_vnf_memory_util",
             "name": "cirros_vnf_memory_util",
             "aggregation-type": "AVERAGE",
-            "vdu-monitoring-param-ref": "cirros_vnfd-VM_memory_util",
-            "vdu-ref": "cirros_vnfd-VM"
+            "vdu-monitoring-param": {
+                "vdu-monitoring-param-ref": "cirros_vnfd-VM_memory_util",
+                "vdu-ref": "cirros_vnfd-VM"
+            }
+        },
+        {
+            "id": "haproxy_users",
+            "name": "haproxy_users",
+            "aggregation-type": "AVERAGE",
+            "vnf-metric":
+                {"vnf-metric-name-ref": "users"}
         }
     ],
+    "vdu-configuration": {
+        "juju": {
+            "charm": "testmetrics",
+            "proxy": True
+        },
+        "metrics": {
+            "name": "users"
+        }
+    },
     "description": "Simple VNF example with a cirros and a scaling group descriptor",
     "id": "cirros_vdu_scaling_vnf",
     "logo": "cirros-64.png",
@@ -401,24 +447,23 @@ vnfd_record_mock = {
     }
 }
 
-test_db = SqliteDatabase(':memory:')
-
-MODELS = [ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm]
+MODELS = [ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm, VnfAlarm, AlarmAction]
 
 
 class PolicyModuleAgentTest(unittest.TestCase):
     def setUp(self):
         super()
-        database.db = test_db
-        test_db.bind(MODELS)
-        test_db.connect()
-        test_db.drop_tables(MODELS)
-        test_db.create_tables(MODELS)
+        database.db.initialize(connect('sqlite:///test_db.sqlite'))
+        database.db.bind(MODELS)
+        database.db.connect()
+        database.db.drop_tables(MODELS)
+        database.db.create_tables(MODELS)
+        database.db.close()
         self.loop = asyncio.new_event_loop()
-        asyncio.set_event_loop(None)
 
     def tearDown(self):
         super()
+        os.remove('test_db.sqlite')
 
     @patch.object(DbMongo, 'db_connect', Mock())
     @patch.object(KafkaProducer, '__init__')
@@ -441,8 +486,9 @@ class PolicyModuleAgentTest(unittest.TestCase):
         get_nsr.return_value = nsr_record_mock
         get_vnfd.return_value = vnfd_record_mock
         create_alarm.side_effect = _test_configure_scaling_groups_create_alarm
-        agent = PolicyModuleAgent(self.loop)
-        self.loop.run_until_complete(agent._configure_scaling_groups("test_nsr_id"))
+        config = Config()
+        agent = PolicyModuleAgent(config, self.loop)
+        self.loop.run_until_complete(agent.autoscaling_service.configure_scaling_groups("test_nsr_id"))
         create_alarm.assert_any_call(metric_name='average_memory_utilization',
                                      ns_id='test_nsr_id',
                                      operation='GT',
@@ -475,6 +521,45 @@ class PolicyModuleAgentTest(unittest.TestCase):
         self.assertEqual(scaling_record.name, 'scale_cirros_vnfd-VM')
         self.assertEqual(scaling_record.nsr_id, 'test_nsr_id')
 
+    @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_vnf_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_vnf_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_vnf_alarms_create_alarm
+        config = Config()
+        agent = PolicyModuleAgent(config, self.loop)
+        self.loop.run_until_complete(agent.alarming_service.configure_vnf_alarms("test_nsr_id"))
+        create_alarm.assert_any_call(metric_name='cirros_vnf_memory_util',
+                                     ns_id='test_nsr_id',
+                                     operation='LT',
+                                     statistic='AVERAGE',
+                                     threshold=20.0,
+                                     vdu_name='cirros_ns-1-cirros_vnfd-VM-1',
+                                     vnf_member_index='1')
+        create_alarm.assert_any_call(metric_name='cirros_vnf_memory_util',
+                                     ns_id='test_nsr_id',
+                                     operation='LT',
+                                     statistic='AVERAGE',
+                                     threshold=20.0,
+                                     vdu_name='cirros_ns-2-cirros_vnfd-VM-1',
+                                     vnf_member_index='2')
+
 
 if __name__ == '__main__':
     unittest.main()