Files
erofs-freebsd-out-tree/tests/pre15/cases/TC162-xattr-legacy.sh
T
2026-08-18 09:20:44 +02:00

86 lines
3.1 KiB
Bash
Executable File

#!/bin/sh
set -eu
: "${PRE15_DUT:?PRE15_DUT is required}"
: "${PRE15_ROOT:?PRE15_ROOT is required}"
: "${PRE15_CASE_TMP:?PRE15_CASE_TMP is required}"
: "${PRE15_LIB_DIR:?PRE15_LIB_DIR is required}"
. "$PRE15_LIB_DIR/runner.sh"
spec=$PRE15_DUT/tests/pre15/fixtures/B01-xattr-legacy.json
helper=$PRE15_DUT/tests/pre15/fixtures/g3.py
output=$PRE15_CASE_TMP/xattr-legacy
pre15_record_fixture xattr-legacy-contract "$spec"
pre15_record_fixture xattr-legacy-generator "$helper"
if python3 -B "$helper" make-xattr-legacy \
--spec "$spec" --output "$output" \
--freebsd-root "$PRE15_DUT/src" --linux-root "$PRE15_ROOT/src-linux"; then
:
else
pre15_runner_fail 'legacy xattr fixture generation or independent parsing failed'
fi
mkdir -p "$PRE15_RUN_DIR/artifacts"
cp "$output/fixture-manifest.json" \
"$PRE15_RUN_DIR/artifacts/TC162-fixture-manifest.json"
pre15_record_fixture xattr-legacy-manifest \
"$PRE15_RUN_DIR/artifacts/TC162-fixture-manifest.json"
python3 - "$PRE15_RUN_DIR/artifacts/TC162-fixture-manifest.json" <<'PY'
import json
from pathlib import Path
import sys
manifest = json.loads(Path(sys.argv[1]).read_text(encoding="ascii"))
positive = {
"legacy-primary": "primary-legacy",
"explicit-plain": "primary",
"packed-carrier": "packed",
"metabox-carrier": "metabox",
}
for name, carrier in positive.items():
item = manifest["results"][name]
if item["carrier"] != carrier or not item["checksum_valid"]:
raise SystemExit(f"{name}: carrier/checksum oracle failed")
if item["base_index"] != 1 or item["infix"] != "repo.pre15.legacy.":
raise SystemExit(f"{name}: prefix value differs")
for name in ("legacy-length-invalid", "legacy-offset-outside"):
item = manifest["results"][name]
if item["expected_errno"] != "EINTEGRITY" or not item["checksum_valid"]:
raise SystemExit(f"{name}: exact negative oracle failed")
print("TC162: legacy, explicit plain, packed, and metabox carriers read one value")
print("TC162: single-field negatives return exactly EINTEGRITY")
PY
pre15_target_reached
if python3 - "$PRE15_DUT/src/xattr.c" "$PRE15_ROOT/src-linux/xattr.c" <<'PY'
from pathlib import Path
import sys
freebsd = Path(sys.argv[1]).read_text(encoding="utf-8")
linux = Path(sys.argv[2]).read_text(encoding="utf-8")
freebsd_markers = (
"prefix_en = NULL;",
"EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX",
"else if (em->packed_inode != NULL)",
"else if (em->packed_nid != 0)",
"erofs_xattr_read_metadata(em, prefix_en",
)
linux_markers = (
"bool plain = erofs_sb_has_plain_xattr_pfx(sbi);",
"else if (sbi->packed_inode)",
"else\n\t\t\tplain = true;",
"if (plain)\n\t\t(void)erofs_init_metabuf(&buf, sb, false);",
)
if not all(marker in freebsd for marker in freebsd_markers):
raise SystemExit("FreeBSD legacy primary fallback changed")
if not all(marker in linux for marker in linux_markers):
raise SystemExit("Linux legacy primary fallback changed")
print("TC162: FreeBSD and Linux retain the no-carrier primary fallback")
PY
then
:
else
pre15_dut_fail 'legacy xattr primary fallback branch no longer matches the frozen contract'
fi