X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Ftests%2Funit%2Ftest_libjuju.py;h=41b32d1018cb7f0ff1198f67c5f273df811dec66;hp=f517afc5da58988bb03eca8704af1460db7c883a;hb=8bfcc14713a71f43f155e3cddec168380134d344;hpb=42f328a34a3ec7c066350de81e1331632a3fee92 diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py index f517afc..41b32d1 100644 --- a/n2vc/tests/unit/test_libjuju.py +++ b/n2vc/tests/unit/test_libjuju.py @@ -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( + "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( - relation1="app1:relation1", relation2="app2:relation2" + "app1:relation1", "saas_name" ) mock_disconnect_controller.assert_called_once() mock_disconnect_model.assert_called_once() @@ -907,3 +919,131 @@ class ModelsExistTest(LibjujuTestCase): ) 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()