X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Ftests%2Funit%2Ftest_libjuju.py;fp=n2vc%2Ftests%2Funit%2Ftest_libjuju.py;h=67cd19f896716c04116cfcf307d55e637dfd7ef4;hp=918a2fb87b2fc39decf78181d10e535a40bf7194;hb=582b923b8f3f7104411c39ebdba63949d606ecd1;hpb=7114f65ca3ba581281fa03639f21db61a111b53e diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py index 918a2fb..67cd19f 100644 --- a/n2vc/tests/unit/test_libjuju.py +++ b/n2vc/tests/unit/test_libjuju.py @@ -20,6 +20,8 @@ import juju import kubernetes from juju.errors import JujuAPIError import logging + +from n2vc.definitions import Offer, RelationEndpoint from .utils import ( FakeApplication, FakeMachine, @@ -1415,7 +1417,7 @@ class ListOffers(LibjujuTestCase): 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")) + self.loop.run_until_complete(self.libjuju._list_offers("model")) mock_disconnect_controller.assert_called_once() def test_empty_list( @@ -1425,8 +1427,10 @@ class ListOffers(LibjujuTestCase): 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")) + offer_results = Mock() + offer_results.results = [] + mock_list_offers.return_value = offer_results + offers = self.loop.run_until_complete(self.libjuju._list_offers("model")) self.assertEqual(offers, []) mock_disconnect_controller.assert_called_once() @@ -1437,12 +1441,110 @@ class ListOffers(LibjujuTestCase): 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"]) + offer = Mock() + offer_results = Mock() + offer_results.results = [offer] + mock_list_offers.return_value = offer_results + offers = self.loop.run_until_complete(self.libjuju._list_offers("model")) + self.assertEqual(offers, [offer]) + mock_disconnect_controller.assert_called_once() + + def test_matching_offer_name( + self, + mock_list_offers, + mock_disconnect_controller, + mock_get_controller, + ): + mock_get_controller.return_value = juju.controller.Controller() + offer_1 = Mock() + offer_1.offer_name = "offer1" + offer_2 = Mock() + offer_2.offer_name = "offer2" + offer_results = Mock() + offer_results.results = [offer_1, offer_2] + mock_list_offers.return_value = offer_results + offers = self.loop.run_until_complete( + self.libjuju._list_offers("model", offer_name="offer2") + ) + self.assertEqual(offers, [offer_2]) + mock_disconnect_controller.assert_called_once() + + def test_not_matching_offer_name( + self, + mock_list_offers, + mock_disconnect_controller, + mock_get_controller, + ): + mock_get_controller.return_value = juju.controller.Controller() + offer_1 = Mock() + offer_1.offer_name = "offer1" + offer_2 = Mock() + offer_2.offer_name = "offer2" + offer_results = Mock() + offer_results.results = [offer_1, offer_2] + mock_list_offers.return_value = offer_results + offers = self.loop.run_until_complete( + self.libjuju._list_offers("model", offer_name="offer3") + ) + self.assertEqual(offers, []) 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("n2vc.libjuju.Libjuju._list_offers") +@asynctest.mock.patch("juju.model.Model.create_offer") +class OfferTest(LibjujuTestCase): + def setUp(self): + super(OfferTest, self).setUp() + + def test_offer( + self, + mock_create_offer, + mock__list_offers, + mock_disconnect_controller, + mock_disconnect_model, + mock_get_model, + mock_get_controller, + ): + controller = juju.controller.Controller() + model = juju.model.Model() + mock_get_controller.return_value = controller + mock_get_model.return_value = model + endpoint = RelationEndpoint("model.app-name.0", "vca", "endpoint") + self.loop.run_until_complete(self.libjuju.offer(endpoint)) + mock_create_offer.assert_called_with( + "app-name:endpoint", offer_name="app-name-endpoint" + ) + mock_disconnect_model.assert_called_once_with(model) + mock_disconnect_controller.assert_called_once_with(controller) + + def test_offer_exception( + self, + mock_create_offer, + mock__list_offers, + mock_disconnect_controller, + mock_disconnect_model, + mock_get_model, + mock_get_controller, + ): + controller = juju.controller.Controller() + model = juju.model.Model() + mock_get_controller.return_value = controller + mock_get_model.return_value = model + mock__list_offers.return_value = [] + endpoint = RelationEndpoint("model.app-name.0", "vca", "endpoint") + with self.assertRaises(Exception): + self.loop.run_until_complete(self.libjuju.offer(endpoint)) + mock_create_offer.assert_called_with( + "app-name:endpoint", offer_name="app-name-endpoint" + ) + mock_disconnect_model.assert_called_once_with(model) + mock_disconnect_controller.assert_called_once_with(controller) + + @asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller") @asynctest.mock.patch("juju.controller.Controller.get_model") @asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_model") @@ -1450,7 +1552,9 @@ class ListOffers(LibjujuTestCase): @asynctest.mock.patch("juju.model.Model.consume") class ConsumeTest(LibjujuTestCase): def setUp(self): + self.offer_url = "admin/model.offer_name" super(ConsumeTest, self).setUp() + self.provider_libjuju = self.libjuju def test_consume( self, @@ -1460,13 +1564,25 @@ class ConsumeTest(LibjujuTestCase): mock_get_model, mock_get_controller, ): - mock_get_controller.return_value = juju.controller.Controller() + self_controller = juju.controller.Controller() + provider_controller = juju.controller.Controller() + mock_get_controller.side_effect = [self_controller, provider_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() + self.loop.run_until_complete( + self.libjuju.consume( + "model_name", + Offer(self.offer_url, vca_id="vca-id"), + self.provider_libjuju, + ) + ) + mock_consume.assert_called_once_with( + "admin/model.offer_name", + application_alias="offer_name-model-vca-id", + controller=provider_controller, + ) mock_disconnect_model.assert_called_once() - mock_disconnect_controller.assert_called_once() + self.assertEqual(mock_disconnect_controller.call_count, 2) def test_parsing_error_exception( self, @@ -1482,11 +1598,13 @@ class ConsumeTest(LibjujuTestCase): with self.assertRaises(juju.offerendpoints.ParseError): self.loop.run_until_complete( - self.libjuju.consume("offer_url", "model_name") + self.libjuju.consume( + "model_name", Offer(self.offer_url), self.provider_libjuju + ) ) mock_consume.assert_called_once() mock_disconnect_model.assert_called_once() - mock_disconnect_controller.assert_called_once() + self.assertEqual(mock_disconnect_controller.call_count, 2) def test_juju_error_exception( self, @@ -1502,11 +1620,13 @@ class ConsumeTest(LibjujuTestCase): with self.assertRaises(juju.errors.JujuError): self.loop.run_until_complete( - self.libjuju.consume("offer_url", "model_name") + self.libjuju.consume( + "model_name", Offer(self.offer_url), self.provider_libjuju + ) ) mock_consume.assert_called_once() mock_disconnect_model.assert_called_once() - mock_disconnect_controller.assert_called_once() + self.assertEqual(mock_disconnect_controller.call_count, 2) def test_juju_api_error_exception( self, @@ -1524,11 +1644,13 @@ class ConsumeTest(LibjujuTestCase): with self.assertRaises(juju.errors.JujuAPIError): self.loop.run_until_complete( - self.libjuju.consume("offer_url", "model_name") + self.libjuju.consume( + "model_name", Offer(self.offer_url), self.provider_libjuju + ) ) mock_consume.assert_called_once() mock_disconnect_model.assert_called_once() - mock_disconnect_controller.assert_called_once() + self.assertEqual(mock_disconnect_controller.call_count, 2) @asynctest.mock.patch("n2vc.libjuju.Libjuju.get_k8s_cloud_credential")