41 lines
2.2 KiB
Python
41 lines
2.2 KiB
Python
"""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
|