# 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
from osm_common.dbmongo import DbMongo
from peewee import SqliteDatabase
+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.database import ScalingGroup, ScalingAlarm, ScalingPolicy, ScalingCriteria
log = logging.getLogger()
log.level = logging.INFO
"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",
test_db = SqliteDatabase(':memory:')
-MODELS = [ScalingRecord, ScalingAlarm]
+MODELS = [ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm]
class PolicyModuleAgentTest(unittest.TestCase):
test_db.connect()
test_db.drop_tables(MODELS)
test_db.create_tables(MODELS)
+ self.loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(None)
def tearDown(self):
super()
@patch.object(DbMongo, 'db_connect', Mock())
@patch.object(KafkaProducer, '__init__')
@patch.object(MonClient, 'create_alarm')
- @patch.object(PolicyModuleAgent, '_get_vnfd')
- @patch.object(PolicyModuleAgent, '_get_nsr')
- @patch.object(PolicyModuleAgent, '_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]:
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
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',
+ agent = PolicyModuleAgent(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')
+ 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')
- scaling_record = ScalingRecord.get()
+ 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__':