Reformat POL to standardized format
[osm/POL.git] / osm_policy_module / tests / integration / test_policy_agent.py
index c175697..2c86b12 100644 (file)
@@ -23,6 +23,7 @@
 ##
 import asyncio
 import logging
+import os
 import sys
 import unittest
 import uuid
@@ -30,13 +31,21 @@ 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
@@ -50,48 +59,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",
@@ -99,33 +70,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": {
@@ -133,9 +139,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",
@@ -145,29 +151,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 = [
@@ -182,7 +180,7 @@ 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",
                     }
                 ],
                 "status": "ACTIVE",
@@ -190,7 +188,7 @@ vnfr_record_mocks = [
                 "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",
@@ -198,23 +196,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",
@@ -227,7 +215,7 @@ 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",
                     }
                 ],
                 "status": "ACTIVE",
@@ -235,7 +223,7 @@ vnfr_record_mocks = [
                 "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",
@@ -243,156 +231,192 @@ 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",
+                            },
+                        }
+                    ],
+                }
+            ],
+            "monitoring-parameter": [
+                {
+                    "id": "cirros_vnf_memory_util",
+                    "name": "cirros_vnf_memory_util",
+                    "performance-metric": "average_memory_utilization",
                 }
             ],
-            "image": "cirros034"
-        }
-    ],
-    "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": [
+            "instantiation-level": [
                 {
-                    "name": "auto_memory_util_above_threshold",
-                    "scaling-type": "automatic",
-                    "cooldown-time": 60,
-                    "threshold-time": 10,
-                    "scaling-criteria": [
+                    "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": "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
+                            "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,
@@ -402,55 +426,64 @@ 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"],
+    },
 }
 
-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__')
-    @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()
 
@@ -459,40 +492,93 @@ 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"))
-        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-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')
-        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')
+        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",
+            threshold=80,
+            vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
+            vnf_member_index="1",
+        )
+        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",
+        )
+        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",
+        )
+        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",
+        )
         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
+    ):
+        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="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",
+        )
+        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",
+        )
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()