Skip to content

Commit d227968

Browse files
author
Adam Dyess
authored
Address destroying all connections to the juju controller. (#76)
* Address destroying all connections to the juju controller. * reduce warnings produced from a deprecated way of marking asyncio style fixtures
1 parent 25a8094 commit d227968

2 files changed

Lines changed: 10 additions & 21 deletions

File tree

pytest_operator/plugin.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,7 @@ def abort_on_fail(request):
223223
ops_test.aborted = True
224224

225225

226-
@pytest.fixture(scope="module")
227-
@pytest.mark.asyncio
226+
@pytest_asyncio.fixture(scope="module")
228227
async def ops_test(request, tmp_path_factory):
229228
check_deps("juju", "charmcraft")
230229
ops_test = OpsTest(request, tmp_path_factory)
@@ -581,17 +580,13 @@ async def juju(self, *args, **kwargs):
581580

582581
return await self.run("juju", *args, **kwargs)
583582

584-
async def _add_model(
585-
self, controller_name, cloud_name, model_name, keep=False, **kwargs
586-
):
583+
async def _add_model(self, cloud_name, model_name, keep=False, **kwargs):
587584
"""
588585
Creates a model used by the test framework which would normally be destroyed
589586
after the tests are run in the module.
590587
"""
591588
controller = self._controller
592-
if not controller:
593-
controller = Controller()
594-
await controller.connect(controller_name)
589+
controller_name = controller.controller_name
595590
if not cloud_name:
596591
# if not provided, try the default cloud name
597592
cloud_name = self._init_cloud_name
@@ -657,11 +652,14 @@ async def _setup_model(self):
657652
alias = self._orig_model_alias
658653
if not self.controller_name:
659654
self.controller_name = self.jujudata.current_controller()
655+
assert self.controller_name, "No controller selected for ops_test"
656+
if not self._controller:
657+
self._controller = Controller()
658+
await self._controller.connect(self.controller_name)
660659
if not self._init_model_name:
661660
# no --model flag specified, automatically generate a model
662661
config = self.read_model_config(self._init_model_config)
663662
model_state = await self._add_model(
664-
self.controller_name,
665663
self._init_cloud_name,
666664
self.default_model_name,
667665
config=config,
@@ -672,9 +670,6 @@ async def _setup_model(self):
672670
self.controller_name, self._init_model_name
673671
)
674672

675-
if not self._controller:
676-
self._controller = await model_state.model.get_controller()
677-
678673
self._models[alias] = model_state
679674
self._current_alias = alias
680675

@@ -734,9 +729,7 @@ async def track_model(
734729
else:
735730
cloud_name = cloud_name or self.cloud_name
736731
model_name = model_name or self._generate_model_name()
737-
model_state = await self._add_model(
738-
self.controller_name, cloud_name, model_name, keep, **kwargs
739-
)
732+
model_state = await self._add_model(cloud_name, model_name, keep, **kwargs)
740733
self._models[alias] = model_state
741734
return model_state.model
742735

@@ -812,8 +805,7 @@ async def forget_model(
812805
if not self.keep_model:
813806
await self._reset(model, allow_failure, timeout=timeout)
814807
await self._controller.destroy_model(model_name, force=True)
815-
else:
816-
await model.disconnect()
808+
await model.disconnect()
817809

818810
# stop managing this model now
819811
log.info(f"Forgetting {alias}...")
@@ -862,9 +854,6 @@ async def _destroy(entity_name: str, **kwargs):
862854
log.info(f"Reset {model.info.name} completed successfully.")
863855

864856
async def _cleanup_models(self):
865-
if not self.models:
866-
return
867-
868857
# remove models from most recently made, to first made
869858
aliases = list(reversed(self._models.keys()))
870859
for models in aliases:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
name="pytest-operator",
2525
packages=find_packages(include=["pytest_operator"]),
2626
url="https://github.com/charmed-kubernetes/pytest-operator",
27-
version="0.19.0",
27+
version="0.19.1",
2828
zip_safe=True,
2929
install_requires=[
3030
"ipdb",

0 commit comments

Comments
 (0)