Code Coverage

Cobertura Coverage Report > osm_policy_module.tests.integration >

test_policy_agent.py

Trend

Classes100%
 
Lines98%
   
Conditionals100%
 

File Coverage summary

NameClassesLinesConditionals
test_policy_agent.py
100%
1/1
98%
122/124
100%
0/0

Coverage Breakdown by Class

NameLinesConditionals
test_policy_agent.py
98%
122/124
N/A

Source

osm_policy_module/tests/integration/test_policy_agent.py
1 # -*- coding: utf-8 -*-
2
3 # Copyright 2018 Whitestack, LLC
4 # *************************************************************
5
6 # This file is part of OSM Monitoring module
7 # All Rights Reserved to Whitestack, LLC
8
9 # Licensed under the Apache License, Version 2.0 (the "License"); you may
10 # not use this file except in compliance with the License. You may obtain
11 # a copy of the License at
12
13 #         http://www.apache.org/licenses/LICENSE-2.0
14
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18 # License for the specific language governing permissions and limitations
19 # under the License.
20
21 # For those usages not covered by the Apache License, Version 2.0 please
22 # contact: bdiaz@whitestack.com or glavado@whitestack.com
23 ##
24 1 import asyncio
25 1 import logging
26 1 import os
27 1 import sys
28 1 import unittest
29 1 import uuid
30 1 from unittest.mock import patch, Mock
31
32 1 from kafka import KafkaProducer
33 1 from osm_common.dbmongo import DbMongo
34 1 from playhouse.db_url import connect
35
36 1 from osm_policy_module.common.common_db_client import CommonDbClient
37 1 from osm_policy_module.common.mon_client import MonClient
38 1 from osm_policy_module.core import database
39 1 from osm_policy_module.core.agent import PolicyModuleAgent
40 1 from osm_policy_module.core.config import Config
41 1 from osm_policy_module.core.database import (
42     ScalingGroup,
43     ScalingAlarm,
44     ScalingPolicy,
45     ScalingCriteria,
46     VnfAlarm,
47     AlarmAction,
48     HealingAction,
49 )
50
51 1 log = logging.getLogger()
52 1 log.level = logging.INFO
53 1 stream_handler = logging.StreamHandler(sys.stdout)
54 1 log.addHandler(stream_handler)
55
56 1 nsr_record_mock = {
57     "_id": "87776f33-b67c-417a-8119-cb08e4098951",
58     "crete-time": 1535392482.0044956,
59     "operational-status": "running",
60     "ssh-authorized-key": None,
61     "name-ref": "cirros_ns",
62     "nsd": {
63         "_id": "d7c8bd3c-eb39-4514-8847-19f01345524f",
64         "_admin": {
65             "created": 1535392246.499733,
66             "userDefinedData": {},
67             "usageSate": "NOT_IN_USE",
68             "storage": {
69                 "zipfile": "package.tar.gz",
70                 "fs": "local",
71                 "path": "/app/storage/",
72                 "folder": "d7c8bd3c-eb39-4514-8847-19f01345524f",
73                 "pkg-dir": "cirros_nsd",
74                 "descriptor": "cirros_nsd/cirros_vdu_scaling_nsd.yaml",
75             },
76             "onboardingState": "ONBOARDED",
77             "modified": 1535392246.499733,
78             "projects_read": ["admin"],
79             "operationalState": "ENABLED",
80             "projects_write": ["admin"],
81         },
82         "id": "cirros_vdu_scaling_ns",
83         "name": "cirros_vdu_scaling_ns",
84         "description": "Simple NS example with a cirros_vdu_scaling_vnf",
85         "designer": "OSM",
86         "version": "1.0",
87         "vnfd-id": ["cirros_vdu_scaling_vnf"],
88         "df": [
89             {
90                 "id": "default-df",
91                 "vnf-profile": [
92                     {
93                         "id": "1",
94                         "vnfd-id": "cirros_vdu_scaling_vnf",
95                         "virtual-link-connectivity": [
96                             {
97                                 "virtual-link-profile-id": "cirros_nsd_vld1",
98                                 "constituent-cpd-id": [
99                                     {
100                                         "constituent-base-element-id": "1",
101                                         "constituent-cpd-id": "eth0-ext",
102                                     }
103                                 ],
104                             }
105                         ],
106                     },
107                     {
108                         "id": "2",
109                         "vnfd-id": "cirros_vdu_scaling_vnf",
110                         "virtual-link-connectivity": [
111                             {
112                                 "virtual-link-profile-id": "cirros_nsd_vld1",
113                                 "constituent-cpd-id": [
114                                     {
115                                         "constituent-base-element-id": "2",
116                                         "constituent-cpd-id": "eth0-ext",
117                                     }
118                                 ],
119                             }
120                         ],
121                     },
122                 ],
123             }
124         ],
125         "virtual-link-desc": [{"id": "cirros_nsd_vld1", "mgmt-network": "true"}],
126     },
127     "id": "87776f33-b67c-417a-8119-cb08e4098951",
128     "config-status": "configured",
129     "operational-events": [],
130     "_admin": {
131         "created": 1535392482.0084584,
132         "projects_read": ["admin"],
133         "nsState": "INSTANTIATED",
134         "modified": 1535392482.0084584,
135         "projects_write": ["admin"],
136         "deployed": {
137             "RO": {
138                 "vnfd_id": {
139                     "cirros_vdu_scaling_vnf": "7445e347-fe2f-431a-abc2-8b9be3d093c6"
140                 },
141                 "nsd_id": "92c56cf0-f8fa-488c-9afb-9f3d78ae6bbb",
142                 "nsr_id": "637e12cd-c201-4c44-8ebd-70fb57a4dcee",
143                 "nsr_status": "BUILD",
144             }
145         },
146     },
147     "nsd-ref": "cirros_vdu_scaling_ns",
148     "name": "cirros_ns",
149     "resource-orchestrator": "osmopenmano",
150     "instantiate_params": {
151         "nsDescription": "default description",
152         "nsdId": "d7c8bd3c-eb39-4514-8847-19f01345524f",
153         "nsr_id": "87776f33-b67c-417a-8119-cb08e4098951",
154         "nsName": "cirros_ns",
155         "vimAccountId": "be48ae31-1d46-4892-a4b4-d69abd55714b",
156     },
157     "description": "default description",
158     "constituent-vnfr-ref": [
159         "0d9d06ad-3fc2-418c-9934-465e815fafe2",
160         "3336eb44-77df-4c4f-9881-d2828d259864",
161     ],
162     "admin-status": "ENABLED",
163     "detailed-status": "done",
164     "datacenter": "be48ae31-1d46-4892-a4b4-d69abd55714b",
165     "orchestration-progress": {},
166     "short-name": "cirros_ns",
167     "ns-instance-config-ref": "87776f33-b67c-417a-8119-cb08e4098951",
168     "nsd-name-ref": "cirros_vdu_scaling_ns",
169     "admin": {"deployed": {"RO": {"nsr_status": "ACTIVE"}}},
170 }
171
172 1 vnfr_record_mocks = [
173     {
174         "_id": "0d9d06ad-3fc2-418c-9934-465e815fafe2",
175         "ip-address": "192.168.160.2",
176         "created-time": 1535392482.0044956,
177         "vim-account-id": "be48ae31-1d46-4892-a4b4-d69abd55714b",
178         "vdur": [
179             {
180                 "interfaces": [
181                     {
182                         "mac-address": "fa:16:3e:71:fd:b8",
183                         "name": "eth0",
184                         "ip-address": "192.168.160.2",
185                     }
186                 ],
187                 "count-index": 0,
188                 "status": "ACTIVE",
189                 "vim-id": "63a65636-9fc8-4022-b070-980823e6266a",
190                 "name": "cirros_ns-1-cirros_vnfd-VM-1",
191                 "status-detailed": None,
192                 "ip-address": "192.168.160.2",
193                 "vdu-id-ref": "cirros_vnfd-VM",
194             }
195         ],
196         "id": "0d9d06ad-3fc2-418c-9934-465e815fafe2",
197         "vnfd-ref": "cirros_vdu_scaling_vnf",
198         "vnfd-id": "63f44c41-45ee-456b-b10d-5f08fb1796e0",
199         "_admin": {
200             "created": 1535392482.0067868,
201             "projects_read": ["admin"],
202             "modified": 1535392482.0067868,
203             "projects_write": ["admin"],
204         },
205         "nsr-id-ref": "87776f33-b67c-417a-8119-cb08e4098951",
206         "member-vnf-index-ref": "1",
207         "connection-point": [{"name": "eth0", "id": None, "connection-point-id": None}],
208     },
209     {
210         "_id": "3336eb44-77df-4c4f-9881-d2828d259864",
211         "ip-address": "192.168.160.10",
212         "created-time": 1535392482.0044956,
213         "vim-account-id": "be48ae31-1d46-4892-a4b4-d69abd55714b",
214         "vdur": [
215             {
216                 "interfaces": [
217                     {
218                         "mac-address": "fa:16:3e:1e:76:e8",
219                         "name": "eth0",
220                         "ip-address": "192.168.160.10",
221                     }
222                 ],
223                 "count-index": 0,
224                 "status": "ACTIVE",
225                 "vim-id": "a154b8d3-2b10-421a-a51d-4b391d9bd366",
226                 "name": "cirros_ns-2-cirros_vnfd-VM-1",
227                 "status-detailed": None,
228                 "ip-address": "192.168.160.10",
229                 "vdu-id-ref": "cirros_vnfd-VM",
230             }
231         ],
232         "id": "3336eb44-77df-4c4f-9881-d2828d259864",
233         "vnfd-ref": "cirros_vdu_scaling_vnf",
234         "vnfd-id": "63f44c41-45ee-456b-b10d-5f08fb1796e0",
235         "_admin": {
236             "created": 1535392482.0076294,
237             "projects_read": ["admin"],
238             "modified": 1535392482.0076294,
239             "projects_write": ["admin"],
240         },
241         "nsr-id-ref": "87776f33-b67c-417a-8119-cb08e4098951",
242         "member-vnf-index-ref": "2",
243         "connection-point": [{"name": "eth0", "id": None, "connection-point-id": None}],
244     },
245 ]
246
247 1 nsd_record_mock = {
248     "id": "cirros_vdu_scaling_ns",
249     "name": "cirros_vdu_scaling_ns",
250     "description": "Simple NS example with a cirros_vdu_scaling_vnf",
251     "designer": "OSM",
252     "version": "1.0",
253     "vnfd-id": ["cirros_vdu_scaling_vnf"],
254     "df": [
255         {
256             "id": "default-df",
257             "vnf-profile": [
258                 {
259                     "id": "1",
260                     "vnfd-id": "cirros_vdu_scaling_vnf",
261                     "virtual-link-connectivity": [
262                         {
263                             "virtual-link-profile-id": "cirros_nsd_vld1",
264                             "constituent-cpd-id": [
265                                 {
266                                     "constituent-base-element-id": "1",
267                                     "constituent-cpd-id": "eth0-ext",
268                                 }
269                             ],
270                         }
271                     ],
272                 },
273                 {
274                     "id": "2",
275                     "vnfd-id": "cirros_vdu_scaling_vnf",
276                     "virtual-link-connectivity": [
277                         {
278                             "virtual-link-profile-id": "cirros_nsd_vld1",
279                             "constituent-cpd-id": [
280                                 {
281                                     "constituent-base-element-id": "2",
282                                     "constituent-cpd-id": "eth0-ext",
283                                 }
284                             ],
285                         }
286                     ],
287                 },
288             ],
289         }
290     ],
291     "virtual-link-desc": [{"id": "cirros_nsd_vld1", "mgmt-network": "true"}],
292 }
293
294
295 1 vnfd_record_mock = {
296     "id": "cirros_vdu_scaling_vnf",
297     "_id": "63f44c41-45ee-456b-b10d-5f08fb1796e0",
298     "product-name": "cirros_vdu_scaling_vnf",
299     "description": "Simple VNF example with a cirros and a scaling group descriptor",
300     "provider": "OSM",
301     "version": "1.0",
302     "mgmt-cp": "eth0-ext",
303     "virtual-storage-desc": [{"id": "cirros_vnfd-VM-storage", "size-of-storage": 2}],
304     "virtual-compute-desc": [
305         {
306             "id": "cirros_vnfd-VM-compute",
307             "virtual-cpu": {"num-virtual-cpu": 1},
308             "virtual-memory": {"size": 0.25},
309         }
310     ],
311     "sw-image-desc": [{"id": "cirros034", "name": "cirros034", "image": "cirros034"}],
312     "vdu": [
313         {
314             "id": "cirros_vnfd-VM",
315             "description": "cirros_vnfd-VM",
316             "name": "cirros_vnfd-VM",
317             "alarm": [
318                 {
319                     "value": 20.0,
320                     "actions": {
321                         "insufficient-data": [{"url": "localhost:9090"}],
322                         "ok": [{"url": "localhost:9090"}],
323                         "alarm": [{"url": "localhost:9090"}],
324                     },
325                     "alarm-id": "alarm-1",
326                     "operation": "LT",
327                     "vnf-monitoring-param-ref": "cirros_vnf_memory_util",
328                 }
329             ],
330             "sw-image-desc": "cirros034",
331             "virtual-compute-desc": "cirros_vnfd-VM-compute",
332             "virtual-storage-desc": ["cirros_vnfd-VM-storage"],
333             "int-cpd": [
334                 {
335                     "id": "eth0-int",
336                     "virtual-network-interface-requirement": [
337                         {
338                             "name": "eth0",
339                             "virtual-interface": {
340                                 "bandwidth": "0",
341                                 "type": "VIRTIO",
342                                 "vpci": "0000:00:0a.0",
343                             },
344                         }
345                     ],
346                 }
347             ],
348             "monitoring-parameter": [
349                 {
350                     "id": "cirros_vnf_memory_util",
351                     "name": "cirros_vnf_memory_util",
352                     "performance-metric": "average_memory_utilization",
353                 }
354             ],
355         }
356     ],
357     "df": [
358         {
359             "id": "default-df",
360             "vdu-profile": [
361                 {
362                     "id": "cirros_vnfd-VM",
363                     "min-number-of-instances": 1,
364                     "max-number-of-instances": 10,
365                     "vdu-configuration-id": "cirros_vnfd-VM-vdu-configuration",
366                 }
367             ],
368             "healing-aspect": [
369                 {
370                     "id": "cirros_vnfd-VM-autoheal",
371                     "healing-policy": [
372                         {
373                             "vdu-id": "cirros_vnfd-VM",
374                             "event-name": "heal-alarm",
375                             "recovery-type": "automatic",
376                             "action-on-recovery": "REDEPLOY_ONLY",
377                             "cooldown-time": 180,
378                             "day1": False,
379                         }
380                     ],
381                 }
382             ],
383             "instantiation-level": [
384                 {
385                     "id": "default-instantiation-level",
386                     "vdu-level": [
387                         {"vdu-id": "cirros_vnfd-VM", "number-of-instances": 1}
388                     ],
389                 }
390             ],
391             "scaling-aspect": [
392                 {
393                     "id": "scale_cirros_vnfd-VM",
394                     "name": "scale_cirros_vnfd-VM",
395                     "max-scale-level": 10,
396                     "scaling-policy": [
397                         {
398                             "name": "auto_memory_util_above_threshold",
399                             "scaling-type": "automatic",
400                             "cooldown-time": 60,
401                             "threshold-time": 10,
402                             "scaling-criteria": [
403                                 {
404                                     "name": "group1_memory_util_above_threshold",
405                                     "vnf-monitoring-param-ref": "cirros_vnf_memory_util",
406                                     "scale-out-threshold": 80,
407                                     "scale-out-relational-operation": "GT",
408                                     "scale-in-relational-operation": "LT",
409                                     "scale-in-threshold": 20,
410                                 }
411                             ],
412                         }
413                     ],
414                     "aspect-delta-details": {
415                         "deltas": [
416                             {
417                                 "id": "scale_cirros_vnfd-VM-delta",
418                                 "vdu-delta": [
419                                     {"number-of-instances": 1, "id": "cirros_vnfd-VM"}
420                                 ],
421                             }
422                         ]
423                     },
424                 }
425             ],
426         }
427     ],
428     "ext-cpd": [
429         {"id": "eth0-ext", "int-cpd": {"vdu-id": "cirros_vnfd-VM", "cpd": "eth0-int"}}
430     ],
431     "vdu-configuration": [
432         {
433             "juju": {"charm": "testmetrics", "proxy": True},
434             "metrics": [{"name": "users"}],
435             "id": "cirros_vnfd-VM-vdu-configuration",
436         }
437     ],
438     "_admin": {
439         "created": 1535392242.6281035,
440         "modified": 1535392242.6281035,
441         "storage": {
442             "zipfile": "package.tar.gz",
443             "pkg-dir": "cirros_vnf",
444             "path": "/app/storage/",
445             "folder": "63f44c41-45ee-456b-b10d-5f08fb1796e0",
446             "fs": "local",
447             "descriptor": "cirros_vnf/cirros_vdu_scaling_vnfd.yaml",
448         },
449         "usageSate": "NOT_IN_USE",
450         "onboardingState": "ONBOARDED",
451         "userDefinedData": {},
452         "projects_read": ["admin"],
453         "operationalState": "ENABLED",
454         "projects_write": ["admin"],
455     },
456 }
457
458 1 MODELS = [
459     ScalingGroup,
460     ScalingPolicy,
461     ScalingCriteria,
462     ScalingAlarm,
463     VnfAlarm,
464     AlarmAction,
465     HealingAction,
466 ]
467
468
469 1 class PolicyModuleAgentTest(unittest.TestCase):
470 1     def setUp(self):
471 1         super()
472 1         database.db.initialize(connect("sqlite:///test_db.sqlite"))
473 1         database.db.bind(MODELS)
474 1         database.db.connect()
475 1         database.db.drop_tables(MODELS)
476 1         database.db.create_tables(MODELS)
477 1         database.db.close()
478 1         self.loop = asyncio.new_event_loop()
479
480 1     def tearDown(self):
481 1         super()
482 1         os.remove("test_db.sqlite")
483
484 1     @patch.object(DbMongo, "db_connect", Mock())
485 1     @patch.object(KafkaProducer, "__init__")
486 1     @patch.object(MonClient, "create_alarm")
487 1     @patch.object(CommonDbClient, "get_vnfd")
488 1     @patch.object(CommonDbClient, "get_nsr")
489 1     @patch.object(CommonDbClient, "get_vnfr")
490 1     def test_configure_scaling_groups(
491         self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init
492     ):
493 1         def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
494 1             if "1" in args[1]:
495 1                 return vnfr_record_mocks[0]
496 1             if "2" in args[1]:
497 1                 return vnfr_record_mocks[1]
498
499 1         def assert_not_called_with(*args, **kwargs):
500 1             try:
501 1                 create_alarm.assert_called_with(*args, **kwargs)
502 1             except AssertionError:
503 1                 return
504 0             raise AssertionError("Expected to not have been called.")
505
506 1         async def _test_configure_scaling_groups_create_alarm(*args, **kwargs):
507 1             return uuid.uuid4()
508
509 1         kafka_producer_init.return_value = None
510 1         get_vnfr.side_effect = _test_configure_scaling_groups_get_vnfr
511 1         get_nsr.return_value = nsr_record_mock
512 1         get_vnfd.return_value = vnfd_record_mock
513 1         create_alarm.side_effect = _test_configure_scaling_groups_create_alarm
514 1         create_alarm.assert_not_called_with = assert_not_called_with
515 1         config = Config()
516 1         agent = PolicyModuleAgent(config)
517 1         self.loop.run_until_complete(
518             agent.autoscaling_service.configure_scaling_groups("test_nsr_id")
519         )
520 1         create_alarm.assert_any_call(
521             metric_name="average_memory_utilization",
522             ns_id="test_nsr_id",
523             operation="GT",
524             threshold=80,
525             vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
526             vnf_member_index="1",
527             action="scale_out",
528         )
529 1         create_alarm.assert_not_called_with(
530             metric_name="average_memory_utilization",
531             ns_id="test_nsr_id",
532             operation="LT",
533             threshold=20,
534             vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
535             vnf_member_index="1",
536             action="scale_out",
537         )
538 1         create_alarm.assert_any_call(
539             metric_name="average_memory_utilization",
540             ns_id="test_nsr_id",
541             operation="GT",
542             threshold=80,
543             vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
544             vnf_member_index="2",
545             action="scale_out",
546         )
547 1         create_alarm.assert_not_called_with(
548             metric_name="average_memory_utilization",
549             ns_id="test_nsr_id",
550             operation="LT",
551             threshold=20,
552             vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
553             vnf_member_index="2",
554             action="scale_out",
555         )
556 1         scaling_record = ScalingGroup.get()
557 1         self.assertEqual(scaling_record.name, "scale_cirros_vnfd-VM")
558 1         self.assertEqual(scaling_record.nsr_id, "test_nsr_id")
559
560 1     @patch.object(DbMongo, "db_connect", Mock())
561 1     @patch.object(KafkaProducer, "__init__")
562 1     @patch.object(MonClient, "create_alarm")
563 1     @patch.object(CommonDbClient, "get_vnfd")
564 1     @patch.object(CommonDbClient, "get_nsr")
565 1     @patch.object(CommonDbClient, "get_vnfr")
566 1     def test_configure_vnf_alarms(
567         self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init
568     ):
569 1         def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
570 1             if "1" in args[1]:
571 1                 return vnfr_record_mocks[0]
572 1             if "2" in args[1]:
573 1                 return vnfr_record_mocks[1]
574
575 1         async def _test_configure_vnf_alarms_create_alarm(*args, **kwargs):
576 1             return uuid.uuid4()
577
578 1         kafka_producer_init.return_value = None
579 1         get_vnfr.side_effect = _test_configure_scaling_groups_get_vnfr
580 1         get_nsr.return_value = nsr_record_mock
581 1         get_vnfd.return_value = vnfd_record_mock
582 1         create_alarm.side_effect = _test_configure_vnf_alarms_create_alarm
583 1         config = Config()
584 1         agent = PolicyModuleAgent(config)
585 1         self.loop.run_until_complete(
586             agent.alarming_service.configure_vnf_alarms("test_nsr_id")
587         )
588 1         create_alarm.assert_any_call(
589             metric_name="average_memory_utilization",
590             ns_id="test_nsr_id",
591             vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
592             vnf_member_index="1",
593             threshold=20.0,
594             operation="LT",
595             action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}",
596         )
597 1         create_alarm.assert_any_call(
598             metric_name="average_memory_utilization",
599             ns_id="test_nsr_id",
600             vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
601             vnf_member_index="2",
602             threshold=20.0,
603             operation="LT",
604             action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}",
605         )
606
607 1     @patch.object(DbMongo, "db_connect", Mock())
608 1     @patch.object(KafkaProducer, "__init__")
609 1     @patch.object(MonClient, "create_alarm")
610 1     @patch.object(CommonDbClient, "get_vnfd")
611 1     @patch.object(CommonDbClient, "get_nsr")
612 1     @patch.object(CommonDbClient, "get_vnfr")
613 1     def test_configure_healing_alarms(
614         self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init
615     ):
616 1         def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
617 1             if "1" in args[1]:
618 1                 return vnfr_record_mocks[0]
619 1             if "2" in args[1]:
620 1                 return vnfr_record_mocks[1]
621
622 1         async def _test_configure_healing_alarms_create_alarm(*args, **kwargs):
623 1             return uuid.uuid4()
624
625 1         kafka_producer_init.return_value = None
626 1         get_vnfr.side_effect = _test_configure_scaling_groups_get_vnfr
627 1         get_nsr.return_value = nsr_record_mock
628 1         get_vnfd.return_value = vnfd_record_mock
629 1         create_alarm.side_effect = _test_configure_healing_alarms_create_alarm
630 1         config = Config()
631 1         agent = PolicyModuleAgent(config)
632 1         self.loop.run_until_complete(
633             agent.healing_service.configure_healing_alarms("test_nsr_id")
634         )
635 1         create_alarm.assert_any_call(
636             metric_name="vm_status",
637             ns_id="test_nsr_id",
638             vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
639             vnf_member_index="1",
640             threshold=1,
641             operation="LT",
642             statistic="AVERAGE",
643         )
644 1         create_alarm.assert_any_call(
645             metric_name="vm_status",
646             ns_id="test_nsr_id",
647             vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
648             vnf_member_index="2",
649             threshold=1,
650             operation="LT",
651             statistic="AVERAGE",
652         )
653
654
655 1 if __name__ == "__main__":
656 0     unittest.main()