X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=tests%2Fbase.py;h=8ea51092d5129c85bb2375f87a56c8f92148cd31;hb=refs%2Ftags%2F0.4.0;hp=382da4362413291a218f83d6885724b7ff2ad9fd;hpb=afb309d17dadc062017ee3d6425491193181138e;p=osm%2FN2VC.git diff --git a/tests/base.py b/tests/base.py index 382da43..8ea5109 100644 --- a/tests/base.py +++ b/tests/base.py @@ -1,9 +1,11 @@ -import uuid +import mock import subprocess +import uuid import pytest from juju.controller import Controller +from juju.client.connection import JujuData def is_bootstrapped(): @@ -17,6 +19,19 @@ bootstrapped = pytest.mark.skipif( reason='bootstrapped Juju environment required') +class CleanController(): + def __init__(self): + self.controller = None + + async def __aenter__(self): + self.controller = Controller() + await self.controller.connect_current() + return self.controller + + async def __aexit__(self, exc_type, exc, tb): + await self.controller.disconnect() + + class CleanModel(): def __init__(self): self.controller = None @@ -29,9 +44,21 @@ class CleanModel(): model_name = 'model-{}'.format(uuid.uuid4()) self.model = await self.controller.add_model(model_name) + # Ensure that we connect to the new model by default. This also + # prevents failures if test was started with no current model. + self._patch_cm = mock.patch.object(JujuData, 'current_model', + return_value=model_name) + self._patch_cm.start() + return self.model async def __aexit__(self, exc_type, exc, tb): + self._patch_cm.stop() await self.model.disconnect() await self.controller.destroy_model(self.model.info.uuid) await self.controller.disconnect() + + +class AsyncMock(mock.MagicMock): + async def __call__(self, *args, **kwargs): + return super().__call__(*args, **kwargs)