X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Ftests%2Ftest_vim_sdn.py;h=6ee3fd8c0575e968c79a76a993ed0a70c78aefe1;hb=HEAD;hp=f6b75e0f2b2052532f150248a85666336db0a84d;hpb=c1fe90adf8ed0d671342c617fed7184629c7003e;p=osm%2FLCM.git diff --git a/osm_lcm/tests/test_vim_sdn.py b/osm_lcm/tests/test_vim_sdn.py index f6b75e0..6ee3fd8 100644 --- a/osm_lcm/tests/test_vim_sdn.py +++ b/osm_lcm/tests/test_vim_sdn.py @@ -19,7 +19,7 @@ from unittest.mock import Mock, patch, MagicMock from osm_common import msgbase from osm_common.dbbase import DbException -from osm_lcm.vim_sdn import VcaLcm +from osm_lcm.vim_sdn import K8sClusterLcm, VcaLcm class AsyncMock(MagicMock): @@ -35,7 +35,7 @@ class TestVcaLcm(TestCase): self.msg = Mock(msgbase.MsgBase()) self.lcm_tasks = Mock() self.config = {"database": {"driver": "mongo"}} - self.vca_lcm = VcaLcm(self.msg, self.lcm_tasks, self.config, self.loop) + self.vca_lcm = VcaLcm(self.msg, self.lcm_tasks, self.config) self.vca_lcm.db = Mock() self.vca_lcm.fs = Mock() @@ -116,6 +116,164 @@ class TestVcaLcm(TestCase): self.lcm_tasks.unlock_HA.assert_not_called() self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + def test_vca_lcm_edit_success_no_config(self): + vca_content = { + "op_id": "order-id", + "_id": "id", + "description": "test-description", + } + db_vca = { + "_id": "vca-id", + "secret": "secret", + "cacert": "cacert", + "schema_version": "1.11", + } + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.vca_lcm.db.get_one.return_value = db_vca + self.vca_lcm.n2vc.validate_vca = AsyncMock() + self.vca_lcm.update_db_2 = Mock() + self.loop.run_until_complete(self.vca_lcm.edit(vca_content, order_id)) + self.vca_lcm.n2vc.validate_vca.assert_not_called() + self.lcm_tasks.unlock_HA.assert_called_with( + "vca", + "edit", + "order-id", + operationState="COMPLETED", + detailed_status="Edited", + ) + self.vca_lcm.update_db_2.assert_called_with( + "vca", + "id", + {}, + ) + self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + + def test_vca_lcm_edit_success_config(self): + vca_content = {"op_id": "order-id", "_id": "id", "cacert": "editcacert"} + db_vca = { + "_id": "vca-id", + "secret": "secret", + "cacert": "cacert", + "schema_version": "1.11", + } + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.vca_lcm.db.get_one.return_value = db_vca + self.vca_lcm.n2vc.validate_vca = AsyncMock() + self.vca_lcm.update_db_2 = Mock() + self.loop.run_until_complete(self.vca_lcm.edit(vca_content, order_id)) + self.vca_lcm.n2vc.validate_vca.assert_called() + self.lcm_tasks.unlock_HA.assert_called_with( + "vca", + "edit", + "order-id", + operationState="COMPLETED", + detailed_status="Edited", + ) + self.vca_lcm.update_db_2.assert_called_with( + "vca", + "id", + { + "_admin.operationalState": "ENABLED", + "_admin.detailed-status": "Connectivity: ok", + }, + ) + self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + + def test_vca_lcm_edit_exception_no_config(self): + vca_content = { + "op_id": "order-id", + "_id": "id", + "description": "new-description", + } + db_vca = { + "_id": "vca-id", + "secret": "secret", + "cacert": "cacert", + "schema_version": "1.11", + } + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.vca_lcm.db.get_one.return_value = db_vca + self.vca_lcm.n2vc.validate_vca = AsyncMock() + # validate_vca should not be called in this case + self.vca_lcm.n2vc.validate_vca.side_effect = Exception("failed") + self.vca_lcm.update_db_2 = Mock() + self.loop.run_until_complete(self.vca_lcm.edit(vca_content, order_id)) + self.lcm_tasks.lock_HA.assert_called_with("vca", "edit", "order-id") + self.lcm_tasks.unlock_HA.assert_called_with( + "vca", + "edit", + "order-id", + operationState="COMPLETED", + detailed_status="Edited", + ) + self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + + def test_vca_lcm_edit_exception_config(self): + vca_content = {"op_id": "order-id", "_id": "id", "user": "new-user"} + db_vca = { + "_id": "vca-id", + "secret": "secret", + "cacert": "cacert", + "schema_version": "1.11", + } + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.vca_lcm.db.get_one.return_value = db_vca + self.vca_lcm.n2vc.validate_vca = AsyncMock() + # validate_vca should be called in this case + self.vca_lcm.n2vc.validate_vca.side_effect = Exception("failed") + self.vca_lcm.update_db_2 = Mock() + self.loop.run_until_complete(self.vca_lcm.edit(vca_content, order_id)) + self.lcm_tasks.lock_HA.assert_called_with("vca", "edit", "order-id") + self.lcm_tasks.unlock_HA.assert_called_with( + "vca", + "edit", + "order-id", + operationState="FAILED", + detailed_status="Failed with exception: failed", + ) + self.vca_lcm.update_db_2.assert_called_with( + "vca", + "id", + { + "_admin.operationalState": "ERROR", + "_admin.detailed-status": "Failed with exception: failed", + }, + ) + self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + + def test_vca_lcm_edit_db_exception(self): + vca_content = { + "op_id": "order-id", + "_id": "id", + "description": "new-description", + } + db_vca = { + "_id": "vca-id", + "secret": "secret", + "cacert": "cacert", + "schema_version": "1.11", + } + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.vca_lcm.db.get_one.return_value = db_vca + self.vca_lcm.n2vc.validate_vca = AsyncMock() + self.vca_lcm.update_db_2 = Mock() + self.vca_lcm.update_db_2.side_effect = DbException("failed") + self.loop.run_until_complete(self.vca_lcm.edit(vca_content, order_id)) + self.vca_lcm.n2vc.validate_vca.assert_not_called() + self.lcm_tasks.lock_HA.assert_called_with("vca", "edit", "order-id") + self.vca_lcm.update_db_2.assert_called_with( + "vca", + "id", + {}, + ) + self.lcm_tasks.unlock_HA.assert_not_called() + self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + def test_vca_lcm_delete(self): vca_content = {"op_id": "order-id", "_id": "id"} order_id = "order-id" @@ -158,3 +316,88 @@ class TestVcaLcm(TestCase): ) self.lcm_tasks.unlock_HA.not_called() self.lcm_tasks.remove.assert_called_with("vca", "id", "order-id") + + +class TestK8SClusterLcm(TestCase): + @patch("osm_lcm.vim_sdn.K8sHelm3Connector") + @patch("osm_lcm.vim_sdn.K8sJujuConnector") + @patch("osm_lcm.lcm_utils.Database") + @patch("osm_lcm.lcm_utils.Filesystem") + def setUp( + self, + mock_filesystem, + mock_database, + juju_connector, + helm3_connector, + ): + self.loop = asyncio.get_event_loop() + self.msg = Mock(msgbase.MsgBase()) + self.lcm_tasks = Mock() + self.config = {"database": {"driver": "mongo"}} + self.vca_config = { + "VCA": { + "helm3path": "/usr/local/bin/helm3", + "kubectlpath": "/usr/bin/kubectl", + } + } + self.k8scluster_lcm = K8sClusterLcm(self.msg, self.lcm_tasks, self.vca_config) + self.k8scluster_lcm.db = Mock() + self.k8scluster_lcm.fs = Mock() + + def test_k8scluster_edit(self): + k8scluster_content = {"op_id": "op-id", "_id": "id"} + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.loop.run_until_complete( + self.k8scluster_lcm.edit(k8scluster_content, order_id) + ) + self.lcm_tasks.unlock_HA.assert_called_with( + "k8scluster", + "edit", + "op-id", + operationState="COMPLETED", + detailed_status="Not implemented", + ) + self.lcm_tasks.remove.assert_called_with("k8scluster", "id", order_id) + + def test_k8scluster_edit_lock_false(self): + k8scluster_content = {"op_id": "op-id", "_id": "id"} + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = False + self.loop.run_until_complete( + self.k8scluster_lcm.edit(k8scluster_content, order_id) + ) + self.lcm_tasks.unlock_HA.assert_not_called() + self.lcm_tasks.remove.assert_not_called() + + def test_k8scluster_edit_no_opid(self): + k8scluster_content = {"_id": "id"} + order_id = "order-id" + self.lcm_tasks.lock_HA.return_value = True + self.loop.run_until_complete( + self.k8scluster_lcm.edit(k8scluster_content, order_id) + ) + self.lcm_tasks.unlock_HA.assert_called_with( + "k8scluster", + "edit", + None, + operationState="COMPLETED", + detailed_status="Not implemented", + ) + self.lcm_tasks.remove.assert_called_with("k8scluster", "id", order_id) + + def test_k8scluster_edit_no_orderid(self): + k8scluster_content = {"op_id": "op-id", "_id": "id"} + order_id = None + self.lcm_tasks.lock_HA.return_value = True + self.loop.run_until_complete( + self.k8scluster_lcm.edit(k8scluster_content, order_id) + ) + self.lcm_tasks.unlock_HA.assert_called_with( + "k8scluster", + "edit", + "op-id", + operationState="COMPLETED", + detailed_status="Not implemented", + ) + self.lcm_tasks.remove.assert_called_with("k8scluster", "id", order_id)