Add consume to libjuju.py
This function allows to consume an offered endpoint in another model
Change-Id: I320978aac654fbb8199fdfbf4e928b0e2ba5458b
Signed-off-by: David Garcia <david.garcia@canonical.com>
diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py
index a789bc8..41b32d1 100644
--- a/n2vc/tests/unit/test_libjuju.py
+++ b/n2vc/tests/unit/test_libjuju.py
@@ -954,3 +954,96 @@
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()