From d9c10ec7250b5de2d36d54e0d7375e1a1ce1a116 Mon Sep 17 00:00:00 2001 From: Vsevolod Fedorov Date: Fri, 1 Dec 2023 13:00:51 +0300 Subject: [PATCH] Tests: Add ability to take several input files in one test Change-Id: I50a495ec448cf1b312d4d86a3dee08773c6debc2 --- tests/conftest.py | 15 +++++++++++++-- tests/enum_scenarios.py | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index a2b14370d..32b267fd7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,6 +18,7 @@ from jenkins_jobs.modules import project_multibranch from jenkins_jobs.modules import project_multijob from jenkins_jobs.registry import ModuleRegistry from jenkins_jobs.xml_config import XmlJob, XmlJobGenerator, XmlViewGenerator +from jenkins_jobs import utils from jenkins_jobs.roots import Roots from jenkins_jobs.loader import load_files @@ -127,7 +128,13 @@ def check_folders(scenario, job_xml_list): return "/".join(dirs) def path_parent(path): - dir = str(path.relative_to(root_dir).parent) + if scenario.in_path.is_dir(): + # In directory tests, output file directory does not + # indicate expected job folder. + base_dir = scenario.in_path + else: + base_dir = root_dir + dir = str(path.relative_to(base_dir).parent) if dir == ".": return "" else: @@ -173,7 +180,11 @@ def check_parser(jjb_config, registry): def check_job(scenario, expected_output, jjb_config, registry): def check(): roots = Roots(jjb_config) - load_files(jjb_config, roots, [scenario.in_path]) + if jjb_config.recursive: + path_list = [Path(p) for p in utils.recurse_path(str(scenario.in_path))] + else: + path_list = [scenario.in_path] + load_files(jjb_config, roots, path_list) registry.set_macros(roots.macros) job_data_list = roots.generate_jobs() registry.amend_job_dicts(job_data_list) diff --git a/tests/enum_scenarios.py b/tests/enum_scenarios.py index 560d7d1d6..4c2a409b0 100644 --- a/tests/enum_scenarios.py +++ b/tests/enum_scenarios.py @@ -26,9 +26,26 @@ Scenario = namedtuple( def scenario_list(fixtures_dir, in_ext=".yaml", out_ext=".xml"): + compound_dirs = set() + if out_ext == ".xml": + for path in fixtures_dir.rglob("expected-output.xml"): + dir = path.parent + compound_dirs.add(dir) + yield Scenario( + name=dir.stem, + in_path=dir, + out_paths=[path], + error_path=dir / "expected.error", + # When config file is missing it will still be passed and not None, + # so JJBConfig will prefer it over system and user configs. + config_path=dir / "test.conf", + plugins_info_path=dir / "test.plugins_info.yaml", + ) for path in fixtures_dir.rglob(f"*{in_ext}"): if path.name.endswith("plugins_info.yaml"): continue + if any(d in path.parents for d in compound_dirs): + continue out_path = path.with_suffix(out_ext) out_path_list = list(fixtures_dir.rglob(out_path.name)) yield Scenario(