X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Ftests%2Funit%2Ftest_libjuju.py;h=454b87f7288a1d3d57e6af788429ba070bdc8a9f;hp=123da4a03692a5ffe0efab1e28e817c201efce3e;hb=refs%2Fchanges%2F33%2F9733%2F15;hpb=59f520da90fb12b9d9871889dfbc5d57aa14c591 diff --git a/n2vc/tests/unit/test_libjuju.py b/n2vc/tests/unit/test_libjuju.py index 123da4a..454b87f 100644 --- a/n2vc/tests/unit/test_libjuju.py +++ b/n2vc/tests/unit/test_libjuju.py @@ -73,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", @@ -368,6 +453,71 @@ class CreateMachineTest(LibjujuTestCase): # TODO test provision machine +@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller") +@asynctest.mock.patch("n2vc.libjuju.Libjuju.get_model") +@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_model") +@asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_controller") +@asynctest.mock.patch("n2vc.juju_watcher.JujuModelWatcher.wait_for_model") +@asynctest.mock.patch("juju.model.Model.deploy") +class DeployTest(LibjujuTestCase): + def setUp(self): + super(DeployTest, self).setUp() + + def test_deploy( + self, + mock_deploy, + mock_wait_for_model, + 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.deploy("cs:osm", "model", wait=True, timeout=0) + ) + mock_deploy.assert_called_once() + mock_wait_for_model.assert_called_once() + mock_disconnect_controller.assert_called_once() + mock_disconnect_model.assert_called_once() + + def test_deploy_no_wait( + self, + mock_deploy, + mock_wait_for_model, + 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.deploy("cs:osm", "model", wait=False, timeout=0) + ) + mock_deploy.assert_called_once() + mock_wait_for_model.assert_not_called() + mock_disconnect_controller.assert_called_once() + mock_disconnect_model.assert_called_once() + + def test_deploy_exception( + self, + mock_deploy, + mock_wait_for_model, + mock_disconnect_controller, + mock_disconnect_model, + mock_get_model, + mock_get_controller, + ): + mock_deploy.side_effect = Exception() + mock_get_model.return_value = juju.model.Model() + with self.assertRaises(Exception): + self.loop.run_until_complete(self.libjuju.deploy("cs:osm", "model")) + mock_deploy.assert_called_once() + mock_wait_for_model.assert_not_called() + mock_disconnect_controller.assert_called_once() + mock_disconnect_model.assert_called_once() + + @asynctest.mock.patch("n2vc.libjuju.Libjuju.get_controller") @asynctest.mock.patch("n2vc.libjuju.Libjuju.get_model") @asynctest.mock.patch("n2vc.libjuju.Libjuju.disconnect_model") @@ -866,37 +1016,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")