From: David Garcia Date: Tue, 25 Aug 2020 13:03:01 +0000 (+0200) Subject: Add models_exist function to libjuju.py X-Git-Tag: release-v9.0-start~26 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=commitdiff_plain;h=42f328a34a3ec7c066350de81e1331632a3fee92 Add models_exist function to libjuju.py This function checks if a gives list of model names exist in the controller. Additionally, it returns the list of unexisting models from the given list. Change-Id: I2a9290ef1a4ee1308626f3a31dba0a83127fdd8c Signed-off-by: David Garcia --- diff --git a/n2vc/libjuju.py b/n2vc/libjuju.py index cb24a3e..2f18837 100644 --- a/n2vc/libjuju.py +++ b/n2vc/libjuju.py @@ -232,6 +232,28 @@ class Libjuju: if need_to_disconnect: await self.disconnect_controller(controller) + async def models_exist(self, model_names: [str]) -> (bool, list): + """ + Check if models exists + + :param: model_names: List of strings with model names + + :return (bool, list[str]): (True if all models exists, List of model names that don't exist) + """ + if not model_names: + raise Exception( + "model_names must be a non-empty array. Given value: {}".format(model_names) + ) + non_existing_models = [] + models = await self.list_models() + existing_models = list(set(models).intersection(model_names)) + non_existing_models = list(set(model_names) - set(existing_models)) + + return ( + len(non_existing_models) == 0, + non_existing_models, + ) + async def get_model_status(self, model_name: str) -> FullStatus: """ Get model status diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py index 5669959..f517afc 100644 --- a/n2vc/tests/unit/test_libjuju.py +++ b/n2vc/tests/unit/test_libjuju.py @@ -873,3 +873,37 @@ 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, [])