X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=inline;f=n2vc%2Ftests%2Funit%2Ftest_libjuju.py;h=76bbebe895d2cc9bc4adcf6e2b3cf156a8b3a68d;hb=refs%2Fchanges%2F02%2F9902%2F1;hp=8c16c9d8b8b63a161c39e8f288dfcf982bf19f3e;hpb=475a7221e3598ad1c75ce802c5ad74ef7ecf72f1;p=osm%2FN2VC.git diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py index 8c16c9d..76bbebe 100644 --- a/n2vc/tests/unit/test_libjuju.py +++ b/n2vc/tests/unit/test_libjuju.py @@ -30,6 +30,7 @@ from n2vc.exceptions import ( JujuActionNotFound, JujuApplicationExists, JujuInvalidK8sConfiguration, + JujuLeaderUnitNotFound, ) @@ -72,6 +73,91 @@ class LibjujuTestCase(asynctest.TestCase): loop.run_until_complete(self.libjuju.disconnect()) +@asynctest.mock.patch("n2vc.libjuju.Libjuju._create_health_check_task") +@asynctest.mock.patch("n2vc.libjuju.Libjuju._update_api_endpoints_db") +@asynctest.mock.patch("n2vc.libjuju.Libjuju._get_api_endpoints_db") +class LibjujuInitTestCase(asynctest.TestCase): + def setUp(self): + self.loop = asyncio.get_event_loop() + self.n2vc = FakeN2VC() + self.endpoint = "192.168.100.100:17070" + self.username = "admin" + self.password = "secret" + self.cacert = """ + -----BEGIN CERTIFICATE----- + SOMECERT + -----END CERTIFICATE-----""" + + def test_endpoint_not_in_db( + self, + mock__get_api_endpoints_db, + mock_update_endpoints, + mock_create_health_check_task, + ): + mock__get_api_endpoints_db.return_value = ["another_ip"] + Libjuju( + self.endpoint, + "192.168.0.155:17070", + self.username, + self.password, + self.cacert, + self.loop, + log=None, + db={"get_one": []}, + n2vc=self.n2vc, + apt_mirror="192.168.0.100", + enable_os_upgrade=True, + ) + mock_update_endpoints.assert_called_once_with([self.endpoint]) + mock__get_api_endpoints_db.assert_called_once() + + def test_endpoint_in_db( + self, + mock__get_api_endpoints_db, + mock_update_endpoints, + mock_create_health_check_task, + ): + mock__get_api_endpoints_db.return_value = [self.endpoint, "another_ip"] + Libjuju( + self.endpoint, + "192.168.0.155:17070", + self.username, + self.password, + self.cacert, + self.loop, + log=None, + db={"get_one": []}, + n2vc=self.n2vc, + apt_mirror="192.168.0.100", + enable_os_upgrade=True, + ) + mock_update_endpoints.assert_not_called() + mock__get_api_endpoints_db.assert_called_once() + + def test_no_db_endpoints( + self, + mock__get_api_endpoints_db, + mock_update_endpoints, + mock_create_health_check_task, + ): + mock__get_api_endpoints_db.return_value = None + Libjuju( + self.endpoint, + "192.168.0.155:17070", + self.username, + self.password, + self.cacert, + self.loop, + log=None, + db={"get_one": []}, + n2vc=self.n2vc, + apt_mirror="192.168.0.100", + enable_os_upgrade=True, + ) + mock_update_endpoints.assert_called_once_with([self.endpoint]) + mock__get_api_endpoints_db.assert_called_once() + + @asynctest.mock.patch("juju.controller.Controller.connect") @asynctest.mock.patch( "juju.controller.Controller.api_endpoints", @@ -579,7 +665,35 @@ class ExecuteActionTest(LibjujuTestCase): mock_disconnect_controller.assert_called() mock_disconnect_model.assert_called() - # TODO no leader unit found exception + @asynctest.mock.patch("asyncio.sleep") + @asynctest.mock.patch("n2vc.tests.unit.utils.FakeUnit.is_leader_from_status") + def test_no_leader( + self, + mock_is_leader_from_status, + mock_sleep, + mock_get_action_status, + mock_get_action_output, + mock_wait_for, + mock__get_application, + mock_disconnect_controller, + mock_disconnect_model, + mock_get_model, + mock_get_controller, + ): + mock_get_model.return_value = juju.model.Model() + mock__get_application.return_value = FakeApplication() + mock_is_leader_from_status.return_value = False + output = None + status = None + with self.assertRaises(JujuLeaderUnitNotFound): + output, status = self.loop.run_until_complete( + self.libjuju.execute_action("app", "model", "action",) + ) + self.assertIsNone(output) + self.assertIsNone(status) + + mock_disconnect_controller.assert_called() + mock_disconnect_model.assert_called() def test_succesful_exec( self, @@ -837,37 +951,37 @@ class AddRelationTest(LibjujuTestCase): # TODO destroy_model testcase -@asynctest.mock.patch("juju.model.Model.get_machines") -@asynctest.mock.patch("logging.Logger.debug") -class DestroyMachineTest(LibjujuTestCase): - def setUp(self): - super(DestroyMachineTest, self).setUp() - - def test_success( - self, mock_debug, mock_get_machines, - ): - mock_get_machines.side_effect = [ - {"machine": FakeMachine()}, - {"machine": FakeMachine()}, - {}, - ] - self.loop.run_until_complete( - self.libjuju.destroy_machine(juju.model.Model(), "machine", 2,) - ) - calls = [ - asynctest.call("Waiting for machine machine is destroyed"), - asynctest.call("Machine destroyed: machine"), - ] - mock_debug.assert_has_calls(calls) - - def test_no_machine( - self, mock_debug, mock_get_machines, - ): - mock_get_machines.return_value = {} - self.loop.run_until_complete( - self.libjuju.destroy_machine(juju.model.Model(), "machine", 2,) - ) - mock_debug.assert_called_with("Machine not found: machine") +# @asynctest.mock.patch("juju.model.Model.get_machines") +# @asynctest.mock.patch("logging.Logger.debug") +# class DestroyMachineTest(LibjujuTestCase): +# def setUp(self): +# super(DestroyMachineTest, self).setUp() + +# def test_success_manual_machine( +# self, mock_debug, mock_get_machines, +# ): +# mock_get_machines.side_effect = [ +# {"machine": FakeManualMachine()}, +# {"machine": FakeManualMachine()}, +# {}, +# ] +# self.loop.run_until_complete( +# self.libjuju.destroy_machine(juju.model.Model(), "machine", 2,) +# ) +# calls = [ +# asynctest.call("Waiting for machine machine is destroyed"), +# asynctest.call("Machine destroyed: machine"), +# ] +# mock_debug.assert_has_calls(calls) + +# def test_no_machine( +# self, mock_debug, mock_get_machines, +# ): +# mock_get_machines.return_value = {} +# self.loop.run_until_complete( +# self.libjuju.destroy_machine(juju.model.Model(), "machine", 2) +# ) +# mock_debug.assert_called_with("Machine not found: machine") @asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller")