Add safe Vcore wowdiag and wowsrc imports with original-data provenance

This commit is contained in:
Nico committed 2026-10-13 19:43:50 +02:00
1 parent 4543e7cd31
commit 741c1ca4a5
25 files changed
+1469 -9

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
"""Opt-in full-archive regression, without machine-specific paths or binary fixtures."""
import hashlib
import json
import os
from pathlib import Path
import pytest
from viano_bug_analysis.case import CaseBuilder
from viano_bug_analysis.lifecycle import CheckpointStore, Workspace
from viano_bug_analysis.package import PackageReader, PackageValidator
from viano_bug_analysis.profiles.vcore import ArchiveReader, VcoreImporter
@pytest.mark.skipif(not os.environ.get("VBA_WOWDIAG_SAMPLE") or not os.environ.get("VBA_WOWSRC_SAMPLE"),
reason="Set VBA_WOWDIAG_SAMPLE and VBA_WOWSRC_SAMPLE for the BUG-20 full archive regression")
def test_full_bug20_package_pair(tmp_path):
diag, src = Path(os.environ["VBA_WOWDIAG_SAMPLE"]), Path(os.environ["VBA_WOWSRC_SAMPLE"])
original_hashes = [hashlib.sha256(path.read_bytes()).hexdigest() for path in (diag, src)]
package = tmp_path / "anything.bin"
VcoreImporter().create(diag, package, package_id="regression-package", case_id="regression-case", wowsrc=src)
store = CheckpointStore(Workspace(tmp_path / "service"))
store.intake(package)
result = CaseBuilder(store).build("regression-case", "regression-package")
assert PackageValidator().validate(result.package).valid
with PackageReader(result.package) as reader:
case = json.loads(reader.read_bytes(result.case_ref))
assert len(case["human_observations"]["observations"]) == 3
assert case["expected_behavior"]["completeness"] == "missing"
assert case["human_observations"]["tester_hypotheses"] == []
assert len(case["database_context"]["refs"]) == 103
assert len(case["source_context"]["refs"]) == 93
for input_path in (diag, src):
with ArchiveReader(input_path) as source:
for member in source.members:
matching = [path for path in reader.files if path.endswith("/members/" + member)]
assert len(matching) == 1
assert reader.read_bytes(matching[0]) == source.read_member(member)
assert CaseBuilder(store).build("regression-case", "regression-package").reused
assert [hashlib.sha256(path.read_bytes()).hexdigest() for path in (diag, src)] == original_hashes