S03-H3 CLOSED baseline
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env bash
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
PATCHER_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
SUITE="$(cd -- "$PATCHER_DIR/../.." && pwd -P)"
|
||||
|
||||
PARENT="$SUITE/configurations/generated/S03H1/from_patcher/smoke_s03h1_execution_profiles_test_from_s02.marte"
|
||||
OUTPUT_DIR="$SUITE/configurations/generated/S03H3/from_patcher"
|
||||
OUTPUT="$OUTPUT_DIR/smoke_s03h3_execution_profiles_minimal_from_s03h1_test.marte"
|
||||
VERIFIER="$SUITE/scenarios/S03H3_execution_profiles/verify_s03h3_minimal_structure.py"
|
||||
EXPECTED_PARENT_SHA256="d037561b32760fbd0e2aec9f1eefc5efda27b1918eca4742c89092a8a2f7e92e"
|
||||
|
||||
TEMP_OUTPUT=""
|
||||
|
||||
cleanup() {
|
||||
if [ -n "$TEMP_OUTPUT" ]; then
|
||||
rm -f -- "$TEMP_OUTPUT"
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT HUP INT TERM
|
||||
|
||||
fail() {
|
||||
local code="$1"
|
||||
local reason="$2"
|
||||
printf 'PATCHER_STATUS=FAIL\n' >&2
|
||||
printf 'PATCHER_ERROR=%s\n' "$reason" >&2
|
||||
printf 'SOURCE_MODIFIED_IN_PLACE=NO\n' >&2
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
if [ "$#" -ne 0 ]; then
|
||||
printf 'Uso: %s\n' "$0" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -f "$PARENT" ]; then
|
||||
fail 10 "CANONICAL_TEST_PARENT_MISSING"
|
||||
fi
|
||||
if [ ! -f "$VERIFIER" ]; then
|
||||
fail 11 "MINIMAL_VERIFIER_MISSING"
|
||||
fi
|
||||
|
||||
PARENT_SHA256_BEFORE="$(sha256sum -- "$PARENT" | awk '{print $1}')" || \
|
||||
fail 12 "PARENT_HASH_UNAVAILABLE"
|
||||
if [ "$PARENT_SHA256_BEFORE" != "$EXPECTED_PARENT_SHA256" ]; then
|
||||
fail 13 "CANONICAL_TEST_PARENT_SHA256_MISMATCH"
|
||||
fi
|
||||
|
||||
if ! mkdir -p -- "$OUTPUT_DIR"; then
|
||||
fail 14 "OUTPUT_DIRECTORY_CREATION_FAILED"
|
||||
fi
|
||||
TEMP_OUTPUT="$(mktemp "$OUTPUT_DIR/.s03h3_minimal.XXXXXX")" || \
|
||||
fail 15 "TEMPORARY_OUTPUT_CREATION_FAILED"
|
||||
|
||||
if ! python3 - "$PARENT" "$TEMP_OUTPUT" <<'PY'
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
parent = Path(sys.argv[1])
|
||||
target = Path(sys.argv[2])
|
||||
text = parent.read_bytes().decode("utf-8")
|
||||
|
||||
gamdisplay_start = " +GAMDisplay = {\n"
|
||||
writer_start = " +IOGAM_Writer = {\n"
|
||||
display_block = (
|
||||
" +Display = {\n"
|
||||
" Class = GAMDataSource\n"
|
||||
" }\n"
|
||||
)
|
||||
old_functions = (
|
||||
" Functions = "
|
||||
"{GAMTimer SentinelProducer GAMDisplay IOGAM_Writer}"
|
||||
)
|
||||
new_functions = (
|
||||
" Functions = "
|
||||
"{GAMTimer SentinelProducer IOGAM_Writer}"
|
||||
)
|
||||
|
||||
checks = {
|
||||
"GAMDISPLAY_ANCHOR": text.count(gamdisplay_start),
|
||||
"WRITER_ANCHOR": text.count(writer_start),
|
||||
"DISPLAY_BLOCK": text.count(display_block),
|
||||
"FUNCTIONS_ANCHOR": text.count(old_functions),
|
||||
"MINIMAL_FUNCTIONS_PREEXISTING": text.count(new_functions),
|
||||
}
|
||||
if checks != {
|
||||
"GAMDISPLAY_ANCHOR": 1,
|
||||
"WRITER_ANCHOR": 1,
|
||||
"DISPLAY_BLOCK": 1,
|
||||
"FUNCTIONS_ANCHOR": 1,
|
||||
"MINIMAL_FUNCTIONS_PREEXISTING": 0,
|
||||
}:
|
||||
for name, value in checks.items():
|
||||
print(f"{name}_COUNT={value}", file=sys.stderr)
|
||||
raise SystemExit(20)
|
||||
|
||||
start = text.index(gamdisplay_start)
|
||||
end = text.index(writer_start, start)
|
||||
if end <= start:
|
||||
raise SystemExit(21)
|
||||
|
||||
result = text[:start] + text[end:]
|
||||
result = result.replace(display_block, "", 1)
|
||||
result = result.replace(old_functions, new_functions, 1)
|
||||
target.write_bytes(result.encode("utf-8"))
|
||||
PY
|
||||
then
|
||||
fail 16 "STRUCTURAL_TRANSFORMATION_FAILED"
|
||||
fi
|
||||
|
||||
PARENT_SHA256_AFTER="$(sha256sum -- "$PARENT" | awk '{print $1}')" || \
|
||||
fail 17 "PARENT_POST_HASH_UNAVAILABLE"
|
||||
if [ "$PARENT_SHA256_AFTER" != "$PARENT_SHA256_BEFORE" ]; then
|
||||
fail 18 "SOURCE_MODIFIED_IN_PLACE"
|
||||
fi
|
||||
|
||||
if ! python3 "$VERIFIER" CANONICAL "$PARENT" "$TEMP_OUTPUT"; then
|
||||
fail 19 "CANONICAL_STRUCTURAL_COMPLETENESS_FAILED"
|
||||
fi
|
||||
|
||||
if [ -e "$OUTPUT" ]; then
|
||||
if [ ! -f "$OUTPUT" ]; then
|
||||
fail 20 "OUTPUT_EXISTS_NOT_REGULAR_FILE"
|
||||
fi
|
||||
if ! cmp -s -- "$TEMP_OUTPUT" "$OUTPUT"; then
|
||||
fail 21 "EXISTING_OUTPUT_DIFFERS_FROM_DETERMINISTIC_RESULT"
|
||||
fi
|
||||
if ! python3 "$VERIFIER" CANONICAL "$PARENT" "$OUTPUT" >/dev/null; then
|
||||
fail 22 "EXISTING_OUTPUT_COMPLETENESS_FAILED"
|
||||
fi
|
||||
printf 'PATCHER_RESULT=ALREADY_VALID\n'
|
||||
else
|
||||
chmod 0644 -- "$TEMP_OUTPUT" || fail 23 "OUTPUT_MODE_SET_FAILED"
|
||||
mv -- "$TEMP_OUTPUT" "$OUTPUT" || fail 24 "OUTPUT_PUBLICATION_FAILED"
|
||||
TEMP_OUTPUT=""
|
||||
if ! python3 "$VERIFIER" CANONICAL "$PARENT" "$OUTPUT" >/dev/null; then
|
||||
fail 25 "PUBLISHED_OUTPUT_COMPLETENESS_FAILED"
|
||||
fi
|
||||
printf 'PATCHER_RESULT=CREATED\n'
|
||||
fi
|
||||
|
||||
OUTPUT_SHA256="$(sha256sum -- "$OUTPUT" | awk '{print $1}')" || \
|
||||
fail 26 "OUTPUT_HASH_UNAVAILABLE"
|
||||
printf 'PATCHER_STATUS=PASS\n'
|
||||
printf 'PATCHER_DETERMINISM=PASS\n'
|
||||
printf 'PATCHER_PARENT_HASH_MATCH=PASS\n'
|
||||
printf 'CANONICAL_STRUCTURAL_COMPLETENESS_STATUS=PASS\n'
|
||||
printf 'SOURCE_MODIFIED_IN_PLACE=NO\n'
|
||||
printf 'MINIMAL_CONFIG=%s\n' "$OUTPUT"
|
||||
printf 'MINIMAL_CONFIG_SHA256=%s\n' "$OUTPUT_SHA256"
|
||||
Reference in New Issue
Block a user