1 #######################################################################################
2 # Copyright ETSI Contributors and Others.
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #######################################################################################
19 from unittest
.mock
import MagicMock
, Mock
, patch
29 from osm_ng_ro
.ns
import Ns
, NsException
32 __author__
= "Eduardo Sousa"
33 __date__
= "$19-NOV-2021 00:00:00$"
36 class TestNs(unittest
.TestCase
):
40 def test__create_task_without_extra_dict(self
):
42 "target_id": "vim_openstack_1",
43 "action_id": "123456",
45 "task_id": "123456:1",
46 "status": "SCHEDULED",
49 "target_record": "test_target_record",
50 "target_record_id": "test_target_record_id",
53 "action_id": "123456",
58 task
= Ns
._create
_task
(
59 deployment_info
=deployment_info
,
60 target_id
="vim_openstack_1",
63 target_record
="test_target_record",
64 target_record_id
="test_target_record_id",
67 self
.assertEqual(deployment_info
.get("task_index"), 2)
68 self
.assertDictEqual(task
, expected_result
)
70 def test__create_task(self
):
72 "target_id": "vim_openstack_1",
73 "action_id": "123456",
75 "task_id": "123456:1",
76 "status": "SCHEDULED",
79 "target_record": "test_target_record",
80 "target_record_id": "test_target_record_id",
81 # values coming from extra_dict
82 "params": "test_params",
83 "find_params": "test_find_params",
84 "depends_on": "test_depends_on",
87 "action_id": "123456",
92 task
= Ns
._create
_task
(
93 deployment_info
=deployment_info
,
94 target_id
="vim_openstack_1",
97 target_record
="test_target_record",
98 target_record_id
="test_target_record_id",
100 "params": "test_params",
101 "find_params": "test_find_params",
102 "depends_on": "test_depends_on",
106 self
.assertEqual(deployment_info
.get("task_index"), 2)
107 self
.assertDictEqual(task
, expected_result
)
109 @patch("osm_ng_ro.ns.time")
110 def test__create_ro_task(self
, mock_time
: Mock
):
111 now
= 1637324838.994551
112 mock_time
.return_value
= now
114 "target_id": "vim_openstack_1",
115 "action_id": "123456",
117 "task_id": "123456:1",
118 "status": "SCHEDULED",
121 "target_record": "test_target_record",
122 "target_record_id": "test_target_record_id",
123 # values coming from extra_dict
124 "params": "test_params",
125 "find_params": "test_find_params",
126 "depends_on": "test_depends_on",
132 "target_id": "vim_openstack_1",
135 "created_items": None,
149 ro_task
= Ns
._create
_ro
_task
(
150 target_id
="vim_openstack_1",
154 self
.assertDictEqual(ro_task
, expected_result
)
156 def test__process_image_params_with_empty_target_image(self
):
162 result
= Ns
._process
_image
_params
(
163 target_image
=target_image
,
166 target_record_id
=None,
169 self
.assertDictEqual(expected_result
, result
)
171 def test__process_image_params_with_wrong_target_image(self
):
176 "no_image": "to_see_here",
179 result
= Ns
._process
_image
_params
(
180 target_image
=target_image
,
183 target_record_id
=None,
186 self
.assertDictEqual(expected_result
, result
)
188 def test__process_image_params_with_image(self
):
200 result
= Ns
._process
_image
_params
(
201 target_image
=target_image
,
204 target_record_id
=None,
207 self
.assertDictEqual(expected_result
, result
)
209 def test__process_image_params_with_vim_image_id(self
):
218 "vim_image_id": "123456",
221 result
= Ns
._process
_image
_params
(
222 target_image
=target_image
,
225 target_record_id
=None,
228 self
.assertDictEqual(expected_result
, result
)
230 def test__process_image_params_with_image_checksum(self
):
234 "checksum": "e3fc50a88d0a364313df4b21ef20c29e",
239 "image_checksum": "e3fc50a88d0a364313df4b21ef20c29e",
242 result
= Ns
._process
_image
_params
(
243 target_image
=target_image
,
246 target_record_id
=None,
249 self
.assertDictEqual(expected_result
, result
)
251 def test__get_resource_allocation_params_with_empty_target_image(self
):
253 quota_descriptor
= {}
255 result
= Ns
._get
_resource
_allocation
_params
(
256 quota_descriptor
=quota_descriptor
,
259 self
.assertDictEqual(expected_result
, result
)
261 def test__get_resource_allocation_params_with_wrong_target_image(self
):
264 "no_quota": "present_here",
267 result
= Ns
._get
_resource
_allocation
_params
(
268 quota_descriptor
=quota_descriptor
,
271 self
.assertDictEqual(expected_result
, result
)
273 def test__get_resource_allocation_params_with_limit(self
):
281 result
= Ns
._get
_resource
_allocation
_params
(
282 quota_descriptor
=quota_descriptor
,
285 self
.assertDictEqual(expected_result
, result
)
287 def test__get_resource_allocation_params_with_reserve(self
):
295 result
= Ns
._get
_resource
_allocation
_params
(
296 quota_descriptor
=quota_descriptor
,
299 self
.assertDictEqual(expected_result
, result
)
301 def test__get_resource_allocation_params_with_shares(self
):
309 result
= Ns
._get
_resource
_allocation
_params
(
310 quota_descriptor
=quota_descriptor
,
313 self
.assertDictEqual(expected_result
, result
)
315 def test__get_resource_allocation_params(self
):
327 result
= Ns
._get
_resource
_allocation
_params
(
328 quota_descriptor
=quota_descriptor
,
331 self
.assertDictEqual(expected_result
, result
)
333 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
334 def test__process_guest_epa_quota_params_with_empty_quota_epa_cpu(
342 result
= Ns
._process
_guest
_epa
_quota
_params
(
343 guest_epa_quota
=guest_epa_quota
,
344 epa_vcpu_set
=epa_vcpu_set
,
347 self
.assertDictEqual(expected_result
, result
)
348 self
.assertFalse(resource_allocation
.called
)
350 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
351 def test__process_guest_epa_quota_params_with_empty_quota_false_epa_cpu(
359 result
= Ns
._process
_guest
_epa
_quota
_params
(
360 guest_epa_quota
=guest_epa_quota
,
361 epa_vcpu_set
=epa_vcpu_set
,
364 self
.assertDictEqual(expected_result
, result
)
365 self
.assertFalse(resource_allocation
.called
)
367 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
368 def test__process_guest_epa_quota_params_with_wrong_quota_epa_cpu(
374 "no-quota": "nothing",
378 result
= Ns
._process
_guest
_epa
_quota
_params
(
379 guest_epa_quota
=guest_epa_quota
,
380 epa_vcpu_set
=epa_vcpu_set
,
383 self
.assertDictEqual(expected_result
, result
)
384 self
.assertFalse(resource_allocation
.called
)
386 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
387 def test__process_guest_epa_quota_params_with_wrong_quota_false_epa_cpu(
393 "no-quota": "nothing",
397 result
= Ns
._process
_guest
_epa
_quota
_params
(
398 guest_epa_quota
=guest_epa_quota
,
399 epa_vcpu_set
=epa_vcpu_set
,
402 self
.assertDictEqual(expected_result
, result
)
403 self
.assertFalse(resource_allocation
.called
)
405 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
406 def test__process_guest_epa_quota_params_with_cpu_quota_epa_cpu(
420 result
= Ns
._process
_guest
_epa
_quota
_params
(
421 guest_epa_quota
=guest_epa_quota
,
422 epa_vcpu_set
=epa_vcpu_set
,
425 self
.assertDictEqual(expected_result
, result
)
426 self
.assertFalse(resource_allocation
.called
)
428 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
429 def test__process_guest_epa_quota_params_with_cpu_quota_false_epa_cpu(
449 resource_allocation_param
= {
454 resource_allocation
.return_value
= {
460 result
= Ns
._process
_guest
_epa
_quota
_params
(
461 guest_epa_quota
=guest_epa_quota
,
462 epa_vcpu_set
=epa_vcpu_set
,
465 resource_allocation
.assert_called_once_with(resource_allocation_param
)
466 self
.assertDictEqual(expected_result
, result
)
468 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
469 def test__process_guest_epa_quota_params_with_mem_quota_epa_cpu(
489 resource_allocation_param
= {
494 resource_allocation
.return_value
= {
500 result
= Ns
._process
_guest
_epa
_quota
_params
(
501 guest_epa_quota
=guest_epa_quota
,
502 epa_vcpu_set
=epa_vcpu_set
,
505 resource_allocation
.assert_called_once_with(resource_allocation_param
)
506 self
.assertDictEqual(expected_result
, result
)
508 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
509 def test__process_guest_epa_quota_params_with_mem_quota_false_epa_cpu(
529 resource_allocation_param
= {
534 resource_allocation
.return_value
= {
540 result
= Ns
._process
_guest
_epa
_quota
_params
(
541 guest_epa_quota
=guest_epa_quota
,
542 epa_vcpu_set
=epa_vcpu_set
,
545 resource_allocation
.assert_called_once_with(resource_allocation_param
)
546 self
.assertDictEqual(expected_result
, result
)
548 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
549 def test__process_guest_epa_quota_params_with_disk_io_quota_epa_cpu(
569 resource_allocation_param
= {
574 resource_allocation
.return_value
= {
580 result
= Ns
._process
_guest
_epa
_quota
_params
(
581 guest_epa_quota
=guest_epa_quota
,
582 epa_vcpu_set
=epa_vcpu_set
,
585 resource_allocation
.assert_called_once_with(resource_allocation_param
)
586 self
.assertDictEqual(expected_result
, result
)
588 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
589 def test__process_guest_epa_quota_params_with_disk_io_quota_false_epa_cpu(
609 resource_allocation_param
= {
614 resource_allocation
.return_value
= {
620 result
= Ns
._process
_guest
_epa
_quota
_params
(
621 guest_epa_quota
=guest_epa_quota
,
622 epa_vcpu_set
=epa_vcpu_set
,
625 resource_allocation
.assert_called_once_with(resource_allocation_param
)
626 self
.assertDictEqual(expected_result
, result
)
628 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
629 def test__process_guest_epa_quota_params_with_vif_quota_epa_cpu(
649 resource_allocation_param
= {
654 resource_allocation
.return_value
= {
660 result
= Ns
._process
_guest
_epa
_quota
_params
(
661 guest_epa_quota
=guest_epa_quota
,
662 epa_vcpu_set
=epa_vcpu_set
,
665 resource_allocation
.assert_called_once_with(resource_allocation_param
)
666 self
.assertDictEqual(expected_result
, result
)
668 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
669 def test__process_guest_epa_quota_params_with_vif_quota_false_epa_cpu(
689 resource_allocation_param
= {
694 resource_allocation
.return_value
= {
700 result
= Ns
._process
_guest
_epa
_quota
_params
(
701 guest_epa_quota
=guest_epa_quota
,
702 epa_vcpu_set
=epa_vcpu_set
,
705 resource_allocation
.assert_called_once_with(resource_allocation_param
)
706 self
.assertDictEqual(expected_result
, result
)
708 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
709 def test__process_guest_epa_quota_params_with_quota_epa_cpu(
754 resource_allocation
.return_value
= {
760 result
= Ns
._process
_guest
_epa
_quota
_params
(
761 guest_epa_quota
=guest_epa_quota
,
762 epa_vcpu_set
=epa_vcpu_set
,
765 self
.assertTrue(resource_allocation
.called
)
766 self
.assertDictEqual(expected_result
, result
)
768 @patch("osm_ng_ro.ns.Ns._get_resource_allocation_params")
769 def test__process_guest_epa_quota_params_with_quota_epa_cpu_no_set(
819 resource_allocation
.return_value
= {
825 result
= Ns
._process
_guest
_epa
_quota
_params
(
826 guest_epa_quota
=guest_epa_quota
,
827 epa_vcpu_set
=epa_vcpu_set
,
830 self
.assertTrue(resource_allocation
.called
)
831 self
.assertDictEqual(expected_result
, result
)
833 def test__process_guest_epa_numa_params_with_empty_numa_params(self
):
834 expected_numa_result
= []
835 expected_epa_vcpu_set_result
= False
838 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
839 guest_epa_quota
=guest_epa_quota
,
841 self
.assertEqual(expected_numa_result
, numa_result
)
842 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
844 def test__process_guest_epa_numa_params_with_wrong_numa_params(self
):
845 expected_numa_result
= []
846 expected_epa_vcpu_set_result
= False
847 guest_epa_quota
= {"no_nume": "here"}
849 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
850 guest_epa_quota
=guest_epa_quota
,
853 self
.assertEqual(expected_numa_result
, numa_result
)
854 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
856 def test__process_guest_epa_numa_params_with_numa_node_policy(self
):
857 expected_numa_result
= []
858 expected_epa_vcpu_set_result
= False
859 guest_epa_quota
= {"numa-node-policy": {}}
861 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
862 guest_epa_quota
=guest_epa_quota
,
865 self
.assertEqual(expected_numa_result
, numa_result
)
866 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
868 def test__process_guest_epa_numa_params_with_no_node(self
):
869 expected_numa_result
= []
870 expected_epa_vcpu_set_result
= False
872 "numa-node-policy": {
877 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
878 guest_epa_quota
=guest_epa_quota
,
881 self
.assertEqual(expected_numa_result
, numa_result
)
882 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
884 def test__process_guest_epa_numa_params_with_1_node_num_cores(self
):
885 expected_numa_result
= [{"cores": 3}]
886 expected_epa_vcpu_set_result
= True
888 "numa-node-policy": {
897 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
898 guest_epa_quota
=guest_epa_quota
,
901 self
.assertEqual(expected_numa_result
, numa_result
)
902 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
904 def test__process_guest_epa_numa_params_with_1_node_paired_threads(self
):
905 expected_numa_result
= [{"paired_threads": 3}]
906 expected_epa_vcpu_set_result
= True
908 "numa-node-policy": {
911 "paired-threads": {"num-paired-threads": "3"},
917 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
918 guest_epa_quota
=guest_epa_quota
,
921 self
.assertEqual(expected_numa_result
, numa_result
)
922 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
924 def test__process_guest_epa_numa_params_with_1_node_paired_threads_ids(self
):
925 expected_numa_result
= [
927 "paired-threads-id": [("0", "1"), ("4", "5")],
930 expected_epa_vcpu_set_result
= False
932 "numa-node-policy": {
936 "paired-thread-ids": [
952 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
953 guest_epa_quota
=guest_epa_quota
,
956 self
.assertEqual(expected_numa_result
, numa_result
)
957 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
959 def test__process_guest_epa_numa_params_with_1_node_num_threads(self
):
960 expected_numa_result
= [{"threads": 3}]
961 expected_epa_vcpu_set_result
= True
963 "numa-node-policy": {
972 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
973 guest_epa_quota
=guest_epa_quota
,
976 self
.assertEqual(expected_numa_result
, numa_result
)
977 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
979 def test__process_guest_epa_numa_params_with_1_node_memory_mb(self
):
980 expected_numa_result
= [{"memory": 2}]
981 expected_epa_vcpu_set_result
= False
983 "numa-node-policy": {
992 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
993 guest_epa_quota
=guest_epa_quota
,
996 self
.assertEqual(expected_numa_result
, numa_result
)
997 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
999 def test__process_guest_epa_numa_params_with_1_node_vcpu(self
):
1000 expected_numa_result
= [
1006 expected_epa_vcpu_set_result
= False
1008 "numa-node-policy": {
1009 "node": [{"id": "0", "vcpu": [{"id": "0"}, {"id": "1"}]}],
1013 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
1014 guest_epa_quota
=guest_epa_quota
,
1017 self
.assertEqual(expected_numa_result
, numa_result
)
1018 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1020 def test__process_guest_epa_numa_params_with_2_node_vcpu(self
):
1021 expected_numa_result
= [
1032 expected_epa_vcpu_set_result
= False
1034 "numa-node-policy": {
1036 {"id": "0", "vcpu": [{"id": "0"}, {"id": "1"}]},
1037 {"id": "1", "vcpu": [{"id": "2"}, {"id": "3"}]},
1042 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
1043 guest_epa_quota
=guest_epa_quota
,
1046 self
.assertEqual(expected_numa_result
, numa_result
)
1047 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1049 def test__process_guest_epa_numa_params_with_1_node(self
):
1050 expected_numa_result
= [
1055 "paired_threads": 3,
1056 "paired-threads-id": [("0", "1"), ("4", "5")],
1061 expected_epa_vcpu_set_result
= True
1063 "numa-node-policy": {
1068 "num-paired-threads": "3",
1069 "paired-thread-ids": [
1087 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
1088 guest_epa_quota
=guest_epa_quota
,
1091 self
.assertEqual(expected_numa_result
, numa_result
)
1092 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1094 def test__process_guest_epa_numa_params_with_2_nodes(self
):
1095 expected_numa_result
= [
1098 "paired_threads": 3,
1099 "paired-threads-id": [("0", "1"), ("4", "5")],
1105 "paired_threads": 7,
1106 "paired-threads-id": [("2", "3"), ("5", "6")],
1111 expected_epa_vcpu_set_result
= True
1113 "numa-node-policy": {
1118 "num-paired-threads": "3",
1119 "paired-thread-ids": [
1136 "num-paired-threads": "7",
1137 "paired-thread-ids": [
1155 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_numa
_params
(
1156 guest_epa_quota
=guest_epa_quota
,
1159 self
.assertEqual(expected_numa_result
, numa_result
)
1160 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1162 def test__process_guest_epa_cpu_pinning_params_with_empty_params(self
):
1163 expected_numa_result
= {}
1164 expected_epa_vcpu_set_result
= False
1165 guest_epa_quota
= {}
1167 epa_vcpu_set
= False
1169 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_cpu
_pinning
_params
(
1170 guest_epa_quota
=guest_epa_quota
,
1171 vcpu_count
=vcpu_count
,
1172 epa_vcpu_set
=epa_vcpu_set
,
1175 self
.assertDictEqual(expected_numa_result
, numa_result
)
1176 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1178 def test__process_guest_epa_cpu_pinning_params_with_wrong_params(self
):
1179 expected_numa_result
= {}
1180 expected_epa_vcpu_set_result
= False
1182 "no-cpu-pinning-policy": "here",
1185 epa_vcpu_set
= False
1187 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_cpu
_pinning
_params
(
1188 guest_epa_quota
=guest_epa_quota
,
1189 vcpu_count
=vcpu_count
,
1190 epa_vcpu_set
=epa_vcpu_set
,
1193 self
.assertDictEqual(expected_numa_result
, numa_result
)
1194 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1196 def test__process_guest_epa_cpu_pinning_params_with_epa_vcpu_set(self
):
1197 expected_numa_result
= {}
1198 expected_epa_vcpu_set_result
= True
1200 "cpu-pinning-policy": "DEDICATED",
1205 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_cpu
_pinning
_params
(
1206 guest_epa_quota
=guest_epa_quota
,
1207 vcpu_count
=vcpu_count
,
1208 epa_vcpu_set
=epa_vcpu_set
,
1211 self
.assertDictEqual(expected_numa_result
, numa_result
)
1212 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1214 def test__process_guest_epa_cpu_pinning_params_with_threads(self
):
1215 expected_numa_result
= {"threads": 3}
1216 expected_epa_vcpu_set_result
= True
1218 "cpu-pinning-policy": "DEDICATED",
1219 "cpu-thread-pinning-policy": "PREFER",
1222 epa_vcpu_set
= False
1224 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_cpu
_pinning
_params
(
1225 guest_epa_quota
=guest_epa_quota
,
1226 vcpu_count
=vcpu_count
,
1227 epa_vcpu_set
=epa_vcpu_set
,
1230 self
.assertDictEqual(expected_numa_result
, numa_result
)
1231 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1233 def test__process_guest_epa_cpu_pinning_params(self
):
1234 expected_numa_result
= {"cores": 3}
1235 expected_epa_vcpu_set_result
= True
1237 "cpu-pinning-policy": "DEDICATED",
1240 epa_vcpu_set
= False
1242 numa_result
, epa_vcpu_set_result
= Ns
._process
_guest
_epa
_cpu
_pinning
_params
(
1243 guest_epa_quota
=guest_epa_quota
,
1244 vcpu_count
=vcpu_count
,
1245 epa_vcpu_set
=epa_vcpu_set
,
1248 self
.assertDictEqual(expected_numa_result
, numa_result
)
1249 self
.assertEqual(expected_epa_vcpu_set_result
, epa_vcpu_set_result
)
1251 @patch("osm_ng_ro.ns.Ns._process_guest_epa_quota_params")
1252 @patch("osm_ng_ro.ns.Ns._process_guest_epa_cpu_pinning_params")
1253 @patch("osm_ng_ro.ns.Ns._process_guest_epa_numa_params")
1254 def test__process_guest_epa_params_with_empty_params(
1256 guest_epa_numa_params
,
1257 guest_epa_cpu_pinning_params
,
1258 guest_epa_quota_params
,
1260 expected_result
= {}
1263 result
= Ns
._process
_epa
_params
(
1264 target_flavor
=target_flavor
,
1267 self
.assertDictEqual(expected_result
, result
)
1268 self
.assertFalse(guest_epa_numa_params
.called
)
1269 self
.assertFalse(guest_epa_cpu_pinning_params
.called
)
1270 self
.assertFalse(guest_epa_quota_params
.called
)
1272 @patch("osm_ng_ro.ns.Ns._process_guest_epa_quota_params")
1273 @patch("osm_ng_ro.ns.Ns._process_guest_epa_cpu_pinning_params")
1274 @patch("osm_ng_ro.ns.Ns._process_guest_epa_numa_params")
1275 def test__process_guest_epa_params_with_wrong_params(
1277 guest_epa_numa_params
,
1278 guest_epa_cpu_pinning_params
,
1279 guest_epa_quota_params
,
1281 expected_result
= {}
1283 "no-guest-epa": "here",
1286 result
= Ns
._process
_epa
_params
(
1287 target_flavor
=target_flavor
,
1290 self
.assertDictEqual(expected_result
, result
)
1291 self
.assertFalse(guest_epa_numa_params
.called
)
1292 self
.assertFalse(guest_epa_cpu_pinning_params
.called
)
1293 self
.assertFalse(guest_epa_quota_params
.called
)
1295 @patch("osm_ng_ro.ns.Ns._process_guest_epa_quota_params")
1296 @patch("osm_ng_ro.ns.Ns._process_guest_epa_cpu_pinning_params")
1297 @patch("osm_ng_ro.ns.Ns._process_guest_epa_numa_params")
1298 def test__process_guest_epa_params(
1300 guest_epa_numa_params
,
1301 guest_epa_cpu_pinning_params
,
1302 guest_epa_quota_params
,
1305 "mem-policy": "STRICT",
1310 "numa-node-policy": {
1311 "mem-policy": "STRICT",
1316 guest_epa_numa_params
.return_value
= ({}, False)
1317 guest_epa_cpu_pinning_params
.return_value
= ({}, False)
1318 guest_epa_quota_params
.return_value
= {}
1320 result
= Ns
._process
_epa
_params
(
1321 target_flavor
=target_flavor
,
1324 self
.assertDictEqual(expected_result
, result
)
1325 self
.assertTrue(guest_epa_numa_params
.called
)
1326 self
.assertTrue(guest_epa_cpu_pinning_params
.called
)
1327 self
.assertTrue(guest_epa_quota_params
.called
)
1329 @patch("osm_ng_ro.ns.Ns._process_guest_epa_quota_params")
1330 @patch("osm_ng_ro.ns.Ns._process_guest_epa_cpu_pinning_params")
1331 @patch("osm_ng_ro.ns.Ns._process_guest_epa_numa_params")
1332 def test__process_guest_epa_params_with_mempage_size(
1334 guest_epa_numa_params
,
1335 guest_epa_cpu_pinning_params
,
1336 guest_epa_quota_params
,
1339 "mempage-size": "1G",
1340 "mem-policy": "STRICT",
1345 "mempage-size": "1G",
1346 "numa-node-policy": {
1347 "mem-policy": "STRICT",
1352 guest_epa_numa_params
.return_value
= ({}, False)
1353 guest_epa_cpu_pinning_params
.return_value
= ({}, False)
1354 guest_epa_quota_params
.return_value
= {}
1356 result
= Ns
._process
_epa
_params
(
1357 target_flavor
=target_flavor
,
1360 self
.assertDictEqual(expected_result
, result
)
1361 self
.assertTrue(guest_epa_numa_params
.called
)
1362 self
.assertTrue(guest_epa_cpu_pinning_params
.called
)
1363 self
.assertTrue(guest_epa_quota_params
.called
)
1365 @patch("osm_ng_ro.ns.Ns._process_guest_epa_quota_params")
1366 @patch("osm_ng_ro.ns.Ns._process_guest_epa_cpu_pinning_params")
1367 @patch("osm_ng_ro.ns.Ns._process_guest_epa_numa_params")
1368 def test__process_guest_epa_params_with_numa(
1370 guest_epa_numa_params
,
1371 guest_epa_cpu_pinning_params
,
1372 guest_epa_quota_params
,
1375 "mempage-size": "1G",
1376 "cpu-pinning-policy": "DEDICATED",
1377 "cpu-thread-pinning-policy": "PREFER",
1382 "paired-threads": 3,
1383 "paired-threads-id": [("0", "1"), ("4", "5")],
1387 "cpu-quota": {"limit": 10, "reserve": 20, "shares": 30},
1388 "disk-io-quota": {"limit": 10, "reserve": 20, "shares": 30},
1389 "mem-quota": {"limit": 10, "reserve": 20, "shares": 30},
1390 "vif-quota": {"limit": 10, "reserve": 20, "shares": 30},
1395 "mempage-size": "1G",
1396 "cpu-pinning-policy": "DEDICATED",
1397 "cpu-thread-pinning-policy": "PREFER",
1398 "numa-node-policy": {
1403 "num-paired-threads": "3",
1404 "paired-thread-ids": [
1443 guest_epa_numa_params
.return_value
= (
1447 "paired-threads": 3,
1448 "paired-threads-id": [("0", "1"), ("4", "5")],
1455 guest_epa_cpu_pinning_params
.return_value
= (
1461 guest_epa_quota_params
.return_value
= {
1484 result
= Ns
._process
_epa
_params
(
1485 target_flavor
=target_flavor
,
1487 self
.assertEqual(expected_result
, result
)
1488 self
.assertTrue(guest_epa_numa_params
.called
)
1489 self
.assertTrue(guest_epa_cpu_pinning_params
.called
)
1490 self
.assertTrue(guest_epa_quota_params
.called
)
1492 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1493 def test__process_flavor_params_with_empty_target_flavor(
1502 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1507 target_record_id
= ""
1509 with self
.assertRaises(KeyError):
1510 Ns
._process
_flavor
_params
(
1511 target_flavor
=target_flavor
,
1514 target_record_id
=target_record_id
,
1517 self
.assertFalse(epa_params
.called
)
1519 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1520 def test__process_flavor_params_with_wrong_target_flavor(
1526 "no-target-flavor": "here",
1530 target_record_id
= ""
1532 with self
.assertRaises(KeyError):
1533 Ns
._process
_flavor
_params
(
1534 target_flavor
=target_flavor
,
1537 target_record_id
=target_record_id
,
1540 self
.assertFalse(epa_params
.called
)
1542 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1543 def test__process_flavor_params_with_empty_indata(
1568 "memory-mb": "1024",
1573 target_record_id
= ""
1575 epa_params
.return_value
= {}
1577 result
= Ns
._process
_flavor
_params
(
1578 target_flavor
=target_flavor
,
1581 target_record_id
=target_record_id
,
1584 self
.assertTrue(epa_params
.called
)
1585 self
.assertDictEqual(result
, expected_result
)
1587 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1588 def test__process_flavor_params_with_wrong_indata(
1613 "memory-mb": "1024",
1620 target_record_id
= ""
1622 epa_params
.return_value
= {}
1624 result
= Ns
._process
_flavor
_params
(
1625 target_flavor
=target_flavor
,
1628 target_record_id
=target_record_id
,
1631 self
.assertTrue(epa_params
.called
)
1632 self
.assertDictEqual(result
, expected_result
)
1634 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1635 def test__process_flavor_params_with_ephemeral_disk(
1639 db
= MagicMock(name
="database mock")
1644 db
.get_one
.return_value
= {
1645 "_id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1650 {"id": "without_volumes-VM", "min-number-of-instances": 1}
1654 "id": "without_volumes-vnf",
1655 "product-name": "without_volumes-vnf",
1658 "id": "without_volumes-VM",
1659 "name": "without_volumes-VM",
1660 "sw-image-desc": "ubuntu20.04",
1661 "alternative-sw-image-desc": [
1663 "ubuntu20.04-azure",
1665 "virtual-storage-desc": ["root-volume", "ephemeral-volume"],
1669 "virtual-storage-desc": [
1670 {"id": "root-volume", "size-of-storage": "10"},
1672 "id": "ephemeral-volume",
1673 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
1674 "size-of-storage": "1",
1680 "path": "/app/storage/",
1708 "memory-mb": "1024",
1716 "ns-flavor-id": "test_id",
1717 "virtual-storages": [
1719 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
1720 "size-of-storage": "10",
1725 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1730 target_record_id
= ""
1732 epa_params
.return_value
= {}
1734 result
= Ns
._process
_flavor
_params
(
1735 target_flavor
=target_flavor
,
1738 target_record_id
=target_record_id
,
1742 self
.assertTrue(epa_params
.called
)
1743 self
.assertDictEqual(result
, expected_result
)
1745 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1746 def test__process_flavor_params_with_swap_disk(
1774 "memory-mb": "1024",
1782 "ns-flavor-id": "test_id",
1783 "virtual-storages": [
1785 "type-of-storage": "etsi-nfv-descriptors:swap-storage",
1786 "size-of-storage": "20",
1791 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1796 target_record_id
= ""
1798 epa_params
.return_value
= {}
1800 result
= Ns
._process
_flavor
_params
(
1801 target_flavor
=target_flavor
,
1804 target_record_id
=target_record_id
,
1807 self
.assertTrue(epa_params
.called
)
1808 self
.assertDictEqual(result
, expected_result
)
1810 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1811 def test__process_flavor_params_with_persistent_root_disk(
1815 db
= MagicMock(name
="database mock")
1821 db
.get_one
.return_value
= {
1822 "_id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1827 {"id": "several_volumes-VM", "min-number-of-instances": 1}
1831 "id": "several_volumes-vnf",
1832 "product-name": "several_volumes-vnf",
1835 "id": "several_volumes-VM",
1836 "name": "several_volumes-VM",
1837 "sw-image-desc": "ubuntu20.04",
1838 "alternative-sw-image-desc": [
1840 "ubuntu20.04-azure",
1842 "virtual-storage-desc": [
1843 "persistent-root-volume",
1848 "virtual-storage-desc": [
1850 "id": "persistent-root-volume",
1851 "type-of-storage": "persistent-storage:persistent-storage",
1852 "size-of-storage": "10",
1858 "path": "/app/storage/",
1884 "memory-mb": "1024",
1892 "vdu-name": "several_volumes-VM",
1893 "ns-flavor-id": "test_id",
1894 "virtual-storages": [
1896 "type-of-storage": "persistent-storage:persistent-storage",
1897 "size-of-storage": "10",
1902 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1907 target_record_id
= ""
1909 epa_params
.return_value
= {}
1911 result
= Ns
._process
_flavor
_params
(
1912 target_flavor
=target_flavor
,
1915 target_record_id
=target_record_id
,
1919 self
.assertTrue(epa_params
.called
)
1920 self
.assertDictEqual(result
, expected_result
)
1922 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1923 def test__process_flavor_params_with_epa_params(
1935 "numa": "there-is-numa-here",
1946 "numa": "there-is-numa-here",
1955 "memory-mb": "1024",
1963 "ns-flavor-id": "test_id",
1966 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
1971 target_record_id
= ""
1973 epa_params
.return_value
= {
1974 "numa": "there-is-numa-here",
1977 result
= Ns
._process
_flavor
_params
(
1978 target_flavor
=target_flavor
,
1981 target_record_id
=target_record_id
,
1984 self
.assertTrue(epa_params
.called
)
1985 self
.assertDictEqual(result
, expected_result
)
1987 @patch("osm_ng_ro.ns.Ns._process_epa_params")
1988 def test__process_flavor_params(
1992 db
= MagicMock(name
="database mock")
1998 db
.get_one
.return_value
= {
1999 "_id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
2004 {"id": "without_volumes-VM", "min-number-of-instances": 1}
2008 "id": "without_volumes-vnf",
2009 "product-name": "without_volumes-vnf",
2012 "id": "without_volumes-VM",
2013 "name": "without_volumes-VM",
2014 "sw-image-desc": "ubuntu20.04",
2015 "alternative-sw-image-desc": [
2017 "ubuntu20.04-azure",
2019 "virtual-storage-desc": ["root-volume", "ephemeral-volume"],
2023 "virtual-storage-desc": [
2024 {"id": "root-volume", "size-of-storage": "10"},
2026 "id": "ephemeral-volume",
2027 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
2028 "size-of-storage": "1",
2034 "path": "/app/storage/",
2049 "numa": "there-is-numa-here",
2062 "numa": "there-is-numa-here",
2071 "memory-mb": "1024",
2079 "ns-flavor-id": "test_id",
2080 "virtual-storages": [
2082 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
2083 "size-of-storage": "10",
2086 "type-of-storage": "etsi-nfv-descriptors:swap-storage",
2087 "size-of-storage": "20",
2092 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
2097 target_record_id
= ""
2099 epa_params
.return_value
= {
2100 "numa": "there-is-numa-here",
2103 result
= Ns
._process
_flavor
_params
(
2104 target_flavor
=target_flavor
,
2107 target_record_id
=target_record_id
,
2111 self
.assertTrue(epa_params
.called
)
2112 self
.assertDictEqual(result
, expected_result
)
2114 def test__ip_profile_to_ro_with_none(self
):
2117 result
= Ns
._ip
_profile
_to
_ro
(
2118 ip_profile
=ip_profile
,
2121 self
.assertIsNone(result
)
2123 def test__ip_profile_to_ro_with_empty_profile(self
):
2126 result
= Ns
._ip
_profile
_to
_ro
(
2127 ip_profile
=ip_profile
,
2130 self
.assertIsNone(result
)
2132 def test__ip_profile_to_ro_with_wrong_profile(self
):
2134 "no-profile": "here",
2137 "ip_version": "IPv4",
2138 "subnet_address": None,
2139 "gateway_address": None,
2140 "dhcp_enabled": False,
2141 "dhcp_start_address": None,
2145 result
= Ns
._ip
_profile
_to
_ro
(
2146 ip_profile
=ip_profile
,
2149 self
.assertDictEqual(expected_result
, result
)
2151 def test__ip_profile_to_ro_with_ipv4_profile(self
):
2153 "ip-version": "ipv4",
2154 "subnet-address": "192.168.0.0/24",
2155 "gateway-address": "192.168.0.254",
2158 "start-address": "192.168.0.10",
2163 "ip_version": "IPv4",
2164 "subnet_address": "192.168.0.0/24",
2165 "gateway_address": "192.168.0.254",
2166 "dhcp_enabled": True,
2167 "dhcp_start_address": "192.168.0.10",
2171 result
= Ns
._ip
_profile
_to
_ro
(
2172 ip_profile
=ip_profile
,
2175 self
.assertDictEqual(expected_result
, result
)
2177 def test__ip_profile_to_ro_with_ipv6_profile(self
):
2179 "ip-version": "ipv6",
2180 "subnet-address": "2001:0200:0001::/48",
2181 "gateway-address": "2001:0200:0001:ffff:ffff:ffff:ffff:fffe",
2184 "start-address": "2001:0200:0001::0010",
2189 "ip_version": "IPv6",
2190 "subnet_address": "2001:0200:0001::/48",
2191 "gateway_address": "2001:0200:0001:ffff:ffff:ffff:ffff:fffe",
2192 "dhcp_enabled": True,
2193 "dhcp_start_address": "2001:0200:0001::0010",
2197 result
= Ns
._ip
_profile
_to
_ro
(
2198 ip_profile
=ip_profile
,
2201 self
.assertDictEqual(expected_result
, result
)
2203 def test__ip_profile_to_ro_with_dns_server(self
):
2205 "ip-version": "ipv4",
2206 "subnet-address": "192.168.0.0/24",
2207 "gateway-address": "192.168.0.254",
2210 "start-address": "192.168.0.10",
2215 "address": "8.8.8.8",
2218 "address": "1.1.1.1",
2221 "address": "1.0.0.1",
2226 "ip_version": "IPv4",
2227 "subnet_address": "192.168.0.0/24",
2228 "gateway_address": "192.168.0.254",
2229 "dhcp_enabled": True,
2230 "dhcp_start_address": "192.168.0.10",
2232 "dns_address": "8.8.8.8;1.1.1.1;1.0.0.1",
2235 result
= Ns
._ip
_profile
_to
_ro
(
2236 ip_profile
=ip_profile
,
2239 self
.assertDictEqual(expected_result
, result
)
2241 def test__ip_profile_to_ro_with_security_group(self
):
2243 "ip-version": "ipv4",
2244 "subnet-address": "192.168.0.0/24",
2245 "gateway-address": "192.168.0.254",
2248 "start-address": "192.168.0.10",
2252 "some-security-group": "here",
2256 "ip_version": "IPv4",
2257 "subnet_address": "192.168.0.0/24",
2258 "gateway_address": "192.168.0.254",
2259 "dhcp_enabled": True,
2260 "dhcp_start_address": "192.168.0.10",
2263 "some-security-group": "here",
2267 result
= Ns
._ip
_profile
_to
_ro
(
2268 ip_profile
=ip_profile
,
2271 self
.assertDictEqual(expected_result
, result
)
2273 def test__ip_profile_to_ro(self
):
2275 "ip-version": "ipv4",
2276 "subnet-address": "192.168.0.0/24",
2277 "gateway-address": "192.168.0.254",
2280 "start-address": "192.168.0.10",
2285 "address": "8.8.8.8",
2288 "address": "1.1.1.1",
2291 "address": "1.0.0.1",
2295 "some-security-group": "here",
2299 "ip_version": "IPv4",
2300 "subnet_address": "192.168.0.0/24",
2301 "gateway_address": "192.168.0.254",
2302 "dhcp_enabled": True,
2303 "dhcp_start_address": "192.168.0.10",
2305 "dns_address": "8.8.8.8;1.1.1.1;1.0.0.1",
2307 "some-security-group": "here",
2311 result
= Ns
._ip
_profile
_to
_ro
(
2312 ip_profile
=ip_profile
,
2315 self
.assertDictEqual(expected_result
, result
)
2317 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2318 def test__process_net_params_with_empty_params(
2329 "provider_network": "some-profile-here",
2331 target_record_id
= ""
2334 "net_name": "ns-name-vld-name",
2335 "net_type": "bridge",
2337 "some_ip_profile": "here",
2339 "provider_network_profile": "some-profile-here",
2343 ip_profile_to_ro
.return_value
= {
2344 "some_ip_profile": "here",
2347 result
= Ns
._process
_net
_params
(
2348 target_vld
=target_vld
,
2351 target_record_id
=target_record_id
,
2354 self
.assertDictEqual(expected_result
, result
)
2355 self
.assertTrue(ip_profile_to_ro
.called
)
2357 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2358 def test__process_net_params_with_vim_info_sdn(
2370 "sdn-ports": ["some", "ports", "here"],
2371 "vlds": ["some", "vlds", "here"],
2374 target_record_id
= "vld.sdn.something"
2377 "sdn-ports": ["some", "ports", "here"],
2378 "vlds": ["some", "vlds", "here"],
2383 result
= Ns
._process
_net
_params
(
2384 target_vld
=target_vld
,
2387 target_record_id
=target_record_id
,
2390 self
.assertDictEqual(expected_result
, result
)
2391 self
.assertFalse(ip_profile_to_ro
.called
)
2393 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2394 def test__process_net_params_with_vim_info_sdn_target_vim(
2406 "sdn-ports": ["some", "ports", "here"],
2407 "vlds": ["some", "vlds", "here"],
2408 "target_vim": "some-vim",
2411 target_record_id
= "vld.sdn.something"
2413 "depends_on": ["some-vim vld.sdn"],
2415 "sdn-ports": ["some", "ports", "here"],
2416 "vlds": ["some", "vlds", "here"],
2417 "target_vim": "some-vim",
2422 result
= Ns
._process
_net
_params
(
2423 target_vld
=target_vld
,
2426 target_record_id
=target_record_id
,
2429 self
.assertDictEqual(expected_result
, result
)
2430 self
.assertFalse(ip_profile_to_ro
.called
)
2432 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2433 def test__process_net_params_with_vim_network_name(
2444 "vim_network_name": "some-network-name",
2446 target_record_id
= "vld.sdn.something"
2450 "name": "some-network-name",
2455 result
= Ns
._process
_net
_params
(
2456 target_vld
=target_vld
,
2459 target_record_id
=target_record_id
,
2462 self
.assertDictEqual(expected_result
, result
)
2463 self
.assertFalse(ip_profile_to_ro
.called
)
2465 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2466 def test__process_net_params_with_vim_network_id(
2477 "vim_network_id": "some-network-id",
2479 target_record_id
= "vld.sdn.something"
2483 "id": "some-network-id",
2488 result
= Ns
._process
_net
_params
(
2489 target_vld
=target_vld
,
2492 target_record_id
=target_record_id
,
2495 self
.assertDictEqual(expected_result
, result
)
2496 self
.assertFalse(ip_profile_to_ro
.called
)
2498 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2499 def test__process_net_params_with_mgmt_network(
2506 "mgmt-network": "some-mgmt-network",
2512 target_record_id
= "vld.sdn.something"
2520 result
= Ns
._process
_net
_params
(
2521 target_vld
=target_vld
,
2524 target_record_id
=target_record_id
,
2527 self
.assertDictEqual(expected_result
, result
)
2528 self
.assertFalse(ip_profile_to_ro
.called
)
2530 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2531 def test__process_net_params_with_underlay_eline(
2537 "underlay": "some-underlay-here",
2544 "provider_network": "some-profile-here",
2546 target_record_id
= ""
2550 "some_ip_profile": "here",
2552 "net_name": "ns-name-vld-name",
2554 "provider_network_profile": "some-profile-here",
2558 ip_profile_to_ro
.return_value
= {
2559 "some_ip_profile": "here",
2562 result
= Ns
._process
_net
_params
(
2563 target_vld
=target_vld
,
2566 target_record_id
=target_record_id
,
2569 self
.assertDictEqual(expected_result
, result
)
2570 self
.assertTrue(ip_profile_to_ro
.called
)
2572 @patch("osm_ng_ro.ns.Ns._ip_profile_to_ro")
2573 def test__process_net_params_with_underlay_elan(
2579 "underlay": "some-underlay-here",
2586 "provider_network": "some-profile-here",
2588 target_record_id
= ""
2592 "some_ip_profile": "here",
2594 "net_name": "ns-name-vld-name",
2596 "provider_network_profile": "some-profile-here",
2600 ip_profile_to_ro
.return_value
= {
2601 "some_ip_profile": "here",
2604 result
= Ns
._process
_net
_params
(
2605 target_vld
=target_vld
,
2608 target_record_id
=target_record_id
,
2611 self
.assertDictEqual(expected_result
, result
)
2612 self
.assertTrue(ip_profile_to_ro
.called
)
2614 def test__get_cloud_init_exception(self
):
2615 db_mock
= MagicMock(name
="database mock")
2620 with self
.assertRaises(NsException
):
2621 Ns
._get
_cloud
_init
(db
=db_mock
, fs
=fs_mock
, location
=location
)
2623 def test__get_cloud_init_file_fs_exception(self
):
2624 db_mock
= MagicMock(name
="database mock")
2627 location
= "vnfr_id_123456:file:test_file"
2628 db_mock
.get_one
.return_value
= {
2631 "folder": "/home/osm",
2632 "pkg-dir": "vnfr_test_dir",
2637 with self
.assertRaises(NsException
):
2638 Ns
._get
_cloud
_init
(db
=db_mock
, fs
=fs_mock
, location
=location
)
2640 def test__get_cloud_init_file(self
):
2641 db_mock
= MagicMock(name
="database mock")
2642 fs_mock
= MagicMock(name
="filesystem mock")
2643 file_mock
= MagicMock(name
="file mock")
2645 location
= "vnfr_id_123456:file:test_file"
2646 cloud_init_content
= "this is a cloud init file content"
2648 db_mock
.get_one
.return_value
= {
2651 "folder": "/home/osm",
2652 "pkg-dir": "vnfr_test_dir",
2656 fs_mock
.file_open
.return_value
= file_mock
2657 file_mock
.__enter
__.return_value
.read
.return_value
= cloud_init_content
2659 result
= Ns
._get
_cloud
_init
(db
=db_mock
, fs
=fs_mock
, location
=location
)
2661 self
.assertEqual(cloud_init_content
, result
)
2663 def test__get_cloud_init_vdu(self
):
2664 db_mock
= MagicMock(name
="database mock")
2667 location
= "vnfr_id_123456:vdu:0"
2668 cloud_init_content
= "this is a cloud init file content"
2670 db_mock
.get_one
.return_value
= {
2673 "cloud-init": cloud_init_content
,
2678 result
= Ns
._get
_cloud
_init
(db
=db_mock
, fs
=fs_mock
, location
=location
)
2680 self
.assertEqual(cloud_init_content
, result
)
2682 @patch("jinja2.Environment.__init__")
2683 def test__parse_jinja2_undefined_error(self
, env_mock
: Mock
):
2684 cloud_init_content
= None
2688 env_mock
.side_effect
= UndefinedError("UndefinedError occurred.")
2690 with self
.assertRaises(NsException
):
2692 cloud_init_content
=cloud_init_content
, params
=params
, context
=context
2695 @patch("jinja2.Environment.__init__")
2696 def test__parse_jinja2_template_error(self
, env_mock
: Mock
):
2697 cloud_init_content
= None
2701 env_mock
.side_effect
= TemplateError("TemplateError occurred.")
2703 with self
.assertRaises(NsException
):
2705 cloud_init_content
=cloud_init_content
, params
=params
, context
=context
2708 @patch("jinja2.Environment.__init__")
2709 def test__parse_jinja2_template_not_found(self
, env_mock
: Mock
):
2710 cloud_init_content
= None
2714 env_mock
.side_effect
= TemplateNotFound("TemplateNotFound occurred.")
2716 with self
.assertRaises(NsException
):
2718 cloud_init_content
=cloud_init_content
, params
=params
, context
=context
2721 def test_rendering_jinja2_temp_without_special_characters(self
):
2722 cloud_init_content
= """
2725 table_type: {{type}}
2727 overwrite: {{is_override}}
2730 - [ sh, -xc, "echo $(date) '{{command}}'" ]
2734 "is_override": "False",
2735 "command": "; mkdir abc",
2737 context
= "cloud-init for VM"
2738 expected_result
= """
2746 - [ sh, -xc, "echo $(date) '; mkdir abc'" ]
2748 result
= Ns
._parse
_jinja
2(
2749 cloud_init_content
=cloud_init_content
, params
=params
, context
=context
2751 self
.assertEqual(result
, expected_result
)
2753 def test_rendering_jinja2_temp_with_special_characters(self
):
2754 cloud_init_content
= """
2757 table_type: {{type}}
2759 overwrite: {{is_override}}
2762 - [ sh, -xc, "echo $(date) '{{command}}'" ]
2766 "is_override": "False",
2767 "command": "& rm -rf",
2769 context
= "cloud-init for VM"
2770 expected_result
= """
2778 - [ sh, -xc, "echo $(date) '& rm -rf /'" ]
2780 result
= Ns
._parse
_jinja
2(
2781 cloud_init_content
=cloud_init_content
, params
=params
, context
=context
2783 self
.assertNotEqual(result
, expected_result
)
2785 def test_rendering_jinja2_temp_with_special_characters_autoescape_is_false(self
):
2786 with
patch("osm_ng_ro.ns.Environment") as mock_environment
:
2787 mock_environment
.return_value
= Environment(
2788 undefined
=StrictUndefined
,
2789 autoescape
=select_autoescape(default_for_string
=False, default
=False),
2791 cloud_init_content
= """
2794 table_type: {{type}}
2796 overwrite: {{is_override}}
2799 - [ sh, -xc, "echo $(date) '{{command}}'" ]
2803 "is_override": "False",
2804 "command": "& rm -rf /",
2806 context
= "cloud-init for VM"
2807 expected_result
= """
2815 - [ sh, -xc, "echo $(date) '& rm -rf /'" ]
2817 result
= Ns
._parse
_jinja
2(
2818 cloud_init_content
=cloud_init_content
,
2822 self
.assertEqual(result
, expected_result
)
2824 def test__process_vdu_params_empty_kargs(self
):
2827 def test__process_vdu_params_interface_ns_vld_id(self
):
2830 def test__process_vdu_params_interface_vnf_vld_id(self
):
2833 def test__process_vdu_params_interface_unknown(self
):
2836 def test__process_vdu_params_interface_port_security_enabled(self
):
2839 def test__process_vdu_params_interface_port_security_disable_strategy(self
):
2842 def test__process_vdu_params_interface_sriov(self
):
2845 def test__process_vdu_params_interface_pci_passthrough(self
):
2848 def test__process_vdu_params_interface_om_mgmt(self
):
2851 def test__process_vdu_params_interface_mgmt_interface(self
):
2854 def test__process_vdu_params_interface_mgmt_vnf(self
):
2857 def test__process_vdu_params_interface_bridge(self
):
2860 def test__process_vdu_params_interface_ip_address(self
):
2863 def test__process_vdu_params_interface_mac_address(self
):
2866 def test__process_vdu_params_vdu_cloud_init_missing(self
):
2869 def test__process_vdu_params_vdu_cloud_init_present(self
):
2872 def test__process_vdu_params_vdu_boot_data_drive(self
):
2875 def test__process_vdu_params_vdu_ssh_keys(self
):
2878 def test__process_vdu_params_vdu_ssh_access_required(self
):
2881 @patch("osm_ng_ro.ns.Ns._get_cloud_init")
2882 @patch("osm_ng_ro.ns.Ns._parse_jinja2")
2883 def test__process_vdu_params_vdu_persistent_root_volume(
2884 self
, get_cloud_init
, parse_jinja2
2886 db
= MagicMock(name
="database mock")
2889 "vdu2cloud_init": {},
2891 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
2892 "member-vnf-index-ref": "vnf-several-volumes",
2895 get_cloud_init
.return_value
= {}
2896 parse_jinja2
.return_value
= {}
2897 db
.get_one
.return_value
= {
2898 "_id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
2903 {"id": "several_volumes-VM", "min-number-of-instances": 1}
2907 "id": "several_volumes-vnf",
2908 "product-name": "several_volumes-vnf",
2911 "id": "several_volumes-VM",
2912 "name": "several_volumes-VM",
2913 "sw-image-desc": "ubuntu20.04",
2914 "alternative-sw-image-desc": [
2916 "ubuntu20.04-azure",
2918 "virtual-storage-desc": [
2919 "persistent-root-volume",
2920 "persistent-volume2",
2926 "virtual-storage-desc": [
2928 "id": "persistent-volume2",
2929 "type-of-storage": "persistent-storage:persistent-storage",
2930 "size-of-storage": "10",
2933 "id": "persistent-root-volume",
2934 "type-of-storage": "persistent-storage:persistent-storage",
2935 "size-of-storage": "10",
2938 "id": "ephemeral-volume",
2939 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
2940 "size-of-storage": "1",
2946 "path": "/app/storage/",
2953 "_id": "09a0baa7-b7cb-4924-bd63-9f04a1c23960",
2954 "ns-flavor-id": "0",
2956 "vdu-name": "several_volumes-VM",
2960 "ns-vld-id": "mgmtnet",
2963 "virtual-storages": [
2965 "id": "persistent-volume2",
2966 "size-of-storage": "10",
2967 "type-of-storage": "persistent-storage:persistent-storage",
2970 "id": "persistent-root-volume",
2971 "size-of-storage": "10",
2972 "type-of-storage": "persistent-storage:persistent-storage",
2975 "id": "ephemeral-volume",
2976 "size-of-storage": "1",
2977 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
2982 "name": "sample_name",
2984 expected_result
= [{"image_id": "ubuntu20.04", "size": "10"}, {"size": "10"}]
2985 result
= Ns
._process
_vdu
_params
(
2986 target_vdu
, indata
, vim_info
=None, target_record_id
=None, **kwargs
2989 expected_result
, result
["params"]["disk_list"], "Wrong Disk List"
2992 @patch("osm_ng_ro.ns.Ns._get_cloud_init")
2993 @patch("osm_ng_ro.ns.Ns._parse_jinja2")
2994 def test__process_vdu_params_vdu_without_persistent_storage(
2995 self
, get_cloud_init
, parse_jinja2
2997 db
= MagicMock(name
="database mock")
3000 "vdu2cloud_init": {},
3002 "vnfd-id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
3003 "member-vnf-index-ref": "vnf-several-volumes",
3006 get_cloud_init
.return_value
= {}
3007 parse_jinja2
.return_value
= {}
3008 db
.get_one
.return_value
= {
3009 "_id": "ad6356e3-698c-43bf-9901-3aae9e9b9d18",
3014 {"id": "without_volumes-VM", "min-number-of-instances": 1}
3018 "id": "without_volumes-vnf",
3019 "product-name": "without_volumes-vnf",
3022 "id": "without_volumes-VM",
3023 "name": "without_volumes-VM",
3024 "sw-image-desc": "ubuntu20.04",
3025 "alternative-sw-image-desc": [
3027 "ubuntu20.04-azure",
3029 "virtual-storage-desc": ["root-volume", "ephemeral-volume"],
3033 "virtual-storage-desc": [
3034 {"id": "root-volume", "size-of-storage": "10"},
3036 "id": "ephemeral-volume",
3037 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
3038 "size-of-storage": "1",
3044 "path": "/app/storage/",
3051 "_id": "09a0baa7-b7cb-4924-bd63-9f04a1c23960",
3052 "ns-flavor-id": "0",
3054 "vdu-name": "without_volumes-VM",
3058 "ns-vld-id": "mgmtnet",
3061 "virtual-storages": [
3063 "id": "root-volume",
3064 "size-of-storage": "10",
3067 "id": "ephemeral-volume",
3068 "size-of-storage": "1",
3069 "type-of-storage": "etsi-nfv-descriptors:ephemeral-storage",
3074 "name": "sample_name",
3076 expected_result
= []
3077 result
= Ns
._process
_vdu
_params
(
3078 target_vdu
, indata
, vim_info
=None, target_record_id
=None, **kwargs
3081 expected_result
, result
["params"]["disk_list"], "Wrong Disk List"
3084 def test__process_vdu_params(self
):
3087 @patch("osm_ng_ro.ns.Ns._assign_vim")
3088 def test__rebuild_start_stop_task(self
, assign_vim
):
3091 actions
= ["start", "stop", "rebuild"]
3092 vdu_id
= "bb9c43f9-10a2-4569-a8a8-957c3528b6d1"
3093 vnf_id
= "665b4165-ce24-4320-bf19-b9a45bade49f"
3095 action_id
= "bb937f49-3870-4169-b758-9732e1ff40f3"
3096 nsr_id
= "993166fe-723e-4680-ac4b-b1af2541ae31"
3098 target_vim
= "vim:f9f370ac-0d44-41a7-9000-457f2332bc35"
3099 t
= "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:vdur.bb9c43f9-10a2-4569-a8a8-957c3528b6d1"
3100 for action
in actions
:
3102 "target_id": "vim:f9f370ac-0d44-41a7-9000-457f2332bc35",
3103 "action_id": "bb937f49-3870-4169-b758-9732e1ff40f3",
3104 "nsr_id": "993166fe-723e-4680-ac4b-b1af2541ae31",
3105 "task_id": "bb937f49-3870-4169-b758-9732e1ff40f3:0",
3106 "status": "SCHEDULED",
3109 "target_record": "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:vdur.0",
3110 "target_record_id": t
,
3112 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3116 extra_dict
["params"] = {
3117 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3120 task
= self
.ns
.rebuild_start_stop_task(
3130 self
.assertEqual(task
.get("action_id"), action_id
)
3131 self
.assertEqual(task
.get("nsr_id"), nsr_id
)
3132 self
.assertEqual(task
.get("target_id"), target_vim
)
3133 self
.assertDictEqual(task
, expected_result
)
3135 @patch("osm_ng_ro.ns.Ns._assign_vim")
3136 def test_verticalscale_task(self
, assign_vim
):
3140 action_id
= "bb937f49-3870-4169-b758-9732e1ff40f3"
3141 nsr_id
= "993166fe-723e-4680-ac4b-b1af2541ae31"
3143 target_record_id
= (
3144 "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:"
3145 "vdur.bb9c43f9-10a2-4569-a8a8-957c3528b6d1"
3149 "target_id": "vim:f9f370ac-0d44-41a7-9000-457f2332bc35",
3150 "action_id": "bb937f49-3870-4169-b758-9732e1ff40f3",
3151 "nsr_id": "993166fe-723e-4680-ac4b-b1af2541ae31",
3152 "task_id": "bb937f49-3870-4169-b758-9732e1ff40f3:1",
3153 "status": "SCHEDULED",
3155 "item": "verticalscale",
3156 "target_record": "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:vdur.1",
3157 "target_record_id": target_record_id
,
3159 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3160 "flavor_dict": "flavor_dict",
3164 "id": "bb9c43f9-10a2-4569-a8a8-957c3528b6d1",
3166 "vim:f9f370ac-0d44-41a7-9000-457f2332bc35": {"interfaces": []}
3169 vnf
= {"_id": "665b4165-ce24-4320-bf19-b9a45bade49f"}
3170 extra_dict
["params"] = {
3171 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3172 "flavor_dict": "flavor_dict",
3174 task
= self
.ns
.verticalscale_task(
3175 vdu
, vnf
, vdu_index
, action_id
, nsr_id
, task_index
, extra_dict
3178 self
.assertDictEqual(task
, expected_result
)
3180 @patch("osm_ng_ro.ns.Ns._assign_vim")
3181 def test_migrate_task(self
, assign_vim
):
3185 action_id
= "bb937f49-3870-4169-b758-9732e1ff40f3"
3186 nsr_id
= "993166fe-723e-4680-ac4b-b1af2541ae31"
3188 target_record_id
= (
3189 "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:"
3190 "vdur.bb9c43f9-10a2-4569-a8a8-957c3528b6d1"
3194 "target_id": "vim:f9f370ac-0d44-41a7-9000-457f2332bc35",
3195 "action_id": "bb937f49-3870-4169-b758-9732e1ff40f3",
3196 "nsr_id": "993166fe-723e-4680-ac4b-b1af2541ae31",
3197 "task_id": "bb937f49-3870-4169-b758-9732e1ff40f3:1",
3198 "status": "SCHEDULED",
3201 "target_record": "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:vdur.1",
3202 "target_record_id": target_record_id
,
3204 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3205 "migrate_host": "migrateToHost",
3209 "id": "bb9c43f9-10a2-4569-a8a8-957c3528b6d1",
3211 "vim:f9f370ac-0d44-41a7-9000-457f2332bc35": {"interfaces": []}
3214 vnf
= {"_id": "665b4165-ce24-4320-bf19-b9a45bade49f"}
3215 extra_dict
["params"] = {
3216 "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396",
3217 "migrate_host": "migrateToHost",
3219 task
= self
.ns
.migrate_task(
3220 vdu
, vnf
, vdu_index
, action_id
, nsr_id
, task_index
, extra_dict
3223 self
.assertDictEqual(task
, expected_result
)