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 types
import ModuleType
21 from unittest
.mock
import Mock
, patch
23 from osm_ng_ro
.ns_thread
import VimInteractionNet
26 class TestVimInteractionNet(unittest
.TestCase
):
29 module_name
= "osm_ro_plugin"
30 osm_ro_plugin
= ModuleType(module_name
)
31 osm_ro_plugin
.vimconn
= Mock(name
=module_name
+ ".vimconn")
32 osm_ro_plugin
.vimconn
.VimConnector
= Mock(
33 name
=module_name
+ "vimconn.VimConnector"
35 osm_ro_plugin
.vimconn
.VimConnException
= Mock(
36 name
=module_name
+ ".vimconn.VimConnException"
38 cls
.target_vim
= osm_ro_plugin
.vimconn
.VimConnector
39 cls
.VimConnException
= osm_ro_plugin
.vimconn
.VimConnException
40 cls
.task_depends
= None
43 def tearDownClass(cls
):
46 del cls
.VimConnException
48 def test__mgmt_net_id_in_find_params_mgmt_several_vim_nets(self
):
50 management_network_id in find_params.get('mgmt')
51 More than one network found in the VIM
54 logger
= "test_logger"
59 "management_network_id": "test_mgmt_id",
64 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
65 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
66 instance
, "logger", logging
72 "target_id": "vim_openstack_2",
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
85 "name": "some_mgmt_name",
87 "depends_on": "test_depends_on",
92 task_index
= "task_index_2"
93 self
.target_vim
.get_network_list
.return_value
= [
94 {"id": "existing_net_1"},
95 {"id": "existing_net_2"},
97 with self
.assertLogs() as captured
:
98 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
99 self
.assertEqual(len(captured
.records
), 1)
101 "More than one network found with this criteria"
102 in captured
.records
[0].getMessage()
104 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
105 self
.assertEqual(result
[0], "FAILED")
106 self
.assertEqual(result
[1].get("created"), False)
107 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
109 def test__mgmt_net_id_in_find_params_mgmt_no_vim_nets(self
):
111 management_network_id in find_params.get('mgmt')
112 The network could not be found in the VIM
115 logger
= "test_logger"
120 "management_network_id": "test_mgmt_id",
125 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
126 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
127 instance
, "logger", logging
133 "target_id": "vim_openstack_3",
134 "action_id": "123456",
136 "task_id": "123456:1",
137 "status": "SCHEDULED",
140 "target_record": "test_target_record",
141 "target_record_id": "test_target_record_id",
143 # values coming from extra_dict
146 "name": "some_mgmt_name",
148 "depends_on": "test_depends_on",
153 task_index
= "task_index_3"
154 self
.target_vim
.get_network_list
.return_value
= []
155 with self
.assertLogs() as captured
:
156 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
157 self
.assertEqual(len(captured
.records
), 1)
159 "Network not found with this criteria"
160 in captured
.records
[0].getMessage()
162 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
163 self
.assertEqual(result
[0], "FAILED")
164 self
.assertEqual(result
[1].get("created"), False)
165 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
167 def test__mgmt_net_name_in_find_params_mgmt_several_vim_nets(self
):
169 management_network_name in find_params.get('mgmt')
170 More than one network found in the VIM
173 logger
= "test_logger"
178 "management_network_name": "test_mgmt_name",
183 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
184 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
185 instance
, "logger", logging
191 "target_id": "vim_openstack_4",
192 "action_id": "123456",
194 "task_id": "123456:1",
195 "status": "SCHEDULED",
198 "target_record": "test_target_record",
199 "target_record_id": "test_target_record_id",
200 # values coming from extra_dict
204 "name": "some_mgmt_name",
206 "depends_on": "test_depends_on",
211 task_index
= "task_index_4"
212 self
.target_vim
.get_network_list
.return_value
= [
213 {"id": "existing_net_1"},
214 {"id": "existing_net_2"},
216 with self
.assertLogs() as captured
:
217 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
218 self
.assertEqual(len(captured
.records
), 1)
220 "More than one network found with this criteria"
221 in captured
.records
[0].getMessage()
223 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
224 self
.assertEqual(result
[0], "FAILED")
225 self
.assertEqual(result
[1].get("created"), False)
226 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
228 def test__mgmt_net_name_in_find_params_mgmt_no_vim_nets(self
):
230 management_network_name in find_params.get('mgmt')
231 The network could not be found in the VIM
234 logger
= "test_logger"
239 "management_network_name": "test_mgmt_name",
244 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
245 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
246 instance
, "logger", logging
252 "target_id": "vim_openstack_5",
253 "action_id": "123456",
255 "task_id": "123456:1",
256 "status": "SCHEDULED",
259 "target_record": "test_target_record",
260 "target_record_id": "test_target_record_id",
261 # values coming from extra_dict
265 "name": "some_mgmt_name",
267 "depends_on": "test_depends_on",
272 task_index
= "task_index_5"
273 self
.target_vim
.get_network_list
.return_value
= []
274 with self
.assertLogs() as captured
:
275 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
276 self
.assertEqual(len(captured
.records
), 1)
278 "Network not found with this criteria"
279 in captured
.records
[0].getMessage()
281 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
282 self
.assertEqual(result
[0], "FAILED")
283 self
.assertEqual(result
[1].get("created"), False)
284 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
286 def test__mgmt_net_name_in_find_params_filterdict_several_vim_nets(self
):
288 management_network_name in find_params.get('filterdict')
289 More than one network found in the VIM
292 logger
= "test_logger"
297 "management_network_name": "test_mgmt_name",
301 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
302 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
303 instance
, "logger", logging
309 "target_id": "vim_openstack_6",
310 "action_id": "123456",
312 "task_id": "123456:1",
313 "status": "SCHEDULED",
316 "target_record": "test_target_record",
317 "target_record_id": "test_target_record_id",
318 # values coming from extra_dict
322 "name": "some-network-name",
325 "name": "some_mgmt_name",
327 "depends_on": "test_depends_on",
332 task_index
= "task_index_6"
333 self
.target_vim
.get_network_list
.return_value
= [
334 {"id": "existing_net_1"},
335 {"id": "existing_net_2"},
337 with self
.assertLogs() as captured
:
338 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
339 self
.assertEqual(len(captured
.records
), 1)
341 "More than one network found with this criteria"
342 in captured
.records
[0].getMessage()
344 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
345 self
.assertEqual(result
[0], "FAILED")
346 self
.assertEqual(result
[1].get("created"), False)
347 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
349 def test__mgmt_net_name_in_find_params_no_filterdict_no_mgmt(self
):
351 There is find_params in the task
352 No mgmt in find_params
353 No filter_dict in find_params
356 logger
= "test_logger"
361 "management_network_name": "test_mgmt_name",
365 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
366 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
367 instance
, "logger", logging
373 "target_id": "vim_openstack_7",
374 "action_id": "123456",
376 "task_id": "123456:1",
377 "status": "SCHEDULED",
380 "target_record": "test_target_record",
381 "target_record_id": "test_target_record_id",
382 # values coming from extra_dict
384 "find_params": {"wrong_param": "wrong_value"},
385 "depends_on": "test_depends_on",
390 task_index
= "task_index_4"
391 with self
.assertLogs() as captured
:
392 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
393 self
.assertEqual(len(captured
.records
), 1)
395 "Invalid find_params for new_net"
396 in captured
.records
[0].getMessage()
398 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
399 self
.assertEqual(result
[0], "FAILED")
400 self
.assertEqual(result
[1].get("created"), False)
401 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
403 def test__mgmt_net_name_in_find_params_filterdict_no_vim_nets_params_in_task(self
):
405 management_network_name in find_params.get('filterdict')
406 The network could not be found in the VIM
407 There are items in the task.get(params)
410 logger
= "test_logger"
415 "management_network_name": "test_mgmt_name",
419 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
420 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
421 instance
, "logger", logging
427 "target_id": "vim_openstack_8",
428 "action_id": "123456",
430 "task_id": "123456:1",
431 "status": "SCHEDULED",
434 "target_record": "test_target_record",
435 "target_record_id": "test_target_record_id",
436 # values coming from extra_dict
437 "params": "test_params",
440 "name": "some-network-name",
443 "name": "some_mgmt_name",
445 "depends_on": "test_depends_on",
450 task_index
= "task_index_8"
451 self
.target_vim
.get_network_list
.return_value
= []
452 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
453 self
.assertEqual(result
[0], "BUILD")
454 self
.assertEqual(result
[1].get("created"), False)
455 self
.assertEqual(result
[1].get("vim_id"), None)
456 self
.assertEqual(result
[1].get("created_items"), {})
457 self
.assertEqual(result
[1].get("vim_status"), "BUILD")
459 def test__mgmt_net_name_in_find_params_filterdict_no_vim_nets(self
):
461 management_network_name in find_params.get('filterdict')
462 Any network could not be found in the VIM
465 logger
= "test_logger"
470 "management_network_name": "test_mgmt_name",
474 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
475 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
476 instance
, "logger", logging
482 "target_id": "vim_openstack_9",
483 "action_id": "123456",
485 "task_id": "123456:1",
486 "status": "SCHEDULED",
489 "target_record": "test_target_record",
490 "target_record_id": "test_target_record_id",
491 # values coming from extra_dict
495 "name": "some-network-name",
498 "name": "some_mgmt_name",
500 "depends_on": "test_depends_on",
505 task_index
= "task_index_9"
506 self
.target_vim
.get_network_list
.return_value
= []
507 with self
.assertLogs() as captured
:
508 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
509 self
.assertEqual(len(captured
.records
), 1)
511 "Network not found with this criteria"
512 in captured
.records
[0].getMessage()
514 self
.assertEqual(captured
.records
[0].levelname
, "ERROR")
515 self
.assertEqual(result
[0], "FAILED")
516 self
.assertEqual(result
[1].get("created"), False)
517 self
.assertEqual(result
[1].get("vim_status"), "VIM_ERROR")
519 def test__mgmt_net_name_in_find_params_mgmt_no_config_one_vim_net(self
):
522 management_network_name is not in db_vims.get('config')
523 One network found in the VIM
526 logger
= "test_logger"
529 "vim_openstack_10": {
533 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
534 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
535 instance
, "logger", logging
541 "target_id": "vim_openstack_10",
542 "action_id": "123456",
544 "task_id": "123456:1",
545 "status": "SCHEDULED",
548 "target_record": "test_target_record",
549 "target_record_id": "test_target_record_id",
550 # values coming from extra_dict
554 "name": "some_mgmt_name",
556 "depends_on": "test_depends_on",
561 task_index
= "task_index_2"
562 self
.target_vim
.get_network_list
.return_value
= [
563 {"id": "4d83a7c9-3ef4-4a45-99c8-aca3550490dd"}
565 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
566 self
.assertEqual(result
[0], "BUILD")
567 self
.assertEqual(result
[1].get("created"), False)
568 self
.assertEqual(result
[1].get("vim_status"), "BUILD")
570 def test__params_in_task_no_find_params(self
):
573 find_params does not exist in the task
576 logger
= "test_logger"
579 "vim_openstack_11": {
581 "management_network_name": "test_mgmt_name",
585 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
586 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
587 instance
, "logger", logging
593 "target_id": "vim_openstack_11",
594 "action_id": "123456",
596 "task_id": "123456:1",
597 "status": "SCHEDULED",
600 "target_record": "test_target_record",
601 "target_record_id": "test_target_record_id",
602 # values coming from extra_dict
604 "net_name": "test-network",
607 "depends_on": "test_depends_on",
612 task_index
= "task_index_11"
613 self
.target_vim
.new_network
.return_value
= "sample_net_id", {
614 "item1": "sample_created_item"
616 result
= instance
.new(ro_task
, task_index
, self
.task_depends
)
617 self
.assertEqual(result
[0], "BUILD")
618 self
.assertEqual(result
[1].get("vim_id"), "sample_net_id")
619 self
.assertEqual(result
[1].get("created"), True)
621 result
[1].get("created_items"), {"item1": "sample_created_item"}
623 self
.assertEqual(result
[1].get("vim_status"), "BUILD")
625 def test__no_params_in_task_no_find_params(self
):
627 empty params in the task
628 find_params does not exist in the task
631 logger
= "test_logger"
634 "vim_openstack_13": {
636 "management_network_name": "test_mgmt_name",
640 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
641 with patch
.object(instance
, "my_vims", [self
.target_vim
]), patch
.object(
642 instance
, "logger", logging
648 "target_id": "vim_openstack_13",
649 "action_id": "123456",
651 "task_id": "123456:1",
652 "status": "SCHEDULED",
655 "target_record": "test_target_record",
656 "target_record_id": "test_target_record_id",
657 # values coming from extra_dict
659 "depends_on": "test_depends_on",
664 task_index
= "task_index_12"
665 with self
.assertRaises(TypeError):
666 instance
.new(ro_task
, task_index
, self
.task_depends
)
668 def test__refresh_ro_task_vim_status_active(self
):
670 vim_info.get('status') is ACTIVE
673 logger
= "test_logger"
680 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
682 instance
, "my_vims", {"vim_openstack_1": self
.target_vim
}
683 ), patch
.object(instance
, "logger", logging
):
688 "target_id": "vim_openstack_1",
691 "created_items": None,
692 "vim_id": "test-vim-id",
693 "vim_name": "test-vim",
695 "vim_details": "some-details",
698 "modified_at": 1637324200.994312,
699 "created_at": 1637324200.994312,
700 "to_check_at": 1637324200.994312,
704 self
.target_vim
.refresh_nets_status
.return_value
= {
706 "vim_info": "some-details",
713 ro_vim_item_update
= {
714 "vim_status": "ACTIVE",
716 result
= instance
.refresh(ro_task
)
717 self
.assertEqual(result
[0], task_status
)
718 self
.assertDictEqual(result
[1], ro_vim_item_update
)
720 def test__refresh_ro_task_vim_status_build(self
):
722 vim_info.get('status') is BUILD
725 logger
= "test_logger"
732 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
734 instance
, "my_vims", {"vim_openstack_1": self
.target_vim
}
735 ), patch
.object(instance
, "logger", logging
):
740 "target_id": "vim_openstack_1",
743 "created_items": None,
744 "vim_id": "test-vim-id",
745 "vim_name": "test-vim",
746 "vim_status": "BUILD",
750 "modified_at": 1637324200.994312,
751 "created_at": 1637324200.994312,
752 "to_check_at": 1637324200.994312,
756 self
.target_vim
.refresh_nets_status
.return_value
= {
758 "vim_info": "some-details",
764 task_status
= "BUILD"
765 ro_vim_item_update
= {
766 "vim_name": "other-vim",
767 "vim_details": "some-details",
769 result
= instance
.refresh(ro_task
)
770 self
.assertEqual(result
[0], task_status
)
771 self
.assertDictEqual(result
[1], ro_vim_item_update
)
773 def test__refresh_ro_task_vim_status_error(self
):
775 vim_info.get('status') is ERROR
778 logger
= "test_logger"
785 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
787 instance
, "my_vims", {"vim_openstack_1": self
.target_vim
}
788 ), patch
.object(instance
, "logger", logging
):
793 "target_id": "vim_openstack_1",
796 "created_items": None,
797 "vim_id": "test-vim-id",
798 "vim_name": "test-vim",
799 "vim_status": "BUILD",
803 "modified_at": 1637324200.994312,
804 "created_at": 1637324200.994312,
805 "to_check_at": 1637324200.994312,
809 self
.target_vim
.refresh_nets_status
.return_value
= {
811 "vim_info": "some-details",
814 "error_msg": "some error message",
817 task_status
= "FAILED"
818 ro_vim_item_update
= {
819 "vim_status": "ERROR",
820 "vim_details": "some error message",
822 result
= instance
.refresh(ro_task
)
823 self
.assertEqual(result
[0], task_status
)
824 self
.assertDictEqual(result
[1], ro_vim_item_update
)
826 def test__refresh_ro_task_VimConnException_occured(self
):
828 vimconn.VimConnException has occured
831 logger
= "test_logger"
838 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
840 instance
, "my_vims", {"vim_openstack_1": self
.target_vim
}
841 ), patch
.object(instance
, "logger", logging
):
846 "target_id": "vim_openstack_1",
849 "created_items": None,
850 "vim_id": "test-vim-id",
851 "vim_name": "test-vim",
852 "vim_status": "BUILD",
856 "modified_at": 1637324200.994312,
857 "created_at": 1637324200.994312,
858 "to_check_at": 1637324200.994312,
861 self
.target_vim
.refresh_nets_status
.side_effect
= Mock(
862 side_effect
=self
.VimConnException("VimConnException occured")
864 with self
.assertRaises(TypeError):
865 instance
.refresh(ro_task
)
866 self
.target_vim
.refresh_nets_status
.side_effect
= None
868 def test__refresh_ro_task_vim_status_deleted(self
):
870 vim_info.get('status') is DELETED
873 logger
= "test_logger"
880 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
882 instance
, "my_vims", {"vim_openstack_1": self
.target_vim
}
883 ), patch
.object(instance
, "logger", logging
):
888 "target_id": "vim_openstack_1",
891 "created_items": None,
892 "vim_id": "test-vim-id",
893 "vim_name": "test-vim",
894 "vim_status": "BUILD",
898 "modified_at": 163724200.994312,
899 "created_at": 1637324200.994312,
900 "to_check_at": 1637324200.994312,
903 self
.target_vim
.refresh_nets_status
.return_value
= {
905 "vim_info": "some-details",
908 "error_msg": "some error message",
911 task_status
= "FAILED"
912 ro_vim_item_update
= {
913 "vim_status": "DELETED",
914 "vim_details": "Deleted externally",
917 result
= instance
.refresh(ro_task
)
918 self
.assertEqual(result
[0], task_status
)
919 self
.assertDictEqual(result
[1], ro_vim_item_update
)
921 def test__refresh_ro_task_empty_vim_dict(self
):
923 vim_dict does not include vim_id key
927 logger
= "test_logger"
934 instance
= VimInteractionNet(db
, logger
, my_vims
, db_vims
)
936 instance
, "my_vims", {"vim_openstack_2": self
.target_vim
}
937 ), patch
.object(instance
, "logger", logging
):
942 "target_id": "vim_openstack_2",
945 "created_items": None,
946 "vim_id": "test-vim-id",
947 "vim_name": "test-vim",
948 "vim_status": "BUILD",
952 "modified_at": 163724211.994312,
953 "created_at": 1637324211.994312,
954 "to_check_at": 1637324211.994312,
957 self
.target_vim
.refresh_nets_status
.return_value
= {}
958 with self
.assertRaises(KeyError):
959 instance
.refresh(ro_task
)