X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=modules%2Flibjuju%2Ftests%2Funit%2Ftest_model.py;h=2753d853be5a672241d974c876d8e3630045b641;hp=222d881a6b5c16090fe6f3517e045009c9b72dc4;hb=19c5cfca317615597be6bf1051e9d2fa903adb97;hpb=68858c1915122c2dbc8999a5cd3229694abf5f3a diff --git a/modules/libjuju/tests/unit/test_model.py b/modules/libjuju/tests/unit/test_model.py index 222d881..2753d85 100644 --- a/modules/libjuju/tests/unit/test_model.py +++ b/modules/libjuju/tests/unit/test_model.py @@ -1,8 +1,12 @@ import unittest import mock + import asynctest +from juju.client.jujudata import FileJujuData +from juju.model import Model + def _make_delta(entity, type_, data=None): from juju.client.client import Delta @@ -68,8 +72,8 @@ class TestModelState(unittest.TestCase): from juju.model import Model from juju.application import Application - loop = mock.MagicMock() - model = Model(loop=loop) + model = Model() + model._connector = mock.MagicMock() delta = _make_delta('application', 'add', dict(name='foo')) # test add @@ -118,7 +122,7 @@ def test_get_series(): class TestContextManager(asynctest.TestCase): @asynctest.patch('juju.model.Model.disconnect') - @asynctest.patch('juju.model.Model.connect_current') + @asynctest.patch('juju.model.Model.connect') async def test_normal_use(self, mock_connect, mock_disconnect): from juju.model import Model @@ -129,7 +133,7 @@ class TestContextManager(asynctest.TestCase): self.assertTrue(mock_disconnect.called) @asynctest.patch('juju.model.Model.disconnect') - @asynctest.patch('juju.model.Model.connect_current') + @asynctest.patch('juju.model.Model.connect') async def test_exception(self, mock_connect, mock_disconnect): from juju.model import Model @@ -143,13 +147,118 @@ class TestContextManager(asynctest.TestCase): self.assertTrue(mock_connect.called) self.assertTrue(mock_disconnect.called) - @asynctest.patch('juju.client.connection.JujuData.current_controller') - async def test_no_current_connection(self, mock_current_controller): + async def test_no_current_connection(self): from juju.model import Model from juju.errors import JujuConnectionError - mock_current_controller.return_value = "" + class NoControllerJujuData(FileJujuData): + def current_controller(self): + return "" with self.assertRaises(JujuConnectionError): - async with Model(): + async with Model(jujudata=NoControllerJujuData()): pass + + +@asynctest.patch('juju.model.Model._after_connect') +class TestModelConnect(asynctest.TestCase): + @asynctest.patch('juju.client.connector.Connector.connect_model') + async def test_no_args(self, mock_connect_model, _): + m = Model() + await m.connect() + mock_connect_model.assert_called_once_with(None) + + @asynctest.patch('juju.client.connector.Connector.connect_model') + async def test_with_model_name(self, mock_connect_model, _): + m = Model() + await m.connect(model_name='foo') + mock_connect_model.assert_called_once_with('foo') + + @asynctest.patch('juju.client.connector.Connector.connect_model') + async def test_with_endpoint_but_no_uuid(self, mock_connect_model, _): + m = Model() + with self.assertRaises(TypeError): + await m.connect(endpoint='0.1.2.3:4566') + self.assertEqual(mock_connect_model.call_count, 0) + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_uuid_no_auth(self, mock_connect, _): + m = Model() + with self.assertRaises(TypeError): + await m.connect(endpoint='0.1.2.3:4566', uuid='some-uuid') + self.assertEqual(mock_connect.call_count, 0) + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_uuid_with_userpass(self, mock_connect, _): + m = Model() + with self.assertRaises(TypeError): + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + username='user') + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + username='user', + password='pass') + mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566', + uuid='some-uuid', + username='user', + password='pass') + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_uuid_with_bakery(self, mock_connect, _): + m = Model() + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + bakery_client='bakery') + mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566', + uuid='some-uuid', + bakery_client='bakery') + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_uuid_with_macaroon(self, mock_connect, _): + m = Model() + with self.assertRaises(TypeError): + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + username='user') + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + macaroons=['macaroon']) + mock_connect.assert_called_with(endpoint='0.1.2.3:4566', + uuid='some-uuid', + macaroons=['macaroon']) + await m.connect(endpoint='0.1.2.3:4566', + uuid='some-uuid', + bakery_client='bakery', + macaroons=['macaroon']) + mock_connect.assert_called_with(endpoint='0.1.2.3:4566', + uuid='some-uuid', + bakery_client='bakery', + macaroons=['macaroon']) + + @asynctest.patch('juju.client.connector.Connector.connect_model') + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_posargs(self, mock_connect, mock_connect_model, _): + m = Model() + await m.connect('foo') + mock_connect_model.assert_called_once_with('foo') + with self.assertRaises(TypeError): + await m.connect('endpoint', 'uuid') + with self.assertRaises(TypeError): + await m.connect('endpoint', 'uuid', 'user') + await m.connect('endpoint', 'uuid', 'user', 'pass') + mock_connect.assert_called_once_with(endpoint='endpoint', + uuid='uuid', + username='user', + password='pass') + await m.connect('endpoint', 'uuid', 'user', 'pass', 'cacert', 'bakery', + 'macaroons', 'loop', 'max_frame_size') + mock_connect.assert_called_with(endpoint='endpoint', + uuid='uuid', + username='user', + password='pass', + cacert='cacert', + bakery_client='bakery', + macaroons='macaroons', + loop='loop', + max_frame_size='max_frame_size')