#!/usr/bin/env bash # next/tests/genesis_parse.sh — Step 4a acceptance test. # # Confirms the seed genesis SX files parse cleanly and have the # expected top-level head form. The bundler (Step 4c+) consumes # these forms directly as data. 10 cases. set -uo pipefail cd "$(git rev-parse --show-toplevel)" SX_SERVER="${SX_SERVER:-hosts/ocaml/_build/default/bin/sx_server.exe}" if [ ! -x "$SX_SERVER" ]; then SX_SERVER="/root/rose-ash/hosts/ocaml/_build/default/bin/sx_server.exe" fi if [ ! -x "$SX_SERVER" ]; then echo "ERROR: sx_server.exe not found." >&2 exit 1 fi VERBOSE="${1:-}" PASS=0; FAIL=0; ERRORS="" TMPFILE=$(mktemp); trap "rm -f $TMPFILE" EXIT cat > "$TMPFILE" <<'EPOCHS' (epoch 10) (eval "(first (parse (file-read \"next/genesis/manifest.sx\")))") (epoch 11) (eval "(first (parse (file-read \"next/genesis/activity-types/create.sx\")))") (epoch 12) (eval "(first (get (apply dict (rest (parse (file-read \"next/genesis/manifest.sx\")))) :activity-types))") (epoch 13) (eval "(get (apply dict (rest (parse (file-read \"next/genesis/activity-types/create.sx\")))) :name)") (epoch 14) (eval "(get (apply dict (rest (parse (file-read \"next/genesis/manifest.sx\")))) :version)") (epoch 15) (eval "(first (parse (file-read \"next/genesis/activity-types/update.sx\")))") (epoch 16) (eval "(get (apply dict (rest (parse (file-read \"next/genesis/activity-types/update.sx\")))) :name)") (epoch 17) (eval "(first (parse (file-read \"next/genesis/activity-types/delete.sx\")))") (epoch 18) (eval "(get (apply dict (rest (parse (file-read \"next/genesis/activity-types/delete.sx\")))) :name)") (epoch 19) (eval "(len (get (apply dict (rest (parse (file-read \"next/genesis/manifest.sx\")))) :activity-types))") EPOCHS OUTPUT=$(timeout 30 "$SX_SERVER" < "$TMPFILE" 2>/dev/null) check() { local epoch="$1" desc="$2" expected="$3" local actual actual=$(echo "$OUTPUT" | awk -v e="$epoch" ' $0 ~ "^\\(ok-len " e " " { getline; print; exit } $0 ~ "^\\(ok " e " " { print; exit } $0 ~ "^\\(error " e " " { print; exit } ') [ -z "$actual" ] && actual="" if echo "$actual" | grep -qF -- "$expected"; then PASS=$((PASS+1)) [ "$VERBOSE" = "-v" ] && echo " ok $desc" else FAIL=$((FAIL+1)) ERRORS+=" FAIL [$desc] (epoch $epoch) expected: $expected | actual: $actual " fi } check 10 "manifest.sx head form" "GenesisManifest" check 11 "create.sx head form" "DefineActivity" check 12 "manifest lists create.sx" "activity-types/create.sx" check 13 "create.sx name is Create" "Create" check 14 "manifest version present" "0.0.1" check 15 "update.sx head form" "DefineActivity" check 16 "update.sx name is Update" "Update" check 17 "delete.sx head form" "DefineActivity" check 18 "delete.sx name is Delete" "Delete" check 19 "manifest has 3 activity-types" "3" TOTAL=$((PASS+FAIL)) if [ $FAIL -eq 0 ]; then echo "ok $PASS/$TOTAL next/tests/genesis_parse.sh passed" else echo "FAIL $PASS/$TOTAL passed, $FAIL failed:" echo "$ERRORS" fi [ $FAIL -eq 0 ]