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%
158/160
100%
0/0

Coverage Breakdown by Class

NameLinesConditionals
test_policy_agent.py
99%
158/160
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("osm_policy_module.healing.service.MonClient")
114 1     @mock.patch("osm_policy_module.healing.service.LcmClient")
115 1     @mock.patch.object(HealingService, "configure_healing_alarms")
116 1     @mock.patch.object(AutoscalingService, "configure_scaling_groups")
117 1     @mock.patch.object(AlarmingService, "configure_vnf_alarms")
118 1     @mock.patch.object(HealingService, "delete_healing_alarms")
119 1     @mock.patch.object(AutoscalingService, "delete_scaling_groups")
120 1     @mock.patch.object(AlarmingService, "delete_vnf_alarms")
121 1     def test_handle_policy_update(
122         self,
123         delete_vnf_alarms,
124         delete_scaling_groups,
125         delete_healing_alarms,
126         configure_vnf_alarms,
127         configure_scaling_groups,
128         configure_healing_alarms,
129         healing_lcm_client,
130         healing_mon_client,
131         autoscaling_lcm_client,
132         autoscaling_mon_client,
133         alarming_lcm_client,
134         alarming_mon_client,
135     ):
136 1         async def mock_delete_scaling_groups(nsr_id, vnf_member_index):
137 1             pass
138
139 1         async def mock_delete_vnf_alarms(nsr_id, vnf_member_index):
140 1             pass
141
142 1         async def mock_delete_healing_alarms(nsr_id, vnf_member_index):
143 1             pass
144
145 1         async def mock_configure_scaling_groups(nsr_id, vnf_member_index):
146 1             pass
147
148 1         async def mock_configure_vnf_alarms(nsr_id, vnf_member_index):
149 1             pass
150
151 1         async def mock_configure_healing_alarms(nsr_id, vnf_member_index):
152 1             pass
153
154 1         config = Config()
155 1         agent = PolicyModuleAgent(config)
156 1         assert autoscaling_lcm_client.called
157 1         assert autoscaling_mon_client.called
158 1         assert alarming_lcm_client.called
159 1         assert alarming_mon_client.called
160 1         assert healing_lcm_client.called
161 1         assert healing_mon_client.called
162 1         content = {
163             "nsr_id": "test_nsr_id",
164             "vnf_member_index": "1",
165             "operationState": "COMPLETED",
166         }
167 1         failed_content = {
168             "nsr_id": "test_nsr_id",
169             "vnf_member_index": "1",
170             "operationState": "FAILED",
171         }
172 1         configure_scaling_groups.side_effect = mock_configure_scaling_groups
173 1         configure_vnf_alarms.side_effect = mock_configure_vnf_alarms
174 1         configure_healing_alarms.side_effect = mock_configure_healing_alarms
175 1         delete_scaling_groups.side_effect = mock_delete_scaling_groups
176 1         delete_vnf_alarms.side_effect = mock_delete_vnf_alarms
177 1         delete_healing_alarms.side_effect = mock_delete_healing_alarms
178
179 1         self.loop.run_until_complete(agent._handle_policy_update(content))
180 1         configure_scaling_groups.assert_called_with("test_nsr_id", "1")
181 1         configure_scaling_groups.reset_mock()
182
183 1         self.loop.run_until_complete(agent._handle_policy_update(failed_content))
184 1         configure_scaling_groups.assert_not_called()
185
186 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
187 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
188 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
189 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
190 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
191 1     @mock.patch("osm_policy_module.healing.service.MonClient")
192 1     @mock.patch("osm_policy_module.healing.service.LcmClient")
193 1     @mock.patch.object(AutoscalingService, "handle_alarm")
194 1     @mock.patch.object(AlarmingService, "handle_alarm")
195 1     @mock.patch.object(HealingService, "handle_alarm")
196 1     def test_handle_alarm_notification(
197         self,
198         healing_handle_alarm,
199         alarming_handle_alarm,
200         autoscaling_handle_alarm,
201         autoscaling_lcm_client,
202         autoscaling_mon_client,
203         alarming_lcm_client,
204         alarming_mon_client,
205         healing_lcm_client,
206         healing_mon_client,
207     ):
208 1         async def mock_handle_alarm(alarm_uuid, status, payload=None):
209 1             pass
210
211 1         config = Config()
212 1         agent = PolicyModuleAgent(config)
213 1         assert autoscaling_lcm_client.called
214 1         assert autoscaling_mon_client.called
215 1         assert alarming_lcm_client.called
216 1         assert alarming_mon_client.called
217 1         assert healing_lcm_client.called
218 1         assert healing_mon_client.called
219 1         content = {
220             "notify_details": {
221                 "alarm_uuid": "test_alarm_uuid",
222                 "metric_name": "test_metric_name",
223                 "operation": "test_operation",
224                 "threshold_value": "test_threshold_value",
225                 "vdu_name": "test_vdu_name",
226                 "vnf_member_index": "test_vnf_member_index",
227                 "ns_id": "test_nsr_id",
228                 "status": "alarm",
229             }
230         }
231 1         autoscaling_handle_alarm.side_effect = mock_handle_alarm
232 1         alarming_handle_alarm.side_effect = mock_handle_alarm
233 1         healing_handle_alarm.side_effect = mock_handle_alarm
234
235 1         self.loop.run_until_complete(agent._handle_alarm_notification(content))
236 1         autoscaling_handle_alarm.assert_called_with("test_alarm_uuid", "alarm")
237 1         alarming_handle_alarm.assert_called_with("test_alarm_uuid", "alarm", content)
238 1         healing_handle_alarm.assert_called_with("test_alarm_uuid", "alarm")
239
240 1     @mock.patch.object(CommonDbClient, "__init__", lambda *args, **kwargs: None)
241 1     @mock.patch("osm_policy_module.alarming.service.MonClient")
242 1     @mock.patch("osm_policy_module.alarming.service.LcmClient")
243 1     @mock.patch("osm_policy_module.autoscaling.service.MonClient")
244 1     @mock.patch("osm_policy_module.autoscaling.service.LcmClient")
245 1     @mock.patch.object(AutoscalingService, "delete_scaling_groups")
246 1     @mock.patch.object(AlarmingService, "delete_vnf_alarms")
247 1     def test_handle_vnf_terminated(
248         self,
249         delete_vnf_alarms,
250         delete_scaling_groups,
251         autoscaling_lcm_client,
252         autoscaling_mon_client,
253         alarming_lcm_client,
254         alarming_mon_client,
255     ):
256 1         async def mock_delete_scaling_groups(nsr_id, vnf_member_index):
257 1             pass
258
259 1         async def mock_delete_vnf_alarms(nsr_id, vnf_member_index):
260 1             pass
261
262 1         config = Config()
263 1         agent = PolicyModuleAgent(config)
264 1         assert autoscaling_lcm_client.called
265 1         assert autoscaling_mon_client.called
266 1         assert alarming_lcm_client.called
267 1         assert alarming_mon_client.called
268 1         content = {
269             "nsr_id": "test_nsr_id",
270             "vnf_member_index": "1",
271             "operationState": "COMPLETED",
272         }
273 1         failed_content = {
274             "nsr_id": "test_nsr_id",
275             "vnf_member_index": "1",
276             "operationState": "FAILED",
277         }
278 1         delete_scaling_groups.side_effect = mock_delete_scaling_groups
279 1         delete_vnf_alarms.side_effect = mock_delete_vnf_alarms
280
281 1         self.loop.run_until_complete(agent._handle_vnf_terminated(content))
282 1         delete_scaling_groups.assert_called_with("test_nsr_id", "1")
283 1         delete_scaling_groups.reset_mock()
284
285 1         self.loop.run_until_complete(agent._handle_vnf_terminated(failed_content))
286 1         delete_scaling_groups.assert_not_called()
287
288
289 1 if __name__ == "__main__":
290 0     unittest.main()