summaryrefslogtreecommitdiff
path: root/rtemsspec/tests/test_packagebuild.py
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-11-21 11:13:16 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-11-21 11:15:25 +0100
commitecb305c6fdf43944a9082870474d95041df7dcf0 (patch)
tree316331bace4f9a78702b8644bb7ede0e09f294c1 /rtemsspec/tests/test_packagebuild.py
parent13e854a85686da5215fb81e4d01d091f8c69ca29 (diff)
archiver: New
Diffstat (limited to 'rtemsspec/tests/test_packagebuild.py')
-rw-r--r--rtemsspec/tests/test_packagebuild.py45
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"
+ ]