blob: 1f34563c9ac38514d43ca9bbf058420971de0ca7 [file] [log] [blame]
Dario Faccin39301762023-04-17 16:56:37 +02001#######################################################################################
2# Copyright ETSI Contributors and Others.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13# implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Dario Faccin39301762023-04-17 16:56:37 +020017import asynctest
Gulsum Atici36365402023-04-07 00:07:07 +030018from copy import deepcopy
Gulsum Atici50d12e02023-04-27 16:41:43 +030019from unittest import TestCase
20from unittest.mock import Mock, patch
21
Dario Faccin39301762023-04-17 16:56:37 +020022from osm_common.dbbase import DbException
Dario Faccinf5d65b52023-06-19 12:35:33 +020023from osm_common.temporal_task_queues.task_queues_mappings import LCM_TASK_QUEUE
24from osm_lcm.temporal.vnf_activities import (
25 ChangeVnfInstantiationStateImpl,
26 ChangeVnfStateImpl,
27 GetTaskQueueImpl,
28 GetVimCloudImpl,
29 GetVnfDescriptorImpl,
30 GetVnfRecordImpl,
31 SetVnfModelImpl,
32 VnfSpecifications,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +000033)
Dario Faccinf5d65b52023-06-19 12:35:33 +020034from osm_common.temporal.dataclasses_common import VduComputeConstraints
35from osm_common.temporal.states import VnfState, VnfInstantiationState
Dario Faccin39301762023-04-17 16:56:37 +020036from temporalio.testing import ActivityEnvironment
Dario Faccin39301762023-04-17 16:56:37 +020037
Gulsum Atici50d12e02023-04-27 16:41:43 +030038
39vnfr_uuid = "9f472177-95c0-4335-b357-5cdc17a79965"
40vnfd_uuid = "97784f19-d254-4252-946c-cf92d85443ca"
41vim_uuid = "a64f7c6c-bc27-4ec8-b664-5500a3324eca"
42model_name = "my-model-name"
Dario Faccinf5d65b52023-06-19 12:35:33 +020043set_vnf_model_input = SetVnfModelImpl.Input(vnfr_uuid=vnfr_uuid, model_name=model_name)
Gulsum Aticia1898b42023-04-25 15:48:10 +030044cloud = "microk8s"
Gulsum Atici50d12e02023-04-27 16:41:43 +030045nsr_uuid = "583726d4-957d-47f5-8df5-199456f7afd0"
Gulsum Aticia1898b42023-04-25 15:48:10 +030046sample_vim_record = {
Gulsum Atici50d12e02023-04-27 16:41:43 +030047 "_id": vim_uuid,
Gulsum Aticia1898b42023-04-25 15:48:10 +030048 "name": "juju",
49 "vim_type": "paas",
50 "vim_url": "192.168.1.100:17070",
51 "vim_user": "admin",
52 "vim_password": "c16gylWEepEREN6vWw==",
53 "config": {
54 "paas_provider": "juju",
55 "cloud": cloud,
56 "cloud_credentials": "microk8s",
57 "authorized_keys": "$HOME/.local/share/juju/ssh/juju_id_rsa.pub",
58 "ca_cert_content": "-----BEGIN-----",
59 },
60}
Gulsum Atici50d12e02023-04-27 16:41:43 +030061vim_account_id = "9b0bedc3-ea8e-42fd-acc9-dd03f4dee73c"
62vdu_id = "hackfest_basic-VM"
63vnf_index = "vnf-profile-id"
64sample_vnfr = {
65 "_id": vnfr_uuid,
66 "id": vnfr_uuid,
67 "nsr-id-ref": "dcf4c922-5a73-41bf-a6ca-870c22d6336c",
68 "vnfd-ref": "jar_vnfd_scalable",
69 "vnfd-id": "f1b38eac-190c-485d-9a74-c6e169c929d8",
70 "vim-account-id": vim_account_id,
71 "namespace": model_name,
72 "member-vnf-index-ref": vnf_index,
73}
74vnf_config = {
75 "member-vnf-index": vnf_index,
76 "vdu": [
77 {
78 "id": vdu_id,
79 "configurable-properties": {
80 "config::redirect-map": "https://osm.instantiation.params"
81 },
82 }
83 ],
84}
85app_config = {"domain_name1": "osm.org", "domain_name2": "osm.com"}
86config = [
87 {"key": "config::domain_name1", "value": "osm.org"},
88 {"key": "config::domain_name2", "value": "osm.com"},
89 {"key": "track", "value": "latest"},
90 {"key": "channel", "value": "stable"},
91]
92vdu = {
93 "id": vdu_id,
94 "name": "hackfest_basic-VM",
95 "sw-image-desc": "ubuntu18.04",
96 "virtual-compute-desc": "hackfest_basic-VM-compute",
97 "virtual-storage-desc": ["hackfest_basic-VM-storage"],
98 "configurable-properties": config,
99}
100vnfd_id = "97784f19-d254-4252-946c-cf92d85443ca"
101flavor_1 = {
102 "id": "compute-id-1",
103 "virtual-memory": {"size": "4"},
104 "virtual-cpu": {"cpu-architecture": "x86", "num-virtual-cpu": 2},
105}
106flavor_2 = {
107 "id": "compute-id-2",
108 "virtual-cpu": {"cpu-architecture": "x86", "num-virtual-cpu": 2},
109}
110flavor_3 = {
111 "id": "compute-id-2",
112 "virtual-memory": {"size": "4"},
113}
114sample_vnfd = {
115 "_id": vnfd_id,
116 "id": "sol006-vnf",
117 "provider": "Canonical",
118 "product-name": "test-vnf",
119 "software-version": "1.0",
120 "vdu": [vdu],
121 "virtual-compute-desc": [flavor_1, flavor_2],
122}
123
124
125class TestException(Exception):
126 pass
Dario Faccin39301762023-04-17 16:56:37 +0200127
128
129class TestVnfDbActivity(asynctest.TestCase):
130 def setUp(self):
131 self.db = Mock()
132 self.env = ActivityEnvironment()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200133 self.change_vnf_state = ChangeVnfStateImpl(self.db)
134 self.change_vnf_instantiation_state = ChangeVnfInstantiationStateImpl(self.db)
135 self.set_vnf_model = SetVnfModelImpl(self.db)
Dario Faccin39301762023-04-17 16:56:37 +0200136
Gulsum Atici50d12e02023-04-27 16:41:43 +0300137 async def test_change_vnf_state__successful__db_updated_as_expected(self):
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000138 vnf_state = VnfState.STOPPED
Dario Faccinf5d65b52023-06-19 12:35:33 +0200139 change_vnf_state_input = ChangeVnfStateImpl.Input(vnfr_uuid, vnf_state)
140 await self.env.run(self.change_vnf_state, change_vnf_state_input)
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000141 self.db.set_one.assert_called_with(
142 "vnfrs", {"_id": vnfr_uuid}, {"vnfState": vnf_state.name}
143 )
144
Gulsum Atici50d12e02023-04-27 16:41:43 +0300145 async def test_change_vnf_state__failed__raises_db_exception(self):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200146 change_vnf_state_input = ChangeVnfStateImpl.Input(vnfr_uuid, VnfState.STARTED)
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000147 self.db.set_one.side_effect = DbException("not found")
148 with self.assertRaises(DbException):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200149 await self.env.run(self.change_vnf_state, change_vnf_state_input)
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000150
Gulsum Atici50d12e02023-04-27 16:41:43 +0300151 async def test_change_vnf_instantiation_state__successful__db_updated_as_expected(
152 self,
153 ):
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000154 instantiation_state = VnfInstantiationState.NOT_INSTANTIATED
Dario Faccinf5d65b52023-06-19 12:35:33 +0200155 change_instantiation_input = ChangeVnfInstantiationStateImpl.Input(
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000156 vnfr_uuid, instantiation_state
157 )
158 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200159 self.change_vnf_instantiation_state,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000160 change_instantiation_input,
161 )
162 self.db.set_one.assert_called_with(
163 "vnfrs",
164 {"_id": vnfr_uuid},
165 {"instantiationState": instantiation_state.name},
166 )
167
Gulsum Atici50d12e02023-04-27 16:41:43 +0300168 async def test_change_vnf_instantiation_state__failed__raises_db_exception(self):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200169 change_instantiation_input = ChangeVnfInstantiationStateImpl.Input(
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000170 vnfr_uuid, VnfInstantiationState.INSTANTIATED
171 )
172 self.db.set_one.side_effect = DbException("not found")
173 with self.assertRaises(DbException):
174 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200175 self.change_vnf_instantiation_state,
Gulsum Atici50d12e02023-04-27 16:41:43 +0300176 change_instantiation_input,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000177 )
178
Gulsum Atici50d12e02023-04-27 16:41:43 +0300179 async def test_set_vnf_model__successful__db_updated_as_expected(self):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200180 await self.env.run(self.set_vnf_model, set_vnf_model_input)
Dario Faccin39301762023-04-17 16:56:37 +0200181 self.db.set_one.assert_called_with(
182 "vnfrs", {"_id": vnfr_uuid}, {"namespace": model_name}
183 )
184
Gulsum Atici50d12e02023-04-27 16:41:43 +0300185 async def test_set_vnf_model__failed__raises_db_exception(self):
Dario Faccin39301762023-04-17 16:56:37 +0200186 self.db.set_one.side_effect = DbException("not found")
187 with self.assertRaises(DbException):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200188 await self.env.run(self.set_vnf_model, set_vnf_model_input)
Gulsum Atici36365402023-04-07 00:07:07 +0300189
190
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000191class TestGetTaskQueue(asynctest.TestCase):
192 async def setUp(self):
193 self.db = Mock()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200194 self.get_task_queue = GetTaskQueueImpl(self.db)
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000195 self.env = ActivityEnvironment()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200196 self.get_task_queue_input = GetTaskQueueImpl.Input(vnfr_uuid=sample_vnfr["id"])
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000197
Gulsum Atici50d12e02023-04-27 16:41:43 +0300198 async def test_activity__succeeded__get_expected_task_queue(self):
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000199 self.db.get_one.side_effect = [sample_vnfr, sample_vim_record]
200 activity_result = await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200201 self.get_task_queue,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000202 self.get_task_queue_input,
203 )
204 self.assertEqual(activity_result.task_queue, LCM_TASK_QUEUE)
205
Gulsum Atici50d12e02023-04-27 16:41:43 +0300206 async def test_activity__failed__raises_db_exception(self):
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000207 self.db.get_one.side_effect = DbException("not found")
208 with self.assertRaises(DbException):
209 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200210 self.get_task_queue,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000211 self.get_task_queue_input,
212 )
213
Gulsum Atici50d12e02023-04-27 16:41:43 +0300214 async def test_activity__invalid_task_queue__raises_key_error(self):
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000215 vim_record = deepcopy(sample_vim_record)
216 vim_record["vim_type"] = "some-vim-type"
217 self.db.get_one.side_effect = [sample_vnfr, vim_record]
218 with self.assertRaises(KeyError):
219 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200220 self.get_task_queue,
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000221 self.get_task_queue_input,
222 )
223
Patricia Reinoso38fb5da2023-04-27 13:48:50 +0000224
Gulsum Atici50d12e02023-04-27 16:41:43 +0300225class TestGetVnfDescriptor(asynctest.TestCase):
Gulsum Atici36365402023-04-07 00:07:07 +0300226 async def setUp(self):
227 self.db = Mock()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200228 self.get_vnf_descriptor = GetVnfDescriptorImpl(self.db)
Gulsum Atici36365402023-04-07 00:07:07 +0300229 self.env = ActivityEnvironment()
230
Gulsum Atici50d12e02023-04-27 16:41:43 +0300231 async def test_activity__succeeded__get_expected_vnfd(self):
232 self.db.get_one.return_value = sample_vnfd
Gulsum Atici36365402023-04-07 00:07:07 +0300233 activity_result = await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200234 self.get_vnf_descriptor,
235 GetVnfDescriptorImpl.Input(vnfd_uuid=vnfd_uuid),
Gulsum Atici36365402023-04-07 00:07:07 +0300236 )
237 self.assertEqual(activity_result.vnfd, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300238
239 async def test_activity__failed__raises_db_exception(self):
240 self.db.get_one.side_effect = DbException("Can not connect to Database.")
241 with self.assertRaises(DbException):
242 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200243 self.get_vnf_descriptor,
244 GetVnfDescriptorImpl.Input(vnfd_uuid=vnfd_uuid),
Gulsum Atici50d12e02023-04-27 16:41:43 +0300245 )
246
247
248class TestGetVnfRecord(asynctest.TestCase):
249 async def setUp(self):
250 self.db = Mock()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200251 self.get_vnf_record = GetVnfRecordImpl(self.db)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300252 self.env = ActivityEnvironment()
253
254 async def test_activity__succeeded__get_expected_vnfr(self):
255 self.db.get_one.return_value = sample_vnfr
256 activity_result = await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200257 self.get_vnf_record,
258 GetVnfRecordImpl.Input(vnfr_uuid=vnfr_uuid),
Gulsum Atici50d12e02023-04-27 16:41:43 +0300259 )
Gulsum Atici36365402023-04-07 00:07:07 +0300260 self.assertEqual(activity_result.vnfr, sample_vnfr)
261
Gulsum Atici50d12e02023-04-27 16:41:43 +0300262 async def test_activity__failed__raise_db_exception(self):
Gulsum Atici36365402023-04-07 00:07:07 +0300263 self.db.get_one.side_effect = DbException("Can not connect to Database.")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300264 with self.assertRaises(DbException):
265 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200266 self.get_vnf_record,
267 GetVnfRecordImpl.Input(vnfr_uuid=vnfr_uuid),
Gulsum Atici36365402023-04-07 00:07:07 +0300268 )
Gulsum Atici36365402023-04-07 00:07:07 +0300269
270
Gulsum Aticia1898b42023-04-25 15:48:10 +0300271class TestGetVimCloud(asynctest.TestCase):
272 async def setUp(self):
273 self.db = Mock()
Dario Faccinf5d65b52023-06-19 12:35:33 +0200274 self.get_vim_cloud = GetVimCloudImpl(self.db)
Gulsum Aticia1898b42023-04-25 15:48:10 +0300275 self.env = ActivityEnvironment()
276
Gulsum Atici50d12e02023-04-27 16:41:43 +0300277 async def test_activity__succeeded__get_vim_cloud(self):
Gulsum Aticia1898b42023-04-25 15:48:10 +0300278 self.db.get_one.side_effect = [sample_vnfr, sample_vim_record]
279 activity_result = await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200280 self.get_vim_cloud,
281 GetVimCloudImpl.Input(vnfr_uuid=sample_vnfr["id"]),
Gulsum Aticia1898b42023-04-25 15:48:10 +0300282 )
283 self.assertEqual(activity_result.cloud, cloud)
284
Gulsum Atici50d12e02023-04-27 16:41:43 +0300285 async def test_activity__vim_record_without_cloud__no_cloud_info(self):
Gulsum Aticia1898b42023-04-25 15:48:10 +0300286 vim_record = deepcopy(sample_vim_record)
287 vim_record["config"].pop("cloud")
288 self.db.get_one.side_effect = [sample_vnfr, vim_record]
289 activity_result = await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200290 self.get_vim_cloud,
291 GetVimCloudImpl.Input(vnfr_uuid=sample_vnfr["id"]),
Gulsum Aticia1898b42023-04-25 15:48:10 +0300292 )
293 self.assertEqual(activity_result.cloud, "")
294
Gulsum Atici50d12e02023-04-27 16:41:43 +0300295 async def test_activity__failed__raise_db_exception(self):
Gulsum Aticia1898b42023-04-25 15:48:10 +0300296 self.db.get_one.side_effect = DbException("Can not connect to Database.")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300297 with self.assertRaises(DbException):
298 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200299 self.get_vim_cloud,
300 GetVimCloudImpl.Input(vnfr_uuid=sample_vnfr["id"]),
Gulsum Aticia1898b42023-04-25 15:48:10 +0300301 )
Gulsum Aticia1898b42023-04-25 15:48:10 +0300302
Gulsum Atici50d12e02023-04-27 16:41:43 +0300303 async def test_activity__wrong_vim_record__raise_key_error(self):
Gulsum Aticia1898b42023-04-25 15:48:10 +0300304 vim_record = deepcopy(sample_vim_record)
305 vim_record.pop("config")
306 self.db.get_one.side_effect = [sample_vnfr, vim_record]
Gulsum Atici50d12e02023-04-27 16:41:43 +0300307 with self.assertRaises(KeyError):
308 await self.env.run(
Dario Faccinf5d65b52023-06-19 12:35:33 +0200309 self.get_vim_cloud,
310 GetVimCloudImpl.Input(vnfr_uuid=sample_vnfr["id"]),
Gulsum Aticia1898b42023-04-25 15:48:10 +0300311 )
Gulsum Aticia1898b42023-04-25 15:48:10 +0300312
Gulsum Atici50d12e02023-04-27 16:41:43 +0300313
314class TestGetVduInstantiateInfoMethods(TestCase):
315 def test_get_flavor_details__successful__get_flavor(self):
316 compute_desc_id = "compute-id-1"
Dario Faccinf5d65b52023-06-19 12:35:33 +0200317 result = VnfSpecifications._get_flavor_details(compute_desc_id, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300318 self.assertEqual(result, flavor_1)
319
320 def test_get_flavor_details__empty_compute_desc__flavor_is_none(self):
321 compute_desc_id = ""
Dario Faccinf5d65b52023-06-19 12:35:33 +0200322 result = VnfSpecifications._get_flavor_details(compute_desc_id, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300323 self.assertEqual(result, None)
324
325 def test_get_flavor_details__compute_desc_not_found__flavor_is_none(self):
326 compute_desc_id = "compute-id-5"
Dario Faccinf5d65b52023-06-19 12:35:33 +0200327 result = VnfSpecifications._get_flavor_details(compute_desc_id, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300328 self.assertEqual(result, None)
329
330 def test_get_flavor_details__empty_vnfd__flavor_is_none(self):
331 compute_desc_id = "compute-id-5"
Dario Faccinf5d65b52023-06-19 12:35:33 +0200332 result = VnfSpecifications._get_flavor_details(compute_desc_id, {})
Gulsum Atici50d12e02023-04-27 16:41:43 +0300333 self.assertEqual(result, None)
334
335 def test_get_flavor_details__wrong_vnfd_format__flavor_is_none(self):
336 compute_desc_id = "compute-id-2"
337 sample_vnfd = {
338 "_id": vnfd_id,
339 "vdu": [vdu],
340 "virtual-compute-desc": [
341 {
342 "virtual-memory": {"size": "4"},
343 }
344 ],
345 }
Dario Faccinf5d65b52023-06-19 12:35:33 +0200346 result = VnfSpecifications._get_flavor_details(compute_desc_id, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300347 self.assertEqual(result, None)
348
Dario Faccinf5d65b52023-06-19 12:35:33 +0200349 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_flavor_details")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300350 def test_get_compute_constraints__succeeded__get_constraints(
351 self, mock_get_flavor_details
352 ):
353 mock_get_flavor_details.return_value = flavor_1
Dario Faccinf5d65b52023-06-19 12:35:33 +0200354 result = VnfSpecifications.get_compute_constraints(vdu, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300355 self.assertEqual(VduComputeConstraints(cores=2, mem=4), result)
356
Dario Faccinf5d65b52023-06-19 12:35:33 +0200357 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_flavor_details")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300358 def test_get_compute_constraints__empty_flavor_details__no_constraints(
359 self, mock_get_flavor_details
360 ):
361 mock_get_flavor_details.return_value = {}
Dario Faccinf5d65b52023-06-19 12:35:33 +0200362 result = VnfSpecifications.get_compute_constraints(vdu, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300363 self.assertEqual(VduComputeConstraints(cores=0, mem=0), result)
364
Dario Faccinf5d65b52023-06-19 12:35:33 +0200365 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_flavor_details")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300366 def test_get_compute_constraints__flavor_details_is_none__no_constraints(
367 self, mock_get_flavor_details
368 ):
369 mock_get_flavor_details.return_value = None
Dario Faccinf5d65b52023-06-19 12:35:33 +0200370 result = VnfSpecifications.get_compute_constraints(vdu, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300371 self.assertEqual(VduComputeConstraints(cores=0, mem=0), result)
372
Dario Faccinf5d65b52023-06-19 12:35:33 +0200373 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_flavor_details")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300374 def test_get_compute_constraints__flavor_has_only_cpu__get_cpu_constraint(
375 self, mock_get_flavor_details
376 ):
377 mock_get_flavor_details.return_value = flavor_2
Dario Faccinf5d65b52023-06-19 12:35:33 +0200378 result = VnfSpecifications.get_compute_constraints(vdu, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300379 self.assertEqual(VduComputeConstraints(cores=2, mem=0), result)
380
Dario Faccinf5d65b52023-06-19 12:35:33 +0200381 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_flavor_details")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300382 def test_get_compute_constraints__flavor_has_only_memory__get_memory_constraint(
383 self, mock_get_flavor_details
384 ):
385 mock_get_flavor_details.return_value = flavor_3
Dario Faccinf5d65b52023-06-19 12:35:33 +0200386 result = VnfSpecifications.get_compute_constraints(vdu, sample_vnfd)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300387 self.assertEqual(VduComputeConstraints(cores=0, mem=4), result)
388
389 def test_list_to_dict__config_has_several_items__get_expected_dict(self):
390 config = [
391 {"key": "config::domain_name1", "value": "osm.org"},
392 {"key": "domain_name2", "value": "osm.com"},
393 ]
Dario Faccinf5d65b52023-06-19 12:35:33 +0200394 result = VnfSpecifications._list_to_dict(config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300395 self.assertEqual(
396 result, {"config::domain_name1": "osm.org", "domain_name2": "osm.com"}
397 )
398
399 def test_list_to_dict__empty_input__get_empty_dict(self):
400 config = []
Dario Faccinf5d65b52023-06-19 12:35:33 +0200401 result = VnfSpecifications._list_to_dict(config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300402 self.assertEqual(result, {})
403
404 def test_get_only_config_items__with_identifier__get_expected_config(self):
405 config = {"config::redirect-map": "https://osm.instantiation.params"}
Dario Faccinf5d65b52023-06-19 12:35:33 +0200406 result = VnfSpecifications._get_only_config_items(config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300407 self.assertEqual(result, {"redirect-map": "https://osm.instantiation.params"})
408
409 def test_get_only_config_items__without_identifier__no_config(self):
410 config = {"key": "domain_name1", "value": "osm.org"}
Dario Faccinf5d65b52023-06-19 12:35:33 +0200411 result = VnfSpecifications._get_only_config_items(config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300412 self.assertEqual(result, {})
413
414 def test_get_only_config_items__empty_input__no_config(self):
415 config = {}
Dario Faccinf5d65b52023-06-19 12:35:33 +0200416 result = VnfSpecifications._get_only_config_items(config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300417 self.assertEqual(result, {})
418
419 def test_get_vdu_instantiation_params__empty_vnf_config__get_params(self):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200420 result = VnfSpecifications.get_vdu_instantiation_params(vdu_id, vnf_config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300421 self.assertEqual(
422 result, {"config::redirect-map": "https://osm.instantiation.params"}
423 )
424
425 def test_get_vdu_instantiation_params__empty_vnf_config__no_params(self):
Dario Faccinf5d65b52023-06-19 12:35:33 +0200426 result = VnfSpecifications.get_vdu_instantiation_params(vdu_id, {})
Gulsum Atici50d12e02023-04-27 16:41:43 +0300427 self.assertEqual(result, {})
428
429 def test_get_vdu_instantiation_params__vdu_id_mismatch__no_params(self):
430 config = deepcopy(vnf_config)
431 config["vdu"][0]["id"] = "other-vdu-id"
Dario Faccinf5d65b52023-06-19 12:35:33 +0200432 result = VnfSpecifications.get_vdu_instantiation_params(vdu_id, config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300433 self.assertEqual(result, {})
434
435 def test_get_vdu_instantiation_params__empty_configurable_properties__no_params(
436 self,
437 ):
438 config = deepcopy(vnf_config)
439 config["vdu"][0]["configurable-properties"] = {}
Dario Faccinf5d65b52023-06-19 12:35:33 +0200440 result = VnfSpecifications.get_vdu_instantiation_params(vdu_id, config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300441 self.assertEqual(result, {})
442
Dario Faccinf5d65b52023-06-19 12:35:33 +0200443 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_only_config_items")
444 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._list_to_dict")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300445 def test_get_application_config__instantiate_config_overrides_vdu_config__get_expected_application_config(
446 self,
447 mock_list_to_dict,
448 mock_get_only_config_items,
449 ):
450 vdu_instantiate_config = {"config::domain_name1": "osm.public"}
451 mock_get_only_config_items.side_effect = [
452 {
453 "domain_name1": "osm.org",
454 "domain_name2": "osm.com",
455 },
456 {"domain_name1": "osm.public"},
457 ]
Dario Faccinf5d65b52023-06-19 12:35:33 +0200458 result = VnfSpecifications.get_application_config(vdu, vdu_instantiate_config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300459 self.assertEqual(
460 result, {"domain_name1": "osm.public", "domain_name2": "osm.com"}
461 )
462
Dario Faccinf5d65b52023-06-19 12:35:33 +0200463 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_only_config_items")
464 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._list_to_dict")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300465 def test_get_application_config__empty_instantiate_config__get_descriptor_config(
466 self,
467 mock_list_to_dict,
468 mock_get_only_config_items,
469 ):
470 vdu_instantiate_config = {}
471 mock_get_only_config_items.side_effect = [
472 {
473 "domain_name1": "osm.org",
474 "domain_name2": "osm.com",
475 },
476 {},
477 ]
Dario Faccinf5d65b52023-06-19 12:35:33 +0200478 result = VnfSpecifications.get_application_config(vdu, vdu_instantiate_config)
Gulsum Atici50d12e02023-04-27 16:41:43 +0300479 self.assertEqual(result, app_config)
480
Dario Faccinf5d65b52023-06-19 12:35:33 +0200481 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._get_only_config_items")
482 @patch("osm_lcm.temporal.vnf_activities.VnfSpecifications._list_to_dict")
Gulsum Atici50d12e02023-04-27 16:41:43 +0300483 def test_get_application_config__no_config__empty_application_config(
484 self,
485 mock_list_to_dict,
486 mock_get_only_config_items,
487 ):
488 vdu_instantiate_config = {}
489 vdu_copy = deepcopy(vdu)
490 vdu_copy["configurable-properties"] = []
491 mock_get_only_config_items.side_effect = [{}, {}]
Dario Faccinf5d65b52023-06-19 12:35:33 +0200492 result = VnfSpecifications.get_application_config(
493 vdu_copy, vdu_instantiate_config
494 )
Gulsum Atici50d12e02023-04-27 16:41:43 +0300495 self.assertEqual(result, {})
Gulsum Aticia1898b42023-04-25 15:48:10 +0300496
497
Gulsum Atici36365402023-04-07 00:07:07 +0300498if __name__ == "__main__":
499 asynctest.main()