summaryrefslogtreecommitdiff
path: root/test_pyproject_save_files.py
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-03-26 08:56:56 +0000
committerCoprDistGit <infra@openeuler.org>2025-03-26 08:56:56 +0000
commit05e453f33d593c331357af998dcc63610dd31374 (patch)
treec79c2ad412872d264b1d9d3490af578a6e4283eb /test_pyproject_save_files.py
parentdf5ddad58ca74b9796b242cf4881f46408553703 (diff)
automatic import of pyproject-rpm-macrosopeneuler24.03_LTS_SP1
Diffstat (limited to 'test_pyproject_save_files.py')
-rwxr-xr-xtest_pyproject_save_files.py278
1 files changed, 0 insertions, 278 deletions
diff --git a/test_pyproject_save_files.py b/test_pyproject_save_files.py
deleted file mode 100755
index 46aa230..0000000
--- a/test_pyproject_save_files.py
+++ /dev/null
@@ -1,278 +0,0 @@
-import pytest
-import yaml
-
-from pathlib import Path
-from pprint import pprint
-
-from pyproject_preprocess_record import parse_record, read_record, save_parsed_record
-
-from pyproject_save_files import argparser, generate_file_list, BuildrootPath
-from pyproject_save_files import main as save_files_main
-from pyproject_save_files import module_names_from_path
-
-DIR = Path(__file__).parent
-PREFIX = Path("/usr")
-BINDIR = BuildrootPath("/usr/bin")
-DATADIR = BuildrootPath("/usr/share")
-SITELIB = BuildrootPath("/usr/lib/python3.7/site-packages")
-SITEARCH = BuildrootPath("/usr/lib64/python3.7/site-packages")
-
-yaml_file = DIR / "pyproject_save_files_test_data.yaml"
-yaml_data = yaml.safe_load(yaml_file.read_text())
-EXPECTED_DICT = yaml_data["classified"]
-EXPECTED_FILES = yaml_data["dumped"]
-TEST_RECORDS = yaml_data["records"]
-TEST_METADATAS = yaml_data["metadata"]
-
-
-# insert glob_suffix_len for .pyc files and man pages globs
-for paths_dict in EXPECTED_DICT.values():
- for modules in paths_dict["modules"].values():
- for module in modules:
- for idx, file in enumerate(module["files"]):
- if file.endswith(".pyc"):
- module["files"][idx] = BuildrootPath(file)
- module["files"][idx].glob_suffix_len = len("{,.opt-?}.pyc")
- if "other" in paths_dict and "files" in paths_dict["other"]:
- for idx, file in enumerate(paths_dict["other"]["files"]):
- if file.endswith("*"):
- paths_dict["other"]["files"][idx] = BuildrootPath(file)
- paths_dict["other"]["files"][idx].glob_suffix_len = len("*")
-
-
-@pytest.fixture
-def tldr_root(tmp_path):
- prepare_pyproject_record(tmp_path, package="tldr")
- return tmp_path
-
-
-@pytest.fixture
-def pyproject_record(tmp_path):
- return tmp_path / "pyproject-record"
-
-
-def prepare_pyproject_record(tmp_path, package=None, content=None):
- """
- Creates RECORD from test data and then uses
- functions from pyproject_process_record to convert
- it to pyproject-record file which is then
- further processed by functions from pyproject_save_files.
- """
- record_file = tmp_path / "RECORD"
- pyproject_record = tmp_path / "pyproject-record"
-
- if package is not None:
- # Get test data and write dist-info/RECORD file
- record_path = BuildrootPath(TEST_RECORDS[package]["path"])
- record_file.write_text(TEST_RECORDS[package]["content"])
- if package in TEST_METADATAS:
- metadata_path = BuildrootPath(TEST_METADATAS[package]["path"]).to_real(tmp_path)
- metadata_path.parent.mkdir(parents=True, exist_ok=True)
- metadata_path.write_text(TEST_METADATAS[package]["content"])
- # Parse RECORD file
- parsed_record = parse_record(record_path, read_record(record_file))
- # Save JSON content to pyproject-record
- save_parsed_record(record_path, parsed_record, pyproject_record)
- elif content is not None:
- save_parsed_record(*content, output_file=pyproject_record)
-
-
-@pytest.fixture
-def output_files(tmp_path):
- return tmp_path / "pyproject_files"
-
-@pytest.fixture
-def output_modules(tmp_path):
- return tmp_path / "pyproject_modules"
-
-
-def test_parse_record_tldr():
- record_path = BuildrootPath(TEST_RECORDS["tldr"]["path"])
- record_content = read_record(DIR / "test_RECORD")
- output = list(parse_record(record_path, record_content))
- pprint(output)
- expected = [
- str(BINDIR / "__pycache__/tldr.cpython-37.pyc"),
- str(BINDIR / "tldr"),
- str(BINDIR / "tldr.py"),
- str(SITELIB / "__pycache__/tldr.cpython-37.pyc"),
- str(SITELIB / "tldr-0.5.dist-info/INSTALLER"),
- str(SITELIB / "tldr-0.5.dist-info/LICENSE"),
- str(SITELIB / "tldr-0.5.dist-info/METADATA"),
- str(SITELIB / "tldr-0.5.dist-info/RECORD"),
- str(SITELIB / "tldr-0.5.dist-info/WHEEL"),
- str(SITELIB / "tldr-0.5.dist-info/top_level.txt"),
- str(SITELIB / "tldr.py"),
- ]
- assert output == expected
-
-
-def test_parse_record_tensorflow():
- long = "tensorflow_core/include/tensorflow/core/common_runtime/base_collective_executor.h"
- record_path = SITEARCH / "tensorflow-2.1.0.dist-info/RECORD"
- record_content = [
- ["../../../bin/toco_from_protos", "sha256=hello", "289"],
- [f"../../../lib/python3.7/site-packages/{long}", "sha256=darkness", "1024"],
- ["tensorflow-2.1.0.dist-info/METADATA", "sha256=friend", "2859"],
- ]
- output = list(parse_record(record_path, record_content))
- pprint(output)
- expected = [
- str(BINDIR / "toco_from_protos"),
- str(SITELIB / long),
- str(SITEARCH / "tensorflow-2.1.0.dist-info/METADATA"),
- ]
- assert output == expected
-
-
-def remove_others(expected):
- return [
- p for p in expected
- if not (
- p.startswith(str(BINDIR)) or
- p.endswith(".pth") or
- p.endswith("*") or
- p.rpartition(' ')[-1].startswith(str(DATADIR))
- )
- ]
-
-
-@pytest.mark.parametrize("include_auto", (True, False))
-@pytest.mark.parametrize("package, glob, expected_files, expected_modules", EXPECTED_FILES)
-def test_generate_file_list(package, glob, expected_files, include_auto, expected_modules):
- paths_dict = EXPECTED_DICT[package]
- modules_glob = {glob}
- if not include_auto:
- expected_files = remove_others(expected_files)
- tested = generate_file_list(paths_dict, modules_glob, include_auto)
-
- assert tested == expected_files
-
-
-def test_generate_file_list_unused_glob():
- paths_dict = EXPECTED_DICT["kerberos"]
- modules_glob = {"kerberos", "unused_glob1", "unused_glob2", "kerb*"}
- with pytest.raises(ValueError) as excinfo:
- generate_file_list(paths_dict, modules_glob, True)
-
- assert "unused_glob1, unused_glob2" in str(excinfo.value)
- assert "kerb" not in str(excinfo.value)
-
-
-@pytest.mark.parametrize(
- "path, expected",
- [
- ("foo/bar/baz.py", {"foo", "foo.bar", "foo.bar.baz"}),
- ("foo/bar.py", {"foo", "foo.bar"}),
- ("foo.py", {"foo"}),
- ("foo/bar.so.2", set()),
- ("foo.cpython-37m-x86_64-linux-gnu.so", {"foo"}),
- ("foo/_api/v2/__init__.py", set()),
- ("foo/__init__.py", {"foo"}),
- ("foo/_priv.py", set()),
- ("foo/_bar/lib.so", set()),
- ("foo/bar/baz.so", {"foo", "foo.bar", "foo.bar.baz"}),
- ("foo/bar/baz.pth", set()),
- ("foo/bar/baz.pyc", set()),
- ("def.py", set()),
- ("foo-bar/baz.py", set()),
- ("foobar/12baz.py", set()),
- ("foo/\nbar/baz.py", set()),
- ("foo/+bar/baz.py", set()),
- ("foo/__init__.cpython-39-x86_64-linux-gnu.so", {"foo"}),
- ("foo/bar/__pycache__/abc.cpython-37.pyc", set()),
- ],
-)
-def test_module_names_from_path(path, expected):
- tested = Path(path)
- assert module_names_from_path(tested) == expected
-
-
-def default_options(output_files, output_modules, mock_root, pyproject_record):
- return [
- "--output-files",
- str(output_files),
- "--output-modules",
- str(output_modules),
- "--buildroot",
- str(mock_root),
- "--sitelib",
- str(SITELIB),
- "--sitearch",
- str(SITEARCH),
- "--python-version",
- "3.7", # test data are for 3.7,
- "--pyproject-record",
- str(pyproject_record),
- "--prefix",
- str(PREFIX),
- ]
-
-
-@pytest.mark.parametrize("include_auto", (True, False))
-@pytest.mark.parametrize("package, glob, expected_files, expected_modules", EXPECTED_FILES)
-def test_cli(tmp_path, package, glob, expected_files, expected_modules, include_auto, pyproject_record):
- prepare_pyproject_record(tmp_path, package)
- output_files = tmp_path / "files"
- output_modules = tmp_path / "modules"
- globs = [glob, "+auto"] if include_auto else [glob]
- cli_args = argparser().parse_args([*default_options(output_files, output_modules, tmp_path, pyproject_record), *globs])
- save_files_main(cli_args)
-
- if not include_auto:
- expected_files = remove_others(expected_files)
- tested_files = output_files.read_text()
- assert tested_files == "\n".join(expected_files) + "\n"
-
- tested_modules = output_modules.read_text().split()
-
- assert tested_modules == expected_modules
-
-
-def test_cli_no_pyproject_record(tmp_path, pyproject_record):
- output_files = tmp_path / "files"
- output_modules = tmp_path / "modules"
- cli_args = argparser().parse_args([*default_options(output_files, output_modules, tmp_path, pyproject_record), "tldr*"])
-
- with pytest.raises(FileNotFoundError):
- save_files_main(cli_args)
-
-
-def test_cli_too_many_RECORDS(tldr_root, output_files, output_modules, pyproject_record):
- # Two calls to simulate how %pyproject_install process more than one RECORD file
- prepare_pyproject_record(tldr_root,
- content=("foo/bar/dist-info/RECORD", []))
- prepare_pyproject_record(tldr_root,
- content=("foo/baz/dist-info/RECORD", []))
- cli_args = argparser().parse_args([*default_options(output_files, output_modules, tldr_root, pyproject_record), "tldr*"])
-
- with pytest.raises(FileExistsError):
- save_files_main(cli_args)
-
-
-def test_cli_bad_argument(tldr_root, output_files, output_modules, pyproject_record):
- cli_args = argparser().parse_args(
- [*default_options(output_files, output_modules, tldr_root, pyproject_record), "tldr*", "+foodir"]
- )
-
- with pytest.raises(ValueError):
- save_files_main(cli_args)
-
-
-def test_cli_bad_option(tldr_root, output_files, output_modules, pyproject_record):
- prepare_pyproject_record(tldr_root.parent, content=("RECORD1", []))
- cli_args = argparser().parse_args(
- [*default_options(output_files, output_modules, tldr_root, pyproject_record), "tldr*", "you_cannot_have_this"]
- )
-
- with pytest.raises(ValueError):
- save_files_main(cli_args)
-
-
-def test_cli_bad_namespace(tldr_root, output_files, output_modules, pyproject_record):
- cli_args = argparser().parse_args(
- [*default_options(output_files, output_modules, tldr_root, pyproject_record), "tldr.didntread"]
- )
-
- with pytest.raises(ValueError):
- save_files_main(cli_args)