keiro-dsl-0.18.0.0: test/checked-mapping-adoption-test.sh
#!/usr/bin/env bash
set -euo pipefail
repository_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$repository_root"
workspace="keiro-dsl/test/fixtures/checked-mapping-replay-workspace/service.keiro-workspace"
committed="keiro-dsl/test/conformance-checked-mapping-replay"
scratch_parent="${TMPDIR:-/tmp}"
proof_root="$(mktemp -d "${scratch_parent%/}/keiro-checked-mapping-adoption.XXXXXX")"
cleanup() {
case "$proof_root" in
"${scratch_parent%/}"/keiro-checked-mapping-adoption.*) rm -rf -- "$proof_root" ;;
*) printf 'refusing unsafe cleanup target: %s\n' "$proof_root" >&2 ;;
esac
}
trap cleanup EXIT
hand_owned=(
"Conformance/CheckedMappingReplay/Domain.hs"
"Conformance/CheckedMappingReplay/Bindings.hs"
"CheckedMappingReplay/ProjectionCatalog/ProjectionCatalogHoles.hs"
"CheckedMappingReplay/ReplayLedger/BehaviorHoles.hs"
"CheckedMappingReplay/ReplayLookup/ReadModelHoles.hs"
"CheckedMappingReplay/ReplayReaction/ProcessHoles.hs"
"CheckedMappingReplay/ReplayTarget/BehaviorHoles.hs"
)
hand_hashes() {
local root="$1"
local relative
for relative in "${hand_owned[@]}"; do
test -f "$root/$relative"
shasum -a 256 "$root/$relative"
done
}
copy_hand_owned() {
local target="$1"
local relative
for relative in "${hand_owned[@]}"; do
mkdir -p "$target/$(dirname "$relative")"
cp "$committed/$relative" "$target/$relative"
done
}
fresh="$proof_root/fresh"
existing="$proof_root/existing"
mkdir -p "$fresh" "$existing"
echo "checked-mapping adoption: public check"
cabal run -v0 keiro-dsl -- check "$workspace"
echo "checked-mapping adoption: fresh scaffold"
cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$fresh" >/dev/null
test -f "$fresh/Conformance/CheckedMappingReplay/Bindings.hs"
grep -q "HOLE" "$fresh/Conformance/CheckedMappingReplay/Bindings.hs"
copy_hand_owned "$fresh"
hand_hashes "$fresh" >"$proof_root/fresh.before"
cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$fresh" >/dev/null
hand_hashes "$fresh" >"$proof_root/fresh.after"
cmp "$proof_root/fresh.before" "$proof_root/fresh.after"
diff -ru "$committed/Generated" "$fresh/Generated"
echo "checked-mapping adoption: existing bindings and create-once files"
cp -R "$committed/." "$existing/"
hand_hashes "$existing" >"$proof_root/existing.before"
cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$existing" >/dev/null
hand_hashes "$existing" >"$proof_root/existing.after"
cmp "$proof_root/existing.before" "$proof_root/existing.after"
diff -ru "$committed/Generated" "$existing/Generated"
echo "checked-mapping adoption: compiled harness"
cabal test -v0 keiro-dsl:test:keiro-dsl-conformance-checked-mapping-replay --test-show-details=direct
echo "checked-mapping adoption: PASS"