From 1b3af690769294425a1f4adbe2033db34ed8b499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Prchl=C3=ADk?= Date: Tue, 24 Sep 2024 09:38:16 +0200 Subject: [PATCH] squash: address upgrade tests --- tmt/steps/discover/__init__.py | 43 +++++++++++++++++++++++++++++----- tmt/steps/discover/fmf.py | 9 ++++--- tmt/steps/discover/shell.py | 6 ++--- tmt/steps/execute/upgrade.py | 7 +++--- 4 files changed, 47 insertions(+), 18 deletions(-) diff --git a/tmt/steps/discover/__init__.py b/tmt/steps/discover/__init__.py index 380aae23da..838b0df64d 100644 --- a/tmt/steps/discover/__init__.py +++ b/tmt/steps/discover/__init__.py @@ -118,13 +118,32 @@ def tests( self, *, phase_name: Optional[str] = None, - enabled: Optional[bool] = None) -> list['tmt.Test']: + enabled: Optional[bool] = None) -> list[tuple[str, 'tmt.Test']]: """ - Return discovered tests - - Each DiscoverPlugin has to implement this method. - Should return a list of Test() objects. + Return discovered tests. + + :param phase_name: if set, return only tests discovered by the + phase of this name. Otherwise, all tests discovered by the + phase are returned. + + .. note:: + + This parameter exists to present unified interface with + :py:meth:`tmt.steps.discover.Discover.tests` API, but it + has no interesting effect in case of individual phases: + + * left unset, all tests discovered by the phase are + returned, + * set to a phase name, tests discovered by that phase + should be returned. But a phase does not have access to + other phases' tests, therefore setting it to anything + but this phase name would produce an empty list. + :param enabled: if set, return only tests that are enabled + (``enabled=True``) or disabled (``enabled=False``). Otherwise, + all tests are returned. + :returns: a list of phase name and test pairs. """ + raise NotImplementedError def download_distgit_source( @@ -354,7 +373,7 @@ def go(self, force: bool = False) -> None: # Prefix test name only if multiple plugins configured prefix = f'/{phase.name}' if len(self.phases()) > 1 else '' # Check discovered tests, modify test name/path - for test in phase.tests(enabled=True): + for _, test in phase.tests(enabled=True): test.name = f"{prefix}{test.name}" test.path = Path(f"/{phase.safe_name}{test.path}") # Update test environment with plan environment @@ -421,6 +440,18 @@ def tests( *, phase_name: Optional[str] = None, enabled: Optional[bool] = None) -> list[tuple[str, 'tmt.Test']]: + """ + Return discovered tests. + + :param phase_name: if set, return only tests discovered by the + phase of this name. Otherwise, tests discovered by all + phases are returned. + :param enabled: if set, return only tests that are enabled + (``enabled=True``) or disabled (``enabled=False``). Otherwise, + all tests are returned. + :returns: a list of phase name and test pairs. + """ + suitable_tests = self._failed_tests if self._failed_tests else self._tests suitable_phases = [phase_name] if phase_name is not None else list(self._tests.keys()) diff --git a/tmt/steps/discover/fmf.py b/tmt/steps/discover/fmf.py index d176fc66fe..eac1a76d29 100644 --- a/tmt/steps/discover/fmf.py +++ b/tmt/steps/discover/fmf.py @@ -724,7 +724,7 @@ def post_dist_git(self, created_content: list[Path]) -> None: # Prefix test name only if multiple plugins configured prefix = f'/{self.name}' if len(self.step.phases()) > 1 else '' # Check discovered tests, modify test name/path - for test in self.tests(enabled=True): + for _, test in self.tests(enabled=True): test.name = f"{prefix}{test.name}" test.path = Path(f"/{self.safe_name}{test.path}") # Update test environment with plan environment @@ -738,13 +738,12 @@ def tests( self, *, phase_name: Optional[str] = None, - enabled: Optional[bool] = None) -> list['tmt.Test']: - """ Return all discovered tests """ + enabled: Optional[bool] = None) -> list[tuple[str, 'tmt.Test']]: if phase_name is not None and phase_name != self.name: return [] if enabled is None: - return self._tests + return [(self.name, test) for test in self._tests] - return [test for test in self._tests if test.enabled is enabled] + return [(self.name, test) for test in self._tests if test.enabled is enabled] diff --git a/tmt/steps/discover/shell.py b/tmt/steps/discover/shell.py index e73fa6584c..2c7ca0471a 100644 --- a/tmt/steps/discover/shell.py +++ b/tmt/steps/discover/shell.py @@ -456,12 +456,12 @@ def tests( self, *, phase_name: Optional[str] = None, - enabled: Optional[bool] = None) -> list['tmt.Test']: + enabled: Optional[bool] = None) -> list[tuple[str, 'tmt.Test']]: if phase_name is not None and phase_name != self.name: return [] if enabled is None: - return self._tests + return [(self.name, test) for test in self._tests] - return [test for test in self._tests if test.enabled is enabled] + return [(self.name, test) for test in self._tests if test.enabled is enabled] diff --git a/tmt/steps/execute/upgrade.py b/tmt/steps/execute/upgrade.py index 6da19d6b5a..c9bea3ef98 100644 --- a/tmt/steps/execute/upgrade.py +++ b/tmt/steps/execute/upgrade.py @@ -337,7 +337,7 @@ def _perform_upgrade( required_packages: list[tmt.base.DependencySimple] = [] recommended_packages: list[tmt.base.DependencySimple] = [] - for test in self._discover_upgrade.tests(enabled=True): + for _, test in self._discover_upgrade.tests(enabled=True): test.name = f'/{DURING_UPGRADE_PREFIX}/{test.name.lstrip("/")}' # Gathering dependencies for upgrade tasks @@ -386,7 +386,7 @@ def _run_test_phase( The prefix is also set as IN_PLACE_UPGRADE environment variable. """ names_backup = [] - for _, test in cast(list[tuple[str, tmt.base.Test]], self.discover.tests(enabled=True)): + for _, test in self.discover.tests(enabled=True): names_backup.append(test.name) test.name = f'/{prefix}/{test.name.lstrip("/")}' @@ -395,6 +395,5 @@ def _run_test_phase( extra_environment=Environment({STATUS_VARIABLE: EnvVarValue(prefix)}), logger=logger) - tests = cast(list[tuple[str, tmt.base.Test]], self.discover.tests(enabled=True)) - for i, (_, test) in enumerate(tests): + for i, (_, test) in enumerate(self.discover.tests(enabled=True)): test.name = names_backup[i]