84 lines
1.5 KiB
Bash
84 lines
1.5 KiB
Bash
#!/bin/sh
|
|
# End-to-end CLI session for the Record Manager reference.
|
|
# Usage: sh tests/smoke.sh <path-to-recman-binary>
|
|
set -eu
|
|
|
|
BIN="${1:?usage: smoke.sh <binary>}"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
run_session() {
|
|
"$BIN" <<EOF
|
|
add
|
|
Ada Lovelace
|
|
ada@analytical.engine
|
|
555-0100
|
|
add
|
|
Grace Hopper
|
|
grace@navy.mil
|
|
444-0200
|
|
list
|
|
search
|
|
hopper
|
|
delete
|
|
Grace Hopper
|
|
list
|
|
save
|
|
$TMP/data.txt
|
|
quit
|
|
EOF
|
|
}
|
|
|
|
# added twice
|
|
OUT="$(run_session)"
|
|
echo "$OUT" | grep -q "added: Ada Lovelace" || {
|
|
echo "FAIL: add missing"
|
|
exit 1
|
|
}
|
|
echo "$OUT" | grep -q "added: Grace Hopper" || {
|
|
echo "FAIL: add missing"
|
|
exit 1
|
|
}
|
|
# search is case-insensitive substring across fields
|
|
if echo "$OUT" | grep -q "grace@navy.mil"; then :; else {
|
|
echo "FAIL: search field match"
|
|
exit 1
|
|
}; fi
|
|
# delete reports the removal
|
|
if echo "$OUT" | grep -q "deleted: Grace Hopper"; then :; else {
|
|
echo "FAIL: delete"
|
|
exit 1
|
|
}; fi
|
|
# save wrote the file
|
|
[ -s "$TMP/data.txt" ] || {
|
|
echo "FAIL: save produced empty file"
|
|
exit 1
|
|
}
|
|
|
|
# reload in a fresh session and confirm the surviving record round-trips
|
|
OUT2="$(
|
|
"$BIN" <<EOF
|
|
load
|
|
$TMP/data.txt
|
|
list
|
|
quit
|
|
EOF
|
|
)"
|
|
echo "$OUT2" | grep -q "loaded 1 records" || {
|
|
echo "FAIL: load count"
|
|
exit 1
|
|
}
|
|
echo "$OUT2" | grep -q "Ada Lovelace" || {
|
|
echo "FAIL: round-trip name"
|
|
exit 1
|
|
}
|
|
echo "$OUT2" | grep -q "ada@analytical.engine" || {
|
|
echo "FAIL: round-trip field1"
|
|
exit 1
|
|
}
|
|
echo "$OUT2" | grep -q "555-0100" || {
|
|
echo "FAIL: round-trip field2"
|
|
exit 1
|
|
}
|
|
|
|
echo "smoke ($(basename "$BIN")): pass"
|