X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Ftests%2Ftest_ns_thread.py;h=c1d23a0cf1cc6576ca3abaadfec4b38ca3e03ace;hb=refs%2Fchanges%2F05%2F12005%2F13;hp=41a6ff1acabe9a69b93c04253f3f863d6c46b9c7;hpb=e9a26f282aa9a82e19484514c69b18b381594ab4;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/tests/test_ns_thread.py b/NG-RO/osm_ng_ro/tests/test_ns_thread.py index 41a6ff1a..c1d23a0c 100644 --- a/NG-RO/osm_ng_ro/tests/test_ns_thread.py +++ b/NG-RO/osm_ng_ro/tests/test_ns_thread.py @@ -19,7 +19,11 @@ import logging import unittest from unittest.mock import MagicMock, patch -from osm_ng_ro.ns_thread import VimInteractionNet +from osm_ng_ro.ns_thread import ( + VimInteractionAffinityGroup, + VimInteractionNet, + VimInteractionResize, +) from osm_ro_plugin.vimconn import VimConnConnectionException, VimConnException @@ -817,6 +821,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": None, "vim_details": "some-details", + "vim_message": None, "refresh_at": None, }, "modified_at": 1637324200.994312, @@ -871,6 +876,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": "BUILD", "vim_details": "", + "vim_message": None, "refresh_at": None, }, "modified_at": 1637324200.994312, @@ -926,6 +932,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": "BUILD", "vim_details": "", + "vim_message": None, "refresh_at": None, }, "modified_at": 1637324200.994312, @@ -945,7 +952,7 @@ class TestVimInteractionNet(unittest.TestCase): task_status = "FAILED" ro_vim_item_update = { "vim_status": "ERROR", - "vim_details": "some error message", + "vim_message": "some error message", } result = instance.refresh(ro_task) self.assertEqual(result[0], task_status) @@ -981,6 +988,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": "BUILD", "vim_details": "", + "vim_message": None, "refresh_at": None, }, "modified_at": 1637324200.994312, @@ -1025,6 +1033,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": "BUILD", "vim_details": "", + "vim_message": None, "refresh_at": None, }, "modified_at": 163724200.994312, @@ -1043,7 +1052,7 @@ class TestVimInteractionNet(unittest.TestCase): task_status = "FAILED" ro_vim_item_update = { "vim_status": "DELETED", - "vim_details": "Deleted externally", + "vim_message": "Deleted externally", "vim_id": None, } result = instance.refresh(ro_task) @@ -1081,6 +1090,7 @@ class TestVimInteractionNet(unittest.TestCase): "vim_name": "test-vim", "vim_status": "BUILD", "vim_details": "", + "vim_message": None, "refresh_at": None, }, "modified_at": 163724211.994312, @@ -1091,3 +1101,271 @@ class TestVimInteractionNet(unittest.TestCase): self.target_vim.refresh_nets_status.return_value = {} with self.assertRaises(KeyError): instance.refresh(ro_task) + + +class TestVimInteractionAffinityGroup(unittest.TestCase): + def setUp(self): + module_name = "osm_ro_plugin" + self.target_vim = MagicMock(name=f"{module_name}.vimconn.VimConnector") + self.task_depends = None + + patches = [patch(f"{module_name}.vimconn.VimConnector", self.target_vim)] + + # Enabling mocks and add cleanups + for mock in patches: + mock.start() + self.addCleanup(mock.stop) + + def test__new_affinity_group_ok(self): + """ + create affinity group with attributes set in params + """ + db = "test_db" + logger = "test_logger" + my_vims = "test-vim" + db_vims = { + 0: { + "config": {}, + }, + } + + instance = VimInteractionAffinityGroup(db, logger, my_vims, db_vims) + with patch.object(instance, "my_vims", [self.target_vim]), patch.object( + instance, "logger", logging + ), patch.object(instance, "db_vims", db_vims): + ro_task = { + "target_id": 0, + "tasks": { + "task_index_1": { + "target_id": 0, + "action_id": "123456", + "nsr_id": "654321", + "task_id": "123456:1", + "status": "SCHEDULED", + "action": "CREATE", + "item": "test_item", + "target_record": "test_target_record", + "target_record_id": "test_target_record_id", + # values coming from extra_dict + "params": { + "affinity_group_data": { + "name": "affinity_group_1", + "type": "affinity", + "scope": "nfvi-node", + } + }, + "find_params": {}, + "depends_on": "test_depends_on", + }, + }, + } + + task_index = "task_index_1" + self.target_vim.new_affinity_group.return_value = ( + "sample_affinity_group_id_1" + ) + result = instance.new(ro_task, task_index, self.task_depends) + self.assertEqual(result[0], "DONE") + self.assertEqual(result[1].get("vim_id"), "sample_affinity_group_id_1") + self.assertEqual(result[1].get("created"), True) + self.assertEqual(result[1].get("vim_status"), "DONE") + + def test__new_affinity_group_failed(self): + """ + create affinity group with no attributes set in params + """ + db = "test_db" + logger = "test_logger" + my_vims = "test-vim" + db_vims = { + 0: { + "config": {}, + }, + } + + instance = VimInteractionAffinityGroup(db, logger, my_vims, db_vims) + with patch.object(instance, "my_vims", [self.target_vim]), patch.object( + instance, "logger", logging + ), patch.object(instance, "db_vims", db_vims): + ro_task = { + "target_id": 0, + "tasks": { + "task_index_2": { + "target_id": 0, + "action_id": "123456", + "nsr_id": "654321", + "task_id": "123456:1", + "status": "SCHEDULED", + "action": "CREATE", + "item": "test_item", + "target_record": "test_target_record", + "target_record_id": "test_target_record_id", + # values coming from extra_dict + "params": {}, + "find_params": {}, + "depends_on": "test_depends_on", + }, + }, + } + + task_index = "task_index_2" + self.target_vim.new_affinity_group.return_value = ( + "sample_affinity_group_id_1" + ) + result = instance.new(ro_task, task_index, self.task_depends) + self.assertEqual(result[0], "DONE") + self.assertEqual(result[1].get("vim_id"), None) + self.assertEqual(result[1].get("created"), False) + self.assertEqual(result[1].get("vim_status"), "DONE") + + def test__delete_affinity_group_ok(self): + """ + delete affinity group with a proper vim_id + """ + db = "test_db" + logger = "test_logger" + my_vims = "test-vim" + db_vims = { + 0: { + "config": {}, + }, + } + + instance = VimInteractionAffinityGroup(db, logger, my_vims, db_vims) + with patch.object(instance, "my_vims", [self.target_vim]), patch.object( + instance, "logger", logging + ), patch.object(instance, "db_vims", db_vims): + ro_task = { + "target_id": 0, + "tasks": { + "task_index_3": { + "target_id": 0, + "task_id": "123456:1", + }, + }, + "vim_info": { + "created": False, + "created_items": None, + "vim_id": "sample_affinity_group_id_3", + "vim_name": "sample_affinity_group_id_3", + "vim_status": None, + "vim_details": "some-details", + "vim_message": None, + "refresh_at": None, + }, + } + + task_index = "task_index_3" + self.target_vim.delete_affinity_group.return_value = ( + "sample_affinity_group_id_3" + ) + result = instance.delete(ro_task, task_index) + self.assertEqual(result[0], "DONE") + self.assertEqual(result[1].get("vim_message"), "DELETED") + self.assertEqual(result[1].get("created"), False) + self.assertEqual(result[1].get("vim_status"), "DELETED") + + def test__delete_affinity_group_failed(self): + """ + delete affinity group with missing vim_id + """ + db = "test_db" + logger = "test_logger" + my_vims = "test-vim" + db_vims = { + 0: { + "config": {}, + }, + } + + instance = VimInteractionAffinityGroup(db, logger, my_vims, db_vims) + with patch.object(instance, "my_vims", [self.target_vim]), patch.object( + instance, "logger", logging + ), patch.object(instance, "db_vims", db_vims): + ro_task = { + "target_id": 0, + "tasks": { + "task_index_4": { + "target_id": 0, + "task_id": "123456:1", + }, + }, + "vim_info": { + "created": False, + "created_items": None, + "vim_id": None, + "vim_name": None, + "vim_status": None, + "vim_details": "some-details", + "vim_message": None, + "refresh_at": None, + }, + } + + task_index = "task_index_4" + self.target_vim.delete_affinity_group.return_value = "" + result = instance.delete(ro_task, task_index) + self.assertEqual(result[0], "DONE") + self.assertEqual(result[1].get("vim_message"), "DELETED") + self.assertEqual(result[1].get("created"), False) + self.assertEqual(result[1].get("vim_status"), "DELETED") + + +class TestVimInteractionResize(unittest.TestCase): + def setUp(self): + module_name = "osm_ro_plugin" + self.target_vim = MagicMock(name=f"{module_name}.vimconn.VimConnector") + self.task_depends = None + + patches = [patch(f"{module_name}.vimconn.VimConnector", self.target_vim)] + + # Enabling mocks and add cleanups + for mock in patches: + mock.start() + self.addCleanup(mock.stop) + + def test__exec_resize_done(self): + """ + create verticalscale task + """ + db = "test_db" + logger = "test_logger" + my_vims = "test-vim" + db_vims = { + 0: { + "config": {}, + }, + } + target_record_id = ( + "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:" + "vdur.bb9c43f9-10a2-4569-a8a8-957c3528b6d1" + ) + + instance = VimInteractionResize(db, logger, my_vims, db_vims) + with patch.object(instance, "my_vims", [self.target_vim]), patch.object( + instance, "logger", logging + ), patch.object(instance, "db_vims", db_vims): + ro_task = { + "target_id": 0, + "tasks": { + "task_index_1": { + "target_id": 0, + "action_id": "bb937f49-3870-4169-b758-9732e1ff40f3", + "nsr_id": "993166fe-723e-4680-ac4b-b1af2541ae31", + "task_id": "bb937f49-3870-4169-b758-9732e1ff40f3:0", + "status": "SCHEDULED", + "action": "EXEC", + "item": "verticalscale", + "target_record": "vnfrs:665b4165-ce24-4320-bf19-b9a45bade49f:vdur.0", + "target_record_id": target_record_id, + "params": { + "vim_vm_id": "f37b18ef-3caa-4dc9-ab91-15c669b16396", + "flavor_dict": "flavor_dict", + }, + } + }, + } + task_index = "task_index_1" + result = instance.exec(ro_task, task_index, self.task_depends) + self.assertEqual(result[0], "DONE") + self.assertEqual(result[1].get("vim_status"), "DONE")