Code Coverage

Cobertura Coverage Report > osm_policy_module.tests.unit.core >

test_policy_agent.py

Trend

File Coverage summary

NameClassesLinesConditionals
test_policy_agent.py
100%
1/1
99%
146/148
100%
0/0

Coverage Breakdown by Class

NameLinesConditionals
test_policy_agent.py
99%
146/148
N/A

Source

osm_policy_module/tests/unit/core/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 unittest
26 1 from unittest import mock
27
28 1 from osm_policy_module.alarming.service import AlarmingService
29 1 from osm_policy_module.autoscaling.service import AutoscalingService
30 1 from osm_policy_module.common.common_db_client import CommonDbClient
31 1 from osm_policy_module.core.agent import PolicyModuleAgent
32 1 from osm_policy_module.core.config import Config
33 1 from osm_policy_module.healing.service import HealingService
34
35
36 1 class PolicyAgentTest(unittest.TestCase):
37 1     def setUp(self):
38 1         self.loop = asyncio.new_event_loop()
39
40 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
41 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
42 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
43 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
44 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
45 1     @mock.patch("osm_policy_module.healing.service.MonClient")
46 1     @mock.patch("osm_policy_module.healing.service.LcmClient")
47 1     @mock.patch.object(AutoscalingService, "configure_scaling_groups")
48 1     @mock.patch.object(AlarmingService, "configure_vnf_alarms")
49 1     @mock.patch.object(HealingService, "configure_healing_alarms")
50 1     @mock.patch.object(AutoscalingService, "delete_orphaned_alarms")
51 1     @mock.patch.object(CommonDbClient, "get_nslcmop")
52 1     def test_handle_instantiated(
53         self,
54         get_nslcmop,
55         delete_orphaned_alarms,
56         configure_healing_alarms,
57         configure_vnf_alarms,
58         configure_scaling_groups,
59         autoscaling_lcm_client,
60         autoscaling_mon_client,
61         alarming_lcm_client,
62         alarming_mon_client,
63         healing_lcm_client,
64         healing_mon_client,
65     ):
66 1         async def mock_configure_scaling_groups(nsr_id):
67 1             pass
68
69 1         async def mock_configure_vnf_alarms(nsr_id):
70 1             pass
71
72 1         async def mock_configure_healing_alarms(nsr_id):
73 1             pass
74
75 1         async def mock_delete_orphaned_alarms(nsr_id):
76 0             pass
77
78 1         config = Config()
79 1         agent = PolicyModuleAgent(config)
80 1         assert autoscaling_lcm_client.called
81 1         assert autoscaling_mon_client.called
82 1         assert alarming_lcm_client.called
83 1         assert alarming_mon_client.called
84 1         assert healing_lcm_client.called
85 1         assert healing_mon_client.called
86 1         content = {
87             "nslcmop_id": "test_id",
88         }
89 1         nslcmop_completed = {
90             "operationState": "COMPLETED",
91             "nsInstanceId": "test_nsr_id",
92         }
93 1         nslcmop_failed = {"operationState": "FAILED", "nsInstanceId": "test_nsr_id"}
94 1         configure_scaling_groups.side_effect = mock_configure_scaling_groups
95 1         configure_vnf_alarms.side_effect = mock_configure_vnf_alarms
96 1         configure_healing_alarms.side_effect = mock_configure_healing_alarms
97 1         delete_orphaned_alarms.side_effect = mock_delete_orphaned_alarms
98
99 1         get_nslcmop.return_value = nslcmop_completed
100 1         self.loop.run_until_complete(agent._handle_instantiated(content))
101 1         configure_scaling_groups.assert_called_with("test_nsr_id")
102 1         configure_scaling_groups.reset_mock()
103
104 1         get_nslcmop.return_value = nslcmop_failed
105 1         self.loop.run_until_complete(agent._handle_instantiated(content))
106 1         configure_scaling_groups.assert_not_called()
107
108 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
109 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
110 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
111 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
112 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
113 1     @mock.patch.object(AutoscalingService, "configure_scaling_groups")
114 1     @mock.patch.object(AlarmingService, "configure_vnf_alarms")
115 1     @mock.patch.object(AutoscalingService, "delete_scaling_groups")
116 1     @mock.patch.object(AlarmingService, "delete_vnf_alarms")
117 1     def test_handle_policy_update(
118         self,
119         delete_vnf_alarms,
120         delete_scaling_groups,
121         configure_vnf_alarms,
122         configure_scaling_groups,
123         autoscaling_lcm_client,
124         autoscaling_mon_client,
125         alarming_lcm_client,
126         alarming_mon_client,
127     ):
128 1         async def mock_delete_scaling_groups(nsr_id, vnf_member_index):
129 1             pass
130
131 1         async def mock_delete_vnf_alarms(nsr_id, vnf_member_index):
132 1             pass
133
134 1         async def mock_configure_scaling_groups(nsr_id, vnf_member_index):
135 1             pass
136
137 1         async def mock_configure_vnf_alarms(nsr_id, vnf_member_index):
138 1             pass
139
140 1         config = Config()
141 1         agent = PolicyModuleAgent(config)
142 1         assert autoscaling_lcm_client.called
143 1         assert autoscaling_mon_client.called
144 1         assert alarming_lcm_client.called
145 1         assert alarming_mon_client.called
146 1         content = {
147             "nsr_id": "test_nsr_id",
148             "vnf_member_index": "1",
149             "operationState": "COMPLETED",
150         }
151 1         failed_content = {
152             "nsr_id": "test_nsr_id",
153             "vnf_member_index": "1",
154             "operationState": "FAILED",
155         }
156 1         configure_scaling_groups.side_effect = mock_configure_scaling_groups
157 1         configure_vnf_alarms.side_effect = mock_configure_vnf_alarms
158 1         delete_scaling_groups.side_effect = mock_delete_scaling_groups
159 1         delete_vnf_alarms.side_effect = mock_delete_vnf_alarms
160
161 1         self.loop.run_until_complete(agent._handle_policy_update(content))
162 1         configure_scaling_groups.assert_called_with("test_nsr_id", "1")
163 1         configure_scaling_groups.reset_mock()
164
165 1         self.loop.run_until_complete(agent._handle_policy_update(failed_content))
166 1         configure_scaling_groups.assert_not_called()
167
168 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
169 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
170 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
171 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
172 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
173 1     @mock.patch("osm_policy_module.healing.service.MonClient")
174 1     @mock.patch("osm_policy_module.healing.service.LcmClient")
175 1     @mock.patch.object(AutoscalingService, "handle_alarm")
176 1     @mock.patch.object(AlarmingService, "handle_alarm")
177 1     @mock.patch.object(HealingService, "handle_alarm")
178 1     def test_handle_alarm_notification(
179         self,
180         healing_handle_alarm,
181         alarming_handle_alarm,
182         autoscaling_handle_alarm,
183         autoscaling_lcm_client,
184         autoscaling_mon_client,
185         alarming_lcm_client,
186         alarming_mon_client,
187         healing_lcm_client,
188         healing_mon_client,
189     ):
190 1         async def mock_handle_alarm(alarm_uuid, status, payload=None):
191 1             pass
192
193 1         config = Config()
194 1         agent = PolicyModuleAgent(config)
195 1         assert autoscaling_lcm_client.called
196 1         assert autoscaling_mon_client.called
197 1         assert alarming_lcm_client.called
198 1         assert alarming_mon_client.called
199 1         assert healing_lcm_client.called
200 1         assert healing_mon_client.called
201 1         content = {
202             "notify_details": {
203                 "alarm_uuid": "test_alarm_uuid",
204                 "metric_name": "test_metric_name",
205                 "operation": "test_operation",
206                 "threshold_value": "test_threshold_value",
207                 "vdu_name": "test_vdu_name",
208                 "vnf_member_index": "test_vnf_member_index",
209                 "ns_id": "test_nsr_id",
210                 "status": "alarm",
211             }
212         }
213 1         autoscaling_handle_alarm.side_effect = mock_handle_alarm
214 1         alarming_handle_alarm.side_effect = mock_handle_alarm
215 1         healing_handle_alarm.side_effect = mock_handle_alarm
216
217 1         self.loop.run_until_complete(agent._handle_alarm_notification(content))
218 1         autoscaling_handle_alarm.assert_called_with("test_alarm_uuid", "alarm")
219 1         alarming_handle_alarm.assert_called_with("test_alarm_uuid", "alarm", content)
220 1         healing_handle_alarm.assert_called_with("test_alarm_uuid", "alarm")
221
222 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
223 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
224 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
225 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
226 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
227 1     @mock.patch.object(AutoscalingService, "delete_scaling_groups")
228 1     @mock.patch.object(AlarmingService, "delete_vnf_alarms")
229 1     def test_handle_vnf_terminated(
230         self,
231         delete_vnf_alarms,
232         delete_scaling_groups,
233         autoscaling_lcm_client,
234         autoscaling_mon_client,
235         alarming_lcm_client,
236         alarming_mon_client,
237     ):
238 1         async def mock_delete_scaling_groups(nsr_id, vnf_member_index):
239 1             pass
240
241 1         async def mock_delete_vnf_alarms(nsr_id, vnf_member_index):
242 1             pass
243
244 1         config = Config()
245 1         agent = PolicyModuleAgent(config)
246 1         assert autoscaling_lcm_client.called
247 1         assert autoscaling_mon_client.called
248 1         assert alarming_lcm_client.called
249 1         assert alarming_mon_client.called
250 1         content = {
251             "nsr_id": "test_nsr_id",
252             "vnf_member_index": "1",
253             "operationState": "COMPLETED",
254         }
255 1         failed_content = {
256             "nsr_id": "test_nsr_id",
257             "vnf_member_index": "1",
258             "operationState": "FAILED",
259         }
260 1         delete_scaling_groups.side_effect = mock_delete_scaling_groups
261 1         delete_vnf_alarms.side_effect = mock_delete_vnf_alarms
262
263 1         self.loop.run_until_complete(agent._handle_vnf_terminated(content))
264 1         delete_scaling_groups.assert_called_with("test_nsr_id", "1")
265 1         delete_scaling_groups.reset_mock()
266
267 1         self.loop.run_until_complete(agent._handle_vnf_terminated(failed_content))
268 1         delete_scaling_groups.assert_not_called()
269
270
271 1 if __name__ == "__main__":
272 0     unittest.main()