Add consume to libjuju.py
[osm/N2VC.git] / n2vc / tests / unit / test_libjuju.py
index 5669959..41b32d1 100644 (file)
@@ -670,9 +670,7 @@ class AddRelationTest(LibjujuTestCase):
         mock_add_relation.side_effect = JujuAPIError(result)
 
         self.loop.run_until_complete(
-            self.libjuju.add_relation(
-                "model", "app1", "app2", "relation1", "relation2",
-            )
+            self.libjuju.add_relation("model", "app1:relation1", "app2:relation2",)
         )
 
         mock_warning.assert_called_with("Relation not found: not found")
@@ -696,9 +694,7 @@ class AddRelationTest(LibjujuTestCase):
         mock_add_relation.side_effect = JujuAPIError(result)
 
         self.loop.run_until_complete(
-            self.libjuju.add_relation(
-                "model", "app1", "app2", "relation1", "relation2",
-            )
+            self.libjuju.add_relation("model", "app1:relation1", "app2:relation2",)
         )
 
         mock_warning.assert_called_with("Relation already exists: already exists")
@@ -719,9 +715,7 @@ class AddRelationTest(LibjujuTestCase):
 
         with self.assertRaises(JujuAPIError):
             self.loop.run_until_complete(
-                self.libjuju.add_relation(
-                    "model", "app1", "app2", "relation1", "relation2",
-                )
+                self.libjuju.add_relation("model", "app1:relation1", "app2:relation2",)
             )
 
             mock_disconnect_controller.assert_called_once()
@@ -738,13 +732,31 @@ class AddRelationTest(LibjujuTestCase):
         mock_get_model.return_value = juju.model.Model()
 
         self.loop.run_until_complete(
-            self.libjuju.add_relation(
-                "model", "app1", "app2", "relation1", "relation2",
-            )
+            self.libjuju.add_relation("model", "app1:relation1", "app2:relation2",)
         )
 
         mock_add_relation.assert_called_with(
-            relation1="app1:relation1", relation2="app2:relation2"
+            "app1:relation1", "app2:relation2"
+        )
+        mock_disconnect_controller.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+
+    def test_saas(
+        self,
+        mock_add_relation,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_model.return_value = juju.model.Model()
+
+        self.loop.run_until_complete(
+            self.libjuju.add_relation("model", "app1:relation1", "saas_name",)
+        )
+
+        mock_add_relation.assert_called_with(
+            "app1:relation1", "saas_name"
         )
         mock_disconnect_controller.assert_called_once()
         mock_disconnect_model.assert_called_once()
@@ -873,3 +885,165 @@ class ListModelsTest(LibjujuTestCase):
 
         mock_disconnect_controller.assert_called_once()
         self.assertEquals(models, ["existingmodel", "model"])
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.list_models")
+class ModelsExistTest(LibjujuTestCase):
+    def setUp(self):
+        super(ModelsExistTest, self).setUp()
+
+    def test_model_names_none(self, mock_list_models):
+        mock_list_models.return_value = []
+        with self.assertRaises(Exception):
+            self.loop.run_until_complete(self.libjuju.models_exist(None))
+
+    def test_model_names_empty(self, mock_list_models):
+        mock_list_models.return_value = []
+        with self.assertRaises(Exception):
+            (exist, non_existing_models) = self.loop.run_until_complete(
+                self.libjuju.models_exist([])
+            )
+
+    def test_model_names_not_existing(self, mock_list_models):
+        mock_list_models.return_value = ["prometheus", "grafana"]
+        (exist, non_existing_models) = self.loop.run_until_complete(
+            self.libjuju.models_exist(["prometheus2", "grafana"])
+        )
+        self.assertFalse(exist)
+        self.assertEqual(non_existing_models, ["prometheus2"])
+
+    def test_model_names_exist(self, mock_list_models):
+        mock_list_models.return_value = ["prometheus", "grafana"]
+        (exist, non_existing_models) = self.loop.run_until_complete(
+            self.libjuju.models_exist(["prometheus", "grafana"])
+        )
+        self.assertTrue(exist)
+        self.assertEqual(non_existing_models, [])
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_controller")
+@asynctest.mock.patch("juju.controller.Controller.list_offers")
+class ListOffers(LibjujuTestCase):
+    def setUp(self):
+        super(ListOffers, self).setUp()
+
+    def test_disconnect_controller(
+        self, mock_list_offers, mock_disconnect_controller, mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_list_offers.side_effect = Exception()
+        with self.assertRaises(Exception):
+            self.loop.run_until_complete(self.libjuju.list_offers("model"))
+        mock_disconnect_controller.assert_called_once()
+
+    def test_empty_list(
+        self, mock_list_offers, mock_disconnect_controller, mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_list_offers.return_value = []
+        offers = self.loop.run_until_complete(self.libjuju.list_offers("model"))
+        self.assertEqual(offers, [])
+        mock_disconnect_controller.assert_called_once()
+
+    def test_non_empty_list(
+        self, mock_list_offers, mock_disconnect_controller, mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_list_offers.return_value = ["offer"]
+        offers = self.loop.run_until_complete(self.libjuju.list_offers("model"))
+        self.assertEqual(offers, ["offer"])
+        mock_disconnect_controller.assert_called_once()
+
+
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller")
+@asynctest.mock.patch("juju.controller.Controller.get_model")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_model")
+@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_controller")
+@asynctest.mock.patch("juju.model.Model.consume")
+class ConsumeTest(LibjujuTestCase):
+    def setUp(self):
+        super(ConsumeTest, self).setUp()
+
+    def test_consume(
+        self,
+        mock_consume,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_get_model.return_value = juju.model.Model()
+
+        self.loop.run_until_complete(
+            self.libjuju.consume("offer_url", "model_name")
+        )
+        mock_consume.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+        mock_disconnect_controller.assert_called_once()
+
+    def test_parsing_error_exception(
+        self,
+        mock_consume,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_get_model.return_value = juju.model.Model()
+        mock_consume.side_effect = juju.offerendpoints.ParseError("")
+
+        with self.assertRaises(juju.offerendpoints.ParseError):
+            self.loop.run_until_complete(
+                self.libjuju.consume("offer_url", "model_name")
+            )
+        mock_consume.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+        mock_disconnect_controller.assert_called_once()
+
+    def test_juju_error_exception(
+        self,
+        mock_consume,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_get_model.return_value = juju.model.Model()
+        mock_consume.side_effect = juju.errors.JujuError("")
+
+        with self.assertRaises(juju.errors.JujuError):
+            self.loop.run_until_complete(
+                self.libjuju.consume("offer_url", "model_name")
+            )
+        mock_consume.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+        mock_disconnect_controller.assert_called_once()
+
+    def test_juju_api_error_exception(
+        self,
+        mock_consume,
+        mock_disconnect_controller,
+        mock_disconnect_model,
+        mock_get_model,
+        mock_get_controller,
+    ):
+        mock_get_controller.return_value = juju.controller.Controller()
+        mock_get_model.return_value = juju.model.Model()
+        mock_consume.side_effect = juju.errors.JujuAPIError({
+            "error": "",
+            "response": "",
+            "request-id": "",
+
+        })
+
+        with self.assertRaises(juju.errors.JujuAPIError):
+            self.loop.run_until_complete(
+                self.libjuju.consume("offer_url", "model_name")
+            )
+        mock_consume.assert_called_once()
+        mock_disconnect_model.assert_called_once()
+        mock_disconnect_controller.assert_called_once()