diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-21 11:13:16 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-21 11:15:25 +0100 |
commit | ecb305c6fdf43944a9082870474d95041df7dcf0 (patch) | |
tree | 316331bace4f9a78702b8644bb7ede0e09f294c1 /rtemsspec/tests/test_packagebuild.py | |
parent | 13e854a85686da5215fb81e4d01d091f8c69ca29 (diff) |
archiver: New
Diffstat (limited to 'rtemsspec/tests/test_packagebuild.py')
-rw-r--r-- | rtemsspec/tests/test_packagebuild.py | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/rtemsspec/tests/test_packagebuild.py b/rtemsspec/tests/test_packagebuild.py index 48ee2c84..436c6f29 100644 --- a/rtemsspec/tests/test_packagebuild.py +++ b/rtemsspec/tests/test_packagebuild.py @@ -29,6 +29,7 @@ import os import pytest from pathlib import Path import shutil +import tarfile from rtemsspec.items import EmptyItem, Item, ItemCache, ItemGetValueContext from rtemsspec.packagebuild import BuildItem, BuildItemMapper, \ @@ -36,6 +37,7 @@ from rtemsspec.packagebuild import BuildItem, BuildItemMapper, \ from rtemsspec.packagebuildfactory import create_build_item_factory from rtemsspec.specverify import verify from rtemsspec.tests.util import get_and_clear_log +from rtemsspec.util import run_command def _copy_dir(src, dst): @@ -50,9 +52,10 @@ def _copy_dir(src, dst): def _create_item_cache(tmp_dir: Path, spec_dir: Path) -> ItemCache: - spec_dst = tmp_dir / Path("pkg/build/spec") + spec_dst = tmp_dir / "pkg" / "build" / "spec" test_dir = Path(__file__).parent _copy_dir(test_dir / spec_dir, spec_dst) + _copy_dir(test_dir / "test-files", tmp_dir) _copy_dir(test_dir.parent.parent / "spec-spec", spec_dst) _copy_dir(test_dir.parent.parent / "spec-qdp" / "spec", spec_dst / "spec") cache_dir = os.path.join(tmp_dir, "cache") @@ -96,7 +99,8 @@ def test_packagebuild(caplog, tmpdir): factory.add_get_value("qdp/variant:/tmpdir", get_tmpdir) director = PackageBuildDirector(item_cache, factory) director.clear() - prefix_dir = Path(director["/qdp/variant"]["prefix-directory"]) + variant = director["/qdp/variant"] + prefix_dir = Path(variant["prefix-directory"]) director.build_package(None, None) log = get_and_clear_log(caplog) @@ -158,3 +162,40 @@ def test_packagebuild(caplog, tmpdir): c.output("moo") assert c["values"]["list"] == ["a", "b1", "b2", ["d", "e"], "c"] c.clear() + + # Test Archiver + dir_state_a = director["/qdp/source/a"] + dir_state_a.load() + with open(tmp_dir / "dir/subdir/d.txt", "w", encoding="utf-8") as dst: + dst.write("d") + dir_state_b = director["/qdp/source/b"] + dir_state_b.load() + dir_state_e = director["/qdp/source/e"] + dir_state_e.load() + variant["enabled"] = ["archive"] + director.build_package(None, None) + log = get_and_clear_log(caplog) + assert "/qdp/steps/archive: duplicate files in directory states /qdp/source/a and /qdp/source/b" in log + assert f"/qdp/steps/archive: duplicate file: {tmp_dir}/dir/subdir/d.txt" in log + assert f"/qdp/steps/archive: inconsistent file hashes for '{tmp_dir}/dir/subdir/d.txt': {list(dir_state_a.files_and_hashes())[2][1]} != {list(dir_state_b.files_and_hashes())[2][1]}" in log + assert f"/qdp/steps/archive: duplicate file: {tmp_dir}/dir/subdir/c.txt" in log + with tarfile.open(director["/qdp/deployment/archive"].file, + "r:*") as archive: + assert archive.getnames() == [ + 'dir/a.txt', 'dir/subdir/c.txt', 'dir/subdir/d.txt', 'dir/b.txt', + 'dir/subdir/c.txt', 'dir/subdir/d.txt', 'dir/e.txt', + 'verify_package.py' + ] + + verify_package = director["/qdp/deployment/verify-package"] + stdout = [] + status = run_command([verify_package.file, "--list-files-and-hashes"], + str(tmp_dir), stdout) + assert status == 0 + assert stdout == [ + "dir/a.txt\t7a296fab5364b34ce3e0476d55bf291bd41aa085e5ecf2a96883e593aa1836fed22f7242af48d54af18f55c8d1def13ec9314c926666a0ba63f7663500090565", + "dir/b.txt\t480a2ddd53e8db95fc737b670302c7ea0914b52ffdb2e961c2ff90887ec2b25873723374da81ae5adafc47ef7ef1c7c5c91243217d41cb904040279b758da0f7", + "dir/e.txt\t61e9f9edbc37b2b5c2fc9633da2d8777916f0e4515a080374acedd14c935f2c6fb5a882c5459b7a06a03f0d057ce4f73f89def713a5824b8769a5917a3bdda93", + "dir/subdir/c.txt\t663049a20dfea6b8da28b2eb90eddd10ccf28ef2519563310b9bde25b7268444014c48c4384ee5c5a54e7830e45fcd87df7910a7fda77b68c2efdd75f8de25e8", + "dir/subdir/d.txt\t48fb10b15f3d44a09dc82d02b06581e0c0c69478c9fd2cf8f9093659019a1687baecdbb38c9e72b12169dc4148690f87467f9154f5931c5df665c6496cbfd5f5" + ] |