Unit tests improvements
[osm/N2VC.git] / n2vc / tests / unit / test_libjuju.py
index fde6817..724b5d7 100644 (file)
@@ -103,7 +103,7 @@ class GetControllerTest(LibjujuTestCase):
         with self.assertRaises(JujuControllerFailedConnecting):
             controller = self.loop.run_until_complete(self.libjuju.get_controller())
         self.assertIsNone(controller)
-        mock_disconnect_controller.assert_called_once()
+        mock_disconnect_controller.assert_called()
 
     def test_same_endpoint_get_controller(self, mock_api_endpoints, mock_connect):
         self.libjuju.endpoints = ["127.0.0.1:17070"]
@@ -228,8 +228,14 @@ class GetExecutedActionsTest(LibjujuTestCase):
         executed_actions = self.loop.run_until_complete(
             self.libjuju.get_executed_actions("model")
         )
-        expected_result = [{'id': 'id', 'action': 'action_name',
-                           'status': 'status', 'output': 'completed'}]
+        expected_result = [
+            {
+                "id": "id",
+                "action": "action_name",
+                "status": "status",
+                "output": "completed",
+            }
+        ]
         self.assertListEqual(expected_result, executed_actions)
         self.assertIsInstance(executed_actions, list)
 
@@ -259,7 +265,8 @@ class GetApplicationConfigsTest(LibjujuTestCase):
         mock_get_model.return_value = None
         with self.assertRaises(JujuError):
             self.loop.run_until_complete(
-                self.libjuju.get_application_configs("model", "app"))
+                self.libjuju.get_application_configs("model", "app")
+            )
 
         mock_get_controller.assert_called_once()
         mock_disconnect_controller.assert_called_once()
@@ -275,8 +282,9 @@ class GetApplicationConfigsTest(LibjujuTestCase):
         mock_get_controller,
     ):
         mock_get_application.return_value = FakeApplication()
-        application_configs = self.loop.run_until_complete(self.libjuju
-                                                           .get_application_configs("model", "app"))
+        application_configs = self.loop.run_until_complete(
+            self.libjuju.get_application_configs("model", "app")
+        )
 
         self.assertEqual(application_configs, ["app_config"])
 
@@ -1102,12 +1110,12 @@ class DestroyApplicationTest(LibjujuTestCase):
         super(DestroyApplicationTest, self).setUp()
 
     def test_success(
-            self,
-            mock_get_controller,
-            mock_get_model,
-            mock_disconnect_controller,
-            mock_get_application,
-            mock_disconnect_model,
+        self,
+        mock_get_controller,
+        mock_get_model,
+        mock_disconnect_controller,
+        mock_get_application,
+        mock_disconnect_model,
     ):
         mock_get_application.return_value = FakeApplication()
         mock_get_model.return_value = None
@@ -1123,12 +1131,12 @@ class DestroyApplicationTest(LibjujuTestCase):
         mock_disconnect_model.assert_called_once()
 
     def test_no_application(
-            self,
-            mock_get_controller,
-            mock_get_model,
-            mock_disconnect_controller,
-            mock_get_application,
-            mock_disconnect_model,
+        self,
+        mock_get_controller,
+        mock_get_model,
+        mock_disconnect_controller,
+        mock_get_application,
+        mock_disconnect_model,
     ):
         mock_get_model.return_value = None
         mock_get_application.return_value = None
@@ -1143,12 +1151,12 @@ class DestroyApplicationTest(LibjujuTestCase):
         mock_get_application.assert_called()
 
     def test_exception(
-            self,
-            mock_get_controller,
-            mock_get_model,
-            mock_disconnect_controller,
-            mock_get_application,
-            mock_disconnect_model,
+        self,
+        mock_get_controller,
+        mock_get_model,
+        mock_disconnect_controller,
+        mock_get_application,
+        mock_disconnect_model,
     ):
         mock_get_application.return_value = FakeApplication
         mock_get_model.return_value = None
@@ -1887,3 +1895,91 @@ class GetK8sCloudCredentials(LibjujuTestCase):
                 "Cannot set both token and user/pass",
             )
         self.assertTrue(exception_raised)
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_model")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju._get_application")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_model")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_controller")
+@asynctest.mock.patch("n2vc.juju_watcher.JujuModelWatcher.wait_for_model")
+class ScaleApplicationTest(LibjujuTestCase):
+    def setUp(self):
+        super(ScaleApplicationTest, self).setUp()
+
+    @asynctest.mock.patch("asyncio.sleep")
+    def test_scale_application(
+        self,
+        mock_sleep,
+        mock_wait_for_model,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_application,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_model.return_value = juju.model.Model()
+        mock_get_application.return_value = FakeApplication()
+        self.loop.run_until_complete(self.libjuju.scale_application("model", "app", 2))
+        mock_wait_for_model.assert_called_once()
+        mock_disconnect_controller.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+
+    def test_no_application(
+        self,
+        mock_wait_for,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_application,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_application.return_value = None
+        mock_get_model.return_value = juju.model.Model()
+        with self.assertRaises(JujuApplicationNotFound):
+            self.loop.run_until_complete(
+                self.libjuju.scale_application("model", "app", 2)
+            )
+        mock_disconnect_controller.assert_called()
+        mock_disconnect_model.assert_called()
+
+    def test_exception(
+        self,
+        mock_wait_for,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_application,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_model.return_value = None
+        mock_get_application.return_value = FakeApplication()
+        with self.assertRaises(Exception):
+            self.loop.run_until_complete(
+                self.libjuju.scale_application("model", "app", 2, total_timeout=0)
+            )
+        mock_disconnect_controller.assert_called_once()
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju._get_application")
+class GetUnitNumberTest(LibjujuTestCase):
+    def setUp(self):
+        super(GetUnitNumberTest, self).setUp()
+
+    def test_succesful_get_unit_number(
+        self,
+        mock_get_applications,
+    ):
+        mock_get_applications.return_value = FakeApplication()
+        model = juju.model.Model()
+        result = self.libjuju._get_application_count(model, "app")
+        self.assertEqual(result, 2)
+
+    def test_non_existing_application(
+        self,
+        mock_get_applications,
+    ):
+        mock_get_applications.return_value = None
+        model = juju.model.Model()
+        result = self.libjuju._get_application_count(model, "app")
+        self.assertEqual(result, None)