update
This commit is contained in:
Executable
+85
@@ -0,0 +1,85 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user