aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/test-abstraction-db.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-abstraction-db.sh')
-rwxr-xr-xtest/test-abstraction-db.sh37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/test-abstraction-db.sh b/test/test-abstraction-db.sh
index 31e5fa5..6a0e4e6 100755
--- a/test/test-abstraction-db.sh
+++ b/test/test-abstraction-db.sh
@@ -211,11 +211,48 @@ for ssp in $(find "$OUT_DIR/pod" -name "*.ssp" 2>/dev/null | sort); do
rm -f "$OUT_DIR/.dbtxt.$$" "$OUT_DIR/.ssptxt.$$"
done
+ # the header blocks: every @source/@meta/@make/@doc_has property in the .ssp
+ # must be in the database under its own key, with the same value. this is
+ # what catches a header property that reaches one artefact and not the
+ # other, which a count of objects cannot see.
+ awk '
+ /^@(source|meta|make|doc_has) \{$/ { blk=substr($1,2); next }
+ /^\}$/ { blk=""; next }
+ blk != "" && /^ [a-z_.]+: / {
+ k=$1; sub(/:$/,"",k)
+ v=substr($0, index($0,": ")+2)
+ pfx = (blk=="meta") ? "" : blk "."
+ print pfx k "\t" v
+ }
+ ' "$ssp" | sort > "$OUT_DIR/.sspmeta.$$"
+ sqlite3 -separator "$(printf '\t')" "$db" \
+ "select key, value from metadata where key not in
+ ('schema.name','schema.version','source.filename','source.ssp_digest');" \
+ 2>/dev/null | sort > "$OUT_DIR/.dbmeta.$$"
+ if ! diff -q "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$" > /dev/null 2>&1; then
+ [ $doc_fail -eq 0 ] && echo "$base"
+ echo " MISMATCH header blocks (.ssp against metadata table):"
+ diff "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$" | head -8 | sed 's/^/ /'
+ doc_fail=1
+ fi
+ rm -f "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$"
+
+ # the source filename, and the version the two share
+ sf=$(sqlite3 "$db" "select value from metadata where key='source.filename';" 2>/dev/null || echo '')
+ sf_ssp=$(sed -n 's/^% Source: //p' "$ssp" | head -1)
+ if [ "$sf" != "$sf_ssp" ]; then
+ [ $doc_fail -eq 0 ] && echo "$base"
+ echo " MISMATCH source.filename: db '$sf' .ssp '$sf_ssp'"; doc_fail=1
+ fi
+ sv_ssp=$(sed -n 's/^% SiSU Document Abstraction v//p' "$ssp" | head -1)
# the file says what it is
sv=$(sqlite3 "$db" "select value from metadata where key='schema.version';" 2>/dev/null || echo '')
if [ -z "$sv" ]; then
[ $doc_fail -eq 0 ] && echo "$base"
echo " MISSING metadata schema.version"; doc_fail=1
+ elif [ "$sv" != "$sv_ssp" ]; then
+ [ $doc_fail -eq 0 ] && echo "$base"
+ echo " MISMATCH format version: db '$sv' .ssp '$sv_ssp'"; doc_fail=1
fi
FAILURES=$((FAILURES + doc_fail))