Feature-9904: Enhancing NG-UI to enable Juju operational view dashboard
[osm/N2VC.git] / n2vc / tests / unit / test_n2vc_juju_conn.py
index 80c4c87..1f723fe 100644 (file)
@@ -26,6 +26,7 @@ from n2vc.exceptions import (
 
 
 class N2VCJujuConnTestCase(asynctest.TestCase):
+    @asynctest.mock.patch("n2vc.libjuju.Libjuju._create_health_check_task")
     @asynctest.mock.patch("juju.controller.Controller.update_endpoints")
     @asynctest.mock.patch("juju.client.connector.Connector.connect")
     @asynctest.mock.patch("juju.controller.Controller.connection")
@@ -36,7 +37,9 @@ class N2VCJujuConnTestCase(asynctest.TestCase):
         mock_connection=None,
         mock_connect=None,
         mock_update_endpoints=None,
+        mock__create_health_check_task=None,
     ):
+        mock__get_api_endpoints_db.return_value = ["2.2.2.2:17070"]
         loop = asyncio.get_event_loop()
         db = {}
         vca_config = {
@@ -60,6 +63,69 @@ class N2VCJujuConnTestCase(asynctest.TestCase):
         )
 
 
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_metrics")
+class GetMetricssTest(N2VCJujuConnTestCase):
+    def setUp(self):
+        super(GetMetricssTest, self).setUp()
+
+    def test_success(self, mock_get_metrics):
+        _ = self.loop.run_until_complete(self.n2vc.get_metrics("model", "application"))
+        mock_get_metrics.assert_called_once()
+
+    def test_except(self, mock_get_metrics):
+        mock_get_metrics.side_effect = Exception()
+        with self.assertRaises(Exception):
+            _ = self.loop.run_until_complete(
+                self.n2vc.get_metrics("model", "application")
+            )
+        mock_get_metrics.assert_called_once()
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_model")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_executed_actions")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_actions")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_application_configs")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju._get_application")
+class UpdateVcaStatusTest(N2VCJujuConnTestCase):
+    def setUp(self):
+        super(UpdateVcaStatusTest, self).setUp()
+
+    def test_success(
+        self,
+        mock_get_application,
+        mock_get_application_configs,
+        mock_get_actions,
+        mock_get_executed_actions,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        self.loop.run_until_complete(self.n2vc.update_vca_status(
+            {"model": {"applications": {"app": {"actions": {}}}}}))
+        mock_get_executed_actions.assert_called_once()
+        mock_get_actions.assert_called_once()
+        mock_get_application_configs.assert_called_once()
+
+    def test_exception(
+        self,
+        mock_get_application,
+        mock_get_application_configs,
+        mock_get_actions,
+        mock_get_executed_actions,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_model.return_value = None
+        mock_get_executed_actions.side_effect = Exception()
+        with self.assertRaises(Exception):
+            self.loop.run_until_complete(self.n2vc.update_vca_status(
+                {"model": {"applications": {"app": {"actions": {}}}}}))
+            mock_get_executed_actions.assert_not_called()
+            mock_get_actions.assert_not_called_once()
+            mock_get_application_configs.assert_not_called_once()
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.model_exists")
 @asynctest.mock.patch("osm_common.fslocal.FsLocal.file_exists")
 @asynctest.mock.patch(
     "osm_common.fslocal.FsLocal.path", new_callable=asynctest.PropertyMock, create=True
@@ -71,8 +137,9 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
         super(K8sProxyCharmsTest, self).setUp()
 
     def test_success(
-        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists,
+        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists, mock_model_exists
     ):
+        mock_model_exists.return_value = None
         mock_file_exists.return_value = True
         mock_path.return_value = "/path"
         ee_id = self.loop.run_until_complete(
@@ -81,7 +148,11 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
             )
         )
 
-        mock_add_model.assert_called_once_with("ns-id-k8s", "k8s_cloud")
+        mock_add_model.assert_called_once_with(
+            "ns-id-k8s",
+            cloud_name=self.n2vc.k8s_cloud,
+            credential_name=self.n2vc.k8s_cloud
+        )
         mock_deploy_charm.assert_called_once_with(
             model_name="ns-id-k8s",
             application_name="app-vnf-vnf-id-vdu-vdu",
@@ -106,6 +177,7 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
         mock_deploy_charm,
         mock_path,
         mock_file_exists,
+        mock_model_exists,
     ):
         mock_k8s_cloud.return_value = None
         with self.assertRaises(JujuK8sProxycharmNotSupported):
@@ -117,7 +189,7 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
             self.assertIsNone(ee_id)
 
     def test_no_artifact_path(
-        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists,
+        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists, mock_model_exists,
     ):
         with self.assertRaises(N2VCBadArgumentsException):
             ee_id = self.loop.run_until_complete(
@@ -128,7 +200,7 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
             self.assertIsNone(ee_id)
 
     def test_no_db(
-        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists,
+        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists, mock_model_exists,
     ):
         with self.assertRaises(N2VCBadArgumentsException):
             ee_id = self.loop.run_until_complete(
@@ -139,7 +211,7 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
             self.assertIsNone(ee_id)
 
     def test_file_not_exists(
-        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists,
+        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists, mock_model_exists,
     ):
         mock_file_exists.return_value = False
         with self.assertRaises(N2VCBadArgumentsException):
@@ -151,8 +223,9 @@ class K8sProxyCharmsTest(N2VCJujuConnTestCase):
             self.assertIsNone(ee_id)
 
     def test_exception(
-        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists,
+        self, mock_add_model, mock_deploy_charm, mock_path, mock_file_exists, mock_model_exists,
     ):
+        mock_model_exists.return_value = None
         mock_file_exists.return_value = True
         mock_path.return_value = "/path"
         mock_deploy_charm.side_effect = Exception()