X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Ftests%2Fintegration%2Ftest_policy_agent.py;h=73db3049c12c5e852e40a23e78da088ef5e7ff66;hb=be42d54170ca40d8d52e2c9fc8d888621585d6cf;hp=1470b258d29745a880859401c1a117c4206dfdd1;hpb=41610194dc5d13a16e03d0ffc59a07e1cba19132;p=osm%2FPOL.git diff --git a/osm_policy_module/tests/integration/test_policy_agent.py b/osm_policy_module/tests/integration/test_policy_agent.py index 1470b25..73db304 100644 --- a/osm_policy_module/tests/integration/test_policy_agent.py +++ b/osm_policy_module/tests/integration/test_policy_agent.py @@ -38,8 +38,15 @@ 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.config import Config -from osm_policy_module.core.database import ScalingGroup, ScalingAlarm, ScalingPolicy, ScalingCriteria, VnfAlarm, \ - AlarmAction +from osm_policy_module.core.database import ( + ScalingGroup, + ScalingAlarm, + ScalingPolicy, + ScalingCriteria, + VnfAlarm, + AlarmAction, + HealingAction, +) log = logging.getLogger() log.level = logging.INFO @@ -53,48 +60,10 @@ nsr_record_mock = { "ssh-authorized-key": None, "name-ref": "cirros_ns", "nsd": { - "name": "cirros_vdu_scaling_ns", "_id": "d7c8bd3c-eb39-4514-8847-19f01345524f", - "vld": [ - { - "id": "cirros_nsd_vld1", - "name": "cirros_nsd_vld1", - "type": "ELAN", - "mgmt-network": "true", - "vnfd-connection-point-ref": [ - { - "vnfd-id-ref": "cirros_vdu_scaling_vnf", - "member-vnf-index-ref": 1, - "vnfd-connection-point-ref": "eth0" - }, - { - "vnfd-id-ref": "cirros_vdu_scaling_vnf", - "member-vnf-index-ref": 2, - "vnfd-connection-point-ref": "eth0" - } - ] - } - ], - "vendor": "OSM", - "constituent-vnfd": [ - { - "member-vnf-index": "1", - "vnfd-id-ref": "cirros_vdu_scaling_vnf" - }, - { - "member-vnf-index": "2", - "vnfd-id-ref": "cirros_vdu_scaling_vnf" - } - ], - "version": "1.0", - "id": "cirros_vdu_scaling_ns", - "description": "Simple NS example with a cirros_vdu_scaling_vnf", - "logo": "osm.png", "_admin": { "created": 1535392246.499733, - "userDefinedData": { - - }, + "userDefinedData": {}, "usageSate": "NOT_IN_USE", "storage": { "zipfile": "package.tar.gz", @@ -102,33 +71,68 @@ nsr_record_mock = { "path": "/app/storage/", "folder": "d7c8bd3c-eb39-4514-8847-19f01345524f", "pkg-dir": "cirros_nsd", - "descriptor": "cirros_nsd/cirros_vdu_scaling_nsd.yaml" + "descriptor": "cirros_nsd/cirros_vdu_scaling_nsd.yaml", }, "onboardingState": "ONBOARDED", "modified": 1535392246.499733, - "projects_read": [ - "admin" - ], + "projects_read": ["admin"], "operationalState": "ENABLED", - "projects_write": [ - "admin" - ] + "projects_write": ["admin"], }, - "short-name": "cirros_vdu_scaling_ns" + "id": "cirros_vdu_scaling_ns", + "name": "cirros_vdu_scaling_ns", + "description": "Simple NS example with a cirros_vdu_scaling_vnf", + "designer": "OSM", + "version": "1.0", + "vnfd-id": ["cirros_vdu_scaling_vnf"], + "df": [ + { + "id": "default-df", + "vnf-profile": [ + { + "id": "1", + "vnfd-id": "cirros_vdu_scaling_vnf", + "virtual-link-connectivity": [ + { + "virtual-link-profile-id": "cirros_nsd_vld1", + "constituent-cpd-id": [ + { + "constituent-base-element-id": "1", + "constituent-cpd-id": "eth0-ext", + } + ], + } + ], + }, + { + "id": "2", + "vnfd-id": "cirros_vdu_scaling_vnf", + "virtual-link-connectivity": [ + { + "virtual-link-profile-id": "cirros_nsd_vld1", + "constituent-cpd-id": [ + { + "constituent-base-element-id": "2", + "constituent-cpd-id": "eth0-ext", + } + ], + } + ], + }, + ], + } + ], + "virtual-link-desc": [{"id": "cirros_nsd_vld1", "mgmt-network": "true"}], }, "id": "87776f33-b67c-417a-8119-cb08e4098951", "config-status": "configured", "operational-events": [], "_admin": { "created": 1535392482.0084584, - "projects_read": [ - "admin" - ], + "projects_read": ["admin"], "nsState": "INSTANTIATED", "modified": 1535392482.0084584, - "projects_write": [ - "admin" - ], + "projects_write": ["admin"], "deployed": { "RO": { "vnfd_id": { @@ -136,9 +140,9 @@ nsr_record_mock = { }, "nsd_id": "92c56cf0-f8fa-488c-9afb-9f3d78ae6bbb", "nsr_id": "637e12cd-c201-4c44-8ebd-70fb57a4dcee", - "nsr_status": "BUILD" + "nsr_status": "BUILD", } - } + }, }, "nsd-ref": "cirros_vdu_scaling_ns", "name": "cirros_ns", @@ -148,29 +152,21 @@ nsr_record_mock = { "nsdId": "d7c8bd3c-eb39-4514-8847-19f01345524f", "nsr_id": "87776f33-b67c-417a-8119-cb08e4098951", "nsName": "cirros_ns", - "vimAccountId": "be48ae31-1d46-4892-a4b4-d69abd55714b" + "vimAccountId": "be48ae31-1d46-4892-a4b4-d69abd55714b", }, "description": "default description", "constituent-vnfr-ref": [ "0d9d06ad-3fc2-418c-9934-465e815fafe2", - "3336eb44-77df-4c4f-9881-d2828d259864" + "3336eb44-77df-4c4f-9881-d2828d259864", ], "admin-status": "ENABLED", "detailed-status": "done", "datacenter": "be48ae31-1d46-4892-a4b4-d69abd55714b", - "orchestration-progress": { - - }, + "orchestration-progress": {}, "short-name": "cirros_ns", "ns-instance-config-ref": "87776f33-b67c-417a-8119-cb08e4098951", "nsd-name-ref": "cirros_vdu_scaling_ns", - "admin": { - "deployed": { - "RO": { - "nsr_status": "ACTIVE" - } - } - } + "admin": {"deployed": {"RO": {"nsr_status": "ACTIVE"}}}, } vnfr_record_mocks = [ @@ -185,15 +181,16 @@ vnfr_record_mocks = [ { "mac-address": "fa:16:3e:71:fd:b8", "name": "eth0", - "ip-address": "192.168.160.2" + "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", "status-detailed": None, "ip-address": "192.168.160.2", - "vdu-id-ref": "cirros_vnfd-VM" + "vdu-id-ref": "cirros_vnfd-VM", } ], "id": "0d9d06ad-3fc2-418c-9934-465e815fafe2", @@ -201,23 +198,13 @@ vnfr_record_mocks = [ "vnfd-id": "63f44c41-45ee-456b-b10d-5f08fb1796e0", "_admin": { "created": 1535392482.0067868, - "projects_read": [ - "admin" - ], + "projects_read": ["admin"], "modified": 1535392482.0067868, - "projects_write": [ - "admin" - ] + "projects_write": ["admin"], }, "nsr-id-ref": "87776f33-b67c-417a-8119-cb08e4098951", "member-vnf-index-ref": "1", - "connection-point": [ - { - "name": "eth0", - "id": None, - "connection-point-id": None - } - ] + "connection-point": [{"name": "eth0", "id": None, "connection-point-id": None}], }, { "_id": "3336eb44-77df-4c4f-9881-d2828d259864", @@ -230,15 +217,16 @@ vnfr_record_mocks = [ { "mac-address": "fa:16:3e:1e:76:e8", "name": "eth0", - "ip-address": "192.168.160.10" + "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", "status-detailed": None, "ip-address": "192.168.160.10", - "vdu-id-ref": "cirros_vnfd-VM" + "vdu-id-ref": "cirros_vnfd-VM", } ], "id": "3336eb44-77df-4c4f-9881-d2828d259864", @@ -246,181 +234,207 @@ vnfr_record_mocks = [ "vnfd-id": "63f44c41-45ee-456b-b10d-5f08fb1796e0", "_admin": { "created": 1535392482.0076294, - "projects_read": [ - "admin" - ], + "projects_read": ["admin"], "modified": 1535392482.0076294, - "projects_write": [ - "admin" - ] + "projects_write": ["admin"], }, "nsr-id-ref": "87776f33-b67c-417a-8119-cb08e4098951", "member-vnf-index-ref": "2", - "connection-point": [ - { - "name": "eth0", - "id": None, - "connection-point-id": None - } - ]}] + "connection-point": [{"name": "eth0", "id": None, "connection-point-id": None}], + }, +] + +nsd_record_mock = { + "id": "cirros_vdu_scaling_ns", + "name": "cirros_vdu_scaling_ns", + "description": "Simple NS example with a cirros_vdu_scaling_vnf", + "designer": "OSM", + "version": "1.0", + "vnfd-id": ["cirros_vdu_scaling_vnf"], + "df": [ + { + "id": "default-df", + "vnf-profile": [ + { + "id": "1", + "vnfd-id": "cirros_vdu_scaling_vnf", + "virtual-link-connectivity": [ + { + "virtual-link-profile-id": "cirros_nsd_vld1", + "constituent-cpd-id": [ + { + "constituent-base-element-id": "1", + "constituent-cpd-id": "eth0-ext", + } + ], + } + ], + }, + { + "id": "2", + "vnfd-id": "cirros_vdu_scaling_vnf", + "virtual-link-connectivity": [ + { + "virtual-link-profile-id": "cirros_nsd_vld1", + "constituent-cpd-id": [ + { + "constituent-base-element-id": "2", + "constituent-cpd-id": "eth0-ext", + } + ], + } + ], + }, + ], + } + ], + "virtual-link-desc": [{"id": "cirros_nsd_vld1", "mgmt-network": "true"}], +} -nsd_record_mock = {'name': 'cirros_vdu_scaling_ns', - 'version': '1.0', - 'short-name': 'cirros_vdu_scaling_ns', - 'logo': 'osm.png', - 'id': 'cirros_vdu_scaling_ns', - 'description': 'Simple NS example with a cirros_vdu_scaling_vnf', - 'vendor': 'OSM', - 'vld': [ - {'name': 'cirros_nsd_vld1', - 'type': 'ELAN', - 'id': 'cirros_nsd_vld1', - 'mgmt-network': 'true', - 'vnfd-connection-point-ref': [ - {'vnfd-id-ref': 'cirros_vdu_scaling_vnf', - 'vnfd-connection-point-ref': 'eth0', - 'member-vnf-index-ref': 1}, - {'vnfd-id-ref': 'cirros_vdu_scaling_vnf', - 'vnfd-connection-point-ref': 'eth0', - 'member-vnf-index-ref': 2}]}], - 'constituent-vnfd': [{'vnfd-id-ref': 'cirros_vdu_scaling_vnf', - 'member-vnf-index': '1'}, - {'vnfd-id-ref': 'cirros_vdu_scaling_vnf', - 'member-vnf-index': '2'}]} vnfd_record_mock = { + "id": "cirros_vdu_scaling_vnf", "_id": "63f44c41-45ee-456b-b10d-5f08fb1796e0", - "name": "cirros_vdu_scaling_vnf", - "vendor": "OSM", + "product-name": "cirros_vdu_scaling_vnf", + "description": "Simple VNF example with a cirros and a scaling group descriptor", + "provider": "OSM", + "version": "1.0", + "mgmt-cp": "eth0-ext", + "virtual-storage-desc": [{"id": "cirros_vnfd-VM-storage", "size-of-storage": 2}], + "virtual-compute-desc": [ + { + "id": "cirros_vnfd-VM-compute", + "virtual-cpu": {"num-virtual-cpu": 1}, + "virtual-memory": {"size": 0.25}, + } + ], + "sw-image-desc": [{"id": "cirros034", "name": "cirros034", "image": "cirros034"}], "vdu": [ { + "id": "cirros_vnfd-VM", + "description": "cirros_vnfd-VM", "name": "cirros_vnfd-VM", - "monitoring-param": [ + "alarm": [ { - "id": "cirros_vnfd-VM_memory_util", - "nfvi-metric": "average_memory_utilization" + "value": 20.0, + "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", } ], - "vm-flavor": { - "vcpu-count": 1, - "memory-mb": 256, - "storage-gb": 2 - }, - "description": "cirros_vnfd-VM", - "count": 1, - "id": "cirros_vnfd-VM", - "interface": [ + "sw-image-desc": "cirros034", + "virtual-compute-desc": "cirros_vnfd-VM-compute", + "virtual-storage-desc": ["cirros_vnfd-VM-storage"], + "int-cpd": [ { - "name": "eth0", - "external-connection-point-ref": "eth0", - "type": "EXTERNAL", - "virtual-interface": { - "bandwidth": "0", - "type": "VIRTIO", - "vpci": "0000:00:0a.0" - } + "id": "eth0-int", + "virtual-network-interface-requirement": [ + { + "name": "eth0", + "virtual-interface": { + "bandwidth": "0", + "type": "VIRTIO", + "vpci": "0000:00:0a.0", + }, + } + ], } ], - "image": "cirros034", - "alarm": [ + "monitoring-parameter": [ { - "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" + "id": "cirros_vnf_memory_util", + "name": "cirros_vnf_memory_util", + "performance-metric": "average_memory_utilization", } - ] - } - ], - "monitoring-param": [ - { - "id": "cirros_vnf_memory_util", - "name": "cirros_vnf_memory_util", - "aggregation-type": "AVERAGE", - "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", - "version": "1.0", - "connection-point": [ - { - "name": "eth0", - "type": "VPORT" + ], } ], - "mgmt-interface": { - "cp": "eth0" - }, - "scaling-group-descriptor": [ + "df": [ { - "name": "scale_cirros_vnfd-VM", - "min-instance-count": 1, - "vdu": [ + "id": "default-df", + "vdu-profile": [ { - "count": 1, - "vdu-id-ref": "cirros_vnfd-VM" + "id": "cirros_vnfd-VM", + "min-number-of-instances": 1, + "max-number-of-instances": 10, + "vdu-configuration-id": "cirros_vnfd-VM-vdu-configuration", } ], - "max-instance-count": 10, - "scaling-policy": [ + "healing-aspect": [ { - "name": "auto_memory_util_above_threshold", - "scaling-type": "automatic", - "cooldown-time": 60, - "threshold-time": 10, - "scaling-criteria": [ + "id": "cirros_vnfd-VM-autoheal", + "healing-policy": [ { - "name": "group1_memory_util_above_threshold", - "vnf-monitoring-param-ref": "cirros_vnf_memory_util", - "scale-out-threshold": 80, - "scale-out-relational-operation": "GT", - "scale-in-relational-operation": "LT", - "scale-in-threshold": 20 + "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", + "vdu-level": [ + {"vdu-id": "cirros_vnfd-VM", "number-of-instances": 1} + ], } - ] + ], + "scaling-aspect": [ + { + "id": "scale_cirros_vnfd-VM", + "name": "scale_cirros_vnfd-VM", + "max-scale-level": 10, + "scaling-policy": [ + { + "name": "auto_memory_util_above_threshold", + "scaling-type": "automatic", + "cooldown-time": 60, + "threshold-time": 10, + "scaling-criteria": [ + { + "name": "group1_memory_util_above_threshold", + "vnf-monitoring-param-ref": "cirros_vnf_memory_util", + "scale-out-threshold": 80, + "scale-out-relational-operation": "GT", + "scale-in-relational-operation": "LT", + "scale-in-threshold": 20, + } + ], + } + ], + "aspect-delta-details": { + "deltas": [ + { + "id": "scale_cirros_vnfd-VM-delta", + "vdu-delta": [ + {"number-of-instances": 1, "id": "cirros_vnfd-VM"} + ], + } + ] + }, + } + ], + } + ], + "ext-cpd": [ + {"id": "eth0-ext", "int-cpd": {"vdu-id": "cirros_vnfd-VM", "cpd": "eth0-int"}} + ], + "vdu-configuration": [ + { + "juju": {"charm": "testmetrics", "proxy": True}, + "metrics": [{"name": "users"}], + "id": "cirros_vnfd-VM-vdu-configuration", } ], - "short-name": "cirros_vdu_scaling_vnf", "_admin": { "created": 1535392242.6281035, "modified": 1535392242.6281035, @@ -430,30 +444,32 @@ vnfd_record_mock = { "path": "/app/storage/", "folder": "63f44c41-45ee-456b-b10d-5f08fb1796e0", "fs": "local", - "descriptor": "cirros_vnf/cirros_vdu_scaling_vnfd.yaml" + "descriptor": "cirros_vnf/cirros_vdu_scaling_vnfd.yaml", }, "usageSate": "NOT_IN_USE", "onboardingState": "ONBOARDED", - "userDefinedData": { - - }, - "projects_read": [ - "admin" - ], + "userDefinedData": {}, + "projects_read": ["admin"], "operationalState": "ENABLED", - "projects_write": [ - "admin" - ] - } + "projects_write": ["admin"], + }, } -MODELS = [ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm, VnfAlarm, AlarmAction] +MODELS = [ + ScalingGroup, + ScalingPolicy, + ScalingCriteria, + ScalingAlarm, + VnfAlarm, + AlarmAction, + HealingAction, +] class PolicyModuleAgentTest(unittest.TestCase): def setUp(self): super() - database.db.initialize(connect('sqlite:///test_db.sqlite')) + database.db.initialize(connect("sqlite:///test_db.sqlite")) database.db.bind(MODELS) database.db.connect() database.db.drop_tables(MODELS) @@ -463,21 +479,30 @@ class PolicyModuleAgentTest(unittest.TestCase): def tearDown(self): super() - os.remove('test_db.sqlite') + os.remove("test_db.sqlite") - @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_scaling_groups(self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init): + @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_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 "1" in args[1]: return vnfr_record_mocks[0] - if '2' in args[1]: + if "2" in args[1]: return vnfr_record_mocks[1] + def assert_not_called_with(*args, **kwargs): + try: + create_alarm.assert_called_with(*args, **kwargs) + except AssertionError: + return + raise AssertionError("Expected to not have been called.") + async def _test_configure_scaling_groups_create_alarm(*args, **kwargs): return uuid.uuid4() @@ -486,52 +511,65 @@ 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 + create_alarm.assert_not_called_with = assert_not_called_with 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', - statistic='AVERAGE', - threshold=80, - vdu_name='cirros_ns-1-cirros_vnfd-VM-1', - vnf_member_index='1') - create_alarm.assert_any_call(metric_name='average_memory_utilization', - 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='average_memory_utilization', - 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='average_memory_utilization', - ns_id='test_nsr_id', - operation='LT', - statistic='AVERAGE', - threshold=20, - vdu_name='cirros_ns-2-cirros_vnfd-VM-1', - vnf_member_index='2') + 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", + threshold=80, + vdu_name="cirros_ns-1-cirros_vnfd-VM-1", + vnf_member_index="1", + action="scale_out", + ) + create_alarm.assert_not_called_with( + metric_name="average_memory_utilization", + ns_id="test_nsr_id", + operation="LT", + threshold=20, + vdu_name="cirros_ns-1-cirros_vnfd-VM-1", + vnf_member_index="1", + action="scale_out", + ) + create_alarm.assert_any_call( + metric_name="average_memory_utilization", + ns_id="test_nsr_id", + operation="GT", + threshold=80, + vdu_name="cirros_ns-2-cirros_vnfd-VM-1", + vnf_member_index="2", + action="scale_out", + ) + create_alarm.assert_not_called_with( + metric_name="average_memory_utilization", + ns_id="test_nsr_id", + operation="LT", + threshold=20, + vdu_name="cirros_ns-2-cirros_vnfd-VM-1", + vnf_member_index="2", + action="scale_out", + ) scaling_record = ScalingGroup.get() - self.assertEqual(scaling_record.name, 'scale_cirros_vnfd-VM') - self.assertEqual(scaling_record.nsr_id, 'test_nsr_id') + 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): + @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]: + if "1" in args[1]: return vnfr_record_mocks[0] - if '2' in args[1]: + if "2" in args[1]: return vnfr_record_mocks[1] async def _test_configure_vnf_alarms_create_alarm(*args, **kwargs): @@ -544,22 +582,75 @@ class PolicyModuleAgentTest(unittest.TestCase): 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='average_memory_utilization', - ns_id='test_nsr_id', - vdu_name='cirros_ns-1-cirros_vnfd-VM-1', - vnf_member_index='1', - threshold=20.0, - operation='LT', - statistic='AVERAGE') - create_alarm.assert_any_call(metric_name='average_memory_utilization', - ns_id='test_nsr_id', - vdu_name='cirros_ns-2-cirros_vnfd-VM-1', - vnf_member_index='2', - threshold=20.0, - operation='LT', - statistic='AVERAGE') + self.loop.run_until_complete( + agent.alarming_service.configure_vnf_alarms("test_nsr_id") + ) + create_alarm.assert_any_call( + metric_name="average_memory_utilization", + ns_id="test_nsr_id", + vdu_name="cirros_ns-1-cirros_vnfd-VM-1", + vnf_member_index="1", + threshold=20.0, + operation="LT", + action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}", + ) + create_alarm.assert_any_call( + metric_name="average_memory_utilization", + ns_id="test_nsr_id", + vdu_name="cirros_ns-2-cirros_vnfd-VM-1", + vnf_member_index="2", + threshold=20.0, + operation="LT", + 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__': +if __name__ == "__main__": unittest.main()