Adds migration engine for peewee ORM
[osm/POL.git] / osm_policy_module / tests / integration / test_policy_agent.py
index f7dc65a..7ad9944 100644 (file)
@@ -21,6 +21,7 @@
 # For those usages not covered by the Apache License, Version 2.0 please
 # contact: bdiaz@whitestack.com or glavado@whitestack.com
 ##
+import asyncio
 import logging
 import sys
 import unittest
@@ -29,13 +30,14 @@ 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.db_client import DbClient
+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 ScalingRecord, ScalingAlarm
+from osm_policy_module.core.config import Config
+from osm_policy_module.core.database import ScalingGroup, ScalingAlarm, ScalingPolicy, ScalingCriteria
 
 log = logging.getLogger()
 log.level = logging.INFO
@@ -325,10 +327,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",
@@ -400,19 +420,18 @@ vnfd_record_mock = {
     }
 }
 
-test_db = SqliteDatabase(':memory:')
-
-MODELS = [ScalingRecord, ScalingAlarm]
+MODELS = [ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm]
 
 
 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://'))
+        database.db.bind(MODELS)
+        database.db.connect()
+        database.db.drop_tables(MODELS)
+        database.db.create_tables(MODELS)
+        self.loop = asyncio.new_event_loop()
 
     def tearDown(self):
         super()
@@ -420,9 +439,9 @@ class PolicyModuleAgentTest(unittest.TestCase):
     @patch.object(DbMongo, 'db_connect', Mock())
     @patch.object(KafkaProducer, '__init__')
     @patch.object(MonClient, 'create_alarm')
-    @patch.object(DbClient, 'get_vnfd')
-    @patch.object(DbClient, 'get_nsr')
-    @patch.object(DbClient, 'get_vnfr')
+    @patch.object(CommonDbClient, 'get_vnfd')
+    @patch.object(CommonDbClient, 'get_nsr')
+    @patch.object(CommonDbClient, 'get_vnfr')
     def test_configure_scaling_groups(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]:
@@ -430,7 +449,7 @@ class PolicyModuleAgentTest(unittest.TestCase):
             if '2' in args[1]:
                 return vnfr_record_mocks[1]
 
-        def _test_configure_scaling_groups_create_alarm(*args, **kwargs):
+        async def _test_configure_scaling_groups_create_alarm(*args, **kwargs):
             return uuid.uuid4()
 
         kafka_producer_init.return_value = None
@@ -438,19 +457,40 @@ 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()
-        agent._configure_scaling_groups("test_nsr_id")
-        create_alarm.assert_any_call(metric_name='average_memory_utilization',
+        config = Config()
+        agent = PolicyModuleAgent(config, self.loop)
+        self.loop.run_until_complete(agent._configure_scaling_groups("test_nsr_id"))
+        create_alarm.assert_any_call(metric_name='cirros_vnf_memory_util',
                                      ns_id='test_nsr_id',
                                      operation='GT',
                                      statistic='AVERAGE',
                                      threshold=80,
-                                     vdu_name='cirros_vnfd-VM',
+                                     vdu_name='cirros_ns-1-cirros_vnfd-VM-1',
                                      vnf_member_index='1')
-        scaling_record = ScalingRecord.get()
+        create_alarm.assert_any_call(metric_name='cirros_vnf_memory_util',
+                                     ns_id='test_nsr_id',
+                                     operation='LT',
+                                     statistic='AVERAGE',
+                                     threshold=20,
+                                     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='GT',
+                                     statistic='AVERAGE',
+                                     threshold=80,
+                                     vdu_name='cirros_ns-2-cirros_vnfd-VM-1',
+                                     vnf_member_index='2')
+        create_alarm.assert_any_call(metric_name='cirros_vnf_memory_util',
+                                     ns_id='test_nsr_id',
+                                     operation='LT',
+                                     statistic='AVERAGE',
+                                     threshold=20,
+                                     vdu_name='cirros_ns-2-cirros_vnfd-VM-1',
+                                     vnf_member_index='2')
+        scaling_record = ScalingGroup.get()
         self.assertEqual(scaling_record.name, 'scale_cirros_vnfd-VM')
         self.assertEqual(scaling_record.nsr_id, 'test_nsr_id')
-        self.assertIsNotNone(scaling_record)
 
 
 if __name__ == '__main__':